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
.
链接到绑定点(左箭头)
我认为glBindBuffer(target, buffer)
所做的是将缓冲区的地址存储在目标上,这是一个特殊地址。
但是我找到了glBindBufferBase(target, index, buffer)
。我觉得target应该是一个数组,这个操作把buffer地址按照索引存到数组中
如果我认为是正确的,那么 glBindBuffer
相当于 glBindBufferBase(target, someindex, buffer)
?
也许 someindex
是 0?
它们的用途不同。
glBindBuffer
用于将缓冲区绑定到特定目标,以便之后修改该目标的所有操作都映射到该缓冲区。
glBindBufferBase
用于完全不同的目的,它用于将缓冲区绑定到索引数组中的特定绑定点(当不应该直接修改数据而是使用数据时)。虽然这看起来很复杂,但很容易看出来。假设你想将一个统一块传递给你的着色器,那么你有一个 table 它将命名缓冲区映射到数组中的特定索引,然后映射到着色器中的绑定,如下图所示:
所以 glBindBufferBase
在您指定索引的右侧创建箭头,而 glBindBuffer
只是将缓冲区绑定到特定目标。
然后您将使用 glGetUniformBlockIndex
在着色器中获取正确的索引,然后通过 glUniformBlockBinding
.