4

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

我希望应用程序在窗口被销毁后仍然存在。可能吗?

根据这个链接我可以做到,但我不知道怎么做。我正在使用freeglut

4

1 回答 1

6

文档中glutCloseFunc()

希望在窗口关闭时阻止 FreeGLUT 退出的用户应该考虑使用glutSetOptionto set 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_RETURNSor GLUT_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;
}
于 2016-05-02T21:34:35.530 回答