【问题标题】:GLEW/GLUT: After calling init and creating a window, deinitialize and re-init?GLEW / GLUT:调用init并创建窗口后,取消初始化并重新初始化?
【发布时间】: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 缺乏控制,测试驱动的开发变得越来越困难。

标签: c++ opengl glut glew


【解决方案1】:

首先,freeglut 不会在重新初始化时导致分段错误。它只会通知您此尝试并终止程序,但这不是分段错误。

其次,是的,可以取消初始化和重新初始化 freeglut。 fgDeinitialize() 函数应该这样做。

类似这样的:

void fgDeinitialize( void ); // put it above main function
    
int main (int argc, char** argv, char** env) 
{ 
    int Window, i = 0; 
    glutInit(&i, NULL); // i don't want send arguments
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_ALPHA); 
    Window = glutCreateWindow("frog"); // init window
    glutDestroyWindow(Window); // destroy window
    printf("reinitialize freeglut\n");
    fgDeinitialize(); // destroy glut
    glutInit(&i, NULL); // initialize it again
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_ALPHA);
    glutInitWindowSize(1024, 768);
    glutInitWindowPosition(100, 100);
    Window = glutCreateWindow("Second Window!");
    if (!Window) exit(-1); // if no window returned - error
    ... some other code ...

【讨论】:

  • 程序终止会导致段错误吗?
  • 换句话说,如果我知道根本原因而不仅仅是症状,我会有疑问吗?
猜你喜欢
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多