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

时间:2015-08-30 02:15:29

标签: macos cocoa opengl 3d frame-rate

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

是否有默认"帧速率"对于NSOpenGLView,有没有办法改变它?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

通常在任何窗口系统中,窗口不会定期重绘;它仅在响应导致“损坏”“脏”状态的事件时发生。

由于合成窗口管理器(OS X使用一个这样的窗口管理器),导致此“损坏”状态的事物近年来变得更小了。它曾经在窗口移动到顶部时发生,但在现代窗口管理器中,它只发生在调整大小事件期间/之后或窗口移动时。

正如您所料,Cocoa的文档说的是同样的事情:

  

- update

     
    

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

  

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

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

  

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