Added some features, started to abstract away from OpenGL