Собственное расширение iOS AIR с OpenGLES вызывает зависание приложения

Я создал Air Native Extension для iOS, который открывает GLKViewController с GLKView внутри для рендеринга некоторого 3D-контента, все это работает нормально. Когда ViewController закрывается, рендеринг приложения AIR прекращается. Взаимодействие по-прежнему работает (поэтому приложение не зависает), но рендеринг остановился на последнем кадре перед открытием контроллера представления собственного расширения.

Это код из метода viewDidLoad моего контроллера представления (это все, что делает подкласс):

GLKView* view = (GLKView*)self.view;
if( view.context == nil )
{
    EAGLContext *context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
    if (!context)
    {
        NSLog(@"Failed to create ES context");
        return;
    }
    view.context = context; //Removing this fixes flash!
}

Когда я прокомментирую строку view.context = context, Flash продолжит рендеринг в порядке (но, очевидно, у меня больше нет контекста и я не могу рендерить).

Я предполагаю, что Flash теряет свой EAGLContext, когда GLKView устанавливает текущий контекст и не сбрасывает его. Есть ли способ исправить или избежать этого?

Я попытался сохранить текущий EAGLContext перед открытием контроллера представления, а затем сбросить его, когда контроллер представления закрыт, но это не сработало.


person Dylan    schedule 11.11.2013    source источник


Ответы (1)


Чтобы исправить это, мне пришлось сохранить EAGLContext Flash перед настройкой собственного, а затем восстановить Flash после завершения рисования/настройки контекста. Это позволило Flash продолжать рисовать, не зная, что мой контроллер представления также рисует. В итоге я сделал это, используя старый EAGLView и собственный контроллер представления, поскольку было неясно, где GLKView устанавливал контекст.

Конечно, было бы лучше, если бы Flash сам установил контекст, прежде чем пытаться отрисовать кадр, как предлагает Apple!

person Dylan    schedule 11.11.2013