Normally if you wanted to get access to an OpenGL extension, you’d have to do something like:
from ctypes import * from OpenGL import platform gl = platform.OpenGL glGetShaderiv = gl.glGetShaderiv glGetShaderiv.argtypes = [c_int, c_int, POINTER(c_int)]
Gross. Luckily, PyOpenGL version 3.0.0a5 and later will automatically map ARB standard functions for you when they are available. Now all you have to do is:
from OpenGL.GL import *
And everything will be magically available to you, wrapped so you don’t have to
ctypes to create
c_int variables to pass them.
Watch out, though! The functions won’t be mapped correctly if your display context hasn’t been created yet. Always make sure to import OpenGL after the pygame display has been initialized.
# first initialize pygame import pygame from pygame.locals import * pygame.init() pygame.display.set_mode((800, 600), OPENGL | DOUBLEBUF) # now you can import it from OpenGL.GL import *
I would love to know how to manually tell PyOpenGL to re-map everything after
initializing pygame, though. I don’t like having to reposition the import like
that. Nathan Gray has a deep reload replacement
reload builtin, which might work, but I’m not sure if that’s the best
solution to this problem…