Чтение текущего цвета фрагмента в GLSL - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь нарисовать круг на экране, где цвет круга всегда противоположен цвету того, что было раньше. Похож на перекрестие в Minecraft, цвет которого всегда отличается от того, на котором они в настоящее время сфокусированы. Есть ли способ получить доступ к текущему цвету фрагмента в GLSL?

Minecraft crosshairs

1 Ответ

0 голосов
/ 09 сентября 2018

В GLSL такого нет. Я могу придумать пару способов добиться этого эффекта в GL:

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