View Full Version : drawing a point with a GL_TRIANGLE

10-18-2012, 08:36 AM

I came across a problem in Galaxy Tab 2 with Android 4.0.4 using Open GL ES 2: it does not draw correctly when using GL_POINTS or GL_LINES, only with GL_TRIANGLES*. The coordinates for the points and lines are computed incorrectly. For example, drawing a line at 0,10 to 0,20 draws nothing.

The code works fine on other Samsung and Sony devices, but fails on the Tab2.

To bypass the problem, when i want to draw a set of pixels, i'm drawing filled rectangles with width/height=1.
However, i'm hitting a performance problem: the performance is now 2x worst, since, for each pixel, i have to draw 4 vertices.

This is the code to draw a filled rectangle, and the code to draw the pixel:

"attribute vec4 a_Position;" \
"uniform mat4 projectionMatrix;" \
"void main() {gl_PointSize = 1.0; gl_Position = a_Position*projectionMatrix;}"

"precision mediump float;" \
"uniform vec4 a_Color;" \
"void main() {gl_FragColor = a_Color;}"

lrpColor = glGetUniformLocation(lrpProgram, "a_Color");
lrpPosition = glGetAttribLocation(lrpProgram, "a_Position"); // get handle to vertex shader's vPosition member
glEnableVertexAttribArray(lrpPosition); // Enable a handle to the vertices - since this is the only one used, keep it enabled all the time

void glDrawPixel(int32 x, int32 y, int32 rgb)

void glFillRect(int32 x, int32 y, int32 w, int32 h, int32 rgb)
GLfloat* coords = lrcoords;
PixelConv pc;
pc.pixel = rgb;
coords[0] = coords[3] = x;
coords[1] = coords[10] = y;
coords[4] = coords[7] = y+h;
coords[6] = coords[9] = x+w;

glUniform4f(lrpColor, f255[pc.r], f255[pc.g], f255[pc.b], 1);
glVertexAttribPointer(lrpPosition, COORDS_PER_VERTEX, GL_FLOAT, GL_FALSE, COORDS_PER_VERTEX * sizeof(float), coords);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, rectOrder);

Does anyone knows how can i optimize this situation? I tried to draw 1 triangle to draw the single point, but i'm unable to get it working. Any clues on this?