1

This problem is driving me crazy since the code was working perfectly before. I have a fragment shader which combines two textures based on the value set in the alpha channel. The output is rendered to a third texture using an FBO.

Since I need to perform a post-processing step on the combined texture, I check the value of the alpha channel to determine whether that texel will need post-processing or not (i.e., I'm using the alpha channel value as a mask). The problem is, the post-processing shader is reading a value of 1.0 for all the texels in the input texture!

Here is the fragment shader that combines the two textures:

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;
    }
}

The texture object that I attach to the FBO is set up as follows:

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);

Code that attaches the texture to the FBO is:

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_RECTANGLE, glBufferTex, 0);

I even added a call to glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) before attaching the FBO! What could possibly be going wrong that is making the next stage fragment shader read 1.0 for all texels?!

NOTE: I did check that not all the values of the alpha channel for texels in the two textures that I combine are 1.0. Most of them actually are not.

informer2000
  • 399
  • 6
  • 20
  • Do you have blending enabled? If so, the previous value in the texture may be producing your `1`s. – jozxyqk Nov 25 '13 at 14:00
  • @jozxyqk No blending is disabled. I believe I figured out what the problem was. But I'm still trying to understand what was happening and why I was able to get an output until a certain stage. It was a missing line for binding the texture object to `GL_TEXTURE_RECTANGLE` that I forgot to add when I integrated the code into another module. – informer2000 Nov 25 '13 at 21:38

0 Answers0