DirectX大型模型> 64k C ++

时间:2018-09-23 10:49:08

标签: c++ directx index-buffer

我的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

相应地。

欢迎任何建议。

1 个答案:

答案 0 :(得分:3)

您认为DXGI_FORMAT_R8G8B8A8_UINT作为索引缓冲区格式的含义是什么?如果您check the documentation,您将发现IASetIndexBuffer()将接受两种有效格式。如果您的索引为std::uint32_t,则要使用的相应DXGI格式为DXGI_FORMAT_R32_UINT。除此之外,我强烈建议use a debug context并在调试时查看调试输出…