On Fri, Jun 14, 2013 at 3:18 AM, Nathaniel Virgo <nathanielvirgo@gmail.com> wrote:
Hi all

I need to turn on vsync. Does anyone have a way to do this on OS X?  I found the following code on the web, but when I run it (after creating a Glut window) it always causes a segmentation fault:

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"

My (very uneducated) guess is that this is because CGLGetCurrentContext returns an int, whereas CGLSetParameter expects a pointer to a struct as its first argument. I have tried many permutations of the above code, but I don't know enough about ctypes to be able to fix it.

From looking at the PyOpenGL source, it looks like there's some stuff in there that's aimed at exposing this kind of platform-specific stuff, but I couldn't find any documentation for it. Is there a "correct" way to call CGLSetParameter and similar functions?
This seems relevant to GLUT VSync-ing:
www.opengl.org/discussion_boards/showthread.php/173017-Vsync-with-glut

Ian