Мой DirectX11 C ++ Engine использует uint16_t (short) для буфера индекса вершины, и все работало хорошо.
Я усовершенствовал модели, которые я использую, и теперь они выросли с более чем 64 тыс. Индексов.
Я изменил все ссылки на мой индексный буфер с короткого на 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
как индексный формат буфера? если ты проверить документацию, Вы найдете только два допустимых формата, которые IASetIndexBuffer()
приму. Если ваши показатели std::uint32_t
тогда соответствующий формат DXGI будет DXGI_FORMAT_R32_UINT
, Кроме того, я настоятельно рекомендую использовать контекст отладки и посмотрите на выходные данные отладки при отладке …
Других решений пока нет …