Я хочу реализовать операцию фрагментации / смешивания с использованием OpenGL ES 3.1, которая удовлетворяет следующим требованиям:
Можно ли это сделать с помощью обычных функций смешивания, альфа-трюков и т. Д.?
Я думаю, что вы могли бы просто использовать стандартное предварительно умноженное альфа-смешение:
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
Если вы хотите заменить, вы выводите альфа-значение 1 из вашего фрагментного шейдера. Если вы хотите сделать добавление, вы выводите альфа-значение 0 из вашего фрагментного шейдера.
Это предполагает, что вас действительно интересуют только значения RGB, которые попадают в ваш кадровый буфер.
Если вы знаете это во время затенения вершин, я предполагаю, что целые треугольники являются либо одной смесью, либо другой. Это идеальная вещь для тестирования трафарета при условии, что у вас не слишком много геометрии.
Сколько это стоит, зависит от вашей геометрии, так как вам нужно передать ее на рендеринг несколько раз, но часть тестирования трафарета обычно близка к «бесплатной».