LWJGL3 共享上下文抛出"GLFW_VERSION_UNAVAILABLE"



我尝试对我的应用程序进行多线程处理,但是当我尝试从主窗口共享上下文时,程序崩溃了。

[LWJGL]
GLFW_VERSION_UNAVAILABLE
error
Description : WGL: Failed to create OpenGL context
Stacktrace  :   
org.lwjgl.glfw.GLFW.nglfwCreateWindow(GLFW.java:1361)   
org.lwjgl.glfw.GLFW.glfwCreateWindow(GLFW.java:1521)

以下是主窗口的创建代码:

GLFWErrorCallback.createPrint(System.err).set();
if (!glfwInit()) {
throw new IllegalStateException("Unable to initialize GLFW");
}
glfwDefaultWindowHints();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
if(fullscreen){
window = glfwCreateWindow(vidmode.width(), vidmode.height(), windowTitle, glfwGetPrimaryMonitor(), NULL);
Var.windowSizeX=vidmode.width();
Var.windowSizeY=vidmode.height();
}else{
window = glfwCreateWindow(windowSizeX, windowSizeY, windowTitle, NULL, NULL);
glfwSetWindowPos(window, (vidmode.width() - windowSizeX) / 2, (vidmode.height() - windowSizeY) / 2);
}
if (window == NULL) {
throw new RuntimeException("Failed to create the GLFW window");
}
glfwMakeContextCurrent(window);
if (vSync) {
glfwSwapInterval(1);
} else {
glfwSwapInterval(0);
}
GL.createCapabilities();

我的第二个线程中的代码:

GLFW.glfwWindowHint(GLFW.GLFW_VISIBLE, GLFW.GLFW_FALSE);
offsiteWindow = GLFW.glfwCreateWindow(1, 1, "offsite", MemoryUtil.NULL, window);//errors
GLFW.glfwMakeContextCurrent(offsiteWindow);
GL.createCapabilities();

我做错了什么? 版本:稳定版 LWJGL 3.1.3 快照版本 1

这里至少有一个问题是你从不同的线程调用glfwCreateWindow,而

此函数只能从主线程调用。[参考资料]

您必须基于ConcurrentLinkedQueue或其他方式在线程之间实现消息传递,仅从除主线程之外的每个线程创建窗口的请求,而主线程必须侦听这些请求并使用此函数调用进行实际创建

如果 Grief 的答案不起作用,您还必须确保仅当资源共享window并且已与此共享的窗口在任何线程中都不是最新的时才调用glfwCreateWindow

从 javadocglfwCreateWindow

Windows:要与之共享资源的上下文在任何其他线程上可能不是最新的。[参考资料]

为此,可以在主线程(或创建主窗口的线程(中调用GLFW.glfwMakeContextCurrent(0),然后在第二个线程中创建具有共享的窗口。

相关内容

最新更新