D3D Input Slots 究竟是什么,OpenGL 的等价物是什么?
What exactly are D3D Input Slots and what is the OpenGL equivalent?
在 Direct3D 中,当我们使用 D3D11_INPUT_ELEMENT_DESC
指定顶点着色器的输入时,当我们调用 IASetVertexBuffers
时,我们必须指定 'the input slot(s)'。这些输入槽到底是什么,OpenGL 等价物是什么?这些输入槽似乎与 GLSL 中通过 layout(location = K)
指定的 'locations' 和 glVertexAttribPointer
.
的第一个参数不同
顶点输入来自存储在缓冲区中的值数组。 SemanticIndex
标识输入在着色器中的位置。 InputSlot
定义哪个 缓冲区 为该属性提供数据。缓冲区不受语义索引的约束;他们必须输入插槽。
看,D3D 有两个数组:语义数组(匹配着色器中定义的语义)和输入槽数组。您使用的每个语义都有一个 INPUT_DESC 结构,它指定(除其他事项外)从语义到提供它的输入槽的映射。顶点缓冲区绑定到输入槽。使用这些插槽的任何输入都将从同一缓冲区中提取数据。一个特定的输入可以有一个关于如何访问它的顶点数据的偏移量;这允许交错顶点数据。
OpenGL 4.3/ARB_separate_attrib_format provides 与 glVertexAttribFormat
和 glVertexAttribBinding
。前者指定顶点数据到什么属性位置。后者指定哪个缓冲区绑定索引将提供该属性。缓冲区绑定到 glBindVertexBuffer(s)
.
的缓冲区绑定索引
使用较旧的 glBindBuffer(GL_ARRAY_BUFFER)/glVertexAttribPointer
APIs 时,缓冲区绑定索引和属性位置索引实际上是相同的。但这是一个糟糕的 API 如果您不必支持旧的 GL 版本,我建议您使用更新的东西。
在 Direct3D 中,当我们使用 D3D11_INPUT_ELEMENT_DESC
指定顶点着色器的输入时,当我们调用 IASetVertexBuffers
时,我们必须指定 'the input slot(s)'。这些输入槽到底是什么,OpenGL 等价物是什么?这些输入槽似乎与 GLSL 中通过 layout(location = K)
指定的 'locations' 和 glVertexAttribPointer
.
顶点输入来自存储在缓冲区中的值数组。 SemanticIndex
标识输入在着色器中的位置。 InputSlot
定义哪个 缓冲区 为该属性提供数据。缓冲区不受语义索引的约束;他们必须输入插槽。
看,D3D 有两个数组:语义数组(匹配着色器中定义的语义)和输入槽数组。您使用的每个语义都有一个 INPUT_DESC 结构,它指定(除其他事项外)从语义到提供它的输入槽的映射。顶点缓冲区绑定到输入槽。使用这些插槽的任何输入都将从同一缓冲区中提取数据。一个特定的输入可以有一个关于如何访问它的顶点数据的偏移量;这允许交错顶点数据。
OpenGL 4.3/ARB_separate_attrib_format provides glVertexAttribFormat
和 glVertexAttribBinding
。前者指定顶点数据到什么属性位置。后者指定哪个缓冲区绑定索引将提供该属性。缓冲区绑定到 glBindVertexBuffer(s)
.
使用较旧的 glBindBuffer(GL_ARRAY_BUFFER)/glVertexAttribPointer
APIs 时,缓冲区绑定索引和属性位置索引实际上是相同的。但这是一个糟糕的 API 如果您不必支持旧的 GL 版本,我建议您使用更新的东西。