glutCloseFunc без завершения приложения

Я создал окно с glutCreateWindow и начал цикл, используя glutMainLoop, Я хочу закончить этот цикл и закрыть окно, чтобы я использовал glutLeaveMainLoop а также glutCloseFunc уничтожить это. Мое приложение автоматически закрывается.

Я хотел бы, чтобы приложение сохранялось после разрушения окна. Является ли это возможным?

По этой ссылке я могу это сделать, однако не знаю как. Я использую Freeglut.

1 ответ

Решение

В документе для 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_RETURNS или же 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;
}
Другие вопросы по тегам