在OpenGL中渲染到纹理后,Alpha通道值始终返回1.0

在OpenGL中渲染到纹理后,Alpha通道值始终返回1.0,opengl,glsl,fbo,render-to-texture,Opengl,Glsl,Fbo,Render To Texture,这个问题快把我逼疯了,因为代码以前工作得很好。我有一个片段着色器,它根据alpha通道中设置的值组合两个纹理。使用FBO将输出渲染到第三个纹理 因为我需要对组合纹理执行后处理步骤,所以我检查alpha通道的值以确定该纹理是否需要后处理(即,我使用alpha通道值作为遮罩)。问题是,后处理着色器正在为输入纹理中的所有纹理读取1.0的值 以下是结合两种纹理的片段着色器: uniform samplerRect tex1; uniform samplerRect tex2; in vec2 vTex

这个问题快把我逼疯了,因为代码以前工作得很好。我有一个片段着色器,它根据alpha通道中设置的值组合两个纹理。使用FBO将输出渲染到第三个纹理

因为我需要对组合纹理执行后处理步骤,所以我检查alpha通道的值以确定该纹理是否需要后处理(即,我使用alpha通道值作为遮罩)。问题是,后处理着色器正在为输入纹理中的所有纹理读取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);
在连接FBO之前,我甚至添加了一个调用
glColorMask(GL\u-TRUE,GL\u-TRUE,GL\u-TRUE)
!下一阶段的碎片着色器对所有texel读取1.0可能会出现什么问题


注意:我检查了我组合的两种纹理中的纹理的alpha通道值是否都是1.0。实际上,它们中的大多数都不是。

您是否启用了混合功能?如果是这样,纹理中的上一个值可能会生成
1
s。@jozxyqk未禁用任何混合。我想我知道问题出在哪里了。但我仍在努力理解发生了什么,以及为什么我能够在某个阶段之前获得输出。将纹理对象绑定到
GL\u texture\u RECTANGLE
时缺少一行,我在将代码集成到另一个模块时忘记添加该行。