DirectX 大型模型 > 64k C++
DirectX Large Models > 64k C++
我的 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
因此。
欢迎任何建议。
您认为DXGI_FORMAT_R8G8B8A8_UINT
作为索引缓冲区格式的具体含义是什么?如果您 check the documentation, you will find there are only two valid formats that IASetIndexBuffer()
will accept. If your indices are std::uint32_t
then the corresponding DXGI format to use would be DXGI_FORMAT_R32_UINT
. Apart from that, I highly recommend to use a debug context 并在调试时查看调试输出...
我的 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
因此。
欢迎任何建议。
您认为DXGI_FORMAT_R8G8B8A8_UINT
作为索引缓冲区格式的具体含义是什么?如果您 check the documentation, you will find there are only two valid formats that IASetIndexBuffer()
will accept. If your indices are std::uint32_t
then the corresponding DXGI format to use would be DXGI_FORMAT_R32_UINT
. Apart from that, I highly recommend to use a debug context 并在调试时查看调试输出...