我正在研究 OpenGL 统一缓冲区对象和着色器存储缓冲区。我认为这个问题适用于他们两个,但让我们只关注 UBO。
教程似乎在说“块索引”和“绑定点索引”是不同的东西,如果我在着色器中有多个UBO,我需要指定绑定索引
layout(binding = 0) uniform first_buffer {...};
layout(binding = 1) uniform second_buffer {...};
我得到的印象是块索引由链接器确定并且可以从 读取,但是绑定点索引必须在布局中glGetUniformBlockIndex
以任意不同的方式进行硬编码,并且对应的,这让我觉得脆弱和令人讨厌。binding=N
glBindBufferBase(GL_UNIFORM_BUFFER, N, ubo_handle)
块索引和绑定点有什么区别?
我可以binding=N
在布局中省略吗?那么会发生什么glBindBufferBase
?
这对 SSBO 来说都一样吗?