尝试附加纹理时GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

时间:2010-08-31 23:11:45

标签: opengl-es

在我尝试创建渲染到纹理的帧缓冲区后,我收到错误GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT。我无法弄清楚出了什么问题,非常感谢任何帮助。

编辑:修正了!工作代码:

    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 768, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
    glBindTexture(GL_TEXTURE_2D, 0);

    glGenRenderbuffers(1, &rboID);
    glBindRenderbuffer(GL_RENDERBUFFER, rboID);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 768, 1024);
    glBindRenderbuffer(GL_RENDERBUFFER, 0);

    glGenFramebuffers(1, &backFramebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, backFramebuffer);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rboID);
    [self checkFramebufferStatus];
    glBindFramebuffer(GL_FRAMEBUFFER, 0);

注意:如果您的版本不起作用,请确保在每次通话后检查错误并在第一次通话之前清除错误,否则您将在此之前对错误进行错误检查。

1 个答案:

答案 0 :(得分:7)

纹理可能不完整。纹理的默认MIN_FILTER指定mipmapping,但您仅为纹理级别0提供,因此纹理本身不完整。

添加对glTexParamter的调用,将MIN_FILTER设置为非mipmapped模式之一。