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

Directx 使用结构化缓冲区的Direct3D 10硬件实例,directx,direct3d,directx-11,directx-10,sharpdx,Directx,Direct3d,Directx 11,Directx 10,Sharpdx,我正在尝试使用Direct3D 10+为每个实例数据使用结构化缓冲区实现硬件实例,但我以前从未使用过它们 我了解在顶点着色器中将逐顶点和逐实例数据组合到单个结构中时如何实现实例化,即将两个顶点缓冲区绑定到输入汇编程序并调用DrawIndexedInstanced函数 有人能告诉我当使用硬件实例的结构化缓冲区时,绑定输入汇编程序和进行绘图调用等的过程吗?我似乎在任何地方都找不到这方面的好例子 据我所知,结构化缓冲区绑定为ShaderResourceViews,对吗?是的,完全正确。只是不要在顶点缓

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

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

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


据我所知,结构化缓冲区绑定为ShaderResourceViews,对吗?

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

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

structuredBuffermyInstanceData:寄存器(t0);
是HLSL中StructuredBuffer的语法,您只需使用[]运算符访问它,就像访问数组一样


还有什么不清楚的吗?

非常感谢,这很有帮助。在DrawIndexedInstanced MSDN文章中,它指出“实例化需要多个顶点缓冲区:每个顶点数据至少需要一个缓冲区,每个实例数据至少需要一个缓冲区”,这让我有点困惑。因此,我可以调用DrawIndexedInstanced,只需将一个顶点缓冲区绑定到输入汇编程序,并确保我的输入映射只使用一个顶点缓冲区?这是我的理解,是的。如果不想使用实例,则不需要每个实例的顶点属性。
StructuredBuffer<MyStruct> myInstanceData : register(t0);