thin GL program abstraction layer for caching uniforms, pre-processing shader source, etc.