我创建了一个窗口glutCreateWindow
并使用glutMainLoop
. 我想结束那个循环并关闭窗口,所以我使用glutLeaveMainLoop
并glutCloseFunc
销毁它。我的应用程序自动终止。
我希望应用程序在窗口被销毁后仍然存在。可能吗?
根据这个链接我可以做到,但我不知道怎么做。我正在使用freeglut。
希望在窗口关闭时阻止 FreeGLUT 退出的用户应该考虑使用
glutSetOption
to setGLUT_ACTION_ON_WINDOW_CLOSE
。
GLUT_ACTION_ON_WINDOW_CLOSE
- 控制用户或系统关闭窗口时发生的情况:
GLUT_ACTION_EXIT
将立即退出应用程序(默认,GLUT 的行为)。GLUT_ACTION_GLUTMAINLOOP_RETURNS
将立即从主循环返回。GLUT_ACTION_CONTINUE_EXECUTION
将继续执行剩余的窗口。
该
glutLeaveMainLoop
函数使 freeglut 停止事件循环。如果GLUT_ACTION_ON_WINDOW_CLOSE
选项设置为GLUT_ACTION_GLUTMAINLOOP_RETURNS
orGLUT_ACTION_CONTINUE_EXECUTION
,控制将返回调用 glutMainLoop 的函数;否则应用程序将退出。
把碎片放在一起:
#include <GL/freeglut.h>
#include <iostream>
void display()
{
glClear( GL_COLOR_BUFFER_BIT );
glutSwapBuffers();
}
int main( int argc, char** argv )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
glutCreateWindow( "GLUT" );
glutDisplayFunc( display );
glutSetOption( GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS );
std::cout << "Before glutMainLoop()!" << std::endl;
glutMainLoop();
std::cout << "Back in main()!" << std::endl;
return 0;
}