【发布时间】:2013-06-09 17:05:41
【问题描述】:
正如标题所说的那样。我想在 PyOpenGL 中打开垂直同步,但我该怎么做呢?一个相当详尽的网络搜索没有发现任何东西,但也许有人有一个聪明的解决方案?我在 OS X 上,我不介意使用哪个包来创建窗口和应用程序循环。但是,出于以下讨论的原因,我宁愿远离开发成熟的 Cocoa 应用程序。
我研究过使用 pyglet 而不是 PyOpenGL,但是在 64 位操作系统上运行的唯一 pyglet 版本是将近一年前的 alpha 版本,所以我不想使用它,因为我害怕它可能是废弃软件。很遗憾,因为它实际上看起来比 PyOpenGL 好得多。
在this page 上,我找到了以下代码。该页面说它适用于 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 应用程序是我想要的。
【问题讨论】:
-
似乎使用除
CGLGetCurrentContext之外的ctypes 的任何CGL 方法都会导致分段错误。
标签: python macos glut pyglet pyopengl