mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 23:32:02 +00:00
Additional fix for splitting of complex wall in compatibility renderer
warp 2720 -200 -32 on Extreme Terror https://www.doomworld.com/idgames/levels/doom2/Ports/d-f/exterror
This commit is contained in:
parent
def3ad7533
commit
9ab9548723
2 changed files with 13 additions and 11 deletions
|
@ -187,7 +187,7 @@ private:
|
||||||
void RenderLightsCompat(int pass);
|
void RenderLightsCompat(int pass);
|
||||||
|
|
||||||
void Put3DWall(lightlist_t * lightlist, bool translucent);
|
void Put3DWall(lightlist_t * lightlist, bool translucent);
|
||||||
void SplitWallComplex(sector_t * frontsector, bool translucent, float maplightbottomleft, float maplightbottomright);
|
bool SplitWallComplex(sector_t * frontsector, bool translucent, float& maplightbottomleft, float& maplightbottomright);
|
||||||
void SplitWall(sector_t * frontsector, bool translucent);
|
void SplitWall(sector_t * frontsector, bool translucent);
|
||||||
|
|
||||||
void SetupLights();
|
void SetupLights();
|
||||||
|
|
|
@ -264,7 +264,7 @@ void GLWall::Put3DWall(lightlist_t * lightlist, bool translucent)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void GLWall::SplitWallComplex(sector_t * frontsector, bool translucent, float maplightbottomleft, float maplightbottomright)
|
bool GLWall::SplitWallComplex(sector_t * frontsector, bool translucent, float& maplightbottomleft, float& maplightbottomright)
|
||||||
{
|
{
|
||||||
GLWall copyWall1, copyWall2;
|
GLWall copyWall1, copyWall2;
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ void GLWall::SplitWallComplex(sector_t * frontsector, bool translucent, float ma
|
||||||
|
|
||||||
copyWall1.SplitWall(frontsector, translucent);
|
copyWall1.SplitWall(frontsector, translucent);
|
||||||
copyWall2.SplitWall(frontsector, translucent);
|
copyWall2.SplitWall(frontsector, translucent);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -345,9 +345,11 @@ void GLWall::SplitWallComplex(sector_t * frontsector, bool translucent, float ma
|
||||||
|
|
||||||
copyWall1.SplitWall(frontsector, translucent);
|
copyWall1.SplitWall(frontsector, translucent);
|
||||||
copyWall2.SplitWall(frontsector, translucent);
|
copyWall2.SplitWall(frontsector, translucent);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLWall::SplitWall(sector_t * frontsector, bool translucent)
|
void GLWall::SplitWall(sector_t * frontsector, bool translucent)
|
||||||
|
@ -406,15 +408,15 @@ void GLWall::SplitWall(sector_t * frontsector, bool translucent)
|
||||||
// Use hardware clipping if this cannot be done cleanly.
|
// Use hardware clipping if this cannot be done cleanly.
|
||||||
this->lightlist = &lightlist;
|
this->lightlist = &lightlist;
|
||||||
PutWall(translucent);
|
PutWall(translucent);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// crappy fallback if no clip planes available
|
|
||||||
SplitWallComplex(frontsector, translucent, maplightbottomleft, maplightbottomright);
|
|
||||||
}
|
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
// crappy fallback if no clip planes available
|
||||||
|
else if (SplitWallComplex(frontsector, translucent, maplightbottomleft, maplightbottomright))
|
||||||
|
{
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 3D floor is completely within this light
|
// 3D floor is completely within this light
|
||||||
if (maplightbottomleft<=zbottom[0] && maplightbottomright<=zbottom[1])
|
if (maplightbottomleft<=zbottom[0] && maplightbottomright<=zbottom[1])
|
||||||
|
|
Loading…
Reference in a new issue