在我所有使用SDL/OpenGL编写的程序中,帧率都被限制在60fps,看起来像是垂直同步已启用,但既不是由我控制,也不在我的代码或设置中。因此,我想知道是否有一种方法可以禁用它,也许在某些深层macOS设置中?
这也不是永久的,非常适合测试/基准测试。
欢迎来到SO。我在这里为类似的问题概述了一种方法。您应该考虑大多数Mac LCD屏幕被锁定在60Hz上,而更近期的硬件则限制为120Hz。禁用垂直同步可能只会导致浪费CPU / GPU周期,并可能引入撕裂伪影。
多年来一直在寻找解决方法(在Brett Hale的帮助下),这是对我有效的方法 - 我将这段代码添加到我的渲染循环的开头(而不仅仅是在初始化中,因为苹果似乎每次都会重置SwapInterval设置...),最终成功实现了不同步的帧率:
#ifdef __APPLE__
GLint sync = 0;
CGLContextObj ctx = CGLGetCurrentContext();
CGLSetParameter(ctx, kCGLCPSwapInterval, &sync);
#endif
不要忘记包含<OpenGL/gl.h>
虽然不是最好的解决方案,但这是我找到的唯一一个完美运行的方法。
kCGLCPSwapInterval
/ NSOpenGLCPSwapInterval
/ CVDisplayLink
。 - vk.edward.liflushBuffer()
不应该放在 func draw(_ dirtyRect: NSRect)
中。 - vk.edward.li