Я пытаюсь «прочитать» текстуру, прикрепленную к первому FBO (fboA), модифицирую ее (с помощью фрагментного шейдера) и выполнить рендеринг во второе FBO (fboB).
Я не могуЧтобы понять это, я получил только черную или белую текстуру.
Вот код:
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboB);
glEnable(GL_TEXTURE_RECTANGLE_ARB);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, textureFromFboA);
GLuint t1Location = glGetUniformLocation(shaderProgram, "texture");
glUniform1i(t1Location, 0);
glUseProgram(shaderProgram);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex2f (0.0f, 0.0f);
glTexCoord2f(imageRect.size.width, 0.0f);
glVertex2f (imageRect.size.width, 0.0f);
glTexCoord2f(imageRect.size.width, imageRect.size.height);
glVertex2f (imageRect.size.width, imageRect.size.height);
glTexCoord2f(0.0f, imageRect.size.height);
glVertex2f (0.0f,imageRect.size.height);
glEnd();
glDisable(GL_TEXTURE_RECTANGLE_ARB);
glFlush();
glUseProgram(0);
Это код фрагмента шейдера:
#version 120
uniform sampler2D texture;
void main(void)
{
gl_FragColor = texture2D(texture, gl_TexCoord[0].st) * 0.8;
}
Я ожидаю, что в fboB будет отображаться более темная текстура, но я получаю только черную текстуру.Это также происходит, если я пишу gl_FragColor = texture2D(texture, gl_TexCoord[0].st);
.
Наоборот, если я пишу gl_FragColor = vec2(1.0, 0.0, 0.0, 1.0);
, у меня правильно выводится вся красная текстура.
Если я закомментирую glUseProgram()
Скажите, код работает нормально, а текстура в fboB является точной копией текстуры в fboA.
Почему это происходит?Я что-то упустил?