- fix a render glitch with Back to Saturn X MAP06: Do not flood missing upper and lower textures with the backsector's flat if that backsector is malformed (i.e. has no area.)

This commit is contained in:
Christoph Oelckers 2014-08-31 23:01:53 +02:00
parent a280c20b4e
commit fa3a62e954
2 changed files with 13 additions and 4 deletions

View file

@ -233,6 +233,7 @@ static void SpreadHackedFlag(subsector_t * sub)
if (!(sub2->hacked&1) && sub2->render_sector == sub->render_sector) if (!(sub2->hacked&1) && sub2->render_sector == sub->render_sector)
{ {
sub2->hacked|=1; sub2->hacked|=1;
sub->hacked &= ~4;
SpreadHackedFlag (sub2); SpreadHackedFlag (sub2);
} }
} }
@ -285,7 +286,7 @@ static void PrepareSectorData()
subsectors[i].render_sector != seg[j].PartnerSeg->Subsector->render_sector) subsectors[i].render_sector != seg[j].PartnerSeg->Subsector->render_sector)
{ {
DPrintf("Found hack: (%d,%d) (%d,%d)\n", seg[j].v1->x>>16, seg[j].v1->y>>16, seg[j].v2->x>>16, seg[j].v2->y>>16); DPrintf("Found hack: (%d,%d) (%d,%d)\n", seg[j].v1->x>>16, seg[j].v1->y>>16, seg[j].v2->x>>16, seg[j].v2->y>>16);
subsectors[i].hacked|=1; subsectors[i].hacked|=5;
SpreadHackedFlag(&subsectors[i]); SpreadHackedFlag(&subsectors[i]);
} }
if (seg[j].PartnerSeg==NULL) subsectors[i].hacked|=2; // used for quick termination checks if (seg[j].PartnerSeg==NULL) subsectors[i].hacked|=2; // used for quick termination checks

View file

@ -1417,7 +1417,7 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector)
sector_t * realback; sector_t * realback;
#ifdef _DEBUG #ifdef _DEBUG
if (seg->linedef-lines==636) if (seg->linedef-lines==1276)
{ {
int a = 0; int a = 0;
} }
@ -1634,11 +1634,15 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector)
} }
} }
else if (!(seg->sidedef->Flags & WALLF_POLYOBJ)) else if (!(seg->sidedef->Flags & WALLF_POLYOBJ))
{
// skip processing if the back is a malformed subsector
if (!(seg->PartnerSeg->Subsector->hacked & 4))
{ {
gl_drawinfo->AddUpperMissingTexture(seg->sidedef, sub, bch1a); gl_drawinfo->AddUpperMissingTexture(seg->sidedef, sub, bch1a);
} }
} }
} }
}
/* mid texture */ /* mid texture */
@ -1703,11 +1707,15 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector)
} }
else if (backsector->GetTexture(sector_t::floor) != skyflatnum && else if (backsector->GetTexture(sector_t::floor) != skyflatnum &&
!(seg->sidedef->Flags & WALLF_POLYOBJ)) !(seg->sidedef->Flags & WALLF_POLYOBJ))
{
// skip processing if the back is a malformed subsector
if (!(seg->PartnerSeg->Subsector->hacked & 4))
{ {
gl_drawinfo->AddLowerMissingTexture(seg->sidedef, sub, bfh1); gl_drawinfo->AddLowerMissingTexture(seg->sidedef, sub, bfh1);
} }
} }
} }
}
} }
//========================================================================== //==========================================================================