首页 > 解决方案 > 在 LWJGL 中使用 glCreateShader 时出现上下文错误

问题描述

当我尝试创建着色器时,它会引发致命错误。

这是代码

glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

handle = glfwCreateWindow(800, 600, "Omlet", 0, 0);
if (handle == 0) {
    System.out.println("Failed to create GLFW window");
    glfwTerminate();
    System.exit(-1);
}

glfwMakeContextCurrent(handle);
glfwSetFramebufferSizeCallback(handle, (win, w, h) -> glViewport(0, 0, w, h));
glCreateShader(GL_VERTEX_SHADER);

这是错误:

FATAL ERROR in native method: Thread[main,5,main]: No context is current or a function that is not available in the current context was called. The JVM will abort execution.
    at org.lwjgl.opengl.GL20C.glCreateShader(Native Method)
    at net.zyrafal.Main.main(Main.java:25)

我正在使用 org.lwjgl.opengl.GL46C 和 org.lwjgl.glfw.GLFW

标签: javaopengllwjgl

解决方案


您错过了对 的调用GL.createCapabilities()。LWJGL 需要从线程本地上下文中获取 OpenGL 函数的函数指针。请参阅https://www.lwjgl.org/guide上的代码和解释评论:

// This line is critical for LWJGL's interoperation with GLFW's
// OpenGL context, or any context that is managed externally.
// LWJGL detects the context that is current in the current thread,
// creates the GLCapabilities instance and makes the OpenGL
// bindings available for use.
GL.createCapabilities();

推荐阅读