使用UBO时,我们将统一块绑定(bind)到绑定(bind)点。然后,我们还将UBO绑定(bind)到相同的绑定(bind)点:
就像是:

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

我对此有2个问题:
  • 我应该首先指定glUniformBlockBinding还是glBindBufferBase,否则顺序无关紧要?
  • 如果我的理解是正确的,那么只有在我们用数据更新了UBO之后,才必须调用glBindBufferBase。如果这是正确的,那么这回答了我的第一个问题。
  • 最佳答案

    glUniformBlockBinding设置程序中的状态(这就是为什么您不应该在每一帧都调用它的原因)。 glBindBufferRange在OpenGL上下文中设置状态。在渲染之前,这两个都不会影响彼此,所以不,哪个都无关紧要。

    是的,除非为缓冲区对象分配了存储空间,否则无法调用glBindBufferRange(或Base(根据范围来定义))。

    10-05 21:54