2016-04-14 112 views
2

我创建了一个窗口,其中glutCreateWindow开始使用glutMainLoop循环。我想结束该循环并关闭窗口,所以我使用glutLeaveMainLoopglutCloseFunc来销毁它。自动,我的应用程序终止。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_RETURNSGLUT_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

是当前3.7版本的'glutSetOption'的一部分吗? – galois

+0

@galois:不,glutSetOption()不在[GLUT 3.7规范](https://www.opengl.org/resources/libraries/glut/spec3/spec3.html)中,它是[FreeGLUT]( http://freeglut.sourceforge.net/)OpenGLUT扩展,因此'#include '而不是'#include '。 – genpfault