【发布时间】:2012-10-17 03:05:24
【问题描述】:
我的应用程序是一个大量使用 OpenGL 的应用程序,它被用于处理图像、渲染场景、显示预览等。但是,在我将多任务实现为 Apple 的官方文档“iOS 的 OpenGL ES 编程指南”之后,很奇怪崩溃仍然偶尔出现。调试导航器堆栈跟踪显示类似“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 多任务。因为与委托方法不同,通知方法将被异步调用,这些停止动画操作和 glFinish () 调用可能不会在应用程序已经移动到后台时生效。当我在执行一系列 OpenGL ES 相关操作时按下锁屏按钮时,这种情况可能会更频繁地发生。
如果你们发现其他问题,请随时与我联系。
【问题讨论】:
-
如果您在后台从串行队列调用 OpenGL ES,问题仍然存在。即使在告诉计时器停止发射之后,一个块仍会继续完成并可能导致崩溃。 stackoverflow.com/questions/19215554/…