我试图使用结构化缓冲区对每个实例数据使用Direct3D 10+实现硬件实例实例,但我以前没有使用过它们。
当将每个顶点和每个实例数据组合到顶点着色器中的单个结构中时,我了解了如何实现实例--即将两个顶点缓冲区绑定到输入汇编程序并调用DrawIndexedInstanced函数。
有人能告诉我,当使用带有硬件实例的结构化缓冲区时,绑定输入汇编程序和进行绘图调用等的过程吗?我似乎在任何地方都找不到一个很好的例子。
据我理解,结构化缓冲区被绑定为ShaderResourceViews,这是正确的吗?
发布于 2013-07-30 22:02:04
是的,完全正确。只是不要在顶点缓冲区或输入布局中放置任何每个实例的顶点属性,并创建缓冲区的ShaderResourceView并将其设置在顶点着色器上。然后,您可以使用SV_InstanceID语义来查询您所在的实例,并从缓冲区中获取相关的结构。
StructuredBuffers与普通缓冲区非常相似。唯一的区别是您在创建时指定了D3D11_RESOURCE_MISC_BUFFER_STRUCTURED标志,填写了StructureByteStride,在创建ShaderResourceView时格式为DXGI_UNKNOWN (该格式由您的着色器中的结构隐式指定)。
StructuredBuffer<MyStruct> myInstanceData : register(t0);是用于StructuredBuffer的HLSL语法,您只需像使用数组一样使用[]运算符访问它。
还有什么不清楚的吗?
https://stackoverflow.com/questions/17958080
复制相似问题