我一直在使用顶点着色器和像素着色器,顶点缓冲区,索引缓冲区,实例缓冲区和常量缓冲区编写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);
经验教训:在代码中断的任何行上仔细查看该函数的文档...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句