glBindBuffer和glBindBufferBase之间的区别

时间:2019-03-02 04:17:02

标签: opengl buffer

我认为glBindBuffer(target, buffer)的作用是将缓冲区的地址存储在目标上,这是一个特殊的地址。
但是我发现了glBindBufferBase(target, index, buffer)。我认为目标应该是一个数组,该操作根据索引将缓冲区地址存储到数组中。
如果我认为正确,那么glBindBuffer等同于glBindBufferBase(target, someindex, buffer)
也许someindex是0?

1 个答案:

答案 0 :(得分:1)

它们的用途不同。

glBindBuffer用于将缓冲区绑定到特定目标,以便随后将修改该目标的所有操作都映射到该缓冲区。

glBindBufferBase用于完全不同的目的,它用于将缓冲区绑定到索引数组中的特定绑定点(当数据不应该直接修改而是使用时)。尽管这看起来有些令人费解,但确实很容易看到。假设您要将统一块传递给着色器,那么您就有一个表,该表将命名缓冲区映射到数组中的特定索引,然后将其映射到着色器中的绑定,如下图所示:

enter image description here

因此glBindBufferBase在右边创建箭头,您可以在其中指定索引,而glBindBuffer只是将缓冲区绑定到特定目标。

然后,您将使用glGetUniformBlockIndex在着色器中获取正确的索引,然后通过glUniformBlockBinding将其链接到绑定点(左箭头)。