JOGL - 在大型数组缓冲区上调用glMapBuffer后性能低下

时间:2014-01-19 20:49:13

标签: java opengl jogl

我有一个奇怪的问题,我想更新包含大约五十万个元素(顶点)的数组缓冲区,所以我调用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中不存在。