//length > 0 for all cases
ByteBuffer oldBuffer=BufferUtils.createByteBuffer(length);
ByteBuffer newBuffer=GL30.glMapBufferRange(GL15.GL_ARRAY_BUFFER,0,length,GL30.GL_MAP_READ_BIT ,oldBuffer);
for(int i=0;i<length;i++){System.out.println(oldBuffer.get(i));}
System.out.println();
它打印出所有的零,但是新的缓冲区包含正确的数据。如果我指定null作为旧缓冲区的参数,它也可以正常工作。
那么,当使用非空的旧缓冲区时,是否有任何优化/内存节省在幕后进行?lwjgl 2.9.3和3.1.3的输出相同
1条答案
按热度按时间ippsafx71#
这是lwjgl特定的优化。它的目的是避免在opengl返回以前作为nio缓冲区返回的相同地址时,必须分配一个指向Map地址的新nio缓冲区对象,您现在提供的地址是
old_buffer
.另请参见gl15c.glmapbuffer()的lwjgl 3源代码以及调用的apiutil.apigetmappedbuffer()。
但是,当opengl驱动程序决定将缓冲区内存Map到另一个虚拟地址时,仍然会得到一个新的/新的nio缓冲区示例。