glUniformBlockBinding和glBindBufferBase之间的顺序是否重要?

时间:2013-07-24 07:23:35

标签: opengl glsl framebuffer

使用UBO时,我们将统一块绑定到绑定点。然后我们还将UBO绑定到同一个绑定点: 类似的东西:

glUseProgram(ProgramName);
glUniformBlockBinding(ProgramName, uniformLocation, bindingPoint);
glBindBufferBase(GL_UNIFORM_BUFFER, bindingPoint, bufId);

我有两个问题:

  1. 我应该先指定glUniformBlockBinding还是glBindBufferBase,否则顺序无关紧要?
  2. 如果我的理解是正确的,那么只有在我们用数据更新了UBO之后才能调用glBindBufferBase。如果这是正确的,那么这就回答了我的第一个问题。

1 个答案:

答案 0 :(得分:10)

glUniformBlockBinding在程序中设置状态(这就是为什么你不应该每帧调用它)。 glBindBufferRange在OpenGL上下文中设置状态。在渲染之前,它们都不会影响另一个,所以不,无论哪个都没关系。

是的,除非你为缓冲区对象分配了存储空间,否则你不能调用glBindBufferRange(或Base,它是根据Range定义的)​​。