我遇到了一个奇怪的问题,我想更新包含大约一百万个元素(顶点)的数组缓冲区,所以我调用了glMapBuffer(...),对某些元素进行了一些操作,然后调用了glUnmapBuffer(...),但此后我的程序变慢了即使我不时进行一次此操作也可以。
这是代码

        gl.glBindBuffer(gl.GL_ARRAY_BUFFER, VBOVertices[0]);

        ByteBuffer verticesByteBuffer = gl.glMapBuffer(gl.GL_ARRAY_BUFFER, gl.GL_WRITE_ONLY);

        FloatBuffer verticesBuffer = verticesByteBuffer.asFloatBuffer();

        for(int i=0;i<verticesToBeChanged.size();i++) {
            int vertexId = verticesToBeChanged.get(i);
            verticesBuffer.position(vertexId*8);
            verticesBuffer.put(vertices[vertexId].position.x);
            verticesBuffer.put(vertices[vertexId].position.y);
            verticesBuffer.put(vertices[vertexId].position.z);
        }
        gl.glUnmapBuffer(gl.GL_ARRAY_BUFFER);


我是在做错什么,还是对大型数据集起作用?
我不能使用glMapBufferRange(...)方法,因为它在JOGL中不存在。

最佳答案

在JOGL 2中存在glMapBufferRange:
http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/javax/media/opengl/GL.html#glMapBufferRange(int,%20long,%20long,%20int)

07-24 09:37