当我看到这个时,我正在阅读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确实会影响着色器存储缓冲区状态。
答案 0 :(得分:2)
很明显,如果将缓冲区绑定到上下文,则可以查询这些绑定点。但是文档试图解决的问题是那些绑定点并不意味着什么。
考虑GL_COPY_READ_BUFFER
。绑定到此目标意味着什么。如果您调用glCopyBufferSubData
,它将使用绑定到GL_COPY_READ_BUFFER
的缓冲区作为该复制操作的源缓冲区。
相比之下,没有OpenGL操作会将绑定到GL_SHADER_STORAGE_BUFFER
的缓冲区用于任何实际的OpenGL操作。当然,你可以查询它,但你可以用它做所有。如果要将缓冲区用于实际存储缓冲区操作,请must use glBindBufferRange/Base
or equivalent functions。