Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


Jawline

Member Since 26 Nov 2012
Offline Last Active Nov 27 2012 09:24 AM

Topics I've Started

OpenGL ES 2 text rendering bug

26 November 2012 - 07:03 PM

I'm drawing text in OpenGL ES 2.0, I have loaded in the textures from truetype fonts and draw them as two triangles. My issue is that when two characters overlap (For example say writing Team the triangles drawn textured with a and m overlap) then for some reason only one letter shows up, so with respect to the example above you would see the a and half of the e cut off up until the a texture ends. I used the same technique with OpenGL 1 in an old project (Without shaders) and didn't have issues (Both characters showed up fine).

The code that draws each character is
[source lang="cpp"] //Get a pointer to the drawBuffers vertices to manipulate float vertices[4 * 3]; // = drawBuffer->getVertices(); //Set the drawBuffers vertices vertices[0] = X + offsetX; vertices[1] = Y + offsetY; vertices[2] = 0; vertices[3] = X + offsetX; vertices[4] = Y + Height + offsetY; vertices[5] = 0; vertices[6] = X + Width + offsetX; vertices[7] = Y + Height + offsetY; vertices[8] = 0; vertices[9] = X + Width + offsetX; vertices[10] = Y + offsetY; vertices[11] = 0; float tex[4 * 2]; tex[0] = 0; tex[1] = 0; tex[2] = 0; tex[3] = 1; tex[4] = 1; tex[5] = 1; tex[6] = 1; tex[7] = 0; unsigned short indices[6] = { 0, 1, 2, 2, 3, 0 }; fontShader->MakeActive(); fontShader->SetMVP(projection.Multiply(view)); fontShader->SetVertices(vertices, 4, 3 * sizeof(float)); fontShader->SetTextureCoords(tex, 4, 2 * sizeof(float)); fontShader->SetBaseTexture(CharList[Char].charTexture); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);[/source]

and the shader for the UI is

[source lang="cpp"][START FRAGMENT]#ifdef GL_ESprecision lowp float;#endifvarying vec2 v_Tc;uniform sampler2D u_BaseTexture;void main() { gl_FragColor = texture2D(u_BaseTexture, v_Tc);}[END FRAGMENT][START VERTEX]uniform mat4 u_MVP;attribute vec3 a_Vertex;varying vec2 v_Tc;attribute vec2 a_TexCoord;void main() { v_Tc = a_TexCoord; vec4 position = vec4(a_Vertex.xyz, 1.0); gl_Position = u_MVP * position;}[END VERTEX][/source]

any insight into this issue would be invaluable.

PARTNERS