【问题标题】:What exactly are D3D Input Slots and what is the OpenGL equivalent?D3D 输入槽到底是什么,OpenGL 的等价物是什么?
【发布时间】:2017-05-27 12:39:38
【问题描述】:

在 Direct3D 中,当我们使用 D3D11_INPUT_ELEMENT_DESC 指定顶点着色器的输入并且当我们调用 IASetVertexBuffers 时,我们必须指定“输入槽”。这些输入槽到底是什么,OpenGL 的等价物是什么?这些输入槽似乎与通过 GLSL 中的layout(location = K)glVertexAttribPointer 的第一个参数指定的“位置”不同。

【问题讨论】:

    标签: opengl direct3d


    【解决方案1】:

    顶点输入来自存储在缓冲区中的值数组。 SemanticIndex 标识输入在着色器中的位置。 InputSlot 定义了哪个缓冲区 为该属性提供数据。缓冲区不绑定到语义索引;它们被绑定到输入槽。

    看,D3D 有两个数组:一个语义数组(匹配着色器中定义的语义)和一个输入槽数组。您使用的每个语义都有一个 INPUT_DESC 结构,它指定(除其他外)从语义到提供它的输入槽的映射。顶点缓冲区绑定到输入槽。任何使用这些插槽的输入都会从同一个缓冲区中提取它们的数据。一个特定的输入可以有一个关于如何访问它的顶点数据的偏移量;这允许交错顶点数据。

    OpenGL 4.3/ARB_separate_attrib_formatsimilar concepts 提供glVertexAttribFormatglVertexAttribBinding。前者指定顶点数据的属性位置。后者指定哪个缓冲区绑定索引将提供该属性。缓冲区使用glBindVertexBuffer(s) 绑定到缓冲区绑定索引。

    使用较旧的glBindBuffer(GL_ARRAY_BUFFER)/glVertexAttribPointer API 时,缓冲区绑定索引和属性位置索引实际上是相同的。但这是一个糟糕的 API,如果您不必支持旧 GL 版本,我建议您使用较新的东西。

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 2014-05-08
      • 2014-06-12
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多