Java LWJGL:glMapBuffer/Range旧缓冲区的用途是什么? //对于所有情况,长度>0 ByteBuffer oldBuffer=BufferUtils.createByteBuffer(长度); ByteBuffer newBuffer=GL30.glMapBufferRange(GL15.GL_数组_缓冲区,0,长度,GL30.GL_映射_读取_位,oldBuffer); 对于(int i=0;i

Java LWJGL:glMapBuffer/Range旧缓冲区的用途是什么? //对于所有情况,长度>0 ByteBuffer oldBuffer=BufferUtils.createByteBuffer(长度); ByteBuffer newBuffer=GL30.glMapBufferRange(GL15.GL_数组_缓冲区,0,长度,GL30.GL_映射_读取_位,oldBuffer); 对于(int i=0;i,java,opengl,lwjgl,Java,Opengl,Lwjgl,这是一个LWJGL特定的优化。它旨在避免在OpenGL返回以前作为NIO缓冲区返回的相同地址时,必须分配一个指向映射地址的新NIO缓冲区对象,您现在将其作为old_Buffer提供 另请参见LWJGL 3的来源以及所调用的 但是,当OpenGL驱动程序决定将缓冲区内存映射到另一个虚拟地址时,您仍然会得到一个新的/新的NIO缓冲区实例。那么,我应该创建自己的bytebuffer并将其用作oldBuffer参数,还是应该使用glMapBuffer返回的bytebuffer[假设它有特殊内存]或者它不

这是一个LWJGL特定的优化。它旨在避免在OpenGL返回以前作为NIO缓冲区返回的相同地址时,必须分配一个指向映射地址的新NIO缓冲区对象,您现在将其作为
old_Buffer
提供

另请参见LWJGL 3的来源以及所调用的


但是,当OpenGL驱动程序决定将缓冲区内存映射到另一个虚拟地址时,您仍然会得到一个新的/新的NIO缓冲区实例。

那么,我应该创建自己的bytebuffer并将其用作oldBuffer参数,还是应该使用glMapBuffer返回的bytebuffer[假设它有特殊内存]或者它不会产生差异吗?它还会写[如果/当它产生差异时]进入与我在该缓冲区中指定的位置相同的位置,或者当它写入时缓冲区位置会改变吗?
那么,我是否应该创建自己的bytebuffer并将其用作oldBuffer参数
这显然不起作用,因为OpenGL驱动程序当然不会映射相同的虚拟内存地址。它只会返回虚拟内存地址自身控制的内存地址。
也将写入[如果/当写入时]与我在该缓冲区中指定的位置相同,或者当LWJGL写入时,缓冲区位置会改变吗?
LWJGL在任何方法调用中都不会改变任何NIO缓冲区成员/字段。我明白了。所以我应该使用glMapBuffer返回的ByteBuffer,因为它包含glMapped内存,这就是你所说的。但是如果LWJGL可以进行此优化为什么opengl中的原始glMapBuffer没有这样的优化?
//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();