【问题标题】:iOS AIR Native Extension With OpenGLES Causes App To Freeze带有 OpenGLES 的 iOS AIR 原生扩展导致应用程序冻结
【发布时间】:2013-11-11 00:36:04
【问题描述】:

我为 iOS 创建了一个 Air Native Extension,它打开了一个 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 将继续正常渲染(但显然,我不再有上下文并且无法渲染)。

我假设当 GLKView 设置当前上下文并且没有重置它时,Flash 正在丢失它的 EAGLContext。有什么办法可以解决或避免这种情况吗?

我曾尝试在打开视图控制器之前保存当前的 EAGLContext,然后在视图控制器关闭时重置它,但没有奏效。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 2012-03-01
      • 2021-08-31
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多