Opengl 清除绘图帧缓冲区仅在连接到GL_COLOR_ATTACHMENT0时有效?

Opengl 清除绘图帧缓冲区仅在连接到GL_COLOR_ATTACHMENT0时有效?,opengl,textures,framebuffer,Opengl,Textures,Framebuffer,我正在尝试使用DRAW framebuffer(如所建议的)初始化一个全为零的纹理。然而,我很困惑,我的绘图帧缓冲区只有在我将其附加到GL\u COLOR\u ATTACHMENT0时才被清除: int levels = 2; int potW = 2; int potH = 2; GLuint _potTextureName; glGenTextures(1, &_potTextureName); glBindTexture(GL_TEXTURE

我正在尝试使用DRAW framebuffer(如所建议的)初始化一个全为零的纹理。然而,我很困惑,我的绘图帧缓冲区只有在我将其附加到
GL\u COLOR\u ATTACHMENT0时才被清除:

    int levels = 2;
    int potW = 2; int potH = 2;
    GLuint _potTextureName;
    glGenTextures(1, &_potTextureName);
    glBindTexture(GL_TEXTURE_2D, _potTextureName);
    glTexStorage2D(GL_TEXTURE_2D, levels, GL_RGBA32F, potW, potH);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _potTextureName, 0);
    glDrawBuffer(GL_COLOR_ATTACHMENT0);

    GLuint clearColor[4] = {0,0,0,0};
    glClearBufferuiv(GL_COLOR, 0, clearColor);
修改代码段以使用
GL\u COLOR\u ATTACHMENT1
,保留所有其他内容,将不会清除帧缓冲区:

    int levels = 2;
    int potW = 2; int potH = 2;
    GLuint _potTextureName;
    glGenTextures(1, &_potTextureName);
    glBindTexture(GL_TEXTURE_2D, _potTextureName);
    glTexStorage2D(GL_TEXTURE_2D, levels, GL_RGBA32F, potW, potH);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, _potTextureName, 0);
    glDrawBuffer(GL_COLOR_ATTACHMENT1);

    GLuint clearColor[4] = {0,0,0,0};
    glClearBufferuiv(GL_COLOR, 0, clearColor);

我试着按照建议使用
glDrawBuffers
,我也试着使用
glClearColor
glClear
,但它们的行为方式都是一样的。我在这里遗漏了什么?

事实证明,它与我以前绑定到的
GL\u COLOR\u ATTACHMENT0
有关

在第二种情况下,
GL\u COLOR\u ATTACHMENT0
已绑定到较小尺寸的纹理。值得注意的是,尽管纹理大小没有限制,但FBO的有效大小是所有绑定图像大小的交点。因此,在我的第二种情况下,如果绑定到
GL\u COLOR\u ATTACHMENT1
的纹理(1)比绑定到
GL\u COLOR\u ATTACHMENT0
的纹理(1)更大,那么无论我使用了什么清除操作(
glClear
glclearbufuffer*
),纹理(1)都只会被部分清除


第一种情况对我来说是可行的,因为我只有一个绑定到FBO的纹理,在
GL\u COLOR\u ATTACHMENT0

中,第二个代码段使用了一个可能不同的值作为
glTexStorage2D()
的格式参数。您使用的是什么OpenGL版本?我可以想象触发这种行为的一件事可能是,您仍然在颜色附件0处绑定了一些其他纹理/渲染缓冲区,这与新图像不匹配(例如采样数或层不匹配)。您应该检查帧缓冲区完整性状态。您还应该检查总账错误。@derhass,谢谢您指出完整性问题。结果证明是相关的,我只是把我的发现作为一个答案发布了出来。@RetoKoradi,谢谢。我编辑了我的问题以使它更清楚。我用的是4.1。