Фрагментному шейдеру не даны текущие значения буфера для фрагмента, с которым он работает. Попытки прочитать эти значения, используя эти буферы в качестве текстур, в случае general не приведут к разумным результатам. Это «неопределенное поведение».
Есть определенные конкретные случаи, когда он может работать.
Во-первых, вы можете использовать текстурные барьеры . Технически это расширение NVIDIA, но ATI также широко его поддерживает. Барьер - это в основном кэш-флэш. Это позволяет вам связывать текущие цели рендеринга как текстуры и читать их: ровно один раз. Вы можете выполнить одно чтение, и после этого вы вернетесь к «неопределенному поведению», если не используете другой барьер для очистки кэша.
Прямое чтение / запись изображения - это функция, уникальная для оборудования класса GL 4.x (также известного как DX11). Это позволяет вам произвольно читать и записывать связанные изображения. Однако для этого вам нужно синхронизировать доступ между различными экземплярами шейдеров. Этот подход требует много предостережений, поэтому вам следует прочитать о том, как это сделать.