mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-25 05:21:02 +00:00
- some minor fixing and cleanup on gL portal code.
This commit is contained in:
parent
b0a0fb5ff0
commit
1f32f5a258
11 changed files with 74 additions and 69 deletions
|
@ -51,7 +51,7 @@ struct FPortal
|
|||
int plane;
|
||||
GLSectorStackPortal *glportal; // for quick access to the render data. This is only valid during BSP traversal!
|
||||
|
||||
GLSectorStackPortal *GetGLPortal();
|
||||
GLSectorStackPortal *GetRenderState();
|
||||
};
|
||||
|
||||
struct FGLLinePortal
|
||||
|
@ -68,7 +68,7 @@ extern TArray<FGLLinePortal*> linePortalToGL;
|
|||
extern TArray<BYTE> currentmapsection;
|
||||
|
||||
void gl_InitPortals();
|
||||
void gl_BuildPortalCoverage(FPortalCoverage *coverage, subsector_t *subsector, FPortal *portal);
|
||||
void gl_BuildPortalCoverage(FPortalCoverage *coverage, subsector_t *subsector, const DVector2 &displacement);
|
||||
void gl_InitData();
|
||||
|
||||
extern long gl_frameMS;
|
||||
|
|
|
@ -94,7 +94,7 @@ TArray<FGLLinePortal> glLinePortals;
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
GLSectorStackPortal *FPortal::GetGLPortal()
|
||||
GLSectorStackPortal *FPortal::GetRenderState()
|
||||
{
|
||||
if (glportal == NULL) glportal = new GLSectorStackPortal(this);
|
||||
return glportal;
|
||||
|
@ -125,7 +125,6 @@ struct FCoverageLine
|
|||
struct FCoverageBuilder
|
||||
{
|
||||
subsector_t *target;
|
||||
FPortal *portal;
|
||||
TArray<int> collect;
|
||||
FCoverageVertex center;
|
||||
|
||||
|
@ -135,10 +134,9 @@ struct FCoverageBuilder
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
FCoverageBuilder(subsector_t *sub, FPortal *port)
|
||||
FCoverageBuilder(subsector_t *sub)
|
||||
{
|
||||
target = sub;
|
||||
portal = port;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -322,7 +320,7 @@ struct FCoverageBuilder
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void gl_BuildPortalCoverage(FPortalCoverage *coverage, subsector_t *subsector, FPortal *portal)
|
||||
void gl_BuildPortalCoverage(FPortalCoverage *coverage, subsector_t *subsector, const DVector2 &displacement)
|
||||
{
|
||||
TArray<FCoverageVertex> shape;
|
||||
double centerx=0, centery=0;
|
||||
|
@ -330,11 +328,11 @@ void gl_BuildPortalCoverage(FPortalCoverage *coverage, subsector_t *subsector, F
|
|||
shape.Resize(subsector->numlines);
|
||||
for(unsigned i=0; i<subsector->numlines; i++)
|
||||
{
|
||||
centerx += (shape[i].x = FLOAT2FIXED(subsector->firstline[i].v1->fX() + portal->mDisplacement.X));
|
||||
centery += (shape[i].y = FLOAT2FIXED(subsector->firstline[i].v1->fY() + portal->mDisplacement.Y));
|
||||
centerx += (shape[i].x = FLOAT2FIXED(subsector->firstline[i].v1->fX() + displacement.X));
|
||||
centery += (shape[i].y = FLOAT2FIXED(subsector->firstline[i].v1->fY() + displacement.Y));
|
||||
}
|
||||
|
||||
FCoverageBuilder build(subsector, portal);
|
||||
FCoverageBuilder build(subsector);
|
||||
build.center.x = xs_CRoundToInt(centerx / subsector->numlines);
|
||||
build.center.y = xs_CRoundToInt(centery / subsector->numlines);
|
||||
|
||||
|
@ -357,10 +355,10 @@ static void CollectPortalSectors(FPortalMap &collection)
|
|||
sector_t *sec = §ors[i];
|
||||
for (int j = 0; j < 2; j++)
|
||||
{
|
||||
ASkyViewpoint *SkyBox = barrier_cast<ASkyViewpoint*>(sec->SkyBoxes[j]);
|
||||
if (SkyBox != NULL && SkyBox->bAlways && SkyBox->Mate != NULL)
|
||||
int ptype = sec->GetPortalType(j);
|
||||
if (ptype== SKYBOX_STACKEDSECTORTHING || ptype == SKYBOX_PORTAL || ptype == SKYBOX_LINKEDPORTAL) // only offset-displacing portal types
|
||||
{
|
||||
FPortalID id = { {SkyBox->X() - SkyBox->Mate->X(), SkyBox->Y() - SkyBox->Mate->Y()} };
|
||||
FPortalID id = { sec->GetPortalDisplacement(j) };
|
||||
|
||||
FPortalSectors &sss = collection[id];
|
||||
FPortalSector ss = { sec, j };
|
||||
|
@ -401,8 +399,7 @@ void gl_InitPortals()
|
|||
}
|
||||
for (int i=1;i<=2;i<<=1)
|
||||
{
|
||||
// For now, add separate portals for floor and ceiling. They can be merged once
|
||||
// proper plane clipping is in.
|
||||
// add separate portals for floor and ceiling.
|
||||
if (planeflags & i)
|
||||
{
|
||||
FPortal *portal = new FPortal;
|
||||
|
@ -419,7 +416,7 @@ void gl_InitPortals()
|
|||
for(int k=0;k<sec->subsectorcount; k++)
|
||||
{
|
||||
subsector_t *sub = sec->subsectors[k];
|
||||
gl_BuildPortalCoverage(&sub->portalcoverage[plane], sub, portal);
|
||||
gl_BuildPortalCoverage(&sub->portalcoverage[plane], sub, pair->Key.mDisplacement);
|
||||
}
|
||||
sec->portals[plane] = portal;
|
||||
}
|
||||
|
@ -511,13 +508,13 @@ CCMD(dumpportals)
|
|||
for(int j=0;j<numsubsectors;j++)
|
||||
{
|
||||
subsector_t *sub = &subsectors[j];
|
||||
FPortal *port = sub->render_sector->portals[portals[i]->plane];
|
||||
FPortal *port = sub->render_sector->GetGLPortal(portals[i]->plane);
|
||||
if (port == portals[i])
|
||||
{
|
||||
Printf(PRINT_LOG, "\tSubsector %d (%d):\n\t\t", j, sub->render_sector->sectornum);
|
||||
for(unsigned k = 0;k< sub->numlines; k++)
|
||||
{
|
||||
Printf(PRINT_LOG, "(%.3f,%.3f), ", sub->firstline[k].v1->fixX()/65536. + xdisp, sub->firstline[k].v1->fixY()/65536. + ydisp);
|
||||
Printf(PRINT_LOG, "(%.3f,%.3f), ", sub->firstline[k].v1->fX() + xdisp, sub->firstline[k].v1->fY() + ydisp);
|
||||
}
|
||||
Printf(PRINT_LOG, "\n\t\tCovered by subsectors:\n");
|
||||
FPortalCoverage *cov = &sub->portalcoverage[portals[i]->plane];
|
||||
|
@ -527,7 +524,7 @@ CCMD(dumpportals)
|
|||
Printf(PRINT_LOG, "\t\t\t%5d (%4d): ", cov->subsectors[l], csub->render_sector->sectornum);
|
||||
for(unsigned m = 0;m< csub->numlines; m++)
|
||||
{
|
||||
Printf(PRINT_LOG, "(%.3f,%.3f), ", csub->firstline[m].v1->fixX()/65536., csub->firstline[m].v1->fixY()/65536.);
|
||||
Printf(PRINT_LOG, "(%.3f,%.3f), ", csub->firstline[m].v1->fX(), csub->firstline[m].v1->fY());
|
||||
}
|
||||
Printf(PRINT_LOG, "\n");
|
||||
}
|
||||
|
|
|
@ -591,24 +591,23 @@ void ADynamicLight::CollectWithinRadius(const DVector3 &pos, subsector_t *subSec
|
|||
}
|
||||
}
|
||||
}
|
||||
if (!subSec->sector->PortalBlocksSight(sector_t::ceiling))
|
||||
sector_t *sec = subSec->sector;
|
||||
if (!sec->PortalBlocksSight(sector_t::ceiling))
|
||||
{
|
||||
line_t *other = subSec->firstline->linedef;
|
||||
AActor *sb = subSec->sector->SkyBoxes[sector_t::ceiling];
|
||||
if (sb->specialf1 < Z() + radius)
|
||||
if (sec->GetPortalPlaneZ(sector_t::ceiling) < Z() + radius)
|
||||
{
|
||||
DVector2 refpos = other->v1->fPos() + other->Delta() / 2 + sb->Scale;
|
||||
DVector2 refpos = other->v1->fPos() + other->Delta() / 2 + sec->GetPortalDisplacement(sector_t::ceiling);
|
||||
subsector_t *othersub = R_PointInSubsector(refpos);
|
||||
if (othersub->validcount != ::validcount) CollectWithinRadius(PosRelative(othersub->sector), othersub, radius);
|
||||
}
|
||||
}
|
||||
if (!subSec->sector->PortalBlocksSight(sector_t::floor))
|
||||
if (!sec->PortalBlocksSight(sector_t::floor))
|
||||
{
|
||||
line_t *other = subSec->firstline->linedef;
|
||||
AActor *sb = subSec->sector->SkyBoxes[sector_t::floor];
|
||||
if (sb->specialf1 > Z() - radius)
|
||||
if (sec->GetPortalPlaneZ(sector_t::floor) > Z() - radius)
|
||||
{
|
||||
DVector2 refpos = other->v1->fPos() + other->Delta() / 2 + sb->Scale;
|
||||
DVector2 refpos = other->v1->fPos() + other->Delta() / 2 + sec->GetPortalDisplacement(sector_t::floor);
|
||||
subsector_t *othersub = R_PointInSubsector(refpos);
|
||||
if (othersub->validcount != ::validcount) CollectWithinRadius(PosRelative(othersub->sector), othersub, radius);
|
||||
}
|
||||
|
|
|
@ -494,7 +494,7 @@ static void DoSubsector(subsector_t * sub)
|
|||
|
||||
if (gl_render_flats)
|
||||
{
|
||||
// Subsectors with only 2 lines cannot have any area!
|
||||
// Subsectors with only 2 lines cannot have any area
|
||||
if (sub->numlines>2 || (sub->hacked&1))
|
||||
{
|
||||
// Exclude the case when it tries to render a sector with a heightsec
|
||||
|
@ -527,17 +527,17 @@ static void DoSubsector(subsector_t * sub)
|
|||
|
||||
FPortal *portal;
|
||||
|
||||
portal = fakesector->portals[sector_t::ceiling];
|
||||
portal = fakesector->GetGLPortal(sector_t::ceiling);
|
||||
if (portal != NULL)
|
||||
{
|
||||
GLSectorStackPortal *glportal = portal->GetGLPortal();
|
||||
GLSectorStackPortal *glportal = portal->GetRenderState();
|
||||
glportal->AddSubsector(sub);
|
||||
}
|
||||
|
||||
portal = fakesector->portals[sector_t::floor];
|
||||
portal = fakesector->GetGLPortal(sector_t::floor);
|
||||
if (portal != NULL)
|
||||
{
|
||||
GLSectorStackPortal *glportal = portal->GetGLPortal();
|
||||
GLSectorStackPortal *glportal = portal->GetRenderState();
|
||||
glportal->AddSubsector(sub);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -212,8 +212,8 @@ sector_t * gl_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac
|
|||
dest->ceilingplane=sec->floorplane;
|
||||
dest->ceilingplane.FlipVert();
|
||||
dest->planes[sector_t::ceiling].TexZ = dest->planes[sector_t::floor].TexZ;
|
||||
dest->portals[sector_t::ceiling] = NULL;
|
||||
dest->portals[sector_t::floor] = NULL;
|
||||
dest->ClearPortal(sector_t::ceiling);
|
||||
dest->ClearPortal(sector_t::floor);
|
||||
return dest;
|
||||
}
|
||||
}
|
||||
|
@ -314,7 +314,7 @@ sector_t * gl_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac
|
|||
dest->vboindex[sector_t::ceiling] = sec->vboindex[sector_t::vbo_fakefloor];
|
||||
dest->vboheight[sector_t::ceiling] = s->vboheight[sector_t::floor];
|
||||
|
||||
dest->portals[sector_t::ceiling] = NULL;
|
||||
dest->ClearPortal(sector_t::ceiling);
|
||||
|
||||
if (!(s->MoreFlags & SECF_NOFAKELIGHT))
|
||||
{
|
||||
|
@ -367,7 +367,7 @@ sector_t * gl_FakeFlat(sector_t * sec, sector_t * dest, area_t in_area, bool bac
|
|||
dest->vboindex[sector_t::ceiling] = sec->vboindex[sector_t::ceiling];
|
||||
dest->vboheight[sector_t::ceiling] = sec->vboheight[sector_t::ceiling];
|
||||
|
||||
dest->portals[sector_t::floor] = NULL;
|
||||
dest->ClearPortal(sector_t::floor);
|
||||
|
||||
if (!(s->MoreFlags & SECF_NOFAKELIGHT))
|
||||
{
|
||||
|
|
|
@ -1180,20 +1180,21 @@ void GLHorizonPortal::DrawContents()
|
|||
void GLEEHorizonPortal::DrawContents()
|
||||
{
|
||||
PortalAll.Clock();
|
||||
if (origin->Sector->GetTexture(sector_t::floor) == skyflatnum ||
|
||||
origin->Sector->GetTexture(sector_t::ceiling) == skyflatnum)
|
||||
sector_t *sector = origin->Sector;
|
||||
if (sector->GetTexture(sector_t::floor) == skyflatnum ||
|
||||
sector->GetTexture(sector_t::ceiling) == skyflatnum)
|
||||
{
|
||||
GLSkyInfo skyinfo;
|
||||
skyinfo.init(origin->Sector->sky, 0);
|
||||
skyinfo.init(sector->sky, 0);
|
||||
GLSkyPortal sky(&skyinfo, true);
|
||||
sky.DrawContents();
|
||||
}
|
||||
if (origin->Sector->GetTexture(sector_t::ceiling) != skyflatnum)
|
||||
if (sector->GetTexture(sector_t::ceiling) != skyflatnum)
|
||||
{
|
||||
GLHorizonInfo horz;
|
||||
horz.plane.GetFromSector(origin->Sector, true);
|
||||
horz.lightlevel = gl_ClampLight(origin->Sector->GetCeilingLight());
|
||||
horz.colormap = origin->Sector->ColorMap;
|
||||
horz.plane.GetFromSector(sector, true);
|
||||
horz.lightlevel = gl_ClampLight(sector->GetCeilingLight());
|
||||
horz.colormap = sector->ColorMap;
|
||||
if (origin->special1 == SKYBOX_PLANE)
|
||||
{
|
||||
horz.plane.Texheight = ViewPos.Z + fabs(horz.plane.Texheight);
|
||||
|
@ -1201,12 +1202,12 @@ void GLEEHorizonPortal::DrawContents()
|
|||
GLHorizonPortal ceil(&horz, true);
|
||||
ceil.DrawContents();
|
||||
}
|
||||
if (origin->Sector->GetTexture(sector_t::floor) != skyflatnum)
|
||||
if (sector->GetTexture(sector_t::floor) != skyflatnum)
|
||||
{
|
||||
GLHorizonInfo horz;
|
||||
horz.plane.GetFromSector(origin->Sector, false);
|
||||
horz.lightlevel = gl_ClampLight(origin->Sector->GetFloorLight());
|
||||
horz.colormap = origin->Sector->ColorMap;
|
||||
horz.plane.GetFromSector(sector, false);
|
||||
horz.lightlevel = gl_ClampLight(sector->GetFloorLight());
|
||||
horz.colormap = sector->ColorMap;
|
||||
if (origin->special1 == SKYBOX_PLANE)
|
||||
{
|
||||
horz.plane.Texheight = ViewPos.Z - fabs(horz.plane.Texheight);
|
||||
|
|
|
@ -669,7 +669,6 @@ void FDrawInfo::DrawUnhandledMissingTextures()
|
|||
if (seg->linedef->validcount == validcount) continue; // already done
|
||||
seg->linedef->validcount = validcount;
|
||||
if (seg->frontsector->GetPlaneTexZF(sector_t::ceiling) < ViewPos.Z) continue; // out of sight
|
||||
//if (seg->frontsector->ceilingpic==skyflatnum) continue;
|
||||
|
||||
// FIXME: The check for degenerate subsectors should be more precise
|
||||
if (seg->PartnerSeg && (seg->PartnerSeg->Subsector->flags & SSECF_DEGENERATE)) continue;
|
||||
|
@ -688,7 +687,6 @@ void FDrawInfo::DrawUnhandledMissingTextures()
|
|||
|
||||
seg_t * seg = MissingLowerSegs[i].seg;
|
||||
|
||||
// already done!
|
||||
if (seg->linedef->validcount == validcount) continue; // already done
|
||||
seg->linedef->validcount = validcount;
|
||||
if (!(sectorrenderflags[seg->backsector->sectornum] & SSRF_RENDERFLOOR)) continue;
|
||||
|
@ -1049,7 +1047,7 @@ void FDrawInfo::CollectSectorStacksCeiling(subsector_t * sub, sector_t * anchor)
|
|||
sub->validcount=validcount;
|
||||
|
||||
// Has a sector stack or skybox itself!
|
||||
if (sub->render_sector->portals[sector_t::ceiling] != NULL) return;
|
||||
if (sub->render_sector->GetGLPortal(sector_t::ceiling) != nullptr) return;
|
||||
|
||||
// Don't bother processing unrendered subsectors
|
||||
if (sub->numlines>2 && !(ss_renderflags[DWORD(sub-subsectors)]&SSRF_PROCESSED)) return;
|
||||
|
@ -1096,7 +1094,7 @@ void FDrawInfo::CollectSectorStacksFloor(subsector_t * sub, sector_t * anchor)
|
|||
sub->validcount=validcount;
|
||||
|
||||
// Has a sector stack or skybox itself!
|
||||
if (sub->render_sector->portals[sector_t::floor] != NULL) return;
|
||||
if (sub->render_sector->GetGLPortal(sector_t::floor) != nullptr) return;
|
||||
|
||||
// Don't bother processing unrendered subsectors
|
||||
if (sub->numlines>2 && !(ss_renderflags[DWORD(sub-subsectors)]&SSRF_PROCESSED)) return;
|
||||
|
@ -1146,7 +1144,7 @@ void FDrawInfo::ProcessSectorStacks()
|
|||
for (i=0;i<CeilingStacks.Size (); i++)
|
||||
{
|
||||
sector_t *sec = gl_FakeFlat(CeilingStacks[i], &fake, false);
|
||||
FPortal *portal = sec->portals[sector_t::ceiling];
|
||||
FPortal *portal = sec->GetGLPortal(sector_t::ceiling);
|
||||
if (portal != NULL) for(int k=0;k<sec->subsectorcount;k++)
|
||||
{
|
||||
subsector_t * sub = sec->subsectors[k];
|
||||
|
@ -1170,10 +1168,10 @@ void FDrawInfo::ProcessSectorStacks()
|
|||
|
||||
if (sub->portalcoverage[sector_t::ceiling].subsectors == NULL)
|
||||
{
|
||||
gl_BuildPortalCoverage(&sub->portalcoverage[sector_t::ceiling], sub, portal);
|
||||
gl_BuildPortalCoverage(&sub->portalcoverage[sector_t::ceiling], sub, portal->mDisplacement);
|
||||
}
|
||||
|
||||
portal->GetGLPortal()->AddSubsector(sub);
|
||||
portal->GetRenderState()->AddSubsector(sub);
|
||||
|
||||
if (sec->GetAlpha(sector_t::ceiling) != 0 && sec->GetTexture(sector_t::ceiling) != skyflatnum)
|
||||
{
|
||||
|
@ -1190,7 +1188,7 @@ void FDrawInfo::ProcessSectorStacks()
|
|||
for (i=0;i<FloorStacks.Size (); i++)
|
||||
{
|
||||
sector_t *sec = gl_FakeFlat(FloorStacks[i], &fake, false);
|
||||
FPortal *portal = sec->portals[sector_t::floor];
|
||||
FPortal *portal = sec->GetGLPortal(sector_t::floor);
|
||||
if (portal != NULL) for(int k=0;k<sec->subsectorcount;k++)
|
||||
{
|
||||
subsector_t * sub = sec->subsectors[k];
|
||||
|
@ -1215,10 +1213,10 @@ void FDrawInfo::ProcessSectorStacks()
|
|||
|
||||
if (sub->portalcoverage[sector_t::floor].subsectors == NULL)
|
||||
{
|
||||
gl_BuildPortalCoverage(&sub->portalcoverage[sector_t::floor], sub, portal);
|
||||
gl_BuildPortalCoverage(&sub->portalcoverage[sector_t::floor], sub, portal->mDisplacement);
|
||||
}
|
||||
|
||||
GLSectorStackPortal *glportal = portal->GetGLPortal();
|
||||
GLSectorStackPortal *glportal = portal->GetRenderState();
|
||||
glportal->AddSubsector(sub);
|
||||
|
||||
if (sec->GetAlpha(sector_t::floor) != 0 && sec->GetTexture(sector_t::floor) != skyflatnum)
|
||||
|
|
|
@ -311,11 +311,15 @@ void GLWall::SkyTop(seg_t * seg,sector_t * fs,sector_t * bs,vertex_t * v1,vertex
|
|||
}
|
||||
else
|
||||
{
|
||||
FPortal *pfront = fs->portals[sector_t::ceiling];
|
||||
FPortal *pback = bs->portals[sector_t::ceiling];
|
||||
int type = fs->GetPortalType(sector_t::ceiling);
|
||||
if (type == SKYBOX_STACKEDSECTORTHING || type == SKYBOX_PORTAL || type == SKYBOX_LINKEDPORTAL)
|
||||
{
|
||||
FPortal *pfront = fs->GetGLPortal(sector_t::ceiling);
|
||||
FPortal *pback = bs->GetGLPortal(sector_t::ceiling);
|
||||
if (pfront == NULL || fs->PortalBlocksView(sector_t::ceiling)) return;
|
||||
if (pfront == pback && !bs->PortalBlocksView(sector_t::ceiling)) return;
|
||||
}
|
||||
}
|
||||
|
||||
// stacked sectors
|
||||
ztop[0] = ztop[1] = 32768.0f;
|
||||
|
@ -386,11 +390,15 @@ void GLWall::SkyBottom(seg_t * seg,sector_t * fs,sector_t * bs,vertex_t * v1,ver
|
|||
}
|
||||
else
|
||||
{
|
||||
FPortal *pfront = fs->portals[sector_t::floor];
|
||||
FPortal *pback = bs->portals[sector_t::floor];
|
||||
int type = fs->GetPortalType(sector_t::floor);
|
||||
if (type == SKYBOX_STACKEDSECTORTHING || type == SKYBOX_PORTAL || type == SKYBOX_LINKEDPORTAL)
|
||||
{
|
||||
FPortal *pfront = fs->GetGLPortal(sector_t::floor);
|
||||
FPortal *pback = bs->GetGLPortal(sector_t::floor);
|
||||
if (pfront == NULL || fs->PortalBlocksView(sector_t::floor)) return;
|
||||
if (pfront == pback && !bs->PortalBlocksView(sector_t::floor)) return;
|
||||
}
|
||||
}
|
||||
|
||||
// stacked sectors
|
||||
zbottom[0]=zbottom[1]=-32768.0f;
|
||||
|
|
|
@ -554,8 +554,8 @@ void GLSprite::Process(AActor* thing, sector_t * sector, bool thruportal)
|
|||
{
|
||||
rendersector = sector;
|
||||
}
|
||||
topclip = rendersector->PortalBlocksMovement(sector_t::ceiling) ? LARGE_VALUE : rendersector->SkyBoxes[sector_t::ceiling]->specialf1;
|
||||
bottomclip = rendersector->PortalBlocksMovement(sector_t::floor) ? -LARGE_VALUE : rendersector->SkyBoxes[sector_t::floor]->specialf1;
|
||||
topclip = rendersector->PortalBlocksMovement(sector_t::ceiling) ? LARGE_VALUE : rendersector->GetPortalPlaneZ(sector_t::ceiling);
|
||||
bottomclip = rendersector->PortalBlocksMovement(sector_t::floor) ? -LARGE_VALUE : rendersector->GetPortalPlaneZ(sector_t::floor);
|
||||
|
||||
|
||||
x = thingpos.X;
|
||||
|
|
|
@ -185,7 +185,7 @@ void GLWall::PutPortal(int ptype)
|
|||
break;
|
||||
|
||||
case PORTALTYPE_SECTORSTACK:
|
||||
portal = this->portal->GetGLPortal();
|
||||
portal = this->portal->GetRenderState();
|
||||
portal->AddLine(this);
|
||||
break;
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "actor.h"
|
||||
struct FLightNode;
|
||||
struct FGLSection;
|
||||
struct FPortal;
|
||||
struct seg_t;
|
||||
|
||||
#include "dthinker.h"
|
||||
|
@ -499,7 +500,6 @@ struct subsector_t;
|
|||
struct sector_t;
|
||||
struct side_t;
|
||||
extern bool gl_plane_reflection_i;
|
||||
struct FPortal;
|
||||
|
||||
// Ceiling/floor flags
|
||||
enum
|
||||
|
@ -1159,6 +1159,8 @@ public:
|
|||
|
||||
float GetReflect(int pos) { return gl_plane_reflection_i? reflect[pos] : 0; }
|
||||
bool VBOHeightcheck(int pos) const { return vboheight[pos] == GetPlaneTexZ(pos); }
|
||||
FPortal *GetGLPortal(int plane) { return portals[plane]; }
|
||||
void ClearPortal(int plane) { portals[plane] = nullptr; SkyBoxes[plane] = nullptr; }
|
||||
|
||||
enum
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue