为什么 Direct3D11 的 Input Assembler 只绘制 1 个对象?

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

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

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

使用非常棒的 Visual Studio 图形调试器,我发现即使我正在调用它:

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);

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