问题 如何在macOS上禁用vsync


使用我的所有SDL / OpenGL程序,帧速率保持在60fps,所以看起来像vsync是启用,但不是我,也不是我的代码或我的设置。所以我想现在如果有办法禁用它,可能在一些深度macOS设置?


9551
2017-09-10 05:18


起源



答案:


这使我能够在MacBook Pro上每秒大约700帧。

它也不是永久性的,非常适合测试/基准测试。

资源


7
2017-09-05 04:14



哦,我的小伙伴,毕竟那个时候!非常感谢队友! - Nox
我试过这个,什么都没发生。我究竟做错了什么? - Kalamalka Kid
1.仔细检查您正在测试的应用程序实际上是否超过60fps; 2.这个解决方案适用于Mavericks 10.9,未经测试用于Yosemite或El Capitan - cevaris
您是否介意在您的回答中说明这个解决方案实际上不适用于10.11 xCode 7.3(我唯一尝试过的那个)了吗? - Nox
你的第一个链接坏了:它说 Your session has expired. Please log in.。 - Ruslan


答案:


这使我能够在MacBook Pro上每秒大约700帧。

它也不是永久性的,非常适合测试/基准测试。

资源


7
2017-09-05 04:14



哦,我的小伙伴,毕竟那个时候!非常感谢队友! - Nox
我试过这个,什么都没发生。我究竟做错了什么? - Kalamalka Kid
1.仔细检查您正在测试的应用程序实际上是否超过60fps; 2.这个解决方案适用于Mavericks 10.9,未经测试用于Yosemite或El Capitan - cevaris
您是否介意在您的回答中说明这个解决方案实际上不适用于10.11 xCode 7.3(我唯一尝试过的那个)了吗? - Nox
你的第一个链接坏了:它说 Your session has expired. Please log in.。 - Ruslan


欢迎来到SO。我概述了一种方法 这里 对于类似的问题。您应该考虑到大多数Mac LCD锁定为60Hz,而最近的硬件限制为120Hz。禁用vsync可能只会导致浪费的CPU / GPU周期,并可能引入撕裂工件。


4
2017-09-10 07:52



是的,我已经不停地四处寻找解决方案......无论如何,谢谢! - Nox


在YEARS寻找解决方法之后(并在...的帮助下) 布雷特黑尔)这对我有用 - 我在渲染循环开始时添加了那段代码(而不仅仅是在init中,因为Apple似乎每次都重置SwapInterval设置......)并且最终能够有不同步帧率:

#ifdef __APPLE__
GLint                       sync = 0;
CGLContextObj               ctx = CGLGetCurrentContext();

CGLSetParameter(ctx, kCGLCPSwapInterval, &sync);
#endif

别忘了包括 <OpenGL/gl.h>

这不是最好的解决方案,但它实际上是我发现的唯一一个像魅力一样工作的解决方案。


3
2017-09-12 20:26