gpt4 book ai didi

c - 如何关闭 openGL 窗口

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:33 24 4
gpt4 key购买 nike

在这里,我有两个循环。第一个循环处理图形几秒钟,然后代码进入第二个循环。我在第一个循环中通过 glutMainLoopEvent 处理图形事件。在第二个循环开始之前,我想关闭图形窗口。似乎命令 glutLeaveMainLoop 无法关闭窗口。我应该使用什么其他函数来强制在第一个循环后立即关闭窗口?

#include <stdio.h>
#include <GL/freeglut.h>
#include <boost/thread/thread.hpp> // for sleep

void cback_render()
{
if(!glutGetWindow())
return ;
static float rotations = 0;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();
glRotatef(rotations, 0, 0, 1);

glBegin(GL_TRIANGLES);
glVertex3f(0,0,0);
glVertex3f(1,0,0);
glVertex3f(0,1,0);
glEnd();

glutSwapBuffers();

if (++rotations > 360) rotations -= 360;
}

void timer(int )
{
if(!glutGetWindow())
return ;
glutPostRedisplay();
glutMainLoopEvent();
glutTimerFunc(30, timer, 1);
}

int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(100, 100);
glutInitWindowSize(512, 512);
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);

glutCreateWindow("freegluttest");
glutDisplayFunc (cback_render);
glutTimerFunc(30, timer, 1);

long i=0;
while(glutGetWindow() && i< 30)
{
printf("[%ld]\n",i);
i++;
glutMainLoopEvent();
boost::this_thread::sleep( boost::posix_time::milliseconds(100) );
}
glutMainLoopEvent();

glutLeaveMainLoop(); // does not work
glutMainLoopEvent();

// do something else ....
while(1)
{
// other calculations
boost::this_thread::sleep( boost::posix_time::milliseconds(100) );
}

return 0;
}

最佳答案

来自 http://freeglut.sourceforge.net/docs/api.php#EventProcessing 的 freeglut 文档

如果它是由 glutMainLoop() 而不是 glutMainLoopEvent()< 启动的,您正在使用 glutLeaveMainLoop() 的函数只是简单地停止过剩的主循环.

由于您在示例中自己控制循环,glutLeaveMainLoop() 不会执行任何操作。

It is intended to leave glut's main loop IF glut is controlling it not you.

由于您在结束时有一个 while(1) 并有 100 毫秒的 sleep 时间,因此当所有帧都已呈现后,应用程序将不会执行任何其他操作。如果您想销毁窗口,请使用一些窗口函数,例如 glutDestroyWindow()

关于c - 如何关闭 openGL 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41434439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com