为什么这个 OpenGL 帧缓冲区颜色附件不完整?

Why is this OpenGL framebuffer color attachment incomplete?

我一直在关注 this 渲染到 off-screen 纹理的教程,但我在创建渲染目标时遇到了困难。 我已经注册了一个错误回调函数,我得到了一个 GL_DEBUG_TYPE_OTHER 错误返回 GL_DEBUG_SOURCE_API 源,它被 glCheckNamedFramebufferStatus() 吐出并显示消息:

FBO incomplete: color attachment incomplete[0].

我很难看到我在这里遗漏了什么,我仔细检查了我传递给 OpenGL 函数的参数并尝试删除 glTexParameteri 调用但无济于事。

如有任何帮助,我们将不胜感激。

GLuint framebuffer = 0;
GLuint renderedTexture;
GLenum drawBuffers[1] = {GL_COLOR_ATTACHMENTS0};

bool buildOffscreenBuffer()
{
    // creating frame & render texture to draw picker buffer to
    glGenFramebuffers(1,  &framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
    glGenTextures(1, &renderedTexture);
                                                                                              
    glBindTexture(GL_TEXTURE_2D, renderedTexture);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1920, 1080,
            0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
                                                                                              
    // configuring framebuffer
    glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
            renderedTexture, 0);
    glDrawBuffers(1, drawBuffers);
                                                                                              
    return glCheckNamedFramebufferStatus(framebuffer, GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE;
}

更新: 根据 derhass' ,规范似乎不需要 GL_RGB。我已尝试将其更新为 GL_RGBA,但我遇到了同样的错误。由于这可能与实施相关,我将列出我的卡和 driver:

显卡:RX Vega 56

Driver: mesa/amdgpu

根据 GL 规范,GL_RGB 不在 必需的可呈现格式 集合中,因此实现可以自由选择不支持它。请尝试 GL_RGBA

设法弄清了这个问题。我实际上修复了简化 post.

示例的错误
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1920, 1080,
            0, GL_RGBA, GL_UNSIGNED_BYTE, 0);

实际上是从平台层的辅助函数获取宽度和高度,但是该函数返回了我存储在 struct {float, float} 中的 struct {int, int} 。这导致垃圾作为宽度和高度传递给 glTexImage2D