Changeset View
Changeset View
Standalone View
Standalone View
source/renderer/OverlayRenderer.cpp
/* Copyright (C) 2015 Wildfire Games. | /* Copyright (C) 2019 Wildfire Games. | ||||
* This file is part of 0 A.D. | * This file is part of 0 A.D. | ||||
* | * | ||||
* 0 A.D. is free software: you can redistribute it and/or modify | * 0 A.D. is free software: you can redistribute it and/or modify | ||||
* it under the terms of the GNU General Public License as published by | * it under the terms of the GNU General Public License as published by | ||||
* the Free Software Foundation, either version 2 of the License, or | * the Free Software Foundation, either version 2 of the License, or | ||||
* (at your option) any later version. | * (at your option) any later version. | ||||
* | * | ||||
* 0 A.D. is distributed in the hope that it will be useful, | * 0 A.D. is distributed in the hope that it will be useful, | ||||
▲ Show 20 Lines • Show All 404 Lines • ▼ Show 20 Lines | #endif | ||||
ogl_WarnIfError(); | ogl_WarnIfError(); | ||||
pglActiveTextureARB(GL_TEXTURE0); | pglActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glEnable(GL_BLEND); | glEnable(GL_BLEND); | ||||
glDepthMask(0); | glDepthMask(0); | ||||
const char* shaderName; | const char* shaderName; | ||||
if (g_Renderer.GetRenderPath() == CRenderer::RP_SHADER) | if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER) | ||||
shaderName = "arb/overlayline"; | shaderName = "arb/overlayline"; | ||||
else | else | ||||
shaderName = "fixed:overlayline"; | shaderName = "fixed:overlayline"; | ||||
CLOSTexture& los = g_Renderer.GetScene().GetLOSTexture(); | CLOSTexture& los = g_Renderer.GetScene().GetLOSTexture(); | ||||
CShaderManager& shaderManager = g_Renderer.GetShaderManager(); | CShaderManager& shaderManager = g_Renderer.GetShaderManager(); | ||||
CShaderProgramPtr shaderTexLineNormal(shaderManager.LoadProgram(shaderName, m->defsOverlayLineNormal)); | CShaderProgramPtr shaderTexLineNormal(shaderManager.LoadProgram(shaderName, m->defsOverlayLineNormal)); | ||||
▲ Show 20 Lines • Show All 67 Lines • ▼ Show 20 Lines | #endif | ||||
ogl_WarnIfError(); | ogl_WarnIfError(); | ||||
pglActiveTextureARB(GL_TEXTURE0); | pglActiveTextureARB(GL_TEXTURE0); | ||||
glEnable(GL_TEXTURE_2D); | glEnable(GL_TEXTURE_2D); | ||||
glEnable(GL_BLEND); | glEnable(GL_BLEND); | ||||
glDepthMask(0); | glDepthMask(0); | ||||
const char* shaderName; | const char* shaderName; | ||||
if (g_Renderer.GetRenderPath() == CRenderer::RP_SHADER) | if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER) | ||||
shaderName = "arb/overlayline"; | shaderName = "arb/overlayline"; | ||||
else | else | ||||
shaderName = "fixed:overlayline"; | shaderName = "fixed:overlayline"; | ||||
CLOSTexture& los = g_Renderer.GetScene().GetLOSTexture(); | CLOSTexture& los = g_Renderer.GetScene().GetLOSTexture(); | ||||
CShaderManager& shaderManager = g_Renderer.GetShaderManager(); | CShaderManager& shaderManager = g_Renderer.GetShaderManager(); | ||||
CShaderProgramPtr shader(shaderManager.LoadProgram(shaderName, m->defsQuadOverlay)); | CShaderProgramPtr shader(shaderManager.LoadProgram(shaderName, m->defsQuadOverlay)); | ||||
▲ Show 20 Lines • Show All 80 Lines • ▼ Show 20 Lines | #else | ||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f); | glColor4f(1.0f, 1.0f, 1.0f, 1.0f); | ||||
glEnableClientState(GL_VERTEX_ARRAY); | glEnableClientState(GL_VERTEX_ARRAY); | ||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY); | glEnableClientState(GL_TEXTURE_COORD_ARRAY); | ||||
CShaderProgramPtr shader; | CShaderProgramPtr shader; | ||||
CShaderTechniquePtr tech; | CShaderTechniquePtr tech; | ||||
if (g_Renderer.GetRenderPath() == CRenderer::RP_SHADER) | if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER) | ||||
{ | { | ||||
tech = g_Renderer.GetShaderManager().LoadEffect(str_foreground_overlay); | tech = g_Renderer.GetShaderManager().LoadEffect(str_foreground_overlay); | ||||
tech->BeginPass(); | tech->BeginPass(); | ||||
shader = tech->GetShader(); | shader = tech->GetShader(); | ||||
} | } | ||||
float uvs[8] = { 0,1, 1,1, 1,0, 0,0 }; | float uvs[8] = { 0,1, 1,1, 1,0, 0,0 }; | ||||
if (g_Renderer.GetRenderPath() == CRenderer::RP_SHADER) | if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER) | ||||
shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, sizeof(float)*2, &uvs[0]); | shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, sizeof(float)*2, &uvs[0]); | ||||
else | else | ||||
glTexCoordPointer(2, GL_FLOAT, sizeof(float)*2, &uvs); | glTexCoordPointer(2, GL_FLOAT, sizeof(float)*2, &uvs); | ||||
for (size_t i = 0; i < m->sprites.size(); ++i) | for (size_t i = 0; i < m->sprites.size(); ++i) | ||||
{ | { | ||||
SOverlaySprite* sprite = m->sprites[i]; | SOverlaySprite* sprite = m->sprites[i]; | ||||
if (g_Renderer.GetRenderPath() == CRenderer::RP_SHADER) | if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER) | ||||
shader->BindTexture(str_baseTex, sprite->m_Texture); | shader->BindTexture(str_baseTex, sprite->m_Texture); | ||||
else | else | ||||
sprite->m_Texture->Bind(); | sprite->m_Texture->Bind(); | ||||
shader->Uniform(str_colorMul, sprite->m_Color); | shader->Uniform(str_colorMul, sprite->m_Color); | ||||
CVector3D pos[4] = { | CVector3D pos[4] = { | ||||
sprite->m_Position + right*sprite->m_X0 + up*sprite->m_Y0, | sprite->m_Position + right*sprite->m_X0 + up*sprite->m_Y0, | ||||
sprite->m_Position + right*sprite->m_X1 + up*sprite->m_Y0, | sprite->m_Position + right*sprite->m_X1 + up*sprite->m_Y0, | ||||
sprite->m_Position + right*sprite->m_X1 + up*sprite->m_Y1, | sprite->m_Position + right*sprite->m_X1 + up*sprite->m_Y1, | ||||
sprite->m_Position + right*sprite->m_X0 + up*sprite->m_Y1 | sprite->m_Position + right*sprite->m_X0 + up*sprite->m_Y1 | ||||
}; | }; | ||||
if (g_Renderer.GetRenderPath() == CRenderer::RP_SHADER) | if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER) | ||||
shader->VertexPointer(3, GL_FLOAT, sizeof(float)*3, &pos[0].X); | shader->VertexPointer(3, GL_FLOAT, sizeof(float)*3, &pos[0].X); | ||||
else | else | ||||
glVertexPointer(3, GL_FLOAT, sizeof(float)*3, &pos[0].X); | glVertexPointer(3, GL_FLOAT, sizeof(float)*3, &pos[0].X); | ||||
glDrawArrays(GL_QUADS, 0, (GLsizei)4); | glDrawArrays(GL_QUADS, 0, (GLsizei)4); | ||||
g_Renderer.GetStats().m_DrawCalls++; | g_Renderer.GetStats().m_DrawCalls++; | ||||
g_Renderer.GetStats().m_OverlayTris += 2; | g_Renderer.GetStats().m_OverlayTris += 2; | ||||
} | } | ||||
if (g_Renderer.GetRenderPath() == CRenderer::RP_SHADER) | if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER) | ||||
tech->EndPass(); | tech->EndPass(); | ||||
glDisableClientState(GL_VERTEX_ARRAY); | glDisableClientState(GL_VERTEX_ARRAY); | ||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY); | glDisableClientState(GL_TEXTURE_COORD_ARRAY); | ||||
glEnable(GL_DEPTH_TEST); | glEnable(GL_DEPTH_TEST); | ||||
glDisable(GL_BLEND); | glDisable(GL_BLEND); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | |||||
void OverlayRenderer::RenderSphereOverlays() | void OverlayRenderer::RenderSphereOverlays() | ||||
{ | { | ||||
PROFILE3_GPU("overlays (spheres)"); | PROFILE3_GPU("overlays (spheres)"); | ||||
#if CONFIG2_GLES | #if CONFIG2_GLES | ||||
#warning TODO: implement OverlayRenderer::RenderSphereOverlays for GLES | #warning TODO: implement OverlayRenderer::RenderSphereOverlays for GLES | ||||
#else | #else | ||||
if (g_Renderer.GetRenderPath() != CRenderer::RP_SHADER) | if (g_RenderingOptions.GetRenderPath() != RenderPath::SHADER) | ||||
return; | return; | ||||
if (m->spheres.empty()) | if (m->spheres.empty()) | ||||
return; | return; | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
glEnable(GL_BLEND); | glEnable(GL_BLEND); | ||||
glDepthMask(0); | glDepthMask(0); | ||||
▲ Show 20 Lines • Show All 41 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator