mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-25 13:31:07 +00:00
- fixed mirrors and reflections in hardware renderer
https://forum.zdoom.org/viewtopic.php?t=60671
This commit is contained in:
parent
36779cf88c
commit
0187b0aa5b
4 changed files with 13 additions and 5 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue