我试图用opengl es在屏幕上显示一些点。
以下是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);

有人能告诉我我做错了什么吗????
编辑:生成缓冲区和点的代码
    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);

以及logcat的错误:
04-17 06:38:11.296:a/libc(24276):致命信号11(sigsegv),位于0x41719000(代码=2)
此错误发生在gl.gldrawArrays

最佳答案

我相信这就是问题所在:
gl.glDrawArrays(GL10.GL_POINTS, 0, points.length);
glDrawArrays获取要绘制的顶点数。你给它浮点数,它太大了3倍。因此opengl实际上试图从点数组中读取12288个顶点=36xxx个浮点,这超出了数组的边界。

关于android - Android-为什么我收到致命信号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10183861/

10-10 09:45