Android - Why am I getting a fatal signal?

Im trying to display some dots on the screen with opengl es. here is the ondraw code:

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: code for creating a 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 error in logcat:

04-17 06: 38: 11.296: A / libc (24276): fatal signal 11 (SIGSEGV) at 0x41719000 (code = 2)

This error occurs in gl.glDrawArrays

+3
source share
2 answers

I believe this is a problem:

gl.glDrawArrays(GL10.GL_POINTS, 0, points.length);

glDrawArraystakes the number of vertices you want to draw. You give him the number of floaters , which is 3 times more. So opengl is actually trying to read 12,288 vertices = 36, xxx floats from your array of points, which far exceeds the bounds of your array.

+2

: glBindBuffer, glDrawArrays; segfault.

, IBO- glBindBuffer. , :

GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, common.vbo);
GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, common.ibo);

GLES20.glVertexAttribPointer(handleManager.switchPosition, 2, GLES20.GL_FLOAT, false, 0, 0);
GLES20.glEnableVertexAttribArray(handleManager.switchPosition);

GLES20.glDrawElements(GLES20.GL_TRIANGLES, common.iboPointCount, GLES20.GL_UNSIGNED_BYTE, 0);

GLES20.glDisableVertexAttribArray(handleManager.switchPosition);

GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);

glBindBuffer , .

-1

All Articles