Beginning OpenGL Development: Abstracting Shaders
blog.hwrd.me