glBindBuffer 和 glBindBufferBase 的区别

Difference between glBindBuffer and glBindBufferBase

我认为glBindBuffer(target, buffer)所做的是将缓冲区的地址存储在目标上,这是一个特殊地址。
但是我找到了glBindBufferBase(target, index, buffer)。我觉得target应该是一个数组,这个操作把buffer地址按照索引存到数组中
如果我认为是正确的,那么 glBindBuffer 相当于 glBindBufferBase(target, someindex, buffer)?
也许 someindex 是 0?

它们的用途不同。

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

glBindBufferBase 用于完全不同的目的,它用于将缓冲区绑定到索引数组中的特定绑定点(当不应该直接修改数据而是使用数据时)。虽然这看起来很复杂,但很容易看出来。假设你想将一个统一块传递给你的着色器,那么你有一个 table 它将命名缓冲区映射到数组中的特定索引,然后映射到着色器中的绑定,如下图所示:

所以 glBindBufferBase 在您指定索引的右侧创建箭头,而 glBindBuffer 只是将缓冲区绑定到特定目标。

然后您将使用 glGetUniformBlockIndex 在着色器中获取正确的索引,然后通过 glUniformBlockBinding.

链接到绑定点(左箭头)