非法 glutInit() 重新初始化尝试:如何取消初始化 glut?

illegal glutInit() reinitialization attempt: How can I de-initialize glut?

我实现了一个 class 函数,如果 class 被激活,它会调用 glutInit()。像这样:

void myViewer::Activate() {
  int argc = 1;
  char* argv[1] = {const_cast<char*>("none")};
  glutInit(&argc, argv);
}
void myViewer::Deactivate() {
  ...
}

如何“取消初始化”Glut 组件?调用激活函数两次报错freeglut (none): illegal glutInit() reinitialization attempt

文档的 Initialization 部分明确指出:

The primary initialization routine is glutInit that should only be called exactly once in a GLUT program.

您也没有将 glutInit 用作 specified。试图提供虚假论据是自找麻烦。他们想要原版 (argc, argv) 是有原因的:

glutInit will initialize the GLUT library and negotiate a session with the window system.

现在由于技术原因,即时关闭 OpenGL 会话不是一项简单的任务。在尝试释放与操作系统协商的显示表面之前,需要仔细彻底地关闭所有 OpenGl 活动。

许多视频游戏甚至不尝试这样做。他们只是抓取 window 用于显示和 运行 直到游戏终止(无论哪种方式 :))。

碰巧,供过于求明确禁止您尝试。