代码之家  ›  专栏  ›  技术社区  ›  Nick

GL\u FRAMEBUFFER\u尝试附加纹理时附加不完整\u

  •  18
  • Nick  · 技术社区  · 15 年前

    我出错了 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 回复  |  直到 10 年前
        1
  •  9
  •   Frogblast    15 年前

    很可能纹理不完整。纹理的默认MIN\u过滤器指定mipmapping,但是您只为纹理级别0提供了,因此纹理本身是不完整的。

    添加对gltexparameter的调用,以将MIN\u筛选器设置为非mipmapped模式之一。