正如标题所说的那样。我想在 PyOpenGL 中打开垂直同步,但我该怎么做呢?一个相当详尽的网络搜索没有发现任何东西,但也许有人有一个聪明的解决方案?我在 OS X 上,我不介意使用哪个包来创建窗口和应用程序循环。但是,出于下面讨论的原因,我宁愿远离开发成熟的 Cocoa 应用程序。
我研究过使用 pyglet 而不是 PyOpenGL,但是在 64 位操作系统上运行的唯一 pyglet 版本是一个将近一年的 alpha 版本,所以我不想使用它,因为我担心它可能是废弃软件. 这很遗憾,因为它实际上看起来比 PyOpenGL 好得多。
在此页面上,我找到了以下代码。该页面说它适用于 pygame,但看起来它也应该适用于 Glut。但是,当我运行它时(在创建上下文之后),它只会导致分段错误。如果有人能对为什么会发生这种情况有任何见解,那就太好了,因为我正在寻找这样的东西。
import sys
def enable_vsync():
if sys.platform != 'darwin':
return
try:
import ctypes
import ctypes.util
ogl = ctypes.cdll.LoadLibrary(ctypes.util.find_library("OpenGL"))
# set v to 1 to enable vsync, 0 to disable vsync
v = ctypes.c_int(1)
ogl.CGLSetParameter(ogl.CGLGetCurrentContext(), ctypes.c_int(222), ctypes.pointer(v))
except:
print "Unable to set vsync mode, using driver defaults"
我可以改用 pygame 看看这段代码是否适用,但我在网上发现了一些报告说这段代码也与 pygame 一起崩溃,所以我猜它曾经可以工作,但现在不行了。
最后,我知道一个可行的解决方案是使用 PyObjC 构建一个 Cocoa 应用程序。然而,那里有一个相当大的学习曲线,我最终会得到一些甚至不接近跨平台的东西。这段代码仅供我个人使用,但如果我在几年后在另一台机器上重新使用它,我非常关心如何最大限度地提高它再次工作的可能性。由于这些原因,我真的不认为构建一个 Cocoa 应用程序是我想要进入的。