退出OpenGL应用程序时清理

Dan*_*iel 8 c++ opengl macos glut

我有一个OSX OpenGL应用程序,我正在尝试修改.当我创建应用程序时,会调用一大堆初始化函数 - 包括我可以指定自己的鼠标和键盘处理程序等的方法.例如:

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(700, 700);
glutCreateWindow("Map Abstraction");
glutReshapeFunc(resizeWindow);
glutDisplayFunc(renderScene);
glutIdleFunc(renderScene);
glutMouseFunc(mousePressedButton);
glutMotionFunc(mouseMovedButton);
glutKeyboardFunc(keyPressed);
Run Code Online (Sandbox Code Playgroud)

在某些时候,我将控制传递给glutMainLoop并运行我的应用程序.在运行过程中,我创建了一大堆对象.我想清理它们.有什么办法可以告诉GLUT在退出之前调用一个清理方法吗?

Gor*_*ley 10

在freeglut中,如果你这样称呼:

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION)
Run Code Online (Sandbox Code Playgroud)

在进入主循环之前,当窗口关闭时,主循环功能将返回,您可以进行清理.

值得注意的是,在那个阶段,GL上下文已被破坏,因此您无法执行任何GL操作.

  • 实际上值得注意的是,背景被破坏了!这就是我写这篇文章18个月之后的原因.另一个不错的选择是glutCloseFunc()回调,它在你关闭程序窗口后立即运行.上下文仍然存在于该函数中,因此您也可以正确销毁其中的内容. (2认同)

Fra*_*oto 3

如果您使用 C/C++ 也许您可以使用atexit()调用?