2

我正在尝试使用结构化缓冲区为每个实例数据实现 Direct3D 10+ 的硬件实例化,但我以前没有使用过它们。

我了解在将每个顶点和每个实例数据组合到顶点着色器中的单个结构时如何实现实例化 - 即将两个顶点缓冲区绑定到输入汇编器并调用 DrawIndexedInstanced 函数。

任何人都可以告诉我在使用带硬件实例的结构化缓冲区时绑定输入汇编程序和进行绘图调用等的过程吗?我似乎在任何地方都找不到一个很好的例子。

据我了解,结构化缓冲区绑定为 ShaderResourceViews,这是正确的吗?

4

1 回答 1

3

是的,完全正确。只是不要将任何每个实例的顶点属性放在顶点缓冲区或输入布局中,并创建缓冲区的 ShaderResourceView 并将其设置在顶点着色器上。然后,您可以使用 SV_InstanceID 语义来查询您所在的实例,并从缓冲区中获取相关的结构。

StructuredBuffers 与普通缓冲区非常相似。唯一的区别是您在创建时指定 D3D11_RESOURCE_MISC_BUFFER_STRUCTURED 标志,填写 StructureByteStride,当您创建 ShaderResourceView 时,格式为 DXGI_UNKNOWN(格式由着色器中的结构隐式指定)。

StructuredBuffer<MyStruct> myInstanceData : register(t0);

是 HLSL 中用于 StructuredBuffer 的语法,您只需使用 [] 运算符访问它,就像访问数组一样。

还有什么不清楚的吗?

于 2013-07-30T22:02:04.457 回答