GLFW 的线程设置

Thread Setup for GLFW

我开始使用新的 Lwjgl 3,它使用 GLFW 进行 Display/mouse/keyboard 处理,我真的很喜欢它!但是今天我撞到了一块砖。我有一个简单的渲染动画,但是当我拖动屏幕时它停止渲染,直到我再次放手。


根据:http://www.glfw.org/faq.html
由于 windows 出现问题。

3.5 - Why does my application freeze when I move or resize the window?

The Windows event loop is blocked by certain actions like dragging or resizing a window, or opening the window menu. This is part of the design of Windows and cannot be changed by GLFW. If you wish to keep rendering during such actions, you should render from a secondary thread.

--http://www.glfw.org/faq.html


我之前在 Java 做过多线程的事情。但我不确定在这种情况下它自己的线程会发生什么。我应该在单独的线程中使用 opengl 代码和 GLFW 代码吗?我也很难想出一种方式来表达我的担忧。

不,您不能在单独的线程中使用 GLFW 和 OpenGL。两者都必须在主线程中运行。至于阻塞,您无能为力。您只需要检查帧之间的延长暂停(E.x。当用户移动 window。)并相应地计算动画和其他基于时间的事件。

据我所知,唯一真正的限制是 GLFW 需要在应用程序的主线程中。这是 GLFW 的 OS 事件队列所在的位置,也是 glfwPollEvents 和 glfwWaitEvents 需要在主线程中的原因。

OpenGL 渲染可以从它自己的线程中完成。 glfwMakeContextCurrent 将 OpenGL 上下文与进行该调用的线程联系起来。如果您的渲染函数在它自己的线程上运行,只需确保更新上下文(如演示中所示)。

LWJGL Forum topic: [SOLVED] LWJGL3 Not threading as expected

LWJGL3 Multithreaded Demo referenced in the above link