我的DirectX11 C ++ Engine使用uint16_t(短)作为顶点索引缓冲区,并且一切正常。
我已经改进了我使用的模型,现在它们已经增长了超过64k索引。
我已将对索引缓冲区的所有引用从short更改为uint32_t,并且渲染已损坏。
我的变量定义是:
ID3D11Buffer *IndexBuffer; //DirectX Index Buffer
vector<int32_t> primitiveIndices; //Vector array of indicies formally
我终于改变了线
Context->IASetIndexBuffer(IndexBuffer, DXGI_FORMAT_R16_UINT, 0);
到
Context->IASetIndexBuffer(IndexBuffer, DXGI_FORMAT_R8G8B8A8_UINT, 0);
这样做是为了允许32位索引。但是,它无法渲染。 我还更新了
D3D11_BUFFER_DESC::ByteWidth
相应地。
欢迎任何建议。
答案 0 :(得分:3)
您认为DXGI_FORMAT_R8G8B8A8_UINT
作为索引缓冲区格式的含义是什么?如果您check the documentation,您将发现IASetIndexBuffer()
将接受两种有效格式。如果您的索引为std::uint32_t
,则要使用的相应DXGI格式为DXGI_FORMAT_R32_UINT
。除此之外,我强烈建议use a debug context并在调试时查看调试输出…