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)