Большие модели DirectX> 64 К C ++ - PullRequest
       36

Большие модели DirectX> 64 К C ++

0 голосов
/ 23 сентября 2018

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

Я усовершенствовал модели, которые я использую, и теперь они выросли с индексами более 64 тыс.

Я изменил все ссылки на мой индексный буфер с 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 голосов
/ 23 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...