如果我正确理解,当我使用glGetTextureSubImage()时,OpenGL必须先进行同步,然后才能返回此函数。
但是,如果我将缓冲区绑定到GL_PIXEL_PACK_BUFFER,则该函数调用是异步的。
在我尝试访问数据时,OpenGL是否立即对其进行同步?还有其他规则吗?
答案 0 :(得分:3)
当我尝试访问数据时,OpenGL是否立即对其进行同步?
是;这就是重点。当读入存储时,OpenGL实现必须假定您将立即访问读取的像素数据。它必须假设,因为当您要读取该存储时它无法检测。毕竟,OpenGL不拥有该存储。
缓冲区对象是OpenGL 拥有的存储。如果您调用glGetBufferSubData
或glMapBufferRange
或其他方法,OpenGL会看到该调用。因此,OpenGL实现可以在那时(而不是在您发出读取时)与读取操作同步。
当然,对于持久映射,OpenGL无法告诉您何时读取数据。但是,如果您使用的是持久映射,则是告诉OpenGL 您将执行必要的同步,因此它不会尝试这样做。