Я учу DirectX.Он предоставляет огромную свободу в том, как что-то делать, но, по-видимому, разные состояния работают по-разному, и он дает мало рекомендаций относительно того, какими могут быть эффективные модели использования.
При использовании Directx обычно приходится менять местами.в кучу новых данных несколько раз на каждом рендере?
Самый очевидный и, вероятно, действительно неэффективный способ его использования будет выглядеть следующим образом.
Stragety 1
На каждомrender
Загрузить все для модели 0 (включая текстуры) и визуализировать ее (IASetVertexBuffers, VSSetShader, PSSetShader, PSSetShaderResources, PSSetConstantBuffers, VSSetConstantBuffers, Draw)
* 10181019 * Загрузить все для модели 1 (включая текстуры) и визуализировать ее (IASetVertexBuffers, VSSetShader, PSSetShader, PSSetShaderResources, PSSetConstantBuffers, VSSetConstantBuffers, Draw)
и т. Д.
Я предполагаю, что вы можете сделать это более эффективно частично, если самые большие вещи, которые нужно загрузить, имеют выделенные слоты, например, если текстура для модели 0 действительно сложна, не перезагружайте ее на каждом шагеПросто загрузите его в слот 1 и оставьте там.Конечно, поскольку я не уверен, сколько регистров в DX11 определенно должно быть каждого типа, это сложно (может кто-нибудь указать на это на документацию?)
Stragety 2
Выберите несколько текстурных слотов для загрузки и другие для постоянного хранения ваших самых сложных текстур.
Только один раз
Загрузка самых сложных моделей, шейдеров и текстур вслоты, предназначенные для постоянного хранения
На каждом отдельном рендере
Загрузить все, что еще не существует для модели 0, используя слоты, которые вы выделили для загрузки и рендерингаit (IASetVertexBuffers, VSSetShader, PSSetShader, PSSetShaderResources, PSSetConstantBuffers, VSSetConstantBuffers, Draw)
Загрузить все, что еще не существует для модели 1, используя слоты, которые вы откладываете для загрузки в VSSet, и использовать его для загрузки VTSet, PSSetShader, PSSetShaderResources, PSSetConstantBuffers, VSSetConstantBuffers, Draw)
и т.д ...
Стратегия 3 Понятия не имею, но все вышесказанное, вероятно, совершенно неверно, потому что я действительно новичок в этом.
Каковы стандартные стратегии эффективного рендеринга на DirectX (в частности, DX11), чтобы сделать его максимально эффективным?