Split Clear into two functions

This commit is contained in:
Magnus Norddahl 2017-01-19 03:19:31 +01:00
parent e94cb3f114
commit 112085ebff
4 changed files with 23 additions and 25 deletions

View File

@ -64,33 +64,30 @@ namespace swrenderer
return newplane;
}
void VisiblePlaneList::Clear(bool fullclear)
void VisiblePlaneList::Clear()
{
// Don't clear fake planes if not doing a full clear.
if (!fullclear)
for (int i = 0; i <= MAXVISPLANES; i++)
visplanes[i] = nullptr;
}
void VisiblePlaneList::ClearKeepFakePlanes()
{
for (int i = 0; i <= MAXVISPLANES - 1; i++)
{
for (int i = 0; i <= MAXVISPLANES - 1; i++)
for (VisiblePlane **probe = &visplanes[i]; *probe != nullptr; )
{
for (VisiblePlane **probe = &visplanes[i]; *probe != nullptr; )
{
if ((*probe)->sky < 0)
{ // fake: move past it
probe = &(*probe)->next;
}
else
{ // not fake: move from list
VisiblePlane *vis = *probe;
*probe = vis->next;
vis->next = nullptr;
}
if ((*probe)->sky < 0)
{ // fake: move past it
probe = &(*probe)->next;
}
else
{ // not fake: move from list
VisiblePlane *vis = *probe;
*probe = vis->next;
vis->next = nullptr;
}
}
}
else
{
for (int i = 0; i <= MAXVISPLANES; i++)
visplanes[i] = nullptr;
}
}
VisiblePlane *VisiblePlaneList::FindPlane(const secplane_t &height, FTextureID picnum, int lightlevel, double Alpha, bool additive, const FTransform &xxform, int sky, FSectorPortal *portal, FDynamicColormap *basecolormap)

View File

@ -27,7 +27,8 @@ namespace swrenderer
public:
static VisiblePlaneList *Instance();
void Clear(bool fullclear);
void Clear();
void ClearKeepFakePlanes();
VisiblePlane *FindPlane(const secplane_t &height, FTextureID picnum, int lightlevel, double Alpha, bool additive, const FTransform &xxform, int sky, FSectorPortal *portal, FDynamicColormap *basecolormap);
VisiblePlane *GetRange(VisiblePlane *pl, int start, int stop);

View File

@ -165,7 +165,7 @@ namespace swrenderer
R_SetViewAngle();
validcount++; // Make sure we see all sprites
planes->Clear(false);
planes->ClearKeepFakePlanes();
RenderClipSegment::Instance()->Clear(pl->left, pl->right);
WindowLeft = pl->left;
WindowRight = pl->right;
@ -408,7 +408,7 @@ namespace swrenderer
PortalDrawseg* prevpds = CurrentPortal;
CurrentPortal = pds;
VisiblePlaneList::Instance()->Clear(false);
VisiblePlaneList::Instance()->ClearKeepFakePlanes();
RenderClipSegment::Instance()->Clear(pds->x1, pds->x2);
WindowLeft = pds->x1;

View File

@ -133,7 +133,7 @@ namespace swrenderer
// Clear buffers.
RenderClipSegment::Instance()->Clear(0, viewwidth);
R_ClearDrawSegs();
VisiblePlaneList::Instance()->Clear(true);
VisiblePlaneList::Instance()->Clear();
RenderTranslucentPass::Clear();
// opening / clipping determination