glutCloseFunc没有终止应用程序

Fin*_*811 3 c++ opengl glut freeglut glutcreatewindow

我已经创建了一个窗口,glutCreateWindow并开始使用循环glutMainLoop.我想结束那个循环并关闭窗口,所以我使用glutLeaveMainLoopglutCloseFunc销毁它.我的应用程序自动终止.

我希望应用程序在窗口被销毁后继续存在.可能吗?

根据这个链接,我可以做到,但我不知道如何.我正在使用freeglut.

gen*_*ult 5

以下文档中glutCloseFunc():

希望在窗口关闭时阻止FreeGLUT退出的用户应该考虑使用glutSetOption设置GLUT_ACTION_ON_WINDOW_CLOSE.

这导致glutSetOption()文档:

GLUT_ACTION_ON_WINDOW_CLOSE - 控制用户或系统关闭窗口时发生的情况:

  • GLUT_ACTION_EXIT 将立即退出应用程序(默认情况下,GLUT的行为).
  • GLUT_ACTION_GLUTMAINLOOP_RETURNS 将立即从主循环返回.
  • GLUT_ACTION_CONTINUE_EXECUTION 将继续执行剩余的窗口.

来自glutLeaveMainLoop():

glutLeaveMainLoop函数导致freeglut停止事件循环.如果该GLUT_ACTION_ON_WINDOW_CLOSE选项已设置为GLUT_ACTION_GLUTMAINLOOP_RETURNSGLUT_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;
}
Run Code Online (Sandbox Code Playgroud)