Domanda

ho seguito un tutorial utilizzando buffer di profondità nel es OpenGL 1.1. Ma io uso OpenGL ES 2.0. I risultati codice implementato in un errore: è riuscito a fare completa 8cd6 oggetto framebuffer. Vedere codice implementato sotto:

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

Saluti Niclas

È stato utile?

Soluzione

Il problema è che si sta per due volte legame di memoria al renderbuffer profondità, e mai al tuo renderbuffer colore. Il messaggio -renderbufferStorage:fromDrawable: al tuo EAGLContext si lega un deposito al renderbuffer attualmente vincolati, che nel tuo caso è il renderbuffer profondità. In seguito, si sta vincolante di stoccaggio ad esso di nuovo utilizzando la chiamata glRenderbufferStorage.

La soluzione è quella di associare il colore renderbuffer prima di inviare il messaggio di storage, in modo che l'archiviazione ottiene limiti a questo. Cioè, inserire una linea di glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer); direttamente sopra il messaggio, dopo aver creato il vostro renderbuffer profondità. Dovrebbe funzionare, sono stato in grado di riprodurre l'errore e successivamente risolverlo in questo modo.

NB. Sempre assicurarsi che i buffer corrette sono vincolati. È possibile controllare usando glGetIntegerv() per il legame, e glGetRenderbufferParameteriv() per parametri aggiuntivi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top