diff --git a/src/gl/scene/gl_portal.cpp b/src/gl/scene/gl_portal.cpp index 25b2ff236..9b86cbbe8 100644 --- a/src/gl/scene/gl_portal.cpp +++ b/src/gl/scene/gl_portal.cpp @@ -606,10 +606,7 @@ void GLSkyboxPortal::DrawContents(FDrawInfo *di) di->SetViewArea(); ClearClipper(di); - int mapsection = R_PointInSubsector(r_viewpoint.Pos)->mapsection; - - di->CurrentMapSections.Zero(); - di->CurrentMapSections.Set(mapsection); + di->UpdateCurrentMapSection(); drawer->DrawScene(di, DM_SKYPORTAL); portal->mFlags &= ~PORTSF_INSKYBOX; @@ -770,6 +767,8 @@ void GLPlaneMirrorPortal::DrawContents(FDrawInfo *di) drawer->SetupView(r_viewpoint.Pos.X, r_viewpoint.Pos.Y, r_viewpoint.Pos.Z, r_viewpoint.Angles.Yaw, !!(MirrorFlag & 1), !!(PlaneMirrorFlag & 1)); ClearClipper(di); + di->UpdateCurrentMapSection(); + gl_RenderState.SetClipHeight(planez, PlaneMirrorMode < 0 ? -1.f : 1.f); drawer->DrawScene(di, DM_PORTAL); gl_RenderState.SetClipHeight(0.f, 0.f); @@ -944,6 +943,8 @@ void GLMirrorPortal::DrawContents(FDrawInfo *di) angle_t a1 = linedef->v2->GetClipAngle(); di->mClipper->SafeAddClipRange(a1,a2); + di->UpdateCurrentMapSection(); + gl_RenderState.SetClipLine(linedef); gl_RenderState.EnableClipLine(true); drawer->DrawScene(di, DM_PORTAL); diff --git a/src/gl/scene/gl_scenedrawer.h b/src/gl/scene/gl_scenedrawer.h index d075e1418..3396c269c 100644 --- a/src/gl/scene/gl_scenedrawer.h +++ b/src/gl/scene/gl_scenedrawer.h @@ -32,7 +32,6 @@ public: angle_t FrustumAngle(); void SetViewMatrix(float vx, float vy, float vz, bool mirror, bool planemirror); - void SetViewArea(); void SetupView(float vx, float vy, float vz, DAngle va, bool mirror, bool planemirror); void SetViewAngle(DAngle viewangle); void SetProjection(VSMatrix matrix); diff --git a/src/hwrenderer/scene/hw_drawinfo.h b/src/hwrenderer/scene/hw_drawinfo.h index e9db60a09..8bec0df27 100644 --- a/src/hwrenderer/scene/hw_drawinfo.h +++ b/src/hwrenderer/scene/hw_drawinfo.h @@ -175,6 +175,8 @@ public: void PreparePlayerSprites(sector_t * viewsector, area_t in_area); void PrepareTargeterSprites(); + void UpdateCurrentMapSection(); + virtual void DrawWall(GLWall *wall, int pass) = 0; virtual void DrawFlat(GLFlat *flat, int pass, bool trans) = 0; virtual void DrawSprite(GLSprite *sprite, int pass) = 0; diff --git a/src/hwrenderer/scene/hw_renderhacks.cpp b/src/hwrenderer/scene/hw_renderhacks.cpp index 57fef57e0..74c5b3f0e 100644 --- a/src/hwrenderer/scene/hw_renderhacks.cpp +++ b/src/hwrenderer/scene/hw_renderhacks.cpp @@ -86,6 +86,12 @@ void HWDrawInfo::ClearBuffers() mClipPortal = nullptr; } +void HWDrawInfo::UpdateCurrentMapSection() +{ + const int mapsection = R_PointInSubsector(r_viewpoint.Pos)->mapsection; + CurrentMapSections.Set(mapsection); +} + //========================================================================== // // Adds a subsector plane to a sector's render list