2013-07-03 2 views

ответ

3

Вы можете создать заставку Framebuffer Object с прикрепленной к ней текстурой. Выполните первый рендер, используя glBlendFunc(GL_ONE, GL_ONE), затем переверните входные и выходные текстуры и выполните вторую визуализацию с помощью glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA).

+0

Возможно ли это при одновременном подключении обеих текстур (цветное прикрепление 0 и 1), шейдер, выводящий одинаковый цвет для обоих, и использование двух отдельных комбинаций смешивания для вложений? – leemes

+0

@leemes функции blend являются глобальными, они применяются ко всему. Если вы хотите сделать отдельное смешение, вам придется реализовать его отдельно в своем шейдере. –

+0

Как реализовать смешение в шейдере? AFAIK, шейдер выводит цвет (vec4), который смешивается с конвейером * unprogrammable * render, используя функцию blend func, установленную в главной программе. Конечно, у меня может быть один буфер с предварительной мультиплексированной альфой, второй с «нормальным» альфа-смешиванием, просто выбрав функцию blend, которая работает для премультиплексированной альфы и вручную превзошла альфа-значение второму цвету в шейдере. Но есть сценарии, в которых это не вариант, например. когда я хочу только суммировать цвета во втором буфере, но первый должен делать «нормальное» альфа-смешение. – leemes