2010-12-07 81 views
3

我用這個代碼:使用深度渲染緩衝區有什麼問題? OpenGL ES 2.0的

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 

    if (!context || ![EAGLContext setCurrentContext:context] || ![self loadShaders]) 
    { 
     [self release]; 
     return nil; 
    } 

    glGenFramebuffers(1, &defaultFramebuffer); 
    glGenRenderbuffers(1, &colorRenderbuffer); 
    glGenRenderbuffers(1, &depthRenderbuffer); 

    glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer); 
    glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer); 
    glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer); 

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

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 

但是當我乳寧的應用程序,我看到紫色的屏幕?這段代碼有什麼問題?

回答

6

我沒有看到你將顏色渲染緩衝區綁定到CAEAGLLayer的位置(儘管這可能會在稍後發生),並且我沒有看到啓用深度測試。另外,如果我沒有弄錯,你需要綁定顏色渲染緩衝區,爲此調用glFramebufferRenderbuffer(),然後綁定深度渲染緩衝區並再次調用它。

以下是我已經用於建立一個類似的顯示器上的OpenGL ES 2.0代碼:

glEnable(GL_DEPTH_TEST); 

glGenFramebuffers(1, &viewFramebuffer); 
glBindFramebuffer(GL_FRAMEBUFFER, viewFramebuffer); 

glGenRenderbuffers(1, &viewRenderbuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer); 

[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer]; 

glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth); 
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight); 

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, viewRenderbuffer); 

glGenRenderbuffers(1, &depthRenderbuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer); 
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, backingWidth, backingHeight); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer); 

if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) 
{ 
    NSLog(@"Failure with framebuffer generation"); 
    return NO; 
} 

該申請的完整代碼是可用here

1

我意識到這是多少年,但我做了完全相同的結果,所以我想我會貢獻。

glGenBuffers(1, &_colorRenderBuffer); 

,而不是這個:

glGenRenderbuffers(1, &_colorRenderBuffer); 

最終的結果建立在渲染緩衝器,致使該怎麼在我的項目已經發生的情況是我打的回車鍵太快的自動完成:紫色屏幕。

相關問題