Grabbed some time this evening to clean up the shadow tutorial code. It's now refactored into reasonably small methods, supports N lights, uses the cache to store textures/fbos, and generally is a lot less messy. I'm currently debating what the next step in the tutorial should be. My current thinking is to use shaders to allow for a single-pass for all lights (and the ambient pass), and to allow Percentage Correct Filtering . Alternative would be to do e.g. point-lights via cube maps.
Of course, also should do a PyOpenGL release at some point so people can actually *run* the code without doing a bzr checkout.