san
> Ну так и напиши эти две строчки.
Ты реально не знаешь как добавить одну семантику в шейдер? Ну как-то так:
struct VS_Out { float4 pos : SV_Position; .... uint rt : SV_RenderTargetArrayIndex; }; VS_Out VS_main (VS_In In) { VS_Out Out; ..... Out.rt = EvalRenderTargetIndex( ...); return Out; }
MrShoor
> EvalRenderTargetIndex
Это что такое?
san
> Это что такое?
Эта функция, которая посчитает тебе индекс рендертаргета, в который ты будешь писать.
MrShoor
Что она возвращает? Может все же откроешь всю тайну, а то из тебя клещами приходится вытаскивать. Ты же не партизан на допросе.
san
> Что она возвращает?
Целое число, индекс рендертаргета. Разве не видно, что Out.rt объявлен как uint?
> Может все же откроешь всю тайну, а то из тебя клещами приходится вытаскивать.
> Ты же не партизан на допросе.
Всмысле тайну? Ты эту функцию сам должен написать. Я то откуда знаю по какому условию тебе нужно рисовать в определенный рендертаргет.
MrShoor
Т.е. вернув 0 рендер будет идти в первую текстуру в массиве? ОК, уже понятнее.
Вообще это можно было написать в первом посте а не разводить эту канитель на трех страницах. Спасибо, попробую.
san
> Т.е. вернув 0 рендер будет идти в первую текстуру в массиве? ОК, уже понятнее.
> Вообще это можно было написать в первом посте а не разводить эту канитель на
> трех страницах. Спасибо, попробую.
серьёзно, почему бы тебе эти вопросы не задать документации? форум нужен, чтобы найти то, что можно описать словами, но нельзя описать поисковым запросом. после того, как у тебя есть ключевые слова, просто открываешь msdn и читаешь.
san
> Вообще это можно было написать в первом посте а не разводить эту канитель на
> трех страницах.
Ну кто ж знал, что ты до элементарных вещей не догадаешься. Ведь совершенно непонятно за что может отвечать целочисленная СВ_ИндексМассиваРендерТаргетов , да?
Видимо все ресурсы ушли на изучение анекдотов про шкипера.
MrShoor
Да, ты прав, только читаешь невнимательно. Я же сразу попросил "пальцем показать". Именно по этой причине. Ну показал бы и вопрос закрылся без этой беллетристики.
>форум нужен, чтобы найти то, что можно описать словами, но нельзя описать поисковым запросом
По мне так форум нужен для того, что бы тебе кто-то быстро показал решение и не пришлось тратить время на поисковые запросы и гуляния по ссылкам. Чисто для экономии времени. Всегда есть люди которые в этой теме уже копались и эту фичу используют. Держать в памяти то, что тебе возможно потребуется один раз в жизни, я смысла не вижу. Я и про переключение таргетов забуду через месяц, просто это у меня будет это где-то в коде, и если опять потребуется я быстро найду уже у себя. Если я нахожу решение на вопрос в форуме, я всегда публикую код, что бы и другим время экономить - посмотри мои темы. А Знайку я из себя строить смысла не вижу, для меня главное результат а не понты.
MrShoor
Раз ты так хорошо эту тему знаешь, то наверно скажешь как в этом случае быть с depth?
Рендерю я в разные текстуры, но при этом и глубина должна быть разная. Только у функции OMSetRenderTargets задается число рендер-текстур, но похоже только одна депт-текстура:
void OMSetRenderTargets(
UINT NumRenderTargetDescriptors,
const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
BOOL RTsSingleHandleToDescriptorRange,
const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor
);
san
Так и знал что до этого дойдет. :)
Буфер глубины в пределах одного дроуколла менять нельзя.
phridrich
Ну вот... Опять облом...
Хм. Но задача имеет решение, поскольку в Юнити это как-то делается. Суть в том, что там в ВР рендерят сразу два инстанса картинки для двух глаз. Получается некоторая экономия в общем времени рендера, думаю процентов 15-20 так можно сэкономить. Передать во все шейдера две матрицы и их выбирать в зависимости от номера инстанса, это просто. Как таргет менять тоже разобрались. Осталась глубина. Обнулить депт в момент переключения инстанса похоже никак невозможно. Зафигачить два депта тоже. А как быть?
san
> Рендерю я в разные текстуры
Разве текстурный массив биндится как отдельные текстуры?
san
А ты уверен что тебе подойдет именно переключение таргетов? Объект не может попасть в два глаза одновременно?
phridrich
Ну так у меня сейчас две текстуры, просто я рендерю последовательно а можно одновременно. Разумеется обьекты в обоих глазах одинаковые, разница только в матрицах.
Dimich
>Разве текстурный массив биндится как отдельные текстуры?
Как массив. Но доступ по отдельности. А как еще?