From 3f9b52e555b860247cccfd21814a6ad7e8df4df8 Mon Sep 17 00:00:00 2001 From: degasus Date: Sat, 20 Dec 2014 13:31:41 +0100 Subject: [PATCH] OGL: draw shadows within rasterfont itself --- Source/Core/VideoBackends/D3D/Render.cpp | 1 + Source/Core/VideoBackends/OGL/RasterFont.cpp | 18 ++++++++++-------- Source/Core/VideoBackends/OGL/RasterFont.h | 2 +- Source/Core/VideoCommon/OnScreenDisplay.cpp | 1 - Source/Core/VideoCommon/RenderBase.cpp | 3 --- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Render.cpp b/Source/Core/VideoBackends/D3D/Render.cpp index 3cd64ba6a0..84b83ef1f0 100644 --- a/Source/Core/VideoBackends/D3D/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Render.cpp @@ -275,6 +275,7 @@ Renderer::~Renderer() void Renderer::RenderText(const std::string& text, int left, int top, u32 color) { + D3D::font.DrawTextScaled((float)(left+1), (float)(top+1), 20.f, 0.0f, color & 0xFF000000, text); D3D::font.DrawTextScaled((float)left, (float)top, 20.f, 0.0f, color, text); } diff --git a/Source/Core/VideoBackends/OGL/RasterFont.cpp b/Source/Core/VideoBackends/OGL/RasterFont.cpp index 265c444e45..d7fdacbfcb 100644 --- a/Source/Core/VideoBackends/OGL/RasterFont.cpp +++ b/Source/Core/VideoBackends/OGL/RasterFont.cpp @@ -118,11 +118,12 @@ static const u8 rasters[CHAR_COUNT][CHAR_HEIGHT] = { static const char *s_vertexShaderSrc = "uniform vec2 charSize;\n" + "uniform vec2 offset;" "in vec2 rawpos;\n" "in vec2 tex0;\n" "out vec2 uv0;\n" "void main(void) {\n" - " gl_Position = vec4(rawpos,0,1);\n" + " gl_Position = vec4(rawpos + offset,0,1);\n" " uv0 = tex0 * charSize;\n" "}\n"; @@ -166,7 +167,8 @@ RasterFont::RasterFont() glUniform2f(glGetUniformLocation(s_shader.glprogid,"charSize"), 1.0f / GLfloat(CHAR_COUNT), 1.0f); uniform_color_id = glGetUniformLocation(s_shader.glprogid,"color"); glUniform4f(uniform_color_id, 1.0f, 1.0f, 1.0f, 1.0f); - cached_color = -1; + uniform_offset_id = glGetUniformLocation(s_shader.glprogid, "offset"); + glUniform2f(uniform_offset_id, 0.0f, 0.0f); // generate VBO & VAO glGenBuffers(1, &VBO); @@ -263,13 +265,13 @@ void RasterFont::printMultilineText(const std::string& text, double start_x, dou s_shader.Bind(); - if (color != cached_color) - { - glUniform4f(uniform_color_id, GLfloat((color>>16)&0xff)/255.f,GLfloat((color>>8)&0xff)/255.f,GLfloat((color>>0)&0xff)/255.f,GLfloat((color>>24)&0xff)/255.f); - cached_color = color; - } + // shadows + glUniform2f(uniform_offset_id, 2.0f / GLfloat(bbWidth), -2.0f / GLfloat(bbHeight)); + glUniform4f(uniform_color_id, 0.0f, 0.0f, 0.0f, GLfloat((color>>24)&0xff)/255.f); + glDrawArrays(GL_TRIANGLES, 0, usage/4); - glActiveTexture(GL_TEXTURE0+8); + glUniform2f(uniform_offset_id, 0.0f, 0.0f); + glUniform4f(uniform_color_id, GLfloat((color>>16)&0xff)/255.f,GLfloat((color>>8)&0xff)/255.f,GLfloat((color>>0)&0xff)/255.f,GLfloat((color>>24)&0xff)/255.f); glDrawArrays(GL_TRIANGLES, 0, usage/4); } diff --git a/Source/Core/VideoBackends/OGL/RasterFont.h b/Source/Core/VideoBackends/OGL/RasterFont.h index ddf6884913..a18ed58175 100644 --- a/Source/Core/VideoBackends/OGL/RasterFont.h +++ b/Source/Core/VideoBackends/OGL/RasterFont.h @@ -25,7 +25,7 @@ private: u32 VAO; u32 texture; u32 uniform_color_id; - u32 cached_color; + u32 uniform_offset_id; }; } diff --git a/Source/Core/VideoCommon/OnScreenDisplay.cpp b/Source/Core/VideoCommon/OnScreenDisplay.cpp index 0b553c12d2..b25f461336 100644 --- a/Source/Core/VideoCommon/OnScreenDisplay.cpp +++ b/Source/Core/VideoCommon/OnScreenDisplay.cpp @@ -56,7 +56,6 @@ void DrawMessages() alpha <<= 24; - g_renderer->RenderText(it->str, left + 1, top + 1, 0x000000 | alpha); g_renderer->RenderText(it->str, left, top, 0xffff30 | alpha); top += 15; diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp index 6fe9261063..8db728842f 100644 --- a/Source/Core/VideoCommon/RenderBase.cpp +++ b/Source/Core/VideoCommon/RenderBase.cpp @@ -417,9 +417,6 @@ void Renderer::DrawDebugText() if (g_ActiveConfig.bOverlayProjStats) final_cyan += Statistics::ToStringProj(); - // Render a shadow - g_renderer->RenderText(final_cyan, 21, 21, 0xDD000000); - g_renderer->RenderText(final_yellow, 21, 21, 0xDD000000); //and then the text g_renderer->RenderText(final_cyan, 20, 20, 0xFF00FFFF); g_renderer->RenderText(final_yellow, 20, 20, 0xFFFFFF00);