1

我正在使用 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 渲染代码。

任何想法为什么?

4

1 回答 1

1

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

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

此信息来自 Apple 文档OpenGLES 编程指南

于 2016-08-27T05:07:18.433 回答