Мой DirectX11 C ++ Engine использует uint16_t (сокращенно) для буфера индекса вершин, и все работало хорошо.

Я разработал модели, которые использую, и теперь они выросли с более чем 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

Соответственно.

Любые советы приветствуются.

-1
Mark 23 Сен 2018 в 13:49

1 ответ

Лучший ответ

Как вы думаете, что именно означает DXGI_FORMAT_R8G8B8A8_UINT как формат индексного буфера? Если вы , проверьте документацию , вы обнаружите, что есть только два допустимых формата, которые принимает IASetIndexBuffer(). Если ваши индексы - std::uint32_t, тогда соответствующий формат DXGI для использования будет DXGI_FORMAT_R32_UINT. Кроме того, я настоятельно рекомендую используйте контекст отладки и просмотрите выходные данные отладки при отладке ...

3
Michael Kenzel 23 Сен 2018 в 11:18