Hook up sector portals
This commit is contained in:
parent
6da5f8e83f
commit
bda01dec98
5 changed files with 48 additions and 33 deletions
|
|
@ -1257,15 +1257,6 @@ void DoomLevelMesh::CreateWallSurface(side_t* side, HWWallDispatcher& disp, Mesh
|
|||
}
|
||||
else
|
||||
{
|
||||
if (wallpart.texture && wallpart.texture->isMasked())
|
||||
{
|
||||
state.AlphaFunc(Alpha_GEqual, gl_mask_threshold);
|
||||
}
|
||||
else
|
||||
{
|
||||
state.AlphaFunc(Alpha_GEqual, 0.f);
|
||||
}
|
||||
|
||||
wallpart.DrawWall(&disp, state, drawType == LevelMeshDrawType::Translucent || drawType == LevelMeshDrawType::TranslucentBorder);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -477,6 +477,33 @@ void HWDrawInfo::RenderPVS(bool drawpsprites, FRenderState& state)
|
|||
SubsectorHacks.Push(sh);
|
||||
}
|
||||
|
||||
for (int subIndex : SeenSubsectorPortals.Get())
|
||||
{
|
||||
subsector_t* sub = &Level->subsectors[subIndex];
|
||||
sector_t* sector = sub->sector;
|
||||
auto fakesector = hw_FakeFlat(drawctx, sector, in_area, false);
|
||||
|
||||
FSectorPortalGroup* portal = fakesector->GetPortalGroup(sector_t::ceiling);
|
||||
if (portal != nullptr)
|
||||
{
|
||||
AddSubsectorToPortal(portal, sub);
|
||||
}
|
||||
|
||||
portal = fakesector->GetPortalGroup(sector_t::floor);
|
||||
if (portal != nullptr)
|
||||
{
|
||||
AddSubsectorToPortal(portal, sub);
|
||||
}
|
||||
}
|
||||
|
||||
for (int sideIndex : SeenSides.Get())
|
||||
{
|
||||
for (HWWall& portal : level.levelMesh->GetSidePortals(sideIndex))
|
||||
{
|
||||
PutWallPortal(portal, state);
|
||||
}
|
||||
}
|
||||
|
||||
if (gl_render_things)
|
||||
{
|
||||
for (int subIndex : SeenSubsectors.Get())
|
||||
|
|
@ -542,23 +569,9 @@ void HWDrawInfo::CreateScene(bool drawpsprites, FRenderState& state)
|
|||
|
||||
RenderPVS(drawpsprites, state);
|
||||
|
||||
if (uselevelmesh)
|
||||
{
|
||||
if (gl_levelmesh)
|
||||
level.levelMesh->CurFrameStats.Portals++;
|
||||
|
||||
for (int sideIndex : SeenSides.Get())
|
||||
{
|
||||
for (HWWall& portal : level.levelMesh->GetSidePortals(sideIndex))
|
||||
{
|
||||
// sector portals not handled yet by PutWallPortal
|
||||
if (portal.portaltype != PORTALTYPE_SECTORSTACK)
|
||||
{
|
||||
PutWallPortal(portal, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SeenFlatsDrawLists.Clear();
|
||||
SeenSidesDrawLists.Clear();
|
||||
level.levelMesh->AddSectorsToDrawLists(SeenSectors.Get(), SeenFlatsDrawLists);
|
||||
|
|
@ -594,20 +607,24 @@ void HWDrawInfo::PutWallPortal(HWWall wall, FRenderState& state)
|
|||
int portaltype = wall.portaltype;
|
||||
int portalplane = wall.portalplane;
|
||||
|
||||
HWSkyInfo skyinfo;
|
||||
if (portaltype == PORTALTYPE_SKY)
|
||||
{
|
||||
HWSkyInfo skyinfo;
|
||||
skyinfo.init(this, wall.frontsector, sector_t::ceiling, wall.frontsector->skytransfer, wall.Colormap.FadeColor);
|
||||
wall.sky = &skyinfo;
|
||||
wall.PutPortal(&ddi, state, portaltype, portalplane);
|
||||
}
|
||||
else if (portaltype == PORTALTYPE_SECTORSTACK)
|
||||
{
|
||||
// To do: this seems to need AddSubsectorToPortal?
|
||||
auto glport = wall.frontsector->GetPortalGroup(portalplane);
|
||||
if (glport)
|
||||
{
|
||||
if (wall.frontsector->PortalBlocksView(portalplane)) return;
|
||||
if (screen->instack[1 - portalplane]) return;
|
||||
|
||||
//if (screen->instack[1 - portalplane])
|
||||
// return;
|
||||
//wall.PutPortal(&ddi, state, portaltype, portalplane);
|
||||
wall.portal = glport;
|
||||
wall.PutPortal(&ddi, state, portaltype, portalplane);
|
||||
}
|
||||
}
|
||||
else if (portaltype == PORTALTYPE_PLANEMIRROR)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -226,7 +226,7 @@ struct HWDrawInfo
|
|||
TArray<bool> AddedToList;
|
||||
};
|
||||
|
||||
VisList SeenSectors, SeenSides, SeenSubsectors, SeenHackedSubsectors;
|
||||
VisList SeenSectors, SeenSides, SeenSubsectors, SeenHackedSubsectors, SeenSubsectorPortals;
|
||||
LevelMeshDrawLists SeenFlatsDrawLists, SeenSidesDrawLists;
|
||||
|
||||
TArray<bool> QueryResultsBuffer;
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ void HWVisibleSet::RenderBSP(void* node)
|
|||
SeenSides.Clear();
|
||||
SeenSubsectors.Clear();
|
||||
SeenHackedSubsectors.Clear();
|
||||
SeenSubsectorPortals.Clear();
|
||||
|
||||
RenderBSPNode(node);
|
||||
}
|
||||
|
|
@ -247,14 +248,14 @@ void HWVisibleSet::DoSubsector(subsector_t* sub)
|
|||
portal = fakesector->GetPortalGroup(sector_t::ceiling);
|
||||
if (portal != nullptr)
|
||||
{
|
||||
// To do: what to do here?
|
||||
SeenSubsectorPortals.Add(sub->Index());
|
||||
// AddSubsectorToPortal(portal, sub);
|
||||
}
|
||||
|
||||
portal = fakesector->GetPortalGroup(sector_t::floor);
|
||||
if (portal != nullptr)
|
||||
{
|
||||
// To do: what to do here?
|
||||
SeenSubsectorPortals.Add(sub->Index());
|
||||
// AddSubsectorToPortal(portal, sub);
|
||||
}
|
||||
}
|
||||
|
|
@ -582,6 +583,7 @@ void HWVisibleSetThreads::FindPVS(HWDrawInfo* di)
|
|||
di->SeenSides.Clear();
|
||||
di->SeenSubsectors.Clear();
|
||||
di->SeenHackedSubsectors.Clear();
|
||||
di->SeenSubsectorPortals.Clear();
|
||||
for (int i = 0; i < SliceCount; i++)
|
||||
{
|
||||
if (gl_debug_slice != -1 && gl_debug_slice < SliceCount)
|
||||
|
|
@ -595,6 +597,8 @@ void HWVisibleSetThreads::FindPVS(HWDrawInfo* di)
|
|||
di->SeenSubsectors.Add(subIndex);
|
||||
for (int subIndex : Slices[i].SeenHackedSubsectors.Get())
|
||||
di->SeenHackedSubsectors.Add(subIndex);
|
||||
for (int subIndex : Slices[i].SeenSubsectorPortals.Get())
|
||||
di->SeenSubsectorPortals.Add(subIndex);
|
||||
|
||||
if (gl_debug_slice != -1)
|
||||
break;
|
||||
|
|
@ -631,10 +635,13 @@ void HWVisibleSetThreads::WorkerMain(int sliceIndex)
|
|||
Slices[left].SeenSubsectors.Add(subIndex);
|
||||
for (int subIndex : Slices[right].SeenHackedSubsectors.Get())
|
||||
Slices[left].SeenHackedSubsectors.Add(subIndex);
|
||||
for (int subIndex : Slices[right].SeenSubsectorPortals.Get())
|
||||
Slices[left].SeenSubsectorPortals.Add(subIndex);
|
||||
Slices[right].SeenSectors.Clear();
|
||||
Slices[right].SeenSides.Clear();
|
||||
Slices[right].SeenSubsectors.Clear();
|
||||
Slices[right].SeenHackedSubsectors.Clear();
|
||||
Slices[right].SeenSubsectorPortals.Clear();
|
||||
lock.lock();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ public:
|
|||
TArray<bool> AddedToList;
|
||||
};
|
||||
|
||||
VisList SeenSectors, SeenSides, SeenSubsectors, SeenHackedSubsectors;
|
||||
VisList SeenSectors, SeenSides, SeenSubsectors, SeenHackedSubsectors, SeenSubsectorPortals;
|
||||
|
||||
private:
|
||||
void RenderBSP(void* node);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue