我接着使用深度缓冲器中的OpenGL ES 1.1的教程。但是,我使用的OpenGL ES 2.0。该实现的代码导致错误:未能使完整的帧缓冲区对象8cd6。 看到实现的代码如下:

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

此致 尼克拉斯

有帮助吗?

解决方案

问题是,你两次结合存储到你的深度渲染,从来没有你的颜色渲染。该-renderbufferStorage:fromDrawable:消息给你的EAGLContext结合存储到当前绑定的渲染,而你的情况是深度渲染。之后,你再次使用glRenderbufferStorage调用结合存储到它。

的解决方案是结合之前发送所述存储的消息的颜色渲染,从而存储获取范围到。也就是说,插入一行glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);直接上述消息,您创建深度渲染后。它应该工作,我能够重现你的错误,然后解决它以这种方式。

NB。始终确保正确的缓冲区的约束。可以检查使用glGetIntegerv()用于结合,并为glGetRenderbufferParameteriv()附加参数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top