Ios 应用程序后台处理后OpenGL渲染未恢复

Ios 应用程序后台处理后OpenGL渲染未恢复,ios,opengl-es,cadisplaylink,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: NSDefaultRunLoopMo

我正在使用OpenGL ES在CADisplayLink上渲染场景,其中包含:

self.displayLink = CADisplayLink(target: self, selector: #selector(self.updateOpenGL))
self.displayLink!.frameInterval = 1 
self.displayLink!.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
如果我将应用程序设置为背景并转到跳板,当我恢复应用程序时,渲染将继续

但是,如果我将应用程序设置为背景,打开另一个应用程序(如Calendar),当我将应用程序恢复到前台时,屏幕上就不会再出现渲染。如果使用Xcode暂停执行,或在渲染管道中的断点处停止,则DisplayLink仍在运行并执行OpenGL渲染代码


有什么想法吗?

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

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


此信息来自苹果文档

我知道应用程序有责任保存其状态-如果它们被终止。但您是否建议Calendar启动OpenGL ES实例?看起来很奇怪-事实上,当我启动Calendar时,它只显示欢迎屏幕(因为我以前从未使用过它)。我并不是说Calendar应用程序使用OpenGLES,但OpenGLES上下文被删除的原因有很多。可能有一个原因是,在应用程序进入后台后,您正在传递GL命令。这极有可能导致您的上下文被删除。