OpenGL渲染在应用程序后台后不恢复



我使用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编程指南

最新更新