working on opengl abstraction