清除DRAW帧缓冲区仅在附加到GL_COLOR_ATTACHMENT0吗?

问题描述 投票:1回答:1

我正在尝试使用this post建议的DRAW帧缓冲区初始化全零的纹理。但是,我很困惑我的DRAW帧缓冲区仅在将其附加到GL_COLOR_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_COLOR_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代替建议的here,并且我也尝试使用glClearColorglClear,但是它们的行为都相同。我在这里想念什么?

我正在尝试使用本文所建议的DRAW帧缓冲区初始化全零的纹理。但是,我很困惑,仅当我将DRAW帧缓冲区附加到...

opengl textures framebuffer
1个回答
0
投票

事实证明,它与我以前绑定到GL_COLOR_ATTACHMENT0的内容有关。

© www.soinside.com 2019 - 2024. All rights reserved.