Извините за это, но я думаю, что лучше отвечать, а не комментировать.
Итак, позвольте мне лучше объяснить пример.
Предположим, что нам нужно нарисовать что-либо (независимо от того, что хочет пользователь, как таблица), и после этого (перед тем, как менять буфер, конечно) мы должны нарисовать над ним «сохраненные» текстуры с использованием смешивания.
Предположим, мы должны нарисовать два прозрачных короба. Если эти коробки должны быть сохранены в различной текстуре, это может быть сделано:
- Очистить экран с (0, 0, 0, 0) функция
- набора смеси (GL_ONE, GL_ZERO)
- нарисовать коробку
- сохранить в текстуре.
Теперь, когда пользователь хочет, чтобы перерисовать их всех, он просто рисует главную тему (таблица) и над ней рисует текстуры, используя функцию смешивания (GL_SOURCE_ALPHA, GL_ONE_MINUS_SOURCE_ALPHA).
Это прекрасно работает. Но если пользователь хочет сохранить оба поля в одной текстуре и поля перекрываются, как мы можем сохранить смешение этих двух ящиков, не смешивая их с «очищенным» фоном?
Подводя итог, итоговое изображение всей картины должно быть таблицей с двумя коробками (скажем, желтой и зеленой коробкой) над ней, смешанной с функцией (GL_SOURCE_ALPHA, GL_ONE_MINUS_SOURCE_ALPHA).
Вы пробовали 'glBendFunc'? – Matso
Определите «* make blending work» *. У вас уже есть функция смешивания? То есть, вы комбинируете цвета источника и назначения, или просто хотите условно написать исходный цвет, исходя из того, является ли целевая альфа больше нуля? –
Я пытаюсь достичь второго, чтобы условно написать цвет источника, исходя из того, является ли целевая альфа больше нуля. То, что я пытаюсь сделать, это сохранить буфер обратно на различные текстуры и по требованию перерисовать их поверх заднего буфера (который, скорее всего, будет перерисован с помощью чего-то другого) с помощью функции blend (GL_SOURCE_ALPHA, GL_ONE_MINUS_SOURCE_ALPHA). – aftos