tags:

views:

75

answers:

1

Hey guys,

I get an error "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT" after I try to create a framebuffer that renders to a texture.

Here's the code: //Bad code is bad

I can't figure out what is wrong, any help is greatly appreciated. If I need to provide more code I'll gladly do so.

Fixed it! Working code:

    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);

If your version doesn't work, make sure you check for errors after each and every call AND that you clear the error before your first call, else you'll be error-checking the code before that. ;-)

+1  A: 

It is likely that the texture is incomplete. The default MIN_FILTER for a texture specifies mipmapping, but you've provided only for Texture Level 0, so the texture itself is incomplete.

Add calls to glTexParamter to set the MIN_FILTER to one of the non-mipmapped modes.

Frogblast
I added calls to create a non-mipmapped texture, but this results in the same error. Still thanks though, learning along the way.
Nick
It was an incomplete texture! Not because of the mipmaps, but because of some other stuff. Working code is in the question text. Thanks a bunch.
Nick