Jump to content

  • Log In with Google      Sign In   
  • Create Account

OpenGL ES 2 text rendering bug


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 Jawline   Members   -  Reputation: 101

Like
0Likes
Like

Posted 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.

Edited by Jawline, 26 November 2012 - 07:04 PM.


Sponsor:

#2 C0lumbo   Crossbones+   -  Reputation: 2279

Like
0Likes
Like

Posted 27 November 2012 - 03:00 AM

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.

#3 Jawline   Members   -  Reputation: 101

Like
0Likes
Like

Posted 27 November 2012 - 03:45 AM

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.

#4 Jawline   Members   -  Reputation: 101

Like
0Likes
Like

Posted 27 November 2012 - 06:18 AM

Depth test solved it, thank you!




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS