9

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

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

我对此有两个问题:

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

1 回答 1

11

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

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

于 2013-07-24T07:48:19.270 回答