【发布时间】:2012-12-21 05:59:04
【问题描述】:
在一个单独的线程中创建一个包含消息循环的窗口,然后在另一个线程中创建一个 OpenGL 上下文有什么问题吗?
【问题讨论】:
标签: multithreading winapi opengl
在一个单独的线程中创建一个包含消息循环的窗口,然后在另一个线程中创建一个 OpenGL 上下文有什么问题吗?
【问题讨论】:
标签: multithreading winapi opengl
如果你小心点,你应该能够让它工作。请参阅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.
【讨论】:
你想做的事是完全可能的。更好的是,OpenGL 上下文可以在线程之间迁移,甚至可以与多个窗口一起使用,只要它们的像素格式兼容。一个限制是,OpenGL 上下文一次只能绑定在一个线程中,并且只能绑定未绑定的上下文。
因此,您甚至可以在一个线程中创建窗口和上下文,然后取消绑定上下文,创建另一个线程并在辅助线程中将上下文重新绑定到窗口。没问题。
您必须注意的唯一一件事是,OpenGL 本身不喜欢多线程。 API 本身或多或少是线程安全的,因为一次只能将一个上下文绑定到一个线程。但是,如果 OpenGL 操作在多个线程上产生,则所有需要进行的记账可能会引发令人讨厌的驱动程序错误,并且还会对性能造成一定的影响。
【讨论】: