在 LWJGL 中使用 glCreateShader 时出现上下文错误

Context error when using glCreateShader in LWJGL

当我尝试创建着色器时抛出一个致命错误。

这是代码

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

您未接来电 GL.createCapabilities()。 LWJGL 需要从 thread-local 上下文中获取 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();