使用GLKit进行按需OpenGL ES渲染

Stu*_*art 18 opengl-es ios glkit

我正在寻找转换我的OpenGL渲染代码以利用一些功能GLKit(即异步纹理加载和由其提供的自动化GLKView/Controller).但是,似乎这些类的设计主要是为了适应使用动画循环渲染的人,而我正在使用按需渲染.另外,一些渲染是针对纹理而不是GLKView的帧缓冲,所以我是否应该只是将GLKView子类化并添加其他FBO?

这种类型的设置是否有推荐的方法?我希望有类似的东西:

  • 将视图控制器设置preferredFramesPerSecond0,或者只是暂停帧更新?
  • 忽略glkViewControllerUpdateglkView:drawInRect:方法,只需要我需要的东西.
  • 将视图setNeedsDisplay与法线UIView一起使用以显示帧(我是否需要调用,bindDrawable因为我也将渲染到纹理?).

如果这不是新API的设计,那么也许不值得努力?我希望文档比它更彻底.当API稍微"成熟"时,可能会提供更多样本......

谢谢

Stu*_*art 23

我最终使用的方法是不打扰GLKViewController,但只是GLKView直接在UIViewController子类下使用.

显然,GLKViewController它适用于需要为游戏等应用程序提供一致渲染循环的人.没有它,绘制到GLKView就像调用一样简单[glkView setNeedsDisplay].一定要设置enableSetNeedsDisplayYES以启用此行为.

如果你仍然想要使用a GLKViewController,你可以viewWillAppear像这样禁用动画渲染循环:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];    // setPaused automatically set to NO in super's implementation

    [self setPaused:YES];
}
Run Code Online (Sandbox Code Playgroud)

另外,设置resumeOnDidBecomeActiveNO阻止视图控制器自动重新开始.

使用纯UIViewControllerGLKView是完全可以接受的,但,我也看到了它建议由Apple工程师来执行按需绘制的适当方式.