2014-09-30 2 views
1

У меня есть MainMenuViewController и GameViewController, который является GLKViewConrtroller.GLKViewController и GLKView - рендеринг ничего во второй раз не создан

В первый раз, когда я перехожу из главного меню в GameViewController, все делается отлично. Если я вернусь в главное меню, GameViewController и его представление будут отменены (я зарегистрировал его).

Когда мы возвращаемся к игре, я вижу пустой экран, ничего не получается рендерингом OpenGL. Наложенное тестовое меню с UIKit все еще существует.

Вот как я разорвал OpenGL в методе dealloc GameViewController, последние пять строк были добавлены в качестве попыток заставить его работать, поэтому он не работает с ними или без них.

- (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 - место, где OpenGL можно разделить текстуры и шейдеры между контекстами?

Вот код, который создаст группу разделов, в которую входит весь ваш подкласс 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