2017-03-27 15 views
0

現在、C++でOpenGL 2.1/Freeglutプロジェクトを作成中です。glutMainLoop()関数を使用してglutループから戻り値を取得する必要があります。プログラム。私が今見つけた解決策は、glutLeaveMainLoop()を呼び出すことですが、プログラムを完全に残しています。Freeglut/OpenGL 2.1プロジェクトからの戻り値の取得

これは私の質問です。現在のプログラムを残すことなくglutウィンドウを閉じるために、glutはそのような動作を許可しないので、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; 
} 

ご迷惑をおかけして申し訳ございませんが、より理解していただければ幸いです。あなたがglutMainLoop();を呼び出す前に

+0

こんにちはLezard、ようこそstackoverflow、あなたのコードスニペットをあなたがこれまでに試したことをどのようなエラーが直面している共有してください。 – ravi

+0

@raviありがとうございました、今、より明確になることを願っています。 –

+0

メインループを離れる必要があるのはなぜですか?あなたは全体的に何を達成しようとしていますか? – Vallentin

答えて

2

は、このコード行を追加します。

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS); 

または

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION); 

を、ニーズに応じて。

+0

ありがとう、まさに私が必要なもの! –

関連する問題