Im trying to display some points on the screen with opengl es.
here is the code of ondraw:
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glColor4f(0, 255, 0, 0);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, buffer);
gl.glDrawArrays(GL10.GL_POINTS, 0, points.length);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
Can someone tell me what I’m doing wrong???
EDIT: the code to generate the buffer and points
points = new float[12288];
int pos = 0;
for (float y = 0; y < 64; y++) {
for (float x = 0; x < 64; x++) {
points[pos++] = x/100;
points[pos++] = y/100;
points[pos++] = 0;
}
}
ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(points.length * 4);
vertexByteBuffer.order(ByteOrder.nativeOrder());
// allocates the memory from the byte buffer
buffer = vertexByteBuffer.asFloatBuffer();
// fill the vertexBuffer with the vertices
buffer.put(points);
// set the cursor position to the beginning of the buffer
buffer.position(0);
and the error at logcat:
04-17 06:38:11.296: A/libc(24276): Fatal signal 11 (SIGSEGV) at 0x41719000 (code=2)
This error happens at gl.glDrawArrays
I believe this is the problem:
gl.glDrawArrays(GL10.GL_POINTS, 0, points.length);glDrawArraystakes the number of vertices that you want to draw. You are giving it the number of floats, which is 3x too big. Therefore opengl is actually attempting to read 12288 vertices = 36,xxx floats from your points array, which way exceeds the bounds of your array.