Массив Texture2D в качестве цели рендеринга в пиксельном шейдере HLSL - PullRequest
2 голосов
/ 31 июля 2011

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

Вместо запуска трех проходов с шейдерами, которые по сути одинаковы (умножение WorldViewPos и ​​т. Д.), Но каждый из которых выводит различные типы данных в текстуру в цели рендеринга (например, один проход для цвета, один проход для глубины, один пройти для нормалей); Я бы хотел использовать объект Texture3D или в идеале массив Texture2D в качестве цели рендеринга моего пиксельного шейдера. Таким образом, я мог бы сократить эти три прохода рендеринга до одного и вывести все данные за один раз.

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

1 Ответ

2 голосов
/ 31 июля 2011

То, что вы ищете, это «Несколько целей рендеринга».

Вы можете установить более одной цели рендеринга, используя GraphicsDevice.SetRenderTargets ( MSDN , , см. Также ).

Вы можете вывести на несколько целей рендеринга в пиксельном шейдере HLSL, выдав COLOR0 (семантическое ) для первой цели, COLOR1 для второй и т. Д.on.

Наконец, вы должны использовать профиль HiDef , который позволяет устанавливать до 4 целей рендеринга одновременно.


РЕДАКТИРОВАТЬ: Я простопонял, что я дал ответ XNA - но на самом деле вы не пометили вопрос с помощью API вообще.HLSL должен быть одинаковым для DirectX, SlimDX и т. Д. Чтобы установить цели рендеринга в DirectX, я думаю, вы хотите IDirect3DDevice9::SetRenderTarget ( MSDN ).

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