Fix polyobject midtextures being stretched into infinity

This commit is contained in:
Gustaf Alhäll 2024-11-04 21:07:15 +01:00
parent 987d2ee59a
commit ebb63499e0

View file

@ -954,6 +954,7 @@ static boolean HWR_BlendMidtextureSurface(FSurfaceInfo *pSurf)
static void HWR_RenderMidtexture(INT32 gl_midtexture, float cliplow, float cliphigh, fixed_t worldtop, fixed_t worldbottom, fixed_t worldhigh, fixed_t worldlow, fixed_t worldtopslope, fixed_t worldbottomslope, fixed_t worldhighslope, fixed_t worldlowslope, UINT32 lightnum, FOutVector *inWallVerts) static void HWR_RenderMidtexture(INT32 gl_midtexture, float cliplow, float cliphigh, fixed_t worldtop, fixed_t worldbottom, fixed_t worldhigh, fixed_t worldlow, fixed_t worldtopslope, fixed_t worldbottomslope, fixed_t worldhighslope, fixed_t worldlowslope, UINT32 lightnum, FOutVector *inWallVerts)
{ {
sector_t *front, *back;
FOutVector wallVerts[4]; FOutVector wallVerts[4];
FSurfaceInfo Surf; FSurfaceInfo Surf;
@ -963,6 +964,16 @@ static void HWR_RenderMidtexture(INT32 gl_midtexture, float cliplow, float cliph
if (!HWR_BlendMidtextureSurface(&Surf)) if (!HWR_BlendMidtextureSurface(&Surf))
return; return;
if (gl_linedef->frontsector->heightsec != -1)
front = &sectors[gl_linedef->frontsector->heightsec];
else
front = gl_linedef->frontsector;
if (gl_linedef->backsector->heightsec != -1)
back = &sectors[gl_linedef->backsector->heightsec];
else
back = gl_linedef->backsector;
fixed_t texheight = FixedDiv(textureheight[gl_midtexture], abs(gl_sidedef->scaley_mid)); fixed_t texheight = FixedDiv(textureheight[gl_midtexture], abs(gl_sidedef->scaley_mid));
INT32 repeats; INT32 repeats;
@ -972,15 +983,15 @@ static void HWR_RenderMidtexture(INT32 gl_midtexture, float cliplow, float cliph
{ {
fixed_t high, low; fixed_t high, low;
if (gl_frontsector->ceilingheight > gl_backsector->ceilingheight) if (front->ceilingheight > back->ceilingheight)
high = gl_backsector->ceilingheight; high = back->ceilingheight;
else else
high = gl_frontsector->ceilingheight; high = front->ceilingheight;
if (gl_frontsector->floorheight > gl_backsector->floorheight) if (front->floorheight > back->floorheight)
low = gl_frontsector->floorheight; low = front->floorheight;
else else
low = gl_backsector->floorheight; low = back->floorheight;
repeats = (high - low) / texheight; repeats = (high - low) / texheight;
if ((high - low) % texheight) if ((high - low) % texheight)
@ -1007,8 +1018,8 @@ static void HWR_RenderMidtexture(INT32 gl_midtexture, float cliplow, float cliph
if (gl_curline->polyseg) if (gl_curline->polyseg)
{ {
// Change this when polyobjects support slopes // Change this when polyobjects support slopes
popentop = popentopslope = gl_curline->backsector->ceilingheight; popentop = popentopslope = back->ceilingheight;
popenbottom = popenbottomslope = gl_curline->backsector->floorheight; popenbottom = popenbottomslope = back->floorheight;
} }
else else
{ {