2010-10-30 157 views
3

我在opengl es 1.1中使用了深度緩衝區的教程。但我使用的是opengl es 2.0。實施的代碼導致錯誤:無法完成幀緩衝區對象8cd6。 見實施下面的代碼:在opengl es 2.0中使用深度緩衝區iphone

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

問候 尼克拉斯

回答

2

的問題是,你兩次結合存儲到你的深度渲染,從來沒有你的顏色渲染。您的EAGLContext的-renderbufferStorage:fromDrawable:消息將存儲綁定到當前綁定的渲染緩衝區,在您的情況下它是深度渲染緩衝區。接下來,您使用glRenderbufferStorage呼叫再次將存儲綁定到它。

解決方案是在發送存儲消息之前綁定Color渲染緩衝區,以便存儲受限於此。也就是說,在創建深度渲染緩衝區後,在消息正上方插入一行glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);。它應該工作,我能夠重現你的錯誤,並隨後以這種方式解決它。

NB。始終確保正確的緩衝區被綁定。您可以使用glGetIntegerv()來檢查綁定,並使用glGetRenderbufferParameteriv()來查看其他參數。

+0

嗨,是的,我切換的地方,並把所有的深度緩衝代碼最後,所以它的工作。但是謝謝你的解釋。 – tyuip 2010-11-05 21:26:39