0

在一个单独的线程中创建一个窗口有什么问题,它也将包含消息循环,然后在另一个线程中创建一个 OpenGL 上下文?

4

2 回答 2

4

如果你小心的话,你应该能够让它工作。请参阅并行 opengl 常见问题解答

Q: Why does my OpenGL application crash/not work when 
   I am rendering from another thread?
A: The OpenGL context is thread-specific. You have to 
   make it current in the thread using glXMakeCurrent, 
   wglMakeCurrent or aglSetCurrentContext, depending on 
   your operating system.
于 2012-12-21T06:08:24.927 回答
0

你想做的事是完全可能的。更好的是,OpenGL 上下文可以在线程之间迁移,甚至可以与多个窗口一起使用,只要它们的像素格式兼容。一个限制是,OpenGL 上下文一次只能绑定在一个线程中,并且只能绑定未绑定的上下文。

因此,您甚至可以在一个线程中创建窗口和上下文,然后取消绑定上下文,创建另一个线程并将上下文重新绑定到辅助线程中的窗口。那里没问题。

您必须注意的唯一一件事是,OpenGL 本身不喜欢多线程。API 本身或多或少是线程安全的,因为一次只能将一个上下文绑定到一个线程。但是,如果 OpenGL 操作在多个线程上产生所需的所有簿记可能会触发令人讨厌的驱动程序错误,并且还会对性能产生一定的影响。

于 2012-12-21T11:26:47.950 回答