Эта проблема сводит меня с ума, так как раньше код работал отлично. У меня есть фрагментный шейдер, который объединяет две текстуры на основе значения, установленного в альфа-канале. Вывод визуализируется в третью текстуру с использованием FBO.
Поскольку мне нужно выполнить шаг постобработки комбинированной текстуры, я проверяю значение альфа-канала, чтобы определить, потребуется ли этому текселу постобработка или нет (т. е. я использую значение альфа-канала в качестве маски) . Проблема в том, что шейдер постобработки считывает значение 1.0 для всех текселей во входной текстуре!
Вот фрагментный шейдер, который объединяет две текстуры:
uniform samplerRect tex1;
uniform samplerRect tex2;
in vec2 vTexCoord;
out vec4 fColor;
void main(void) {
vec4 color1, color2;
color1 = texture(tex1, vTexCoord.st);
color2 = texture(tex2, vTexCoord.st);
if (color1.a == 1.0) {
fColor = color2;
} else if (color2.a == 1.0) {
fColor = color1;
} else {
fColor = (color1 + color2) / 2.0;
}
}
Объект текстуры, который я прикрепляю к FBO, настроен следующим образом:
glGenTextures(1, &glBufferTex);
glBindTexture(GL_TEXTURE_RECTANGLE, glBufferTex);
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
Код, который прикрепляет текстуру к FBO:
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, glBufferTex, 0);
Я даже добавил вызов glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE)
перед подключением FBO! Что может пойти не так, из-за чего фрагментный шейдер следующего этапа читает 1.0 для всех текселей?!
ПРИМЕЧАНИЕ. Я проверил, что не все значения альфа-канала для текселей в двух текстурах, которые я объединяю, равны 1,0. Большинство из них на самом деле не таковы.
1
s. - person jozxyqk   schedule 25.11.2013GL_TEXTURE_RECTANGLE
, которую я забыл добавить, когда интегрировал код в другой модуль. - person informer2000   schedule 26.11.2013