mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-29 07:22:07 +00:00
Remove software renderer internals from F3DFloor
This commit is contained in:
parent
8ad132b64f
commit
cfe4c55973
12 changed files with 86 additions and 57 deletions
|
@ -129,8 +129,6 @@ static void P_Add3DFloor(sector_t* sec, sector_t* sec2, line_t* master, int flag
|
||||||
ffloor->top.copied = ffloor->bottom.copied = false;
|
ffloor->top.copied = ffloor->bottom.copied = false;
|
||||||
ffloor->top.model = ffloor->bottom.model = ffloor->model = sec2;
|
ffloor->top.model = ffloor->bottom.model = ffloor->model = sec2;
|
||||||
ffloor->target = sec;
|
ffloor->target = sec;
|
||||||
ffloor->ceilingclip = ffloor->floorclip = NULL;
|
|
||||||
ffloor->validcount = 0;
|
|
||||||
|
|
||||||
if (!(flags&FF_THINFLOOR))
|
if (!(flags&FF_THINFLOOR))
|
||||||
{
|
{
|
||||||
|
|
|
@ -95,11 +95,6 @@ struct F3DFloor
|
||||||
int lastlight;
|
int lastlight;
|
||||||
int alpha;
|
int alpha;
|
||||||
|
|
||||||
// kg3D - for software
|
|
||||||
short *floorclip;
|
|
||||||
short *ceilingclip;
|
|
||||||
int validcount;
|
|
||||||
|
|
||||||
FDynamicColormap *GetColormap();
|
FDynamicColormap *GetColormap();
|
||||||
void UpdateColormap(FDynamicColormap *&map);
|
void UpdateColormap(FDynamicColormap *&map);
|
||||||
PalEntry GetBlend();
|
PalEntry GetBlend();
|
||||||
|
|
|
@ -89,7 +89,8 @@ namespace swrenderer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetUpdate();
|
if (Thread->MainThread)
|
||||||
|
NetUpdate();
|
||||||
|
|
||||||
frontsector = curline->frontsector;
|
frontsector = curline->frontsector;
|
||||||
backsector = curline->backsector;
|
backsector = curline->backsector;
|
||||||
|
|
|
@ -362,7 +362,8 @@ namespace swrenderer
|
||||||
Draw1Column(x, y1, y2, sampler);
|
Draw1Column(x, y1, y2, sampler);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetUpdate();
|
if (Thread->MainThread)
|
||||||
|
NetUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderWallPart::ProcessNormalWall(const short *uwal, const short *dwal, double texturemid, float *swal, fixed_t *lwal)
|
void RenderWallPart::ProcessNormalWall(const short *uwal, const short *dwal, double texturemid, float *swal, fixed_t *lwal)
|
||||||
|
|
|
@ -129,6 +129,7 @@ namespace swrenderer
|
||||||
renderer.Render(this, xscale, yscale, alpha, additive, masked, colormap, tex);
|
renderer.Render(this, xscale, yscale, alpha, additive, masked, colormap, tex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
NetUpdate();
|
if (thread->MainThread)
|
||||||
|
NetUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "r_3dfloors.h"
|
#include "r_3dfloors.h"
|
||||||
#include "r_utility.h"
|
#include "r_utility.h"
|
||||||
#include "swrenderer/r_renderthread.h"
|
#include "swrenderer/r_renderthread.h"
|
||||||
|
#include "swrenderer/r_memory.h"
|
||||||
|
|
||||||
CVAR(Int, r_3dfloors, true, 0);
|
CVAR(Int, r_3dfloors, true, 0);
|
||||||
|
|
||||||
|
@ -24,8 +25,20 @@ namespace swrenderer
|
||||||
Thread = thread;
|
Thread = thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Clip3DFloors::SetFakeFloor(F3DFloor *newFakeFloor)
|
||||||
|
{
|
||||||
|
auto &clip = FakeFloors[newFakeFloor];
|
||||||
|
if (clip == nullptr)
|
||||||
|
{
|
||||||
|
clip = Thread->FrameMemory->NewObject<FakeFloorClip>(newFakeFloor);
|
||||||
|
}
|
||||||
|
fakeFloor = clip;
|
||||||
|
}
|
||||||
|
|
||||||
void Clip3DFloors::Cleanup()
|
void Clip3DFloors::Cleanup()
|
||||||
{
|
{
|
||||||
|
FakeFloors.clear();
|
||||||
|
|
||||||
fakeActive = false;
|
fakeActive = false;
|
||||||
fake3D = 0;
|
fake3D = 0;
|
||||||
while (CurrentSkybox)
|
while (CurrentSkybox)
|
||||||
|
|
|
@ -2,12 +2,14 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "p_3dfloors.h"
|
#include "p_3dfloors.h"
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
EXTERN_CVAR(Int, r_3dfloors);
|
EXTERN_CVAR(Int, r_3dfloors);
|
||||||
|
|
||||||
namespace swrenderer
|
namespace swrenderer
|
||||||
{
|
{
|
||||||
class RenderThread;
|
class RenderThread;
|
||||||
|
class FakeFloorClip;
|
||||||
|
|
||||||
struct HeightLevel
|
struct HeightLevel
|
||||||
{
|
{
|
||||||
|
@ -27,7 +29,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
short floorclip[MAXWIDTH];
|
short floorclip[MAXWIDTH];
|
||||||
short ceilingclip[MAXWIDTH];
|
short ceilingclip[MAXWIDTH];
|
||||||
F3DFloor *ffloor;
|
FakeFloorClip *ffloor;
|
||||||
ClipStack *next;
|
ClipStack *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -51,6 +53,17 @@ namespace swrenderer
|
||||||
FAKE3D_DOWN2UP = 8, // rendering from down to up (floors)
|
FAKE3D_DOWN2UP = 8, // rendering from down to up (floors)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class FakeFloorClip
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FakeFloorClip(F3DFloor *fakeFloor) : fakeFloor(fakeFloor) { }
|
||||||
|
|
||||||
|
F3DFloor *fakeFloor = nullptr;
|
||||||
|
short *floorclip = nullptr;
|
||||||
|
short *ceilingclip = nullptr;
|
||||||
|
int validcount = -1;
|
||||||
|
};
|
||||||
|
|
||||||
class Clip3DFloors
|
class Clip3DFloors
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -64,12 +77,13 @@ namespace swrenderer
|
||||||
void ResetClip();
|
void ResetClip();
|
||||||
void EnterSkybox();
|
void EnterSkybox();
|
||||||
void LeaveSkybox();
|
void LeaveSkybox();
|
||||||
|
void SetFakeFloor(F3DFloor *fakeFloor);
|
||||||
|
|
||||||
RenderThread *Thread = nullptr;
|
RenderThread *Thread = nullptr;
|
||||||
|
|
||||||
int fake3D = 0;
|
int fake3D = 0;
|
||||||
|
|
||||||
F3DFloor *fakeFloor = nullptr;
|
FakeFloorClip *fakeFloor = nullptr;
|
||||||
fixed_t fakeAlpha = 0;
|
fixed_t fakeAlpha = 0;
|
||||||
bool fakeActive = false;
|
bool fakeActive = false;
|
||||||
double sclipBottom = 0;
|
double sclipBottom = 0;
|
||||||
|
@ -83,5 +97,7 @@ namespace swrenderer
|
||||||
TArray<HeightStack> toplist;
|
TArray<HeightStack> toplist;
|
||||||
ClipStack *clip_top = nullptr;
|
ClipStack *clip_top = nullptr;
|
||||||
ClipStack *clip_cur = nullptr;
|
ClipStack *clip_cur = nullptr;
|
||||||
|
|
||||||
|
std::unordered_map<F3DFloor *, FakeFloorClip *> FakeFloors;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -573,32 +573,32 @@ namespace swrenderer
|
||||||
// first check all floors
|
// first check all floors
|
||||||
for (int i = 0; i < (int)frontsector->e->XFloor.ffloors.Size(); i++)
|
for (int i = 0; i < (int)frontsector->e->XFloor.ffloors.Size(); i++)
|
||||||
{
|
{
|
||||||
clip3d->fakeFloor = frontsector->e->XFloor.ffloors[i];
|
clip3d->SetFakeFloor(frontsector->e->XFloor.ffloors[i]);
|
||||||
if (!(clip3d->fakeFloor->flags & FF_EXISTS)) continue;
|
if (!(clip3d->fakeFloor->fakeFloor->flags & FF_EXISTS)) continue;
|
||||||
if (!clip3d->fakeFloor->model) continue;
|
if (!clip3d->fakeFloor->fakeFloor->model) continue;
|
||||||
if (clip3d->fakeFloor->bottom.plane->isSlope()) continue;
|
if (clip3d->fakeFloor->fakeFloor->bottom.plane->isSlope()) continue;
|
||||||
if (!(clip3d->fakeFloor->flags & FF_NOSHADE) || (clip3d->fakeFloor->flags & (FF_RENDERPLANES | FF_RENDERSIDES)))
|
if (!(clip3d->fakeFloor->fakeFloor->flags & FF_NOSHADE) || (clip3d->fakeFloor->fakeFloor->flags & (FF_RENDERPLANES | FF_RENDERSIDES)))
|
||||||
{
|
{
|
||||||
clip3d->AddHeight(clip3d->fakeFloor->top.plane, frontsector);
|
clip3d->AddHeight(clip3d->fakeFloor->fakeFloor->top.plane, frontsector);
|
||||||
}
|
}
|
||||||
if (!(clip3d->fakeFloor->flags & FF_RENDERPLANES)) continue;
|
if (!(clip3d->fakeFloor->fakeFloor->flags & FF_RENDERPLANES)) continue;
|
||||||
if (clip3d->fakeFloor->alpha == 0) continue;
|
if (clip3d->fakeFloor->fakeFloor->alpha == 0) continue;
|
||||||
if (clip3d->fakeFloor->flags & FF_THISINSIDE && clip3d->fakeFloor->flags & FF_INVERTSECTOR) continue;
|
if (clip3d->fakeFloor->fakeFloor->flags & FF_THISINSIDE && clip3d->fakeFloor->fakeFloor->flags & FF_INVERTSECTOR) continue;
|
||||||
clip3d->fakeAlpha = MIN<fixed_t>(Scale(clip3d->fakeFloor->alpha, OPAQUE, 255), OPAQUE);
|
clip3d->fakeAlpha = MIN<fixed_t>(Scale(clip3d->fakeFloor->fakeFloor->alpha, OPAQUE, 255), OPAQUE);
|
||||||
if (clip3d->fakeFloor->validcount != validcount)
|
if (clip3d->fakeFloor->validcount != validcount)
|
||||||
{
|
{
|
||||||
clip3d->fakeFloor->validcount = validcount;
|
clip3d->fakeFloor->validcount = validcount;
|
||||||
clip3d->NewClip();
|
clip3d->NewClip();
|
||||||
}
|
}
|
||||||
double fakeHeight = clip3d->fakeFloor->top.plane->ZatPoint(frontsector->centerspot);
|
double fakeHeight = clip3d->fakeFloor->fakeFloor->top.plane->ZatPoint(frontsector->centerspot);
|
||||||
if (fakeHeight < ViewPos.Z &&
|
if (fakeHeight < ViewPos.Z &&
|
||||||
fakeHeight > frontsector->floorplane.ZatPoint(frontsector->centerspot))
|
fakeHeight > frontsector->floorplane.ZatPoint(frontsector->centerspot))
|
||||||
{
|
{
|
||||||
clip3d->fake3D = FAKE3D_FAKEFLOOR;
|
clip3d->fake3D = FAKE3D_FAKEFLOOR;
|
||||||
tempsec = *clip3d->fakeFloor->model;
|
tempsec = *clip3d->fakeFloor->fakeFloor->model;
|
||||||
tempsec.floorplane = *clip3d->fakeFloor->top.plane;
|
tempsec.floorplane = *clip3d->fakeFloor->fakeFloor->top.plane;
|
||||||
tempsec.ceilingplane = *clip3d->fakeFloor->bottom.plane;
|
tempsec.ceilingplane = *clip3d->fakeFloor->fakeFloor->bottom.plane;
|
||||||
if (!(clip3d->fakeFloor->flags & FF_THISINSIDE) && !(clip3d->fakeFloor->flags & FF_INVERTSECTOR))
|
if (!(clip3d->fakeFloor->fakeFloor->flags & FF_THISINSIDE) && !(clip3d->fakeFloor->fakeFloor->flags & FF_INVERTSECTOR))
|
||||||
{
|
{
|
||||||
tempsec.SetTexture(sector_t::floor, tempsec.GetTexture(sector_t::ceiling));
|
tempsec.SetTexture(sector_t::floor, tempsec.GetTexture(sector_t::ceiling));
|
||||||
position = sector_t::ceiling;
|
position = sector_t::ceiling;
|
||||||
|
@ -618,7 +618,7 @@ namespace swrenderer
|
||||||
frontsector->GetTexture(sector_t::floor),
|
frontsector->GetTexture(sector_t::floor),
|
||||||
floorlightlevel + R_ActualExtraLight(foggy), // killough 3/16/98
|
floorlightlevel + R_ActualExtraLight(foggy), // killough 3/16/98
|
||||||
frontsector->GetAlpha(sector_t::floor),
|
frontsector->GetAlpha(sector_t::floor),
|
||||||
!!(clip3d->fakeFloor->flags & FF_ADDITIVETRANS),
|
!!(clip3d->fakeFloor->fakeFloor->flags & FF_ADDITIVETRANS),
|
||||||
frontsector->planes[position].xform,
|
frontsector->planes[position].xform,
|
||||||
frontsector->sky,
|
frontsector->sky,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
@ -635,34 +635,34 @@ namespace swrenderer
|
||||||
// and now ceilings
|
// and now ceilings
|
||||||
for (unsigned int i = 0; i < frontsector->e->XFloor.ffloors.Size(); i++)
|
for (unsigned int i = 0; i < frontsector->e->XFloor.ffloors.Size(); i++)
|
||||||
{
|
{
|
||||||
clip3d->fakeFloor = frontsector->e->XFloor.ffloors[i];
|
clip3d->SetFakeFloor(frontsector->e->XFloor.ffloors[i]);
|
||||||
if (!(clip3d->fakeFloor->flags & FF_EXISTS)) continue;
|
if (!(clip3d->fakeFloor->fakeFloor->flags & FF_EXISTS)) continue;
|
||||||
if (!clip3d->fakeFloor->model) continue;
|
if (!clip3d->fakeFloor->fakeFloor->model) continue;
|
||||||
if (clip3d->fakeFloor->top.plane->isSlope()) continue;
|
if (clip3d->fakeFloor->fakeFloor->top.plane->isSlope()) continue;
|
||||||
if (!(clip3d->fakeFloor->flags & FF_NOSHADE) || (clip3d->fakeFloor->flags & (FF_RENDERPLANES | FF_RENDERSIDES)))
|
if (!(clip3d->fakeFloor->fakeFloor->flags & FF_NOSHADE) || (clip3d->fakeFloor->fakeFloor->flags & (FF_RENDERPLANES | FF_RENDERSIDES)))
|
||||||
{
|
{
|
||||||
clip3d->AddHeight(clip3d->fakeFloor->bottom.plane, frontsector);
|
clip3d->AddHeight(clip3d->fakeFloor->fakeFloor->bottom.plane, frontsector);
|
||||||
}
|
}
|
||||||
if (!(clip3d->fakeFloor->flags & FF_RENDERPLANES)) continue;
|
if (!(clip3d->fakeFloor->fakeFloor->flags & FF_RENDERPLANES)) continue;
|
||||||
if (clip3d->fakeFloor->alpha == 0) continue;
|
if (clip3d->fakeFloor->fakeFloor->alpha == 0) continue;
|
||||||
if (!(clip3d->fakeFloor->flags & FF_THISINSIDE) && (clip3d->fakeFloor->flags & (FF_SWIMMABLE | FF_INVERTSECTOR)) == (FF_SWIMMABLE | FF_INVERTSECTOR)) continue;
|
if (!(clip3d->fakeFloor->fakeFloor->flags & FF_THISINSIDE) && (clip3d->fakeFloor->fakeFloor->flags & (FF_SWIMMABLE | FF_INVERTSECTOR)) == (FF_SWIMMABLE | FF_INVERTSECTOR)) continue;
|
||||||
clip3d->fakeAlpha = MIN<fixed_t>(Scale(clip3d->fakeFloor->alpha, OPAQUE, 255), OPAQUE);
|
clip3d->fakeAlpha = MIN<fixed_t>(Scale(clip3d->fakeFloor->fakeFloor->alpha, OPAQUE, 255), OPAQUE);
|
||||||
|
|
||||||
if (clip3d->fakeFloor->validcount != validcount)
|
if (clip3d->fakeFloor->validcount != validcount)
|
||||||
{
|
{
|
||||||
clip3d->fakeFloor->validcount = validcount;
|
clip3d->fakeFloor->validcount = validcount;
|
||||||
clip3d->NewClip();
|
clip3d->NewClip();
|
||||||
}
|
}
|
||||||
double fakeHeight = clip3d->fakeFloor->bottom.plane->ZatPoint(frontsector->centerspot);
|
double fakeHeight = clip3d->fakeFloor->fakeFloor->bottom.plane->ZatPoint(frontsector->centerspot);
|
||||||
if (fakeHeight > ViewPos.Z &&
|
if (fakeHeight > ViewPos.Z &&
|
||||||
fakeHeight < frontsector->ceilingplane.ZatPoint(frontsector->centerspot))
|
fakeHeight < frontsector->ceilingplane.ZatPoint(frontsector->centerspot))
|
||||||
{
|
{
|
||||||
clip3d->fake3D = FAKE3D_FAKECEILING;
|
clip3d->fake3D = FAKE3D_FAKECEILING;
|
||||||
tempsec = *clip3d->fakeFloor->model;
|
tempsec = *clip3d->fakeFloor->fakeFloor->model;
|
||||||
tempsec.floorplane = *clip3d->fakeFloor->top.plane;
|
tempsec.floorplane = *clip3d->fakeFloor->fakeFloor->top.plane;
|
||||||
tempsec.ceilingplane = *clip3d->fakeFloor->bottom.plane;
|
tempsec.ceilingplane = *clip3d->fakeFloor->fakeFloor->bottom.plane;
|
||||||
if ((!(clip3d->fakeFloor->flags & FF_THISINSIDE) && !(clip3d->fakeFloor->flags & FF_INVERTSECTOR)) ||
|
if ((!(clip3d->fakeFloor->fakeFloor->flags & FF_THISINSIDE) && !(clip3d->fakeFloor->fakeFloor->flags & FF_INVERTSECTOR)) ||
|
||||||
(clip3d->fakeFloor->flags & FF_THISINSIDE && clip3d->fakeFloor->flags & FF_INVERTSECTOR))
|
(clip3d->fakeFloor->fakeFloor->flags & FF_THISINSIDE && clip3d->fakeFloor->fakeFloor->flags & FF_INVERTSECTOR))
|
||||||
{
|
{
|
||||||
tempsec.SetTexture(sector_t::ceiling, tempsec.GetTexture(sector_t::floor));
|
tempsec.SetTexture(sector_t::ceiling, tempsec.GetTexture(sector_t::floor));
|
||||||
position = sector_t::floor;
|
position = sector_t::floor;
|
||||||
|
@ -684,7 +684,7 @@ namespace swrenderer
|
||||||
frontsector->GetTexture(sector_t::ceiling),
|
frontsector->GetTexture(sector_t::ceiling),
|
||||||
ceilinglightlevel + R_ActualExtraLight(foggy), // killough 4/11/98
|
ceilinglightlevel + R_ActualExtraLight(foggy), // killough 4/11/98
|
||||||
frontsector->GetAlpha(sector_t::ceiling),
|
frontsector->GetAlpha(sector_t::ceiling),
|
||||||
!!(clip3d->fakeFloor->flags & FF_ADDITIVETRANS),
|
!!(clip3d->fakeFloor->fakeFloor->flags & FF_ADDITIVETRANS),
|
||||||
frontsector->planes[position].xform,
|
frontsector->planes[position].xform,
|
||||||
frontsector->sky,
|
frontsector->sky,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
@ -741,14 +741,14 @@ namespace swrenderer
|
||||||
Clip3DFloors *clip3d = Thread->Clip3DFloors.get();
|
Clip3DFloors *clip3d = Thread->Clip3DFloors.get();
|
||||||
for (unsigned int i = 0; i < line->backsector->e->XFloor.ffloors.Size(); i++)
|
for (unsigned int i = 0; i < line->backsector->e->XFloor.ffloors.Size(); i++)
|
||||||
{
|
{
|
||||||
clip3d->fakeFloor = line->backsector->e->XFloor.ffloors[i];
|
clip3d->SetFakeFloor(line->backsector->e->XFloor.ffloors[i]);
|
||||||
if (!(clip3d->fakeFloor->flags & FF_EXISTS)) continue;
|
if (!(clip3d->fakeFloor->fakeFloor->flags & FF_EXISTS)) continue;
|
||||||
if (!(clip3d->fakeFloor->flags & FF_RENDERPLANES)) continue;
|
if (!(clip3d->fakeFloor->fakeFloor->flags & FF_RENDERPLANES)) continue;
|
||||||
if (!clip3d->fakeFloor->model) continue;
|
if (!clip3d->fakeFloor->fakeFloor->model) continue;
|
||||||
clip3d->fake3D = FAKE3D_FAKEBACK;
|
clip3d->fake3D = FAKE3D_FAKEBACK;
|
||||||
tempsec = *clip3d->fakeFloor->model;
|
tempsec = *clip3d->fakeFloor->fakeFloor->model;
|
||||||
tempsec.floorplane = *clip3d->fakeFloor->top.plane;
|
tempsec.floorplane = *clip3d->fakeFloor->fakeFloor->top.plane;
|
||||||
tempsec.ceilingplane = *clip3d->fakeFloor->bottom.plane;
|
tempsec.ceilingplane = *clip3d->fakeFloor->fakeFloor->bottom.plane;
|
||||||
if (clip3d->fakeFloor->validcount != validcount)
|
if (clip3d->fakeFloor->validcount != validcount)
|
||||||
{
|
{
|
||||||
clip3d->fakeFloor->validcount = validcount;
|
clip3d->fakeFloor->validcount = validcount;
|
||||||
|
|
|
@ -441,13 +441,15 @@ namespace swrenderer
|
||||||
int prevuniq2 = CurrentPortalUniq;
|
int prevuniq2 = CurrentPortalUniq;
|
||||||
CurrentPortalUniq = prevuniq;
|
CurrentPortalUniq = prevuniq;
|
||||||
|
|
||||||
NetUpdate();
|
if (Thread->MainThread)
|
||||||
|
NetUpdate();
|
||||||
|
|
||||||
MaskedCycles.Clock(); // [ZZ] count sprites in portals/mirrors along with normal ones.
|
MaskedCycles.Clock(); // [ZZ] count sprites in portals/mirrors along with normal ones.
|
||||||
Thread->TranslucentPass->Render(); // this is required since with portals there often will be cases when more than 80% of the view is inside a portal.
|
Thread->TranslucentPass->Render(); // this is required since with portals there often will be cases when more than 80% of the view is inside a portal.
|
||||||
MaskedCycles.Unclock();
|
MaskedCycles.Unclock();
|
||||||
|
|
||||||
NetUpdate();
|
if (Thread->MainThread)
|
||||||
|
NetUpdate();
|
||||||
|
|
||||||
Thread->Clip3DFloors->LeaveSkybox(); // pop 3D floor height map
|
Thread->Clip3DFloors->LeaveSkybox(); // pop 3D floor height map
|
||||||
CurrentPortalUniq = prevuniq2;
|
CurrentPortalUniq = prevuniq2;
|
||||||
|
|
|
@ -267,7 +267,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
while (Threads.size() < (size_t)numThreads)
|
while (Threads.size() < (size_t)numThreads)
|
||||||
{
|
{
|
||||||
auto thread = std::make_unique<RenderThread>(this);
|
auto thread = std::make_unique<RenderThread>(this, false);
|
||||||
auto renderthread = thread.get();
|
auto renderthread = thread.get();
|
||||||
int start_run_id = run_id;
|
int start_run_id = run_id;
|
||||||
thread->thread = std::thread([=]()
|
thread->thread = std::thread([=]()
|
||||||
|
|
|
@ -630,6 +630,7 @@ namespace swrenderer
|
||||||
frac += xiscale;
|
frac += xiscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetUpdate();
|
if (thread->MainThread)
|
||||||
|
NetUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -298,6 +298,7 @@ namespace swrenderer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NetUpdate();
|
if (thread->MainThread)
|
||||||
|
NetUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue