2016-04-14 3 views
2

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

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

В соответствии с этим link Я могу это сделать, однако я не знаю как. Я использую freeglut.

ответ

3

В the doc for glutCloseFunc():

Пользователи, которые ищут, чтобы предотвратить FreeGLUT от выхода при закрытии окна, следует изучить с помощью glutSetOption установить GLUT_ACTION_ON_WINDOW_CLOSE.

, что приводит к the glutSetOption() docs:

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; 
} 
+0

Это точный ответ, спасибо. Флаг 'GLUT_ACTION_EXIT' был установлен по умолчанию, поэтому мое приложение вышло. – Finfa811

+0

является частью 'glutSetOption' текущей версии 3.7? – galois

+0

@galois: Нет, 'glutSetOption()' не находится в [GLUT 3.7 spec] (https://www.opengl.org/resources/libraries/glut/spec3/spec3.html), это [FreeGLUT] (http://freeglut.sourceforge.net/)/OpenGLUT, следовательно, '#include ' вместо '#include '. – genpfault

Смежные вопросы