- fixed retrieval of mapsection for polyportals.

- render wall portals on one sided lines.
This commit is contained in:
Christoph Oelckers 2016-02-06 19:19:18 +01:00
parent 3683a8ac58
commit 7105a87a1e
3 changed files with 23 additions and 12 deletions

View File

@ -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);
}

View File

@ -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;

View File

@ -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())
{