Ios OpenGL ES应用程序在锁定屏幕或进入后台时崩溃
我的应用程序是一个大量使用OpenGL的应用程序,用于处理图像、渲染场景、显示预览等。然而,在我将多任务作为苹果的官方文档“OpenGL ES iOS编程指南”实现后,奇怪的崩溃仍然偶尔出现。调试导航器堆栈跟踪显示类似“sgxPatchDeferredFramebufferOffsets”、“PresentrenderBufferExc_BAD_ACCESS”、“GPU_ReturnNotPermittedKillClient”等内容 所以,我想知道到底应该实现什么样的OpenGL ES多任务 ================更新:问题已解决================= 谢谢你的回答,CStreel和其他试图帮助你的人 在第二次逐行阅读“OpenGL ES iOS编程指南”中的“后台应用程序可能无法在图形硬件上执行命令”部分后,我对这个问题有了新的理解 我的应用程序的最大问题是,我不应该在通知方法中实现OpenGL ES多任务。因为与委托方法不同,通知方法将异步调用,这些停止动画操作和glFinish()调用可能在应用程序已移到后台时不生效。当我执行一系列与OpenGL ES相关的操作时,点击锁屏按钮可能会更频繁地发生这种情况Ios OpenGL ES应用程序在锁定屏幕或进入后台时崩溃,ios,opengl-es,crash,Ios,Opengl Es,Crash,我的应用程序是一个大量使用OpenGL的应用程序,用于处理图像、渲染场景、显示预览等。然而,在我将多任务作为苹果的官方文档“OpenGL ES iOS编程指南”实现后,奇怪的崩溃仍然偶尔出现。调试导航器堆栈跟踪显示类似“sgxPatchDeferredFramebufferOffsets”、“PresentrenderBufferExc_BAD_ACCESS”、“GPU_ReturnNotPermittedKillClient”等内容 所以,我想知道到底应该实现什么样的OpenGL ES多任务
如果你们发现其他问题,请随时与我联系。当你的应用程序即将进入后台时,如果你的应用程序调用任何OGLE函数,操作系统将立即杀死你的应用程序 有关更多信息,请阅读 阅读 以下是该文件的一些摘录:
(Required) When moving to the background, make sure your app adjusts its behavior appropriately.
关于眼神
...the app should stop calling OpenGL ES functions.
通知可以是同步的,也可以是异步的。如果注册指定NSOperationQueue的通知,则回调将是异步的,否则我相信它将始终是同步的 我遇到过一些崩溃,并在代码中发现了一些bug:
我使用DidEnterBackground/WillEnterForeground通知(而不是回调)来停止/重新启动openGL操作。我仍然会遇到一次非常罕见的崩溃(我必须使用自动化和锁定/解锁/旋转20-30分钟才能得到它),但使用WillResignActive/DidBecomeActive没有任何区别;不管怎样,它们都会发生。我已经实现了这些委托和通知。当应用程序退出活动状态时,我停止了捕获会话和动画。在收到退出活动通知后,我尝试在处理调度队列中调用glfinish(),但没有帮助。如果在后台从串行队列调用OpenGL ES,问题仍然存在。即使在告诉计时器停止射击后,一个方块仍会继续完成,并可能导致撞车。