我正在寻找转换OpenGL渲染代码的方法,以利用GLKit的一些功能(即异步纹理加载和GLKView/Controller提供的自动化功能)。但是,这些类似乎主要是为了容纳使用动画循环进行人物渲染而设计的,而我正在使用按需渲染。此外,某些渲染是针对纹理而不是GLKView的帧缓冲区,因此我应该只对GLKView进行子类化并添加其他FBO吗?

对于这种类型的设置是否有推荐的方法?我期望以下方面:

  • 将 View Controller 的preferredFramesPerSecond设置为0,或者仅
    暂停帧更新?
  • 忽略glkViewControllerUpdateglkView:drawInRect:方法
    并在需要时画出我需要的东西。
  • 按顺序使用 View 的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 再次自动恢复。

    但是,将普通的UIViewControllerGLKView一起使用是完全可以接受的,并且我已经看到Apple工程师建议将其作为执行按需绘图的适当方法。

    关于ios - 使用GLKit的按需OpenGL ES渲染,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7747742/

    10-09 12:53