mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 20:43:15 +00:00
- fixed retrieval of mapsection for polyportals.
- render wall portals on one sided lines.
This commit is contained in:
parent
3683a8ac58
commit
7105a87a1e
3 changed files with 23 additions and 12 deletions
|
@ -1050,7 +1050,12 @@ void GLLineToLinePortal::DrawContents()
|
|||
|
||||
for (unsigned i = 0; i < lines.Size(); i++)
|
||||
{
|
||||
int mapsection = lines[i].seg->linedef->getPortalDestination()->frontsector->subsectors[0]->mapsection;
|
||||
line_t *line = lines[i].seg->linedef->getPortalDestination();
|
||||
subsector_t *sub;
|
||||
if (line->sidedef[0]->Flags & WALLF_POLYOBJ)
|
||||
sub = R_PointInSubsector(line->v1->x, line->v1->y);
|
||||
else sub = line->frontsector->subsectors[0];
|
||||
int mapsection = sub->mapsection;
|
||||
currentmapsection[mapsection >> 3] |= 1 << (mapsection & 7);
|
||||
}
|
||||
|
||||
|
|
|
@ -193,19 +193,12 @@ void GLWall::SkyLine(sector_t *fs, line_t *line)
|
|||
{
|
||||
ASkyViewpoint * skyboxx = line->skybox;
|
||||
GLSkyInfo skyinfo;
|
||||
GLLineToLineInfo llinfo;
|
||||
int ptype;
|
||||
|
||||
// JUSTHIT is used as an indicator that a skybox is in use.
|
||||
// This is to avoid recursion
|
||||
|
||||
if (line->isVisualPortal())
|
||||
{
|
||||
ptype = PORTALTYPE_LINETOLINE;
|
||||
llinfo.init(line);
|
||||
l2l = UniqueLineToLines.Get(&llinfo);
|
||||
}
|
||||
else if (!gl_noskyboxes && skyboxx && GLRenderer->mViewActor != skyboxx && !(skyboxx->flags&MF_JUSTHIT))
|
||||
if (!gl_noskyboxes && skyboxx && GLRenderer->mViewActor != skyboxx && !(skyboxx->flags&MF_JUSTHIT))
|
||||
{
|
||||
ptype = PORTALTYPE_SKYBOX;
|
||||
skybox = skyboxx;
|
||||
|
|
|
@ -1475,7 +1475,18 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector)
|
|||
// sector's sky
|
||||
SkyNormal(frontsector, v1, v2);
|
||||
|
||||
if (seg->linedef->skybox == NULL)
|
||||
if (seg->linedef->isVisualPortal())
|
||||
{
|
||||
GLLineToLineInfo llinfo;
|
||||
ztop[0] = zceil[0];
|
||||
ztop[1] = zceil[1];
|
||||
zbottom[0] = zfloor[0];
|
||||
zbottom[1] = zfloor[1];
|
||||
llinfo.init(seg->linedef);
|
||||
l2l = UniqueLineToLines.Get(&llinfo);
|
||||
PutPortal(PORTALTYPE_LINETOLINE);
|
||||
}
|
||||
else if (seg->linedef->skybox == NULL && !seg->linedef->isVisualPortal())
|
||||
{
|
||||
// normal texture
|
||||
gltexture = FMaterial::ValidateTexture(seg->sidedef->GetTexture(side_t::mid), false, true);
|
||||
|
@ -1590,12 +1601,14 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector)
|
|||
|
||||
if (seg->linedef->isVisualPortal() && seg->sidedef == seg->linedef->sidedef[0])
|
||||
{
|
||||
GLLineToLineInfo llinfo;
|
||||
ztop[0] = FIXED2FLOAT(bch1);
|
||||
ztop[1] = FIXED2FLOAT(bch2);
|
||||
zbottom[0] = FIXED2FLOAT(bfh1);
|
||||
zbottom[1] = FIXED2FLOAT(bfh2);
|
||||
|
||||
SkyLine(frontsector, seg->linedef);
|
||||
llinfo.init(seg->linedef);
|
||||
l2l = UniqueLineToLines.Get(&llinfo);
|
||||
PutPortal(PORTALTYPE_LINETOLINE);
|
||||
}
|
||||
else if (backsector->e->XFloor.ffloors.Size() || frontsector->e->XFloor.ffloors.Size())
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue