GLFW的线程设置

我开始使用新的Lwjgl 3,它使用GLFW进行显示/鼠标/键盘处理,我真的很喜欢它! 然而今天我打了砖头。 我有一个简单的渲染动画,但当我拖动屏幕时,它停止渲染,直到我再次放手。


根据: http : //www.glfw.org/faq.html
问题出现在窗户旁边。

3.5 – 当我移动窗口或调整窗口大小时,为什么我的应用程序会冻结?

Windows事件循环被某些操作阻止,例如拖动或调整窗口大小或打开窗口菜单。 这是Windows设计的一部分,GLFW无法更改。 如果您希望在此类操作期间继续渲染,则应从辅助线程渲染。

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


我以前在Java中做过multithreading的事情。 但我不确定这种情况下自己的线程是什么。 我应该在单独的线程中使用opengl代码和GLFW代码吗? 我也很难想出一种解决问题的方法。

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

OpenGL渲染可以从自己的线程完成。 glfwMakeContextCurrent将OpenGL上下文绑定到进行该调用的线程。 如果你的渲染函数在它自己的线程上运行,请确保更新上下文(如演示中所示)。

LWJGL论坛主题:[已解决] LWJGL3未按预期进行线程化

LWJGL3multithreading演示在上面的链接中引用

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