OpenGL:泛型绑定点上的glBindBuffer

时间:2018-03-23 09:28:47

标签: opengl

当我看到这个时,我正在阅读glBindBuffer上的documentation

  

同样,可以使用GL_UNIFORM_BUFFER,GL_ATOMIC_COUNTER_BUFFER和GL_SHADER_STORAGE_BUFFER缓冲区绑定点,但不会直接影响统一缓冲区,原子计数器缓冲区或着色器存储缓冲区状态

" 不直接影响统一缓冲区,原子计数器缓冲区或着色器存储缓冲区状态"意思?

我将缓冲区绑定到通用GL_SHADER_STORAGE_BUFFER绑定点,并在查询SHADER_STORAGE_BUFFER_BINDING的状态时,返回先前绑定的缓冲区名称。

在描述shader_storage_buffer_object扩展的this站点上,它声明SHADER_STORAGE_BUFFER_BINDING是着色器存储缓冲区状态的一部分。

因此我认为在通用绑定点(例如GL_SHADER_STORAGE_BUFFER)上使用glBindBuffer确实会影响着色器存储缓冲区状态。

1 个答案:

答案 0 :(得分:2)

很明显,如果将缓冲区绑定到上下文,则可以查询这些绑定点。但是文档试图解决的问题是那些绑定点并不意味着什么

考虑GL_COPY_READ_BUFFER。绑定到此目标意味着什么。如果您调用glCopyBufferSubData,它将使用绑定到GL_COPY_READ_BUFFER的缓冲区作为该复制操作的源缓冲区。

相比之下,没有OpenGL操作会将绑定到GL_SHADER_STORAGE_BUFFER的缓冲区用于任何实际的OpenGL操作。当然,你可以查询它,但你可以用它做所有。如果要将缓冲区用于实际存储缓冲区操作,请must use glBindBufferRange/Base or equivalent functions