1
0
forked from 0ad/0ad

Adds wireframe mode to overlays and replace the private m_TerrainRenderMode usages by related getter.

This was SVN commit r24143.
This commit is contained in:
Vladislav Belov 2020-11-08 11:31:32 +00:00
parent ad7ac8d595
commit 4b52e87934
6 changed files with 48 additions and 5 deletions

View File

@ -390,18 +390,21 @@ InReaction CGameView::HandleEvent(const SDL_Event_* ev)
g_Renderer.SetTerrainRenderMode(EDGED_FACES);
g_Renderer.SetWaterRenderMode(EDGED_FACES);
g_Renderer.SetModelRenderMode(EDGED_FACES);
g_Renderer.SetOverlayRenderMode(EDGED_FACES);
}
else if (g_Renderer.GetModelRenderMode() == EDGED_FACES)
{
g_Renderer.SetTerrainRenderMode(WIREFRAME);
g_Renderer.SetWaterRenderMode(WIREFRAME);
g_Renderer.SetModelRenderMode(WIREFRAME);
g_Renderer.SetOverlayRenderMode(WIREFRAME);
}
else
{
g_Renderer.SetTerrainRenderMode(SOLID);
g_Renderer.SetWaterRenderMode(SOLID);
g_Renderer.SetModelRenderMode(SOLID);
g_Renderer.SetOverlayRenderMode(SOLID);
}
return IN_HANDLED;
}

View File

@ -367,6 +367,9 @@ void OverlayRenderer::RenderOverlaysBeforeWater()
#if CONFIG2_GLES
#warning TODO: implement OverlayRenderer::RenderOverlaysBeforeWater for GLES
#else
if (g_Renderer.GetOverlayRenderMode() == WIREFRAME)
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
pglActiveTextureARB(GL_TEXTURE0);
glDisable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
@ -395,6 +398,9 @@ void OverlayRenderer::RenderOverlaysBeforeWater()
glLineWidth(1.f);
glDepthFunc(GL_LEQUAL);
glDisable(GL_BLEND);
if (g_Renderer.GetOverlayRenderMode() == WIREFRAME)
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
#endif
}
@ -483,6 +489,10 @@ void OverlayRenderer::RenderTexturedOverlayLines()
void OverlayRenderer::RenderTexturedOverlayLines(CShaderProgramPtr shader, bool alwaysVisible)
{
#if !CONFIG2_GLES
if (g_Renderer.GetOverlayRenderMode() == WIREFRAME)
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
#endif
for (size_t i = 0; i < m->texlines.size(); ++i)
{
SOverlayTexturedLine* line = m->texlines[i];
@ -494,6 +504,10 @@ void OverlayRenderer::RenderTexturedOverlayLines(CShaderProgramPtr shader, bool
ENSURE(line->m_RenderData);
line->m_RenderData->Render(*line, shader);
}
#if !CONFIG2_GLES
if (g_Renderer.GetOverlayRenderMode() == WIREFRAME)
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
#endif
}
void OverlayRenderer::RenderQuadOverlays()
@ -522,6 +536,11 @@ void OverlayRenderer::RenderQuadOverlays()
if (!shader)
return;
#if !CONFIG2_GLES
if (g_Renderer.GetOverlayRenderMode() == WIREFRAME)
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
#endif
pglActiveTextureARB(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
@ -584,6 +603,11 @@ void OverlayRenderer::RenderQuadOverlays()
glDepthMask(1);
glDisable(GL_BLEND);
#if !CONFIG2_GLES
if (g_Renderer.GetOverlayRenderMode() == WIREFRAME)
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
#endif
}
void OverlayRenderer::RenderForegroundOverlays(const CCamera& viewCamera)
@ -593,6 +617,9 @@ void OverlayRenderer::RenderForegroundOverlays(const CCamera& viewCamera)
#if CONFIG2_GLES
#warning TODO: implement OverlayRenderer::RenderForegroundOverlays for GLES
#else
if (g_Renderer.GetOverlayRenderMode() == WIREFRAME)
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
pglActiveTextureARB(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
@ -662,6 +689,9 @@ void OverlayRenderer::RenderForegroundOverlays(const CCamera& viewCamera)
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
if (g_Renderer.GetOverlayRenderMode() == WIREFRAME)
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
#endif
}

View File

@ -1467,7 +1467,7 @@ void CPatchRData::RenderWater(CShaderProgramPtr& shader, bool onlyShore, bool fi
return;
#if !CONFIG2_GLES
if (g_Renderer.m_WaterRenderMode == WIREFRAME)
if (g_Renderer.GetWaterRenderMode() == WIREFRAME)
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
#endif
@ -1515,7 +1515,7 @@ void CPatchRData::RenderWater(CShaderProgramPtr& shader, bool onlyShore, bool fi
CVertexBuffer::Unbind();
#if !CONFIG2_GLES
if (g_Renderer.m_WaterRenderMode == WIREFRAME)
if (g_Renderer.GetWaterRenderMode() == WIREFRAME)
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
#endif
}

View File

@ -422,6 +422,7 @@ CRenderer::CRenderer()
m_TerrainRenderMode = SOLID;
m_WaterRenderMode = SOLID;
m_ModelRenderMode = SOLID;
m_OverlayRenderMode = SOLID;
m_ClearColor[0] = m_ClearColor[1] = m_ClearColor[2] = m_ClearColor[3] = 0;
m_DisplayTerrainPriorities = false;

View File

@ -211,6 +211,11 @@ public:
// get the mode to render subsequent models
ERenderMode GetModelRenderMode() const { return m_ModelRenderMode; }
// Get the mode to render subsequent overlays.
ERenderMode GetOverlayRenderMode() const { return m_OverlayRenderMode; }
// Set the mode to render subsequent overlays.
void SetOverlayRenderMode(ERenderMode mode) { m_OverlayRenderMode = mode; }
// debugging
void SetDisplayTerrainPriorities(bool enabled) { m_DisplayTerrainPriorities = enabled; }
@ -358,12 +363,15 @@ protected:
int m_Width;
// view height
int m_Height;
// current terrain rendering mode
// Current terrain rendering mode.
ERenderMode m_TerrainRenderMode;
// current water rendering mode
// Current water rendering mode.
ERenderMode m_WaterRenderMode;
// current model rendering mode
// Current model rendering mode.
ERenderMode m_ModelRenderMode;
// Current overlay rendering mode.
ERenderMode m_OverlayRenderMode;
CShaderDefines m_SystemShaderDefines;

View File

@ -199,6 +199,7 @@ MESSAGEHANDLER(RenderStyle)
g_Renderer.SetTerrainRenderMode(msg->wireframe ? EDGED_FACES : SOLID);
g_Renderer.SetWaterRenderMode(msg->wireframe ? EDGED_FACES : SOLID);
g_Renderer.SetModelRenderMode(msg->wireframe ? EDGED_FACES : SOLID);
g_Renderer.SetOverlayRenderMode(msg->wireframe ? EDGED_FACES : SOLID);
}
}