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