Чтение текущего цвета фрагмента в GLSL
1 ответ
В GLSL такого нет. Я могу придумать пару способов добиться этого эффекта в ГЛ:
- как @Rabbid уже предлагает в комментарии, используйте Blending.
- Другая редко используемая особенность GL, которая могла бы достичь такого эффекта, - это логические операции, которые позволяют определять некоторые побитовые операции между входящим исходным цветом (выводом фрагментного шейдера) и целевым цветом в буфере кадров.
- Если вы можете использовать OpenGL 4.5 или
GL_ARB_TEXTURE_BARRIER
Вы можете производить выборку из той же текстуры, в которую пишете, если вы выбираете только из того же текселя, в который будет записывать фрагментный шейдер. Так что это в основном именно то, что вы просили: вы получаете фактическое значение цвета, которое имеет ваш фреймбуфер, в месте расположения этого фрагмента и можете выполнять с ним любые операции, которые вам нравятся. Это требует настройки рендеринга в текстуру. - Используйте рендеринг в текстуру в многопроходном подходе. Сначала визуализируйте ваше обычное изображение в текстуру, а в отдельном проходе - в другую цель рендеринга и скомпонуйте ваши объекты с другим цветом поверх него. Это очень похоже на вариант 3, но не требует GL 4.5 или каких-либо расширенных расширений, подойдут только расширения OpenGL 3.0 или 2.x + FBO.