我使用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渲染代码。
知道为什么吗?
OpenGL ES上下文不能保证在应用程序进入后台并返回时持续维护。应用程序必须处理这个问题,因为如果另一个应用程序加载OpenGL ES,操作系统可能会删除上下文。
当用户启动另一个应用程序时,你的OpenGL ES应用程序在后台运行OpenGL ES应用程序,如果该应用程序需要更多的内存比可用的设备,系统会自动静默地终止你的应用不需要它执行任何额外的工作。
此信息来自Apple文档OpenGLES编程指南