mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-26 14:01:45 +00:00
Revert "- restricted the portal rendering shortcut only to real skies in the primary layer."
This reverts commit b193e582ce
.
This made the one thing I hoped it would fix even worse so it's useless.
This commit is contained in:
parent
bb58dedff2
commit
c51af868de
2 changed files with 36 additions and 7 deletions
|
@ -126,13 +126,42 @@ bool FPortalSceneState::RenderFirstSkyPortal(int recursion, HWDrawInfo *outer_di
|
||||||
HWPortal * best = nullptr;
|
HWPortal * best = nullptr;
|
||||||
unsigned bestindex = 0;
|
unsigned bestindex = 0;
|
||||||
|
|
||||||
if (recursion > 0 || outer_di->Portals.Size() != 1 || !outer_di->Portals[0]->IsSky()) return false;
|
// Find the one with the highest amount of lines.
|
||||||
|
// Normally this is also the one that saves the largest amount
|
||||||
|
// of time by drawing it before the scene itself.
|
||||||
|
auto &portals = outer_di->Portals;
|
||||||
|
for (int i = portals.Size() - 1; i >= 0; --i)
|
||||||
|
{
|
||||||
|
auto p = portals[i];
|
||||||
|
if (p->lines.Size() > 0 && p->IsSky())
|
||||||
|
{
|
||||||
|
// Cannot clear the depth buffer inside a portal recursion
|
||||||
|
if (recursion && p->NeedDepthBuffer()) continue;
|
||||||
|
|
||||||
best = outer_di->Portals[0];
|
if (!best || p->lines.Size() > best->lines.Size())
|
||||||
outer_di->Portals.Clear();
|
{
|
||||||
RenderPortal(best, state, false, outer_di);
|
best = p;
|
||||||
delete best;
|
bestindex = i;
|
||||||
return true;
|
}
|
||||||
|
|
||||||
|
// If the portal area contains the current camera viewpoint, let's always use it because it's likely to give the largest area.
|
||||||
|
if (p->boundingBox.contains(outer_di->Viewpoint.Pos))
|
||||||
|
{
|
||||||
|
best = p;
|
||||||
|
bestindex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (best)
|
||||||
|
{
|
||||||
|
portals.Delete(bestindex);
|
||||||
|
RenderPortal(best, state, false, outer_di);
|
||||||
|
delete best;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -279,7 +279,7 @@ protected:
|
||||||
bool Setup(HWDrawInfo *di, FRenderState &rstate, Clipper *clipper) override;
|
bool Setup(HWDrawInfo *di, FRenderState &rstate, Clipper *clipper) override;
|
||||||
void Shutdown(HWDrawInfo *di, FRenderState &rstate) override;
|
void Shutdown(HWDrawInfo *di, FRenderState &rstate) override;
|
||||||
virtual void * GetSource() const { return origin; }
|
virtual void * GetSource() const { return origin; }
|
||||||
virtual bool IsSky() { return false; }
|
virtual bool IsSky() { return true; } // although this isn't a real sky it can be handled as one.
|
||||||
virtual const char *GetName();
|
virtual const char *GetName();
|
||||||
FSectorPortalGroup *origin;
|
FSectorPortalGroup *origin;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue