我创建了一个窗口,其中glutCreateWindow
开始使用glutMainLoop
循环。我想结束该循环并关闭窗口,所以我使用glutLeaveMainLoop
和glutCloseFunc
来销毁它。自动,我的应用程序终止。glutCloseFunc没有终止应用程序
我希望应用程序在窗口被销毁后保留。可能吗?
根据这link我可以做到,但我不知道如何。我正在使用freeglut。
我创建了一个窗口,其中glutCreateWindow
开始使用glutMainLoop
循环。我想结束该循环并关闭窗口,所以我使用glutLeaveMainLoop
和glutCloseFunc
来销毁它。自动,我的应用程序终止。glutCloseFunc没有终止应用程序
我希望应用程序在窗口被销毁后保留。可能吗?
根据这link我可以做到,但我不知道如何。我正在使用freeglut。
用户希望防止FreeGLUT从退出时关闭一个窗口,应该考虑使用
glutSetOption
设置GLUT_ACTION_ON_WINDOW_CLOSE
。
GLUT_ACTION_ON_WINDOW_CLOSE
- 控制当窗口是由用户或系统关闭,会发生什么:
GLUT_ACTION_EXIT
将立即退出应用程序(默认情况下,GLUT的行为)。GLUT_ACTION_GLUTMAINLOOP_RETURNS
将立即从主循环返回。GLUT_ACTION_CONTINUE_EXECUTION
将继续执行剩余的窗口。
的
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;
}
这是一个准确的答案,谢谢。标记'GLUT_ACTION_EXIT'是默认设置的,这就是我的应用程序退出的原因。 – Finfa811
是当前3.7版本的'glutSetOption'的一部分吗? – galois
@galois:不,glutSetOption()不在[GLUT 3.7规范](https://www.opengl.org/resources/libraries/glut/spec3/spec3.html)中,它是[FreeGLUT]( http://freeglut.sourceforge.net/)OpenGLUT扩展,因此'#include'而不是'#include '。 –
genpfault