(Как) шейдер может просмотреть текущий рендер-буфер? - PullRequest
1 голос
/ 13 декабря 2011

Возможно ли для пиксельного шейдера видеть текущее состояние буфера глубины / цвета / трафарета?

1 Ответ

2 голосов
/ 13 декабря 2011

Фрагментному шейдеру не даны текущие значения буфера для фрагмента, с которым он работает. Попытки прочитать эти значения, используя эти буферы в качестве текстур, в случае general не приведут к разумным результатам. Это «неопределенное поведение».

Есть определенные конкретные случаи, когда он может работать.

Во-первых, вы можете использовать текстурные барьеры . Технически это расширение NVIDIA, но ATI также широко его поддерживает. Барьер - это в основном кэш-флэш. Это позволяет вам связывать текущие цели рендеринга как текстуры и читать их: ровно один раз. Вы можете выполнить одно чтение, и после этого вы вернетесь к «неопределенному поведению», если не используете другой барьер для очистки кэша.

Прямое чтение / запись изображения - это функция, уникальная для оборудования класса GL 4.x (также известного как DX11). Это позволяет вам произвольно читать и записывать связанные изображения. Однако для этого вам нужно синхронизировать доступ между различными экземплярами шейдеров. Этот подход требует много предостережений, поэтому вам следует прочитать о том, как это сделать.

...