Типичная стратегия рендеринга для многих и разнообразных сложных объектов в DirectX?

Я изучаю DirectX. Он предоставляет огромную свободу в том, как что-то делать, но, предположительно, разные состояния работают по-разному, и он дает мало указаний относительно того, какие могут быть хорошо работающие шаблоны использования.

При использовании DirectX обычно приходится менять местами кучу новых данных несколько раз на каждом рендере?

Наиболее очевидный и, вероятно, действительно неэффективный способ его использования был бы таким.

Стратегия 1

На каждом отдельном рендере

  1. Загружать все для модели 0 (включая текстуры) и визуализировать (IASetVertexBuffers , VSSetShader, PSSetShader, PSSetShaderResources, PSSetConstantBuffers, VSSetConstantBuffers, Draw)

  2. Загрузить все для модели 1 (включая текстуры) и визуализировать ее (IASetVertexBuffers, VSSetShader, PSSetShader, VSSetShader, и т. Д.

Я полагаю, вы можете сделать это более эффективным отчасти, если для самых больших вещей для загрузки будут выделены специальные слоты, например если текстура для модели 0 действительно сложная, не перезагружайте ее на каждом шаге, просто загрузите ее в слот 1 и оставьте там. Конечно, поскольку я не уверен, сколько регистров каждого типа должно быть в DX11, это сложно (может ли кто-нибудь указать на документацию по этому поводу?)

Stragety 2

Выберите некоторые слоты текстур для загрузки и другие для постоянного хранения ваших самых сложных текстур.

Только один раз

Загружайте самые сложные модели, шейдеры и текстуры в слоты, предназначенные для постоянного хранения

При каждом отдельном рендеринге

  1. Загружайте все, что еще не присутствует для модели 0, используя слоты, которые вы выделяете для загрузки и рендеринга (IASetVertexBuffers, VSSetShader, PSSetShader, PSSetShaderResources, PSSetConstantBuffers, VSSetConstantBuffers, Draw)

  2. Загрузите все, что еще не представлено для модели 1, используя слоты, которые вы выделили для загрузки и рендеринга (IASettexShaet PSSetShader, PSSetShaderResources, PSSetConstantBuffers, VSSetConstantBuffers, Draw)

  3. и т. Д.

Стратегия 3 Понятия не имею, но все вышесказанное, вероятно, неверно, потому что я действительно новичок в этом.

Каковы стандартные стратегии эффективного рендеринга в DirectX (в частности, DX11), чтобы сделать его максимально эффективным?

9
задан John Robertson 20 June 2011 в 12:32
поделиться