1
0
forked from 0ad/0ad

Fixes rendering reflections and refractions in case of empty scissors.

This was SVN commit r26902.
This commit is contained in:
Vladislav Belov 2022-05-24 19:15:26 +00:00
parent a6f60afdc5
commit 53033ceaa2
2 changed files with 12 additions and 0 deletions

View File

@ -558,6 +558,11 @@ void CSceneRenderer::RenderReflections(
ComputeReflectionCamera(m_ViewCamera, scissor);
const CBoundingBoxAligned reflectionScissor =
m->terrainRenderer.ScissorWater(CULL_DEFAULT, m_ViewCamera);
if (reflectionScissor.IsEmpty())
{
m_ViewCamera = normalCamera;
return;
}
g_Renderer.SetViewport(m_ViewCamera.GetViewPort());
@ -623,6 +628,11 @@ void CSceneRenderer::RenderRefractions(
ComputeRefractionCamera(m_ViewCamera, scissor);
const CBoundingBoxAligned refractionScissor =
m->terrainRenderer.ScissorWater(CULL_DEFAULT, m_ViewCamera);
if (refractionScissor.IsEmpty())
{
m_ViewCamera = normalCamera;
return;
}
CVector4D camPlane(0, -1, 0, wm.m_WaterHeight + 2.0f);
SetObliqueFrustumClipping(m_ViewCamera, camPlane);

View File

@ -379,6 +379,8 @@ CBoundingBoxAligned TerrainRenderer::ScissorWater(int cullGroup, const CCamera&
if (!waterBoundsInViewPort.IsEmpty())
scissor += waterBoundsInViewPort;
}
if (scissor.IsEmpty())
return scissor;
return CBoundingBoxAligned(
CVector3D(Clamp(scissor[0].X, -1.0f, 1.0f), Clamp(scissor[0].Y, -1.0f, 1.0f), -1.0f),
CVector3D(Clamp(scissor[1].X, -1.0f, 1.0f), Clamp(scissor[1].Y, -1.0f, 1.0f), 1.0f));