OpenGL abstraction layer