PyOpenGL's extension wrappers
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
use ctypes
to create c_char_p
or 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
for the reload
builtin, which might work, but I’m not sure if that’s the best
solution to this problem…