Question

I suivie d'un tutoriel en utilisant un tampon de profondeur dans OpenGL ES 1.1. Mais j'utilise OpenGL2.0. Les résultats de code mis en œuvre une erreur: faire 8cd6 Failed complet d'objets framebuffer. Voir ci-dessous le code mis en œuvre:

 (void)createFramebuffer
{
   if (context && !defaultFramebuffer)
   {
        [EAGLContext setCurrentContext:context];

        // Create default framebuffer object.
        glGenFramebuffers(1, &defaultFramebuffer);
        glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);

        // Create color render buffer and allocate backing store.
        glGenRenderbuffers(1, &colorRenderbuffer);
        glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);

        // Create depth render buffer
        glGenRenderbuffers(1, &depthRenderbuffer);
        glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);

        [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer *)self.layer];
        glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &framebufferWidth);
        glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &framebufferHeight);

        glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, framebufferWidth, framebufferHeight);

    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);


        if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
            NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
    }
}

Cordialement Niclas

Était-ce utile?

La solution

Le problème est que vous deux fois le stockage de liaison à votre profondeur renderbuffer, et jamais à votre renderbuffer couleur. Le message de -renderbufferStorage:fromDrawable: à votre EAGLContext lie un stockage à la renderbuffer actuellement lié, ce qui dans votre cas est la profondeur renderbuffer. À la suite, vous stockage lier à nouveau en utilisant l'appel glRenderbufferStorage.

La solution consiste à lier la couleur renderbuffer avant d'envoyer le message de stockage, de sorte que le stockage se limite à cela. C'est, insérer une glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer); ligne directement au-dessus du message, après avoir créé votre profondeur renderbuffer. Il faut travailler, je suis en mesure de reproduire votre erreur et résoudre par la suite de cette façon.

NB. Assurez-vous toujours que les tampons corrects sont liés. Vous pouvez vérifier à l'aide glGetIntegerv() pour la liaison et glGetRenderbufferParameteriv() pour les paramètres supplémentaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top