Я бы хотел выполнить рендеринг с наложением на прозрачный буфер кадров.Поэтому обычно стандартное смешивание цветов
SRCa * SRCrgb + (1 - SRCa) * DSTrgb
работает хорошо, если только вы предполагаете, что целевая альфа всегда равна единице.Рисование на прозрачном буфере кадров оставляет артефакты, поскольку исходный цвет становится блеклым с цветом, который не отображается в первую очередь.
Решение этого вопроса было бы довольно простым.Я мог бы умножить целевой цвет на целевую альфу, чтобы не было блек, если DSTa равен нулю.Идеальное уравнение будет выглядеть примерно так:
SRCrgb * (1 - (1 - SRCa) * DSTa) + DSTrgb * (1 - SRCa) * DSTa
Но OpenGL не позволит мне сделать это легко.Я действительно разочарован смешиванием OpenGL.
Есть ли какой-нибудь трюк OpenGL, который позволил бы мне рисовать на прозрачном буфере кадров со стандартным смешиванием?(Конечно, я могу просто отключить смешивание, но смысл в том, чтобы заставить его работать и с заполненным буфером кадров; содержимое буфера не определено, оно может быть прозрачным, а может и не быть.)
У меня есть только две идеи: нарисовать все, что отображается за буфером прозрачной рамки.Что вызовет больше проблем, чем исправит.Другим было бы выполнить такое смешивание с фрагментным шейдером, что, к сожалению, очень хлопотно.
Есть ли другой способ?