GL_PIXEL_PACK_BUFFER异步如何工作?

时间:2018-10-04 15:28:42

标签: opengl

如果我正确理解,当我使用glGetTextureSubImage()时,OpenGL必须先进行同步,然后才能返回此函数。

但是,如果我将缓冲区绑定到GL_PIXEL_PACK_BUFFER,则该函数调用是异步的。

在我尝试访问数据时,OpenGL是否立即对其进行同步?还有其他规则吗?

1 个答案:

答案 0 :(得分:3)

  

当我尝试访问数据时,OpenGL是否立即对其进行同步?

是;这就是重点。当读入存储时,OpenGL实现必须假定您将立即访问读取的像素数据。它必须假设,因为当您要读取该存储时它无法检测。毕竟,OpenGL不拥有该存储。

缓冲区对象是OpenGL 拥有的存储。如果您调用glGetBufferSubDataglMapBufferRange或其他方法,OpenGL会看到该调用。因此,OpenGL实现可以在那时(而不是在您发出读取时)与读取操作同步。

当然,对于持久映射,OpenGL无法告诉您何时读取数据。但是,如果您使用的是持久映射,则是告诉OpenGL 将执行必要的同步,因此它不会尝试这样做。