如何在Mac OS X 10.11 El Capitan中禁用垂直同步(Vsync)

4
这里有一个解决方案:如何在macOS上禁用垂直同步。然而,这只适用于10.10及更早版本和Xcode 6及更早版本。似乎随Xcode 7附带的石英调试工具没有关闭vysnc(beam sync)的选项。如果您能提供任何帮助,将不胜感激。我使用的是Mac Book Pro 13寸。

这是一个编程问题还是用户问题? - rmaddy
我想这不完全是一个编程问题,更多的是一个通用的开发问题,用于在Mac上解决图形问题。我认为这可能会防止刷新问题,影响屏幕上绘制图形的方式,但我可能大错特错了。如果有更合适的地方来发布这个问题,我很愿意搬家! - Howard
1个回答

1

多年来一直在寻找解决方法,最终我在渲染循环的开头添加了这段代码,终于实现了不同步的帧率:

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

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

不要忘记包含<OpenGL/gl.h> 这可能不是最好的解决方案,但这是我找到的唯一一个完美运行的方法。

已确认在macOS 10.14上工作正常,但似乎在macOS 10.15和11上不再起作用了,我尝试过kCGLCPSwapInterval / NSOpenGLCPSwapInterval / CVDisplayLink - vk.edward.li
1
在 macOS 10.15 和 11 上发现,包括 flushBuffer() 的实际绘图代码不能放在 func draw(_ dirtyRect: NSRect) 中。 - vk.edward.li
@vk.edward.li,那么针对macOS 11有解决方案吗? - Slbox
@Slbox 上述解决方案是可行的,只要你不把绘图代码放在 func draw(_ dirtyRect: NSRect) 中(如果我没记错的话)。 - vk.edward.li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接