OpenGL Shader存储缓冲区对象必须绑定到某个绑定点索引,并且如果该块使用该SSBO,则某些Shader存储块索引必须绑定到相同的绑定点索引。对于统一块和统一缓冲区对象也是如此。
我有一些奇怪的行为很难调试,我想知道是否是因为我没有正确使用绑定点。
请考虑以下集合或对象:
P_a
和P_b
SSB_a
中的P_a
和SSB_b
中的P_b
UB_a
中的P_a
和UB_b
中的P_b
SSBO_p
和SSBO_q
UBO_x
和UBO_y
BINDING_POINT_INDEX=7
或任意数字这些缓冲区何时可以共享BINDING_POINT_INDEX
,何时必须重新绑定这些缓冲区?
在一个程序中,SSBO和UBO之间是否共享绑定点?即我是否可以安全地使用BINDING_POINT_INDEX
将SSB_a
绑定到SSBO_p
中的P_a
和使用BINDING_POINT_INDEX
将UB_a
绑定到{{ 1}}在UBO_x
中?
程序之间是否共享绑定点?即我是否可以安全地使用P_a
将BINDING_POINT_INDEX
绑定到SSB_a
中的SSBO_p
和使用P_a
将BINDING_POINT_INDEX
绑定到{{ 1}}在SSB_b
中?
我何时必须重新绑定缓冲区?如果我这样做
SSBO_q
此时,P_b
仍绑定到glUseProgram (P_a);
glUniformBlockBinding (P_a, UB_a, BINDING_POINT_INDEX);
glBindBufferBase (GL_UNIFORM_BUFFER, BINDING_POINT_INDEX, UBO_x);
// UB_a is now bound to UBO_x in P_a
// Draw stuff...
glUseProgram (P_b);
glUniformBlockBinding (P_b, UB_b, BINDING_POINT_INDEX);
glBindBufferBase (GL_UNIFORM_BUFFER, BINDING_POINT_INDEX, UBO_y);
// UB_b is now bound to UBO_y in P_b
// Draw stuff...
glUseProgram (P_a);
中的UB_a
吗?
我是否正确地认为,在一个上下文中完成的绑定不会影响在另一个上下文中的绑定?
在不同的程序和不同的缓冲区类型之间共享绑定点索引的方式是什么,用于绑定它们的正确事件顺序是什么(根据UBO_x
,P_a
等),以及何时必须重新绑定缓冲区吗?