使用OpenGLES的iOS AIR原生扩展导致应用程序冻结

时间:2013-11-11 00:36:04

标签: ios opengl-es air air-native-extension

我为iOS创建了一个Air Native Extension,打开一个GLKViewController,里面有一个GLKView来渲染一些3D内容,这一切都很好。当ViewController被关闭时,AIR App已停止渲染。交互仍然有效(因此应用程序未被冻结),但在本机扩展的视图控制器打开之前,渲染已在最后一帧停止。

这是来自我的视图控制器的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会继续正常呈现(但很明显,我不再有上下文而且无法呈现)。

我认为当GLKView设置当前上下文并且没有重置它时,Flash正在丢失它的EAGLContext。有没有办法可以修复或避免这种情况?

我试图在打开视图控制器之前保存当前的EAGLContext,然后在视图控制器关闭时重置它,但这不起作用。

1 个答案:

答案 0 :(得分:0)

要解决这个问题,我必须在设置自己之前保存Flash的EAGLContext,然后在完成绘制/设置上下文后恢复Flash。这让Flash继续绘制而不知道我的视图控制器也在绘图。我最后使用旧的EAGLView和自定义视图控制器执行此操作,因为不清楚GLKView在哪里设置上下文。

当然,在尝试绘制框架之前,Flash会更好地设置上下文,就像Apple建议的那样!