2010-12-07 7 views
3

Ich benutze diesen Code:Was ist falsch bei der Verwendung von Tiefen-Render-Puffer? 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); 

Aber wenn ich die Anwendung bin runing ich lila Bildschirm sehen? Was ist mit diesem Code falsch?

Antwort

6

Ich sehe nicht, wo Sie Ihre Farbe rendernbuffer an die CAEAGLLayer binden, auf der es angezeigt werden soll (obwohl das später passieren kann), und ich sehe nicht Sie Tiefenprüfung aktivieren. Außerdem, wenn ich mich nicht irre, muss man den Farb-Render-Puffer binden, dafür glFramebufferRenderbuffer() aufrufen, dann den Tiefen-Render-Puffer binden und erneut aufrufen.

Im folgenden ist der Code, den ich verwendet habe, 2.0 eine ähnliche Anzeige auf OpenGL ES einzurichten:

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

Der vollständige Code dieser Anwendung ist here.

1

Ich weiß, wie alt das ist, aber ich habe genau das gleiche mit genau den gleichen Ergebnissen, also dachte ich, ich würde beitragen. Was in meinem Projekt geschehen war, war ich die Enter-Taste getroffen zu schnell auf die automatische Vervollständigung, wenn der Puffer machen einrichten, in das entstehende:

glGenBuffers(1, &_colorRenderBuffer); 

statt dessen:

glGenRenderbuffers(1, &_colorRenderBuffer); 

End Ergebnis : lila Bildschirm.