#opengl-es #vulkan #framebuffer
#opengl-es #vulkan #фреймбуфер
Вопрос:
Итак, Vulkan ввел подпасы, а opengl реализует аналогичное поведение с ARM_framebuffer_fetch
В прошлом я успешно использовал framebuffer_fetch для отображения тонов в шейдерах постэффектов.
Тогда ограничение заключалось в том, что можно было читать содержимое фреймбуфера только в месте расположения текущего отображаемого фрагмента.
Теперь мне интересно, есть ли какой-либо способ к настоящему времени в Vulkan (или даже OpenGL ES) для чтения из нескольких мест (например, для реализации ядра blur) без наличия плиточного оборудования для хранения / загрузки в ОЗУ.
Теоретически, я думаю, это должно быть возможно, первый проход wpuld просто должен быть немного больше, чем подпасок размытия, в зависимости от размера ядра (так, например, если размер ядра составлял 4 пикселя, то разрешенная плитка должна быть на 4 пикселя меньше, чем размеры буфера в плитке) и некоторые пикселидолжны были бы отображаться избыточно (на перекрытиях плиток).
Итак, есть ли способ сделать это? Кажется, я припоминаю, что видел какую-то инструкцию Vulkan, связанную с подпасами, которая позволила бы определить размер поддержки (что звучало как то, что я ищу сейчас), но я не могу вспомнить, где я это видел. Итак, мои вопросы:
-
С Vulkan на мобильной архитектуре плиточного рендеринга, возможно ли переадресовать некоторую геометрию и отобразить над ней размытие в полноэкранном режиме, и все это за один проход в тайле (без необходимости аппаратного обеспечения сначала сохранять результат промежуточного прохода в ОЗУ, а затем загружать текстуру из ОЗУпри размытии)? Если да, то как?
-
Если ответ на 1 «да», можно ли это также сделать в OpenGL ES?
Ответ №1:
Короткий ответ, нет. Подпасы Vulkan по-прежнему имеют требования к сопоставлению фрагментов с пикселями 1: 1.