我试图在不同的环境中使用不同的过剩窗口,我的意思是,每个窗口都有自己的回调显示,空闲......
所以我有一些关于过剩的问题:
首次尝试:
程序开头的glutInit,后面的线程 - &gt; 当我关闭窗口时,发生了错误:freeglut ERROR: Internal <Event Handler> function called without first calling 'glutInit'.
第二次尝试:
每个帖子中的glutInit: 当第二个线程被推出时:
freeglut illegal glutInit() reinitialization attempt
答案 0 :(得分:3)
GLUT 的设计并未考虑线程安全性(甚至根本不支持多线程)。所以我担心,通过GLUT,你无法达到你想要的效果。然而,GLFW似乎在这件事情上要好得多:
线程安全
大多数GLFW函数只能从主线程调用,但有些 可以从任何线程调用。但是,不能调用GLFW功能 从任何其他线程开始,直到GLFW成功初始化为止 主线程,包括之前可能调用的函数 初始化。
每个GLFW功能的参考文档都说明了它 仅限于主线程。
以下类别的功能现在并将继续受限于 主线程由于一个或多个平台的限制:
- 初始化和终止
- 事件处理
- 创建和销毁窗口,上下文和光标对象
这部分在你的情况下似乎非常重要:
渲染可以在任何线程上完成。以下背景相关 可以从任何线程调用函数:
- glfwMakeContextCurrent
- glfwGetCurrentContext
- glfwSwapBuffers
- glfwSwapInterval
- glfwExtensionSupported
- glfwGetProcAddress
[...]
GLFW内部不使用同步对象,除了 线程本地存储,以跟踪每个的当前上下文 线。同步留给应用程序。