正如標題所說。我想在PyOpenGL中打開垂直同步,但我該怎麼做?一個相當詳盡的網絡搜索沒有任何東西,但也許有人有一個聰明的解決方案?我在OS X上,我不介意使用哪個軟件包來創建窗口和應用程序循環。不過,由於下面討論的原因,我寧願遠離開發一個成熟的Cocoa應用程序。如何在PyOpengl中啓用vsync?
我使用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應用程序。但是,這裏有一個非常大的學習曲線,而且我最終會發現一些甚至不能接近跨平臺的東西。此代碼僅供我個人使用,但我非常關心如果在幾年後在不同的機器上重新使用該代碼,我最大限度地提高再次工作的可能性。由於這些原因,我真的不認爲構建一個可可應用程序是我想要的。
看起來,除CGLGetCurrentContext之外,通過ctypes使用任何CGL方法都會導致分段錯誤。 – Nathaniel