我认为glBindBuffer(target, buffer)
的作用是将缓冲区的地址存储在目标上,这是一个特殊的地址。
但是我发现了glBindBufferBase(target, index, buffer)
。我认为目标应该是一个数组,该操作根据索引将缓冲区地址存储到数组中。
如果我认为正确,那么glBindBuffer
等同于glBindBufferBase(target, someindex, buffer)
?
也许someindex
是0?
答案 0 :(得分:1)
它们的用途不同。
glBindBuffer
用于将缓冲区绑定到特定目标,以便随后将修改该目标的所有操作都映射到该缓冲区。
glBindBufferBase
用于完全不同的目的,它用于将缓冲区绑定到索引数组中的特定绑定点(当数据不应该直接修改而是使用时)。尽管这看起来有些令人费解,但确实很容易看到。假设您要将统一块传递给着色器,那么您就有一个表,该表将命名缓冲区映射到数组中的特定索引,然后将其映射到着色器中的绑定,如下图所示:
因此glBindBufferBase
在右边创建箭头,您可以在其中指定索引,而glBindBuffer
只是将缓冲区绑定到特定目标。
然后,您将使用glGetUniformBlockIndex
在着色器中获取正确的索引,然后通过glUniformBlockBinding
将其链接到绑定点(左箭头)。