Opengl_visualization.with_opengl_context handles the opengl setup seperately from the specific drawing (so can be called as either "with_opengl_context (draw_tree x y z)" or "with_opengl_context (Glut.wireTeapot 1.)", among others).