Hy снова. Я должен добавить отложенное затенение в моем движке dx11, но у меня есть вопрос архитектуры. Я думал о том, чтобы сначала отобразить gbuffer с помощью MRT, передать его в вычислительный шейдер, отправить и затем вывести результат. Мой вопрос в том, должен ли я создать две цепи подкачки, одну для рендеринга gbuffer и один uav, чтобы отобразить вычисляющий шейдер в backbuffer и представить или есть другой способ сделать это ?. То, что я пытаюсь избежать здесь, - это использовать полноразмерный квадрат и визуализировать на нем вывод cs. Слишком много накладных расходов. Заранее спасибо.Отложенное затенение с использованием вычислительного шейдера, нескольких swapchains?
0
A
ответ
1
EDIT: Мне нужно добавить, что вы получаете предупреждения о некоторых состояниях, поэтому используйте их с осторожностью.
В конце два обменных места не нужны. Сначала вы создаете свой backbuffer с флагом DXGI_USAGE_UNORDERED_ACCESS. Затем создайте цель рендеринга. Передайте свою сцену этой цели, передайте ее в вычислительный шейдер как Texture2D и передайте backbuffer как RWTexture2D в вычислительный шейдер. Тогда просто отправьте cs, подарок и сделано! Вы получили вывод cs на экране.
Создание цепочки подкачки с флагом DXGI_USAGE_UNORDERED_ACCESS позволяет использовать ее в качестве входного сигнала для вычислительного шейдера. Я просто попробовал, и у вас есть DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS в той же цепочке подкачки, поэтому я попытаюсь запустить вычислительный шейдер, используя эту цепочку подкачки. если он работает, тогда мне не нужны две цепи подкачки –