Java LWJGL:在线程之间传递OpenGL上下文

Java LWJGL:在线程之间传递OpenGL上下文,java,opengl,lwjgl,Java,Opengl,Lwjgl,我有两个线程在我的程序中运行。当我尝试在非主线程中使用OpenGL函数时,它抛出一个非法状态异常:当前线程中没有当前的OpenGL上下文。所以我的问题是,如何将上下文从主线程传递到另一个线程?我正在使用LWJGL 3。我想我解决了它,但我不能100%确定这是最好的方法。必须调用GLFW.glfwMakeContextCurrent(MemoryUtil.NULL);在要离开的线程中,调用GLFW.glfwMakeContextCurrent(窗口);GLContext.createFromCur

我有两个线程在我的程序中运行。当我尝试在非主线程中使用OpenGL函数时,它抛出一个非法状态异常:当前线程中没有当前的OpenGL上下文。所以我的问题是,如何将上下文从主线程传递到另一个线程?我正在使用LWJGL 3。

我想我解决了它,但我不能100%确定这是最好的方法。必须调用GLFW.glfwMakeContextCurrent(MemoryUtil.NULL);在要离开的线程中,调用GLFW.glfwMakeContextCurrent(窗口);GLContext.createFromCurrent();从要切换到的线程开始。

查看。它使用一个可以在两个Java线程中使用的。我不完全确定它是否仍然有效,因为这个类的很多内容都与LWJGL2相关。我将很快对其进行测试,并让您知道此方法或您的方法是否更有效(将创建一个微型基准:)。

通常您只创建两个上下文。尝试用谷歌搜索opengl共享上下文。你所做的工作也很有效,但如果你需要经常更改当前上下文,那么速度会非常慢。谢谢。你的意思是展示如何创建两个不同的上下文吗?我几乎找不到任何例子。我尝试了GLContext.createFromCurrent();由于它返回一个GLContext对象,我想我可以调用它两次,然后将GLContext存储在两个不同的变量中,然后在另一个线程中调用GL.setCurrent(otherContext),但我的OGL调用都没有任何效果。对不起,还不是100%清楚,您要切换到的窗口的windowID是什么,它自己的ID还是上一个窗口的ID?还包括GLContext.createFromCurrent();替换为GL.createCapabilities()?