-1

我的 DirectX11 C++ 引擎使用 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

因此。

欢迎任何建议。

4

1 回答 1

3

您认为DXGI_FORMAT_R8G8B8A8_UINT作为索引缓冲区格式的具体含义是什么?如果您查看文档,您会发现只有两种IASetIndexBuffer()可以接受的有效格式。如果您的索引是,std::uint32_t那么要使用的相应 DXGI 格式将是DXGI_FORMAT_R32_UINT. 除此之外,我强烈建议使用调试上下文并在调试时查看调试输出……</p>

于 2018-09-23T11:18:55.747 回答