【发布时间】:2012-09-10 05:18:58
【问题描述】:
对于我所有的 SDL/OpenGL 程序,帧速率都停留在 60fps,因此看起来垂直同步已启用,但不是由我启用,也不是在我的代码或我的设置中。所以我想现在是否有办法禁用它,也许是在一些深层的 macOS 设置中?
【问题讨论】:
对于我所有的 SDL/OpenGL 程序,帧速率都停留在 60fps,因此看起来垂直同步已启用,但不是由我启用,也不是在我的代码或我的设置中。所以我想现在是否有办法禁用它,也许是在一些深层的 macOS 设置中?
【问题讨论】:
这使我能够在我的 MacBook Pro 上获得大约每秒 700 帧。
它也不是永久性的,非常适合测试/基准测试。
【讨论】:
Your session has expired. Please log in.。
欢迎来到 SO。我为类似的问题概述了一种方法here。您应该考虑到大多数 Mac LCD 被锁定为 60Hz,而最近的硬件被限制为 120Hz。禁用 vsync 可能只会导致 CPU/GPU 周期的浪费,并可能引入撕裂伪影。
【讨论】:
经过多年寻找解决方法(并在 Brett Hale 的帮助下),这对我有用 - 我在渲染循环的开头添加了那段代码(不仅在 init 中,如Apple 似乎每次都重置 SwapInterval 设置...) 并最终能够使帧率不同步:
#ifdef __APPLE__
GLint sync = 0;
CGLContextObj ctx = CGLGetCurrentContext();
CGLSetParameter(ctx, kCGLCPSwapInterval, &sync);
#endif
别忘了包含<OpenGL/gl.h>
这不是最好的解决方案,但它实际上是我发现的唯一一个像魅力一样工作的解决方案。
【讨论】:
[NSOpenGLContext setValues:&value forParameter:NSOpenGLCPSwapInterval]
kCGLCPSwapInterval / NSOpenGLCPSwapInterval / CVDisplayLink
flushBuffer()在内的实际绘图代码一定不能放在func draw(_ dirtyRect: NSRect)中