Java GLFW的线程设置
我开始使用新的LWJGL3,它使用GLFW进行显示/鼠标/键盘处理,我真的很喜欢它!然而今天我撞到了一块砖头。我有一个简单的渲染动画,但当我拖动屏幕时,它停止渲染,直到我再次放开。Java GLFW的线程设置,java,multithreading,lwjgl,glfw,Java,Multithreading,Lwjgl,Glfw,我开始使用新的LWJGL3,它使用GLFW进行显示/鼠标/键盘处理,我真的很喜欢它!然而今天我撞到了一块砖头。我有一个简单的渲染动画,但当我拖动屏幕时,它停止渲染,直到我再次放开。 根据: 问题是由windows引起的 3.5-当我移动或调整窗口大小时,为什么我的应用程序会冻结? Windows事件循环被某些操作阻止,如拖动或调整窗口大小,或打开窗口菜单。这是Windows设计的一部分,GLFW无法更改。如果希望在这些操作期间保持渲染,则应从辅助线程进行渲染。-- 我以前用Java做过多线程
根据:
问题是由windows引起的 3.5-当我移动或调整窗口大小时,为什么我的应用程序会冻结?
Windows事件循环被某些操作阻止,如拖动或调整窗口大小,或打开窗口菜单。这是Windows设计的一部分,GLFW无法更改。如果希望在这些操作期间保持渲染,则应从辅助线程进行渲染。
--
我以前用Java做过多线程的事情。但我不确定这个案子的线索是什么。我应该把opengl代码和GLFW代码放在不同的线程中吗?我也很难找到表达我的担忧的方法。不,你不能在单独的线程中使用GLFW和OpenGL。两者都必须在主线程中运行。至于拦网,你无能为力。您只需检查帧之间是否有延长的暂停(例如,当用户移动窗口时),并相应地计算动画和其他基于时间的事件。据我所知,唯一真正的限制是GLFW需要位于应用程序的主线程中。这就是GLFW的OS事件队列所在的位置,也是glfwPollEvents和glfwWaitEvents需要位于主线程中的原因 OpenGL渲染可以从自己的线程完成。glfwMakeContextCurrent将OpenGL上下文绑定到进行该调用的线程。如果渲染函数在自己的线程上运行,请确保更新上下文(如演示中所示)
很抱歉,我从他们的网站上得到了这句话。这意味着这是可以做到的。解释他们为什么会误导用户?如果答案有用,别忘了接受。否则,考虑编辑你的问题或评论一个答案,给一个机会来改进答案。