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

vik*_*eid 8 opengl framebuffer glsl

使用UBO时,我们将统一块绑定到绑定点.然后我们还将UBO绑定到相同的绑定点:类似于:

glUseProgram(ProgramName);
glUniformBlockBinding(ProgramName, uniformLocation, bindingPoint);
glBindBufferBase(GL_UNIFORM_BUFFER, bindingPoint, bufId);
Run Code Online (Sandbox Code Playgroud)

我有2个问题:

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

Nic*_*las 10

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

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