【发布时间】:2012-02-10 15:48:08
【问题描述】:
我正在尝试“读取”附加到第一个 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 中纹理的精确副本。
为什么会这样?我错过了什么吗?
【问题讨论】:
标签: opengl glsl textures fragment-shader fbo