【问题标题】:DirectX11 IASetVertexBuffers with nullptrs or empty buffers具有 nullptrs 或空缓冲区的 DirectX11 IASetVertexBuffers
【发布时间】:2018-08-18 09:02:39
【问题描述】:

我想构建我的管道,以便每个网格都有可能只设置位置、法线等元素,并且由于某些网格不会拥有所有这些元素,而某些着色器不需要所有这些元素,我希望将每个属性放在不同的缓冲区中,现在我不知道是否最好为每个缓冲区调用 SetBuffers 设置索引 x 处的这 1 个缓冲区,或者有可能一次将所有这些设置为一个数组,但有些会为空(我想保留槽号)

【问题讨论】:

    标签: c++ 3d rendering directx-11 vertex-buffer


    【解决方案1】:

    IASetVertexBuffers 允许您在一次调用中指定一组缓冲区:

    ID3D11DeviceContext* Context; // Initialized at creation
    ID3D11Buffer* buffers[] = /* Initialized to a set of buffers, unused buffers set to null. */;
    UINT Strides[] = /* Initialized to the size of each element in each buffer. */;
    UINT Offsets[] = /* Initialized to the offset into each buffer, typically all zeros. */; 
    Context->IASetVertexBuffers(0, ARRAYSIZE(buffers), buffers, Strides, Offsets);
    

    有关每个参数的详细信息,请参阅the documentation

    请注意,这要求所有着色器的输入布局与管道中可能存在的所有网格相匹配,如果您的着色器需要比网格提供的参数更多的参数,这可能会使事情复杂化。我不确定 DirectX/GPU 在所需参数上显示空指针时会做什么,但我不认为它会很好。

    当需要属性但源未提供属性时,此处更简单的选项是为管道中的每个网格提供显式默认值。这样就不会出现缺失值的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      相关资源
      最近更新 更多