summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/RasterFont.cpp
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2014-12-20 13:31:41 +0100
committerdegasus <wickmarkus@web.de>2014-12-20 13:31:41 +0100
commit3f9b52e555b860247cccfd21814a6ad7e8df4df8 (patch)
tree6ddf0179adb506f015b8d6ecf6360c87ef6c0fc7 /Source/Core/VideoBackends/OGL/RasterFont.cpp
parentfb177ca04e4460801e19aa39e5868698b855aa83 (diff)
OGL: draw shadows within rasterfont itself
Diffstat (limited to 'Source/Core/VideoBackends/OGL/RasterFont.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/RasterFont.cpp18
1 files changed, 10 insertions, 8 deletions
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);
}