Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/source/renderer/OverlayRenderer.cpp
Show All 13 Lines | |||||
* You should have received a copy of the GNU General Public License | * You should have received a copy of the GNU General Public License | ||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>. | * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "precompiled.h" | #include "precompiled.h" | ||||
#include "OverlayRenderer.h" | #include "OverlayRenderer.h" | ||||
#include "graphics/Camera.h" | |||||
#include "graphics/LOSTexture.h" | #include "graphics/LOSTexture.h" | ||||
#include "graphics/Overlay.h" | #include "graphics/Overlay.h" | ||||
#include "graphics/Terrain.h" | #include "graphics/Terrain.h" | ||||
#include "graphics/TextureManager.h" | #include "graphics/TextureManager.h" | ||||
#include "lib/hash.h" | #include "lib/hash.h" | ||||
#include "lib/ogl.h" | #include "lib/ogl.h" | ||||
#include "maths/MathUtil.h" | #include "maths/MathUtil.h" | ||||
#include "maths/Quaternion.h" | #include "maths/Quaternion.h" | ||||
▲ Show 20 Lines • Show All 420 Lines • ▼ Show 20 Lines | #endif | ||||
// ---------------------------------------------------------------------------------------- | // ---------------------------------------------------------------------------------------- | ||||
if (shaderTexLineNormal) | if (shaderTexLineNormal) | ||||
{ | { | ||||
shaderTexLineNormal->Bind(); | shaderTexLineNormal->Bind(); | ||||
shaderTexLineNormal->BindTexture(str_losTex, los.GetTexture()); | shaderTexLineNormal->BindTexture(str_losTex, los.GetTexture()); | ||||
shaderTexLineNormal->Uniform(str_losTransform, los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f); | shaderTexLineNormal->Uniform(str_losTransform, los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f); | ||||
shaderTexLineNormal->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); | |||||
// batch render only the non-always-visible overlay lines using the normal shader | // batch render only the non-always-visible overlay lines using the normal shader | ||||
RenderTexturedOverlayLines(shaderTexLineNormal, false); | RenderTexturedOverlayLines(shaderTexLineNormal, false); | ||||
shaderTexLineNormal->Unbind(); | shaderTexLineNormal->Unbind(); | ||||
} | } | ||||
// ---------------------------------------------------------------------------------------- | // ---------------------------------------------------------------------------------------- | ||||
if (shaderTexLineAlwaysVisible) | if (shaderTexLineAlwaysVisible) | ||||
{ | { | ||||
shaderTexLineAlwaysVisible->Bind(); | shaderTexLineAlwaysVisible->Bind(); | ||||
// TODO: losTex and losTransform are unused in the always visible shader; see if these can be safely omitted | // TODO: losTex and losTransform are unused in the always visible shader; see if these can be safely omitted | ||||
shaderTexLineAlwaysVisible->BindTexture(str_losTex, los.GetTexture()); | shaderTexLineAlwaysVisible->BindTexture(str_losTex, los.GetTexture()); | ||||
shaderTexLineAlwaysVisible->Uniform(str_losTransform, los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f); | shaderTexLineAlwaysVisible->Uniform(str_losTransform, los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f); | ||||
shaderTexLineAlwaysVisible->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); | |||||
// batch render only the always-visible overlay lines using the LoS-ignored shader | // batch render only the always-visible overlay lines using the LoS-ignored shader | ||||
RenderTexturedOverlayLines(shaderTexLineAlwaysVisible, true); | RenderTexturedOverlayLines(shaderTexLineAlwaysVisible, true); | ||||
shaderTexLineAlwaysVisible->Unbind(); | shaderTexLineAlwaysVisible->Unbind(); | ||||
} | } | ||||
// ---------------------------------------------------------------------------------------- | // ---------------------------------------------------------------------------------------- | ||||
▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | #endif | ||||
glDepthMask(0); | glDepthMask(0); | ||||
CLOSTexture& los = g_Renderer.GetScene().GetLOSTexture(); | CLOSTexture& los = g_Renderer.GetScene().GetLOSTexture(); | ||||
shader->Bind(); | shader->Bind(); | ||||
shader->BindTexture(str_losTex, los.GetTexture()); | shader->BindTexture(str_losTex, los.GetTexture()); | ||||
shader->Uniform(str_losTransform, los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f); | shader->Uniform(str_losTransform, los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f); | ||||
shader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); | |||||
// Base offsets (in bytes) of the two backing stores relative to their owner VBO | // Base offsets (in bytes) of the two backing stores relative to their owner VBO | ||||
u8* indexBase = m->quadIndices.Bind(); | u8* indexBase = m->quadIndices.Bind(); | ||||
u8* vertexBase = m->quadVertices.Bind(); | u8* vertexBase = m->quadVertices.Bind(); | ||||
GLsizei indexStride = m->quadIndices.GetStride(); | GLsizei indexStride = m->quadIndices.GetStride(); | ||||
GLsizei vertexStride = m->quadVertices.GetStride(); | GLsizei vertexStride = m->quadVertices.GetStride(); | ||||
for (OverlayRendererInternals::QuadBatchMap::iterator it = m->quadBatchMap.begin(); it != m->quadBatchMap.end(); ++it) | for (OverlayRendererInternals::QuadBatchMap::iterator it = m->quadBatchMap.begin(); it != m->quadBatchMap.end(); ++it) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | #else | ||||
glEnableClientState(GL_VERTEX_ARRAY); | glEnableClientState(GL_VERTEX_ARRAY); | ||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY); | glEnableClientState(GL_TEXTURE_COORD_ARRAY); | ||||
CShaderTechniquePtr tech = g_Renderer.GetShaderManager().LoadEffect(str_foreground_overlay); | CShaderTechniquePtr tech = g_Renderer.GetShaderManager().LoadEffect(str_foreground_overlay); | ||||
tech->BeginPass(); | tech->BeginPass(); | ||||
CShaderProgramPtr shader = tech->GetShader(); | CShaderProgramPtr shader = tech->GetShader(); | ||||
shader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); | |||||
float uvs[8] = { 0,1, 1,1, 1,0, 0,0 }; | float uvs[8] = { 0,1, 1,1, 1,0, 0,0 }; | ||||
shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, sizeof(float)*2, &uvs[0]); | shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, sizeof(float)*2, &uvs[0]); | ||||
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 (!i || sprite->m_Texture != m->sprites[i - 1]->m_Texture) | |||||
shader->BindTexture(str_baseTex, sprite->m_Texture); | shader->BindTexture(str_baseTex, sprite->m_Texture); | ||||
if (shader) | |||||
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 | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 137 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator