OpenGL ES 2 text rendering bug

Started by
2 comments, last by Jawline 11 years, 5 months ago
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_ES
precision lowp float;
#endif

varying 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.
Advertisement
My first guess would be that you're rendering without blending enabled. Try shoving in:

glEnable(GL_ALPHA_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Somewhere, and see if that makes a difference. If that doesn't fix it, try adding:

glDisable(GL_DEPTH_TEST);

too.
Hi thanks for responding. I have alpha enabled - sorry I would have screenshotted but its on android and ddms is a pain. I'll try changing the depth test settings and seeing the result.
Depth test solved it, thank you!

This topic is closed to new replies.

Advertisement