【发布时间】:2012-05-22 00:37:08
【问题描述】:
我正在使用 OpenGL ES 在 iOS 上编写自定义 UI 框架。用例适用于应用程序,例如不会在每帧基础上更新的东西(例如游戏)。从我目前所见,似乎 GLKViewController 的默认行为是以大约 30fps 的速率重绘屏幕。 UI 通常只在必要时重绘自身以减少资源使用,并且我不想在用户不做任何事情时通过使用 GPU 来消耗额外的电池电量。
我尝试只清除和绘制一次屏幕作为测试,并从分析器收到警告说正在显示未初始化的颜色缓冲区。
文档指出有一个标志 kEAGLDrawablePropertyRetainedBacking,当设置为 YES 时,将允许后台缓冲区保留在前一帧中绘制到它的内容。但是,它还指出不建议这样做,并且会导致性能和内存问题,这正是我首先要避免的。
我打算尝试两种方式,绘制每一帧而不是,但我很好奇是否有人遇到过这种情况。你会推荐什么?每帧重新绘制所有内容 30 次不是我想象的那么重要吗?
【问题讨论】:
-
你必须使用GLKViewController吗?滚动您自己的 OpenGL ES 托管视图和仅在需要时刷新的视图控制器并不难。这是我们所有人在 iOS 5.0 之前都必须做的事情。
-
有趣,我没有意识到这是一个选项(我对 iOS 开发非常陌生)。我会调查的。
-
我链接到this answer 中的几个示例应用程序,一个比另一个简单。两者都创建自己的自定义视图和视图控制器,并且手动或通过可中断的 CADisplayLink 处理更新。
标签: ios performance opengl-es frame-rate redraw