Вопрос

Я кодирую 3d-приложение с DirectX 10, и мне интересно, как обстоят дела с управлением шейдерами.

Наиболее ли эффективно предварительно загружать все имеющиеся шейдеры при запуске приложения, а затем использовать их по мере необходимости, или это расходует ресурсы оборудования, если их число увеличивается?

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

Это было полезно?

Решение

Я не работал с DX10, только с DX9, но я предполагаю, что эти вещи все те же.

В зависимости от вашего приложения вы можете фактически генерировать шейдеры во время выполнения (многие современные сложные 3D-игры делают это).

Предварительная загрузка шейдеров - неплохая идея, в зависимости от того, генерируете ли вы шейдеры, сколько их существует, каковы ваши требования к памяти - это зависит.Однако предварительная загрузка шейдера (под которой, я полагаю, вы подразумеваете создание экземпляра ID3DXEffect) занимает память только во время выполнения, без использования процессора.

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

Чтобы отсортировать ваши розыгрыши, прочтите это: http://realtimecollisiondetection.net/blog/?p=86

Другие советы

В D3D10 все ресурсы устройства виртуализированы, так что они у вас не закончатся.Конечно, вы все еще можете исчерпать физические ресурсы карты и вызвать много сбоев, если не будете обращать внимания на то, что делаете.

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

Но на самом деле вы спрашиваете: "является ли метод X более быстрым, чем метод Y для моего приложения?" и хотя D3D10 упрощает управление состоянием, чтобы ускорить переключение состояний, единственный способ ответить на приведенный выше вопрос - это выполнить измерение производительности с помощью ваш применение и ваш данные.

Обнаружение realtimecollectiondetection.В сообщении в блоге net просто говорится о сортировке ваших вызовов draw.Это приведет к меньшему количеству переключений состояний.Не имеет значения, насколько быстро происходит переключение состояний, делать меньше всегда быстрее.Так что это хороший общий совет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top