从Freeglut / Opengl 2.1项目中获取返回值

时间:2017-03-27 05:38:33

标签: c++ opengl glut freeglut

我目前正在使用C ++编写一个OpenGL 2.1 / Freeglut项目,我需要使用glutMainLoop()函数从glut循环中获取返回值,而不必立即离开当前程序。我现在发现的解决方案是调用glutLeaveMainLoop(),但它完全退出程序。

所以这是我的问题,有没有办法直接为任何退出的Freeglut函数设置一个返回值(因为过剩不允许这样的操作),或任何其他技术来关闭过剩窗口没有离开当前的程序?

很抱歉,如果我的问题看起来很白痴,感谢阅读。

int MenuStatus; //will be edit during the process

void runMainLoop( int val) //called by glutTimerFunc below
{
    update();
    render();
    glutTimerFunc(1000 / SCREEN_FPS, runMainLoop, val);
    //In this statement, I need the program to leave the glutMainLoop()
    if (MenuStatus > 0)
    glutLeaveMainLoop();
}

int HandleMenu(int ac, char **av)
{
    glutInit(&ac, av);
    glutInitContextVersion(2, 1);
    glutInitDisplayMode(GLUT_DOUBLE);
    glutInitWindowSize(SCREEN_WIDTH, SCREEN_HEIGHT);
    glutCreateWindow("Arcade - OpenGL");
    if (!initGL())
    {
        std::cerr << "Unable to initialize graphics library!" << std::endl;
        return 1;
    }
    glutKeyboardFunc(handleKeys);
    glutDisplayFunc(render);
    //runMainLoop callback
    glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, 0 );
    glutMainLoop();
    //return statement never reached.
    return MenuStatus;
}

对于丢失的代码感到抱歉,希望它更容易理解。

1 个答案:

答案 0 :(得分:2)

在致电glutMainLoop();之前添加以下代码:

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION);

取决于您的需求。