【问题标题】:How to replace OpenGL ES 1.1 EAGLLayer view with OpenGL view from GLKit?如何用 GLKit 中的 OpenGL 视图替换 OpenGL ES 1.1 EAGLLayer 视图?
【发布时间】:2013-10-06 20:26:00
【问题描述】:

我有一个直接使用 EAGLLayer 的简单游戏。我必须设置运行循环和所有 OpenGL ES 样板。游戏有时会因为 OpenGL 后台问题而崩溃。我听说 GLKit 有一个强大的样板 OpenGL 视图,它负责 OpenGL 的初始化和暂停。

是否可以为 OpenGL 1.1 设置此 GLKit 视图?我应该从哪里开始?

【问题讨论】:

  • 你成功在 GLKit 上运行 OpenGLES 1.1 了吗?如果是,您可以在此处发布解决方案吗?

标签: iphone ios ipad opengl-es glkit


【解决方案1】:

这是一个相当开放的问题,因此最好先了解一些 GLKit 的背景知识,然后在遇到具体问题时提出更多问题。

查看使用“OpenGL 游戏”模板创建新 Xcode 项目时获得的代码——这将为您设置 GLKView 和 GLKViewController。在 Apple 的 OpenGL ES Programming Guide 中也有一些关于这些类如何工作以及如何使用它们的描述。

它的整体要点:GLKView 为基本的 OpenGL ES 绘图(包括所有额外的帧缓冲区杂耍,如果你愿意的话)做所有的帧缓冲区、渲染缓冲区和视口设置和演示,这样你就必须做的是发出绘图命令。 GLKViewController 拥有一个 GLKView 并运行一个动画计时器来调用您的绘图代码——默认情况下,它确保在应用程序处于后台时不会调用您的绘图代码。

如果您使用 GLKViewController 并且仅从 GLKView(子类或委托)绘图方法进行 OpenGL ES 调用,则不必担心由于在后台使用 GPU 而导致崩溃。如果您看到此类崩溃(在堆栈跟踪中使用 gpus_ReturnNotPermittedKillClient),尝试强制 GL 在进入后台之前完成处理会有所帮助——在 applicationWillResignActive: 中调用 glFinish()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    相关资源
    最近更新 更多