我正在寻找转换OpenGL渲染代码的方法,以利用GLKit
的一些功能(即异步纹理加载和GLKView/Controller
提供的自动化功能)。但是,这些类似乎主要是为了容纳使用动画循环进行人物渲染而设计的,而我正在使用按需渲染。此外,某些渲染是针对纹理而不是GLKView的帧缓冲区,因此我应该只对GLKView进行子类化并添加其他FBO吗?
对于这种类型的设置是否有推荐的方法?我期望以下方面:
preferredFramesPerSecond
设置为0
,或者仅暂停帧更新?
glkViewControllerUpdate
或glkView:drawInRect:
方法并在需要时画出我需要的东西。
setNeedsDisplay
和正常的UIView
显示框架(鉴于我我需要调用bindDrawable
吗?也会渲染到纹理吗?)。
如果这不是为新API设计的目的,那不值得付出努力吗?我希望文档比现在更全面。当API稍微“成熟”后,也许会提供更多示例...
谢谢
最佳答案
我最终使用的方法是不打扰GLKViewController
,而只在GLKView
子类下直接使用UIViewController
。
显然,GLKViewController
供需要游戏(例如游戏)等应用程序使用一致渲染循环的人使用。没有它,绘制GLKView
就像调用[glkView setNeedsDisplay]
一样简单。请确保将enableSetNeedsDisplay
设置为YES
以便启用此行为。
如果您仍然想使用GLKViewController
,则可以像这样禁用viewWillAppear
中的动画渲染循环:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated]; // setPaused automatically set to NO in super's implementation
[self setPaused:YES];
}
另外,将
resumeOnDidBecomeActive
设置为NO
以防止 View Controller 再次自动恢复。但是,将普通的
UIViewController
与GLKView
一起使用是完全可以接受的,并且我已经看到Apple工程师建议将其作为执行按需绘图的适当方法。关于ios - 使用GLKit的按需OpenGL ES渲染,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7747742/