ios - 锁定屏幕或进入后台时 OpenGL ES 应用程序崩溃

标签 ios opengl-es crash

我的应用是一个OpenGL重度使用的应用程序,它被用来处理图像、渲染场景、显示预览等。但是,当我实现多任务后,如Apple的官方文档'OpenGL ES Programming Guide for iOS',很奇怪崩溃仍然偶尔出现。调试导航器堆栈跟踪显示类似“sgxPatchDeferredFramebufferOffsets”、“presentRenderbuffer EXC_BAD_ACCESS”、“gpus_ReturnNotPermittedKillClient”等内容。

所以,我想知道到底应该怎样实现 OpenGL ES 多任务。

=============更新:问题已解决============

感谢您的回答,CStreel 和其他试图提供帮助的人。

再看一遍《OpenGL ES Programming Guide for iOS》中的'Background Applications May Not Execute Commands on the Graphics Hardware'部分,我对这个问题有了新的认识。

我的应用程序的最大问题是我不应该在通知方法中实现 OpenGL ES 多任务。因为与委托(delegate)方法不同,通知方法将被异步调用,这些停止动画操作和 glFinish () 调用可能不会在应用程序已经进入后台时生效。当我在执行一系列 OpenGL ES 相关操作时点击锁屏按钮时,这种情况可能会更频繁地发生。

如果你们发现了其他问题,请随时与我联系。

最佳答案

当您的应用程序即将进入后台时,如果您的应用程序调用任何 OGLES 函数,操作系统将立即终止您的应用程序

阅读App States & Multitasking了解更多信息 阅读 Being a Responsible Background App

以下是该文档的一些摘录:

(Required) When moving to the background, make sure your app adjusts its behavior appropriately.

关于 OGLES

 ...the app should stop calling OpenGL ES functions.

关于ios - 锁定屏幕或进入后台时 OpenGL ES 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12926495/

相关文章:

ios - 将 LLDB 附加到连接到计算机的 iPhone 上的应用程序 - 命令行

ios - 如何计算核心数据中的连续天数?

android - 从 0,0 坐标在 OpenGL Android 中绘制纹理

javascript - WebGL 中的多个程序不起作用

crash - 12小时后Arduino 'crashed?'

c++ - 发布版本中的程序崩溃

java - 单击 TextView 时应用程序崩溃

iOS:将字符串参数传递给函数,但另一端为 NULL?

ios - 在 Swift 3 中使用带有管道分隔符的正则表达式来过滤匹配项

javascript - 如何在 WebGL 中使用多个纹理?