我创建的第二个FBO收到GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT,但第一个FBO却没有

时间:2019-01-02 16:53:05

标签: opengl framebuffer fbo

我有一个OpenGL应用程序,除了默认的帧缓冲区外还带有一个FBO。一切正常。

然后,我尝试使用与第一个FBO相同的代码添加第二个FBO,突然它不再起作用。仅对于第二个FBO,我会获得以下状态:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

我的第一个FBO仍按预期工作,没有任何问题。我进行了两次和三次检查,确认两个FBO均使用相同的代码生成。我什至再次浏览了www.khronos.org/opengl/wiki/上的OpenGL Wiki页面,以确保我正确使用了所有这些OpenGL方法。

每次调用OpenGL函数后,我都会检查OpenGL错误。

public void createFBO(int width, int height) {
    glNameFbo = glGenFramebuffers();
    checkForGLErrors();
    glBindFramebuffer(GL_FRAMEBUFFER, glNameFbo);
    checkForGLErrors();

    glEnable(GL_TEXTURE_2D);
    checkForGLErrors();
    glNameTex = GL11.glGenTextures();
    checkForGLErrors();
    glBindTexture(GL_TEXTURE_2D, glNameTex);
    checkForGLErrors();
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL11.GL_RGBA, GL_UNSIGNED_BYTE, 0);
    checkForGLErrors();
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    checkForGLErrors();
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    checkForGLErrors();

    glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, glNameTex, 0);
    checkForGLErrors();
    glDrawBuffers(GL_COLOR_ATTACHMENT0);
    checkForGLErrors();

    int fboStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);
    checkForGLErrors();
    if(fboStatus != GL_FRAMEBUFFER_COMPLETE) {
        System.err.println("Error when creating FBO: "+getFrameBufferStatus(fboStatus));
    }
    glBindFramebuffer(GL_FRAMEBUFFER, 0);
    checkForGLErrors();
}

感谢任何能够带领我朝正确方向前进的人!

1 个答案:

答案 0 :(得分:1)

好吧,我很傻。正如评论中指出的那样,事实证明问题出在我传递给FBO创建方法的“宽度”和“高度”。我的第一个FBO是使用窗口大小创建的,但是我的第二个FBO的两个尺寸都传递了0。

问题代码似乎很好。