In OpenGL, tracking what lights are available can be tricky. This class make it a little easier, by allocating lights when you create an instance, and deallocating a light when the instance is destroyed.
class GLLight(object):
lights = [GL_LIGHT0, GL_LIGHT1, GL_LIGHT2, GL_LIGHT3, GL_LIGHT4,
GL_LIGHT5, GL_LIGHT6, GL_LIGHT7]
def __init__(self):
try:
self.id = self.lights.pop(-1)
except IndexError:
raise RuntimeError('Too many lights allocated.')
def __del__(self):
self.lights.append(self.id)