代码之家  ›  专栏  ›  技术社区  ›  Lukas Palmer

NSOpenGLView重绘的速度有多快?它有默认FPS吗?

  •  2
  • Lukas Palmer  · 技术社区  · 9 年前

    我正在Xcode 6中创建一个Cocoa应用程序,该应用程序使用OpenGLView。我的NSOpenGLView扩展中的draw方法被反复调用,但我不确定它被调用的速率或设置速率的方式。

    NSOpenGLView是否有默认的“帧速率”,是否有方法更改它?

    2 回复  |  直到 9 年前
        1
  •  2
  •   Brendan Shanks    9 年前

    Apple has a technote 描述如何驱动OpenGL渲染循环。答案是使用CoreVideo显示链接( CVDisplayLink ),它将在消隐间隔期间调用回调。

        2
  •  1
  •   Community CDub    5 年前

    通常,在任何窗口系统中,窗口都不会按定期计划重新绘制;它只发生在导致 “已损坏” “脏” 状态

    导致这种情况的原因数量 “已损坏” 近年来,由于合成了窗口管理器(OSX使用了一个这样的窗口管理器),状态变得更小了。过去,每当窗口移动到其顶部时,都会发生这种情况,但在现代窗口管理器中,这种情况只发生在调整大小事件期间/之后或窗口移动时。

    正如你所料,Cocoa的文档中也有同样的内容:

    - update

    当视图窗口移动或视图本身移动或调整大小时,由Cocoa调用。


    欧文·泰勒写了一篇 excellent blog ; 该图说明了可能发生的情况:

    http://owtaylor.files.wordpress.com/2011/06/benchmark-method-late-damage.png?w=640&h=239

    如果合成器在收到客户的损坏时没有立即重画,而是在等待更多的损坏,那么它可能会等待太长时间而完全错过垂直重绘。然后,即使有足够的CPU和GPU可用,帧速率也会大幅下降。