【发布时间】:2020-10-25 07:40:58
【问题描述】:
基本上,我正在尝试发现 GLEW-GLUT 设置的控件。这里的第一个目标是初始化窗口的“hello-world”案例:
int argc = 0;
char ** argv = (char **) calloc(1,sizeof(char **));
argv[0] = (char *) calloc(1,sizeof(char *));
argv[0][0] = '\0';
glutInit(&argc, argv);
glutInitWindowSize( 500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("foo");
std::this_thread::sleep_for(std::chrono::seconds(1));
glutDestroyWindow(glutGetWindow());
free(argv[0]);
free(argv);
从“控制”的角度来看,似乎我无法实现在调用 glutInit 之前存在的运行时状态,因为我无法在没有分段错误的情况下“重新初始化”过剩。
因此,一旦 glut 被初始化,似乎 glut 总是被初始化。这看起来很奇怪。
在 GLUT 初始化后,如何将所有东西都拆掉,以便重新初始化?我尝试的每个方法和设置都会留下一个窗口,在代码退出之前不会关闭。
一定有某种“GLEW/GLUT Teardown and Exit Everything”功能......?
或者每个 GLEW/GLUT 窗口都是单程票?
【问题讨论】:
-
必须调用
glutMainLoop()来有意义地处理窗口事件,例如关闭。但是没有像specified 那样从该功能返回。如果您想要更多的应用程序生命周期控制,您需要切换到FreeGLUT's extended API。或者更好的是,GLFW。 -
@genpfault GLFW 比 FreeGlut 更好/更现代的 C。我不知道为什么在任何启动指南中都没有提到它。在整个项目中,我将完全替换 FreeGlut——它要好得多。由于 FreeGlut 缺乏控制,测试驱动的开发变得越来越困难。