2010-06-29 4 views
0

Apple에서 제공하는 EAGLView 예제를 기반으로하는 3D 프로젝트가 있습니다. EAGLContext는 OpenGLES에서 작동하지 않습니다. 1 iphone os

내가 컨텍스트 (나는 생각한다)와 매우 이상한 버그를 가지고, 내 컨텍스트를 사용하여 만들 수 있습니다 :

[컨텍스트 renderbufferStorage : GL_RENDERBUFFER_OES fromDrawable : (CAEAGLLayer *) self.layer]

3D보기가 작동하고 레이아웃 하위보기에서 내 frameBuffer가 다시 만들기를 파괴합니다. 그러나 어떤 경우에는 프레임 버퍼가 생성되지 않습니다. 그것은 직장이나하지 왜 이해가 안

- (BOOL)createFramebuffer 
{ 
    NSLog(@"[EAGLVIEW] create framebuffer"); 

    glGenFramebuffersOES(1, &viewFramebuffer); 
    glGenRenderbuffersOES(1, &viewRenderbuffer); 

    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); 


    //////// HERE, some time the context is 0 ///////// 
    [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer]; 
    ////////////////////// 


    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer); 

    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); 
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); 


    // On génère le tampon de profondeur -- bah oui, on fait de la 3D 
    glGenRenderbuffersOES(1, &depthRenderbuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); 
    // On paramètre le tampon : 
    // - avec les dimensions que l'on veut 
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight); 
    //glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES, backingWidth, backingHeight); 
    // - avec la profondeur que l'on veut 
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); 


    if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) { 
     NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); 
     return NO; 
    } 

    return YES; 
} 

: 나는 상황 "창조"에서하게 문제를 찾을 수있는 디버거를 검색 할 수 있습니다. 이 버그가 생겼을 때 강제로 layoutSubview를 실행하도록 iPhone을 돌리면 작동합니다. 매우 이상합니다.

두 번째로 컨텍스트를 만들지 않은 이유는 무엇이며 나중에 완료됩니다.

답변

0

컨텍스트를 실제로 작성한 방법을 보여주는 코드를 게시하지 않았습니다. 컨텍스트 생성은 다음과 같아야합니다.

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

if (!context || ![EAGLContext setCurrentContext:context]) 
    return false; 

컨텍스트가 0 (즉, 없음)이면 수동으로 검색합니다.

관련 문제