GLFW的线程设置

时间:2015-07-09 21:09:12

标签: java multithreading lwjgl glfw

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

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

  

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

default implementation

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

答案 1 :(得分:-1)

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