fully implemented openGL stuff