[英]OpenGL ES application crashes when locked screen or entered background
我的应用程序是一个大量使用的OpenGL,它用于处理图像,渲染场景,显示预览等。但是,在我实现多任务作为Apple的官方文档“iOS的OpenGL ES编程指南”之后,仍然出现了奇怪的崩溃偶尔起来。 Debug Navigator Stack跟踪显示类似'sgxPatchDeferredFramebufferOffsets','presentRenderbuffer EXC_BAD_ACCESS','gpus_ReturnNotPermittedKillClient'等。
所以,我想知道究竟应该实现什么样的OpenGL ES多任务。
=============更新:解决问题============
感谢您的回答,CStreel和其他试图提供帮助的人。
在第二次“OpenGL ES编程指南”中阅读“背景应用程序可能无法在图形硬件上执行命令”部分后,我逐一了解这个问题。
我的应用程序的一个大问题是我不应该在通知方法中实现OpenGL ES多任务。 因为,与委托方法不同,通知方法将被异步调用,当应用程序已经移入后台时,这些停止动画操作和glFinish()调用可能不会生效。 当我执行一系列与OpenGL ES相关的操作时,当我点击锁定屏幕按钮时,这可能会更频繁地发生。
如果你们发现了其他一些问题,请随时与我联系。
当您的应用程序即将进入后台时,如果您的应用程序调用任何OGLES功能,操作系统将立即终止您的应用程序
阅读App States&Multitasking获取更多信息阅读成为负责任的背景应用程序
以下是该文档的一些摘录:
(Required) When moving to the background, make sure your app adjusts its behavior appropriately.
关于OGLES
...the app should stop calling OpenGL ES functions.
通知可以是同步的或异步的。 如果您注册指定NSOperationQueue的通知,则回调将是异步的,否则我相信它将始终是同步的。
我遇到了一些崩溃,并在我的代码中发现了一些错误:
我使用DidEnterBackground / WillEnterForeground通知(而不是回调)来停止/重启openGL操作。 我仍然得到一个非常罕见的崩溃(我必须使用自动化和锁定/解锁/旋转20-30分钟才能获得它),但使用WillResignActive / DidBecomeActive没有任何区别; 无论如何都会发生
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.