Я пишу приложение, в котором пользователю разрешено переключаться между различными шейдерами и их комбинациями.Поэтому я хочу рисовать одну и ту же сцену несколько раз.
В конце все проходы должны быть объединены в один выход.Чтобы объединить все проходы, я думал об использовании glblendfunc, но я не получил желаемый результат.
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//use first shader
draw();
if (secondShaderWished) {
//use second shader
draw()
}
В каждом вызове рисования я рисую текстуру, которая имеет альфа-значения, например, прозрачные области.Конечный результат, который я получаю, заключается в том, что я вижу в основном эффект последнего прохода рендеринга, но на границе (где значения альфа-канала немного падают) я вижу первые эффекты шейдера.Я думаю, что мне следует использовать второй glBlendFunc, который позволяет смешивать два прохода, но я не могу придумать, как не трогать ни одно из значений альфа, что уничтожило бы желаемый эффект.
Чтоя должен делать?Есть ли что-то еще, кроме alphablending?
Редактировать: Моя цель - объединить один или несколько проходов.Я хочу смешать цвета (скорее всего, сложив их вместе), поскольку цвет каждого пути рассчитывается с помощью следующей функции смешивания для разных слоев: glBlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
* 1011РЕДАКТИРОВАТЬ: Привет еще раз!Я работаю над этой проблемой, но я застрял.Я не понимаю, как правильно установить sampler2d в любом шейдере ... Что я делаю не так?
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _FBO)
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _Tex);
glViewport(0, 0, viewportSize.x(), viewportSize.y());
draw();
GLuint texLocation = glGetUniformLocation(_shader->getProgramID(),"pass0");
glUniform1i(texLocation, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);