为了账号安全,请及时绑定邮箱和手机立即绑定

如何在PyOpengl中启用vsync?

如何在PyOpengl中启用vsync?

慕标5832272 2021-03-29 23:15:36
正如标题所说的那样。我想在PyOpenGL中打开垂直同步,但是我该怎么做呢?相当详尽的网络搜索没有显示任何内容,但也许有人有一个聪明的解决方案?我在OS X上,我不介意使用哪个程序包创建窗口和应用程序循环。但是,出于以下原因,我宁愿开发一款功能完善的Cocoa应用程序。我考虑使用pyglet而不是PyOpenGL,但是在64位OS上运行的pyglet的唯一版本是将近一年的alpha版本,所以我不想使用它,因为恐怕它可能已经废弃了。真可惜,因为它看上去比PyOpenGL好得多。在此页面上,我找到了以下代码。该页面说它适用于pygame,但看起来也应该适用于Glut。但是,当我运行它(创建上下文之后)时,它只会导致分段错误。如果任何人都可以对发生这种情况的原因有任何见解,那将是很好的,因为我正在寻找这样的东西。import sysdef 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应用程序。
查看完整描述

3 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

我设法解决了您的细分错误。以下是在Mac上启用vsync的工作代码:-


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"))

        v = ctypes.c_int(1)


        ogl.CGLGetCurrentContext.argtypes = []

        ogl.CGLGetCurrentContext.restype = ctypes.c_void_p


        ogl.CGLSetParameter.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p]

        ogl.CGLSetParameter.restype = ctypes.c_int


        context = ogl.CGLGetCurrentContext()


        ogl.CGLSetParameter(context, 222, ctypes.pointer(v))

    except Exception as e:

        print("Unable to set vsync mode, using driver defaults: {}".format(e))

在创建和设置上下文后,只需调用此enable_vsync()函数即可。


查看完整回答
反对 回复 2021-04-01
  • 3 回答
  • 0 关注
  • 282 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信