2014-09-30 7 views
1

저는 MainMenuViewController와 GLKViewConrtroller 인 GameViewController를 가지고 있습니다.GLKViewController 및 GLKView - 두 번째 렌더링 시간이 전혀 렌더링되지 않음

처음으로 메인 메뉴에서 GameViewController로 이동하면 모든 것이 잘 처리됩니다. 메인 메뉴로 돌아 가면 GameViewController와 뷰가 dealloced가됩니다.

이제 게임으로 돌아 가면 빈 화면이 나타나고 아무것도 렌더링되지 않습니다. UIKit가있는 오버레이 테스트 메뉴가 아직 있습니다.

이 GameViewController의 dealloc 메서드에서 OpenGL을 제거하는 방법은 마지막 다섯 줄을 추가하여 작동 여부를 확인하므로 작동 여부에 관계없이 작동하지 않습니다. OpenGL은이 상황 사이의 질감과 쉐이더를 공유 할 수있는 장소 -

- (void)tearDownGL { 

[EAGLContext setCurrentContext:self.context]; 

glDeleteBuffers(1, &_vertexBuffer); 
glDeleteVertexArraysOES(1, &_vertexArray); 

self.effect = nil; 

_program = nil; 

glBindVertexArrayOES(0); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 

[EAGLContext setCurrentContext: nil]; 
} 

답변

1

나는 문제가 당신이 sharegroup를 사용하지 않는 것이라고 생각?

다음은 모든 GLKViewController 하위 클래스의 공유 그룹을 만드는 코드입니다. 여러 하위 클래스가있는 경우 적절한 경우 shareGroup을 전역으로 만들기 위해 무언가를해야합니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Create an OpenGL ES context and assign it to the view loaded from storyboard 
    GLKView *view = (GLKView *)self.view; 

    // GLES 3 is not supported on iPhone 4s, 5. It may 'just work' to try 3, but stick with 2, as we don't use the new features, me thinks. 
    //view.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3]; 
    //if (view.context == nil) 
    static EAGLSharegroup* shareGroup = nil; 
    view.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:shareGroup]; 
    if (shareGroup == nil) 
     shareGroup = view.context.sharegroup; 
    ... 
+0

정답이어야합니다. – gbk