HLSL: многоходовой шейдер? - PullRequest
3 голосов
/ 19 апреля 2011

Я пишу шейдер, который создает эффект размытия текстуры, отображаемой на сцене. Мне нужно сделать это за 2 прохода, поэтому с помощью прохода P0 я делаю горизонтальное размытие, а на проходе P1 - вертикальное.

Проблема:

  • Как я могу получить выходные данные от PS на проходе P0 и отправить в качестве ввода на PS на проходе P1?

Если я напишу его за один проход, я получу ожидаемый результат, но мне действительно нужно сделать это за 2 прохода.

Может кто-нибудь помочь мне, пожалуйста?

Это мой первый подход к HLSL.

Спасибо всем!

FOX_ITA

1 Ответ

7 голосов
/ 19 апреля 2011

Обычно это делается вне кода шейдера в логике приложения.

  • Получите цель рендеринга / визуализируемую текстуру, достаточно большую, чтобы сохранить результат P0
  • Включить цель, включить P0, запустить первый проход
  • Получить другую цель рендеринга, чтобы сохранить результат P1. Если вы делаете размытие в полноэкранном режиме и дальнейшая постобработка не требуется, это, как правило, обратный буфер.
  • Включить новую цель рендеринга
  • Свяжите первую цель рендеринга с индексом / слотом текстуры, доступным для P1
  • сделать второй проход

(конечно, вы не воссоздаете цели рендеринга один раз за кадр. Я бы предпочел использовать центральный пул целей рендеринга для удовлетворения всех потребностей постобработки).

...