使用结构化缓冲区的Direct3D 10硬件实例化

时间:2013-07-30 21:50:29

标签: directx direct3d directx-11 directx-10 sharpdx

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

StructuredBuffer<MyStruct> myInstanceData : register(t0);

是结构化缓冲区的HLSL中的语法,您只需使用[]运算符访问它,就像使用数组一样。

还有什么不清楚吗?