Macos 在OSX中,OpenGL全屏显示时是否可以实现稳定的60hz帧速率?

Macos 在OSX中,OpenGL全屏显示时是否可以实现稳定的60hz帧速率?,macos,opengl,vsync,Macos,Opengl,Vsync,我正在尝试编写一个应用程序,以全屏显示视频,需要尽可能平滑 我的OpenGL代码与垂直刷新同步同步,大部分时间播放流畅,cpu使用率低 然而,有时会有轻微的口吃 为了简化测试并消除潜在的延迟源,我编写了一个简单的渲染循环,它只创建一个全屏,清除帧并交换缓冲区 我对缓冲区交换时间进行了计时(使用mach_absolute_time()),并打印了超出15到18毫秒范围的时间 下面显示了一个运行示例(报告时间以秒为单位,帧时间以毫秒为单位): 测试时,没有其他应用程序从XCode运行appart。

我正在尝试编写一个应用程序,以全屏显示视频,需要尽可能平滑

我的OpenGL代码与垂直刷新同步同步,大部分时间播放流畅,cpu使用率低

然而,有时会有轻微的口吃

为了简化测试并消除潜在的延迟源,我编写了一个简单的渲染循环,它只创建一个全屏,清除帧并交换缓冲区

我对缓冲区交换时间进行了计时(使用mach_absolute_time()),并打印了超出15到18毫秒范围的时间

下面显示了一个运行示例(报告时间以秒为单位,帧时间以毫秒为单位):

测试时,没有其他应用程序从XCode运行appart。 测试在运行OS X 10.7.5的Macbook Pro 5,1上运行

切换图形(此笔记本电脑有英伟达9600和9400),从外部监视器或笔记本电脑屏幕上运行没有差别。 为了排除底层API之间的差异,我使用SDL、Glfw、Cinder和SFML等图形框架尝试了相同的代码。最后,我还尝试了苹果OpenGL全屏示例的计时。尽管Glfw似乎更稳定一些,但它们的行为或多或少都是相同的

使用SCHED_FIFO策略将绘图线程优先级增加到最大值似乎可以稍微改善一些情况,但不会有多大改善

我开始认为,不可能从OpenGL获得稳定的60hz帧速率,或者如果是这样的话,就没有适当的文档记录

有没有人能够在OSX中为全屏OpenGL应用程序获得稳定的60hz显示速率? 怎么做

编辑:我注意到从终端运行测试极大地改善了计时。从XCode运行会产生更多的波动,我用这些数字得出我的结论。无论如何,在同一台机器上,在Windows7下,我似乎仍然可以获得更稳定的行为。但目前的波动在允许的范围内

  • 如果视口是一个小窗口而不是整个屏幕,该测试会发生什么情况?如果行为与100x100窗口相同,则可以假定这不是GPU性能问题

  • 您正在调用GLFinish()?如果您没有,图形驱动程序可以随时将结果输出到屏幕上。结果可能是您观察到的性能峰值

  • 您使用的计时器的分辨率是多少?我在尝试在windows中对自己的代码进行基准测试时遇到了类似的问题-标准windows计时器的分辨率非常糟糕(~19ms),因此我不得不切换到更高分辨率的计时器


  • “我的OpenGL代码与垂直刷新同步”您是如何实现这一点的?什么分辨率和什么卡处于活动状态?您好,正如我在上面所写的,我已尝试在9400和9600图形卡中运行代码,此MBP型号允许您选择要使用的gpu,以在性能和能效之间取得平衡。两张牌的行为相同。我试过笔记本电脑的本机分辨率(1440 x 900)和外部监视器本机分辨率(1920 x 1200)。分辨率不是问题,因为当我关闭vsync时,fps计数器达到1000 fps以上的数字。所谓同步,我的意思是缓冲区交换上的主线程阻塞等待垂直同步。1。在窗口上运行此测试会大大增加计时差异。全屏幕运行更流畅。2.对3.据我所知,mach_absolute_time()是OSX(和iOS)中分辨率最高、精度最高的计时器。
    at time:0.903594 ->  frame time:06.943 ms
    at time:1.941287 ->  frame time:20.801 ms
    at time:1.956124 ->  frame time:14.725 ms
    at time:1.969766 ->  frame time:13.533 ms
    at time:4.059608 ->  frame time:23.808 ms
    at time:4.068953 ->  frame time:09.255 ms
    at time:6.090000 ->  frame time:55.086 ms
    at time:6.090681 ->  frame time:00.210 ms
    at time:6.101372 ->  frame time:10.659 ms
    at time:9.684669 ->  frame time:18.014 ms
    at time:15.032867 -> frame time:18.463 ms
    at time:15.047580 -> frame time:14.618 ms
    at time:17.028749 -> frame time:65.096 ms
    at time:17.028962 -> frame time:00.108 ms
    at time:17.037022 -> frame time:08.034 ms
    at time:17.049193 -> frame time:12.069 ms
    at time:17.063416 -> frame time:14.130 ms