Fix RenderPixels, CPU rendering "works"
authorDavid Gow <david@ingeniumdigital.com>
Tue, 17 Jun 2014 02:14:44 +0000 (10:14 +0800)
committerDavid Gow <david@ingeniumdigital.com>
Tue, 17 Jun 2014 02:14:44 +0000 (10:14 +0800)
bin/ipdf
src/ipdf.h
src/screen.cpp
src/screen.h
src/shaders/basictex_frag.glsl
src/shaders/fonttex_frag.glsl [new file with mode: 0644]

index 1d17b2d..d536a81 100755 (executable)
Binary files a/bin/ipdf and b/bin/ipdf differ
index 5a4f35c..211f2c3 100644 (file)
@@ -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;
 
index 08e4a26..dc59de9 100644 (file)
@@ -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();
index c76a554..a034d2a 100644 (file)
@@ -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];
index 534ff02..b7dfe19 100644 (file)
@@ -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 (file)
index 0000000..534ff02
--- /dev/null
@@ -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;
+}
+

UCC git Repository :: git.ucc.asn.au