2010-08-31 3 views
17

Je reçois une erreur GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT après avoir essayé de créer un framebuffer qui restitue une texture. Je ne peux pas comprendre ce qui ne va pas, toute aide est grandement appréciée.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT en essayant d'attacher la texture

Édition: Corrigé! Code de travail:

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

Remarque: Si votre version ne fonctionne pas, assurez-vous de vérifier les erreurs après chaque appel et que vous effacez l'erreur avant votre premier appel, sinon vous serez vérification d'erreur le code avant cela.

+4

Je comparais mon code à cet extrait pour essayer de trouver une erreur. Pour Android OpenGL ES 2.0, la capture pour moi était GL_DEPTH_COMPONENT vs GL_DEPTH_COMPONENT16. Dans glRenderBufferStorage, assurez-vous que le composant de profondeur est GL_DEPTH_COMPONENT16. Difficile à attraper car chaque ligne de code était identique à votre extrait. – Halsafar

+7

Vous devriez également laisser le mauvais code, de sorte que les gens qui le lisent après le fait peuvent voir la solution. Ou au moins expliquer ce que vous avez vérifié. Peu importe, merci de montrer le code fixe. – Arelius

+0

@Halsafar Oui, c'est une erreur assez commune. C'est une bonne chose que vous l'ayez noté. Cependant, si vous avez vérifié la présence d'erreurs, vous remarquerez cette erreur beaucoup plus rapidement, d'où mon dernier commentaire "vérifier l'erreur après chaque appel". – Nick

Répondre

7

Il est probable que la texture soit incomplète. Le MIN_FILTER par défaut pour une texture spécifie mipmapping, mais vous avez fourni uniquement pour le niveau de texture 0, donc la texture elle-même est incomplète.

Ajoutez des appels à glTexParamter pour définir MIN_FILTER sur l'un des modes non mipmapped.

+0

J'ai ajouté des appels pour créer une texture non mipmapped, mais cela entraîne la même erreur. Encore merci, apprendre en chemin. – Nick

+0

C'était une texture incomplète! Pas à cause des Mipmaps, mais à cause d'autres choses. Le code de travail est dans le texte de la question. Merci beaucoup. – Nick

+1

J'avais deux erreurs confuses dans mon cas: [1] J'essayais d'utiliser une texture GL_LUMINANCE comme cible (magiquement non autorisée, pour une raison quelconque), et [2] je n'avais pas glBindTexture (GL_TEXTURE_2D, 0) avant glFramebufferTexture2D (...) –

Questions connexes