App << Backgrounded

时间:2016-08-27 02:37:10

标签: ios opengl-es cadisplaylink

我正在使用OpenGL ES在CADisplayLink上渲染场景:

self.displayLink = CADisplayLink(target: self, selector: #selector(self.updateOpenGL))
self.displayLink!.frameInterval = 1 
self.displayLink!.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)

如果我将应用程序设置为后台并转到Spring Board,那么当我恢复应用程序时,渲染将继续。

但是,如果我对应用程序进行后台处理,请打开另一个应用程序,例如日历,当我将应用程序带回前台时,屏幕上不再有渲染。如果我使用Xcode暂停执行,或者在渲染管道中的断点处停止,则DisplayLink仍在运行并执行我的OpenGL渲染代码。

任何想法为什么?

1 个答案:

答案 0 :(得分:1)

当应用程序进入后台并返回时,无法保证OpenGL ES上下文超时。应用程序必须处理此问题,因为如果另一个应用程序加载OpenGL ES,操作系统可能会删除上下文。

  

当用户启动另一个应用时,您的OpenGL ES应用程序处于后台   OpenGL ES应用程序。如果该应用程序需要的内存超过可用内存   设备,系统默默地自动终止您的应用程序   不要求它执行任何额外的工作。

此信息来自Apple文档OpenGLES Programming Guide