我有一个直接使用 EAGLLayer 的简单游戏。我必须设置运行循环和所有 OpenGL ES 样板。游戏有时会因为 OpenGL 后台问题而崩溃。我听说 GLKit 有一个强大的样板 OpenGL 视图,它负责 OpenGL 的初始化和暂停。
是否可以为 OpenGL 1.1 设置这个 GLKit 视图,我从哪里开始?
这是一个相当开放的问题,因此最好先了解一些 GLKit 的背景知识,然后在遇到具体问题时提出更多问题。
看看你在使用“OpenGL Game”模板创建一个新的 Xcode 项目时得到的代码——它为你设置了一个GLKView
和GLKViewController
。在 Apple 的OpenGL ES Programming Guide中也有一些关于这些类如何工作以及如何使用它们的描述。
它的整体要点:GLKView
为基本的 OpenGL ES 绘图(包括所有额外的帧缓冲区杂耍以进行多重采样,如果你愿意)做所有的帧缓冲区、渲染缓冲区和视口设置和演示,因此你所要做的就是发出绘图命令。GLKViewController
拥有一个GLKView
并运行一个调用你的绘图代码的动画计时器——默认情况下,它确保当应用程序在后台时不会调用你的绘图代码。
如果您正在使用GLKViewController
并且仅从GLKView
(子类或委托)绘图方法进行 OpenGL ES 调用,则不必担心由于在后台使用 GPU 而导致崩溃。如果您看到此类崩溃(gpus_ReturnNotPermittedKillClient
在堆栈跟踪中),尝试强制 GL 在进入后台之前完成处理可能会有所帮助——调用glFinish()
.applicationWillResignActive: