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

最佳答案

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

opengl - glBindBuffer和glBindBufferBase之间的区别-LMLPHP

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

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

关于opengl - glBindBuffer和glBindBufferBase之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54955186/

10-10 12:27