Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GLFW的线程设置_Java_Multithreading_Lwjgl_Glfw - Fatal编程技术网

Java GLFW的线程设置

Java GLFW的线程设置,java,multithreading,lwjgl,glfw,Java,Multithreading,Lwjgl,Glfw,我开始使用新的LWJGL3,它使用GLFW进行显示/鼠标/键盘处理,我真的很喜欢它!然而今天我撞到了一块砖头。我有一个简单的渲染动画,但当我拖动屏幕时,它停止渲染,直到我再次放开。 根据: 问题是由windows引起的 3.5-当我移动或调整窗口大小时,为什么我的应用程序会冻结? Windows事件循环被某些操作阻止,如拖动或调整窗口大小,或打开窗口菜单。这是Windows设计的一部分,GLFW无法更改。如果希望在这些操作期间保持渲染,则应从辅助线程进行渲染。-- 我以前用Java做过多线程

我开始使用新的LWJGL3,它使用GLFW进行显示/鼠标/键盘处理,我真的很喜欢它!然而今天我撞到了一块砖头。我有一个简单的渲染动画,但当我拖动屏幕时,它停止渲染,直到我再次放开。
根据:
问题是由windows引起的

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

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

--



我以前用Java做过多线程的事情。但我不确定这个案子的线索是什么。我应该把opengl代码和GLFW代码放在不同的线程中吗?我也很难找到表达我的担忧的方法。

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

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

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


很抱歉,我从他们的网站上得到了这句话。这意味着这是可以做到的。解释他们为什么会误导用户?如果答案有用,别忘了接受。否则,考虑编辑你的问题或评论一个答案,给一个机会来改进答案。