2013-11-11 5 views
0

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

Это код из метода 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 теряет EAGLContext, когда GLKView устанавливает текущий контекст и не сбрасывает его. Есть ли способ, который я могу исправить или избежать этого?

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

ответ

0

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

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

Смежные вопросы