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

Multithreading Win32消息循环,不同线程中的OpenGL上下文,multithreading,winapi,opengl,Multithreading,Winapi,Opengl,在一个单独的线程中创建一个窗口(它也将包含消息循环),然后在另一个线程中创建一个OpenGL上下文,这有什么不对吗?如果你小心的话,你应该能够让它工作。看 如果你小心的话,你应该能让它工作。看 你想做的事是完全可能的。更好的是,OpenGL上下文可以在线程之间迁移,甚至可以用于多个窗口,只要它们的像素格式兼容。一个约束是,一次只能在一个线程中绑定OpenGL上下文,并且只能绑定未绑定的上下文 因此,您甚至可以在一个线程中创建窗口和上下文,然后解除上下文绑定,创建另一个线程,并在次线程中将上下文重

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

如果你小心的话,你应该能够让它工作。看


如果你小心的话,你应该能让它工作。看


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

因此,您甚至可以在一个线程中创建窗口和上下文,然后解除上下文绑定,创建另一个线程,并在次线程中将上下文重新绑定到窗口。没问题


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

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

因此,您甚至可以在一个线程中创建窗口和上下文,然后解除上下文绑定,创建另一个线程,并在次线程中将上下文重新绑定到窗口。没问题


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

窗口是在单独的线程中创建的,而上下文是在主线程中创建的,在主线程中可以进行绘图。有必要使上下文成为当前的吗?我猜不会,只要你在一个线程中完成所有opengl的工作。窗口是在一个单独的线程中创建的,而上下文是在主线程中创建的,在主线程中进行绘图。有必要将上下文设置为当前上下文吗?我猜不会,只要您在一个线程中完成所有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.