2017-01-03 8 views
-1

Я пытаюсь реализовать эффект DOF в моем шейдере. В шейдере у меня есть цветная текстура + смещение для размытия. Мне нужно добавить смещение для RGB и моего собственного канала A, который я делаю в шейдере раньше. Как заменить альфа-канал за один шаг? Я не могу найти что-то подходящее среди функций GLSL. Спасибо!Заменить альфа для текстуры в шейдер

+0

Это не очень понятно, вы хотите отбирать текстуру и сохранять новое значение в своем альфа-канале, все в одном шейдере? – pleluron

+0

** pleluron ** Да, это! Не сложно для меня реализовать это за пределами шейдера, но интересно, как это решить. – OpenglNoob

+0

Какую версию OpenGL вы используете? – pleluron

ответ

1

Да, в качестве входных и выходных данных можно использовать текстуры (или, скорее, изображения), но вы не должны этого делать.

Для того,

OpenGL 4.2 представляет Image Load/Store, способ чтения и записи изображений, но вам нужно управлять синхронизацией самостоятельно (с вызовами barrier() и *Barrier()). Это предназначено для данных, которые должны считываться и записываться, например, атомные счетчики, значения прозрачности ...

В вашем случае есть два набора данных: цвета и смещения. Один будет читать только, а другой только написан. Лучше просто отделить два и просто рассматривать их как обычные входы/выходы (привязка текстуры/привязка FBO). Если вы использовали одну текстуру для двух наборов, она будет рассматриваться как одна сущность для синхронизации, что приведет к большему количеству ожиданий в другом месте.