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