【发布时间】:2015-07-18 03:16:51
【问题描述】:
在我当前的设置中,我有两个显示器由两个 GPU 驱动。使用 GLUT,我为每个窗口创建了两个窗口(每个显示器一个),并通过在绘图调用中调用 glutSetWindow() 从主线程渲染每个窗口。
绘制调用将 Texture2D 渲染为球体(使用 gluSphere()),但 Texture2D 每隔几秒就会换成另一个图像。我已经设置了一个包含 2 个 Texture2D 的数组,因此我可以在显示当前 Texture2D 的同时加载下一个图像。只要一切都在主线程中运行,这就会很好。
问题是调用 glTexImage2D() 来加载下一个图像,挂起我的绘图调用,所以我需要在不同的线程上调用 glTexImage2D()。在不同的线程上调用 glTexImage2D() 会崩溃,因为 OpenGL 上下文似乎没有共享。 GLUT 似乎没有提供共享上下文的方法,但我应该能够通过 glXGetCurrentContext() 在 Linux 上获取上下文。
我的问题是,如果我通过此调用获取上下文,我怎样才能使其成为共享上下文?这甚至可以与 GLUT 一起使用吗?另一种选择是切换到不同的库来替换 GLUT,比如 GLFW,但在这种情况下,我会失去一些方便的函数,比如 gluSphere()。如果上下文不能与 GLUT 共享,有什么建议吗?
【问题讨论】:
标签: linux multithreading opengl textures glut