From: David Gow Date: Tue, 17 Jun 2014 02:14:44 +0000 (+0800) Subject: Fix RenderPixels, CPU rendering "works" X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=8942bd699d8e1ddede1127421ad18bed53232ff3;p=ipdf%2Fcode.git Fix RenderPixels, CPU rendering "works" --- diff --git a/bin/ipdf b/bin/ipdf index 1d17b2d..d536a81 100755 Binary files a/bin/ipdf and b/bin/ipdf differ diff --git a/src/ipdf.h b/src/ipdf.h index 5a4f35c..211f2c3 100644 --- a/src/ipdf.h +++ b/src/ipdf.h @@ -22,9 +22,9 @@ namespace IPDF */ typedef enum { - RECT_FILLED = 0, + CIRCLE_FILLED = 0, + RECT_FILLED, RECT_OUTLINE, - CIRCLE_FILLED, NUMBER_OF_OBJECT_TYPES } ObjectType; diff --git a/src/screen.cpp b/src/screen.cpp index 08e4a26..dc59de9 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -76,7 +76,13 @@ Screen::Screen() GLint texture_uniform_location = m_texture_prog.GetUniformLocation("tex"); glUniform1i(texture_uniform_location, 0); - m_colour_uniform_location = m_texture_prog.GetUniformLocation("colour"); + m_font_prog.InitialiseShaders(BASICTEX_VERT, "shaders/fonttex_frag.glsl"); + m_font_prog.Use(); + + // We always want to use the texture bound to texture unit 0. + GLint font_texture_uniform_location = m_font_prog.GetUniformLocation("tex"); + glUniform1i(font_texture_uniform_location, 0); + m_colour_uniform_location = m_font_prog.GetUniformLocation("colour"); m_viewport_ubo.SetUsage(GraphicsBuffer::BufferUsageDynamicDraw); m_viewport_ubo.SetType(GraphicsBuffer::BufferTypeUniform); @@ -228,8 +234,8 @@ void Screen::RenderPixels(int x, int y, int w, int h, uint8_t *pixels) const GLfloat quad[] = { 0, 0, (float)x, (float)y, 1, 0, (float)(x+w), (float)y, - 1, 1, (float)(x+w), (float)(y+h), - 0, 1, (float)x, (float)(y+h) + 0, 1, (float)x, (float)(y+h), + 1, 1, (float)(x+w), (float)(y+h) }; quad_vertex_buffer.Upload(sizeof(GLfloat) * 16, quad); quad_vertex_buffer.Bind(); @@ -246,15 +252,15 @@ void Screen::RenderPixels(int x, int y, int w, int h, uint8_t *pixels) const glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, texture_format, GL_UNSIGNED_BYTE, pixels); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, texture_format, GL_UNSIGNED_BYTE, pixels); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), (void*)(2*sizeof(float))); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), 0); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDisableVertexAttribArray(1); glDisableVertexAttribArray(0); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } @@ -408,7 +414,7 @@ void Screen::DebugFontFlush() glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBindTexture(GL_TEXTURE_2D, m_debug_font_atlas); - m_texture_prog.Use(); + m_font_prog.Use(); m_viewport_ubo.Bind(); m_debug_font_vertices.Bind(); m_debug_font_indices.Bind(); diff --git a/src/screen.h b/src/screen.h index c76a554..a034d2a 100644 --- a/src/screen.h +++ b/src/screen.h @@ -84,6 +84,7 @@ namespace IPDF SDL_Window *m_window; SDL_GLContext m_gl_context; ShaderProgram m_texture_prog; + ShaderProgram m_font_prog; GLint m_colour_uniform_location; GraphicsBuffer m_viewport_ubo; stbtt_bakedchar m_debug_font_rects[96]; diff --git a/src/shaders/basictex_frag.glsl b/src/shaders/basictex_frag.glsl index 534ff02..b7dfe19 100644 --- a/src/shaders/basictex_frag.glsl +++ b/src/shaders/basictex_frag.glsl @@ -9,7 +9,6 @@ uniform vec4 colour; void main() { - output_colour = colour; - output_colour.a = texture(tex, fp_tex_coord).r; + output_colour = texture(tex, fp_tex_coord) * colour; } diff --git a/src/shaders/fonttex_frag.glsl b/src/shaders/fonttex_frag.glsl new file mode 100644 index 0000000..534ff02 --- /dev/null +++ b/src/shaders/fonttex_frag.glsl @@ -0,0 +1,15 @@ +#version 140 + +in vec2 fp_tex_coord; + +out vec4 output_colour; + +uniform sampler2D tex; +uniform vec4 colour; + +void main() +{ + output_colour = colour; + output_colour.a = texture(tex, fp_tex_coord).r; +} +