4

でウィンドウを作成し、glutCreateWindowを使用してループを開始しましたglutMainLoop。そのループを終了してウィンドウを閉じたいので、 and を使用glutLeaveMainLoopしてウィンドウglutCloseFuncを破棄します。自動的に、私のアプリケーションは終了します。

ウィンドウが破棄された後もアプリケーションを存続させたいと考えています。出来ますか?

このリンクによると、私はそれを行うことができますが、方法がわかりません。freeglutを使用しています。

4

1 に答える 1

6

glutCloseFunc()ドキュメント:

ウィンドウが閉じられたときに FreeGLUT が終了するのを防ぎたいユーザーは、glutSetOptionset への使用を検討する必要があります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設定されている場合、制御は glutMainLoop を呼び出した関数に戻ります。それ以外の場合、アプリケーションは終了します。GLUT_ACTION_GLUTMAINLOOP_RETURNSGLUT_ACTION_CONTINUE_EXECUTION

ピースをまとめる:

#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 に答える