为什么 Direct3D11 的输入汇编程序只绘制 1 个对象?

Why is Direct3D11's Input Assembler only drawing 1 object?

本文关键字:对象 绘制 Direct3D11 输入 汇编程序 为什么      更新时间:2023-10-16

我一直在使用顶点着色器和像素着色器、顶点缓冲区、索引缓冲区、实例缓冲区和常量缓冲区编写 Direct3D11 代码。有一次我让一切正常,但我当时没有提交我的代码,我正在尝试其他东西。

我最近在将实例数据传输到顶点着色器时遇到了问题。

使用Visual Studio Graphics Debugger,这很棒,我已经发现即使我称之为:

D3DDeviceContext->DrawIndexedInstanced(12U, 8U, 0U, 0U, 0U);

顶点着色器中的实例数据浮点数都是 0.0f...

事情是这样的:它以前工作过,没有索引缓冲区。现在,使用索引缓冲区时,不会复制任何实例数据???

你知道是什么原因造成的吗?

我终于弄清楚了问题所在,我将在这里告诉它。感谢MooseBoys指出原因!

我的问题在这里:

unsigned int strides[] = { sizeof(Vertex), sizeof(Instance) };
unsigned int offsets[] = { 0U, 0U };
D3DDeviceContext->IASetVertexBuffers(0U, 2U, &VertexBuffer, strides, offsets);

我应该这样做:

unsigned int strides[] = { sizeof(Vertex), sizeof(Instance) };
unsigned int offsets[] = { 0U, 0U };
ID3D11Buffer* VertexBuffers[] = { VertexBuffer, InstanceBuffer };
D3DDeviceContext->IASetVertexBuffers(0U, 2U, VertexBuffers, strides, offsets);

经验教训:彻底查看代码中断的任何行的函数文档......