Win32消息循环,OpenGL上下文在不同的线程中

时间:2012-12-21 05:59:04

标签: multithreading winapi opengl

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

2 个答案:

答案 0 :(得分:4)

如果你小心的话,你应该能够让它发挥作用。请参阅parallel opengl faq

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.

答案 1 :(得分:0)

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

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

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