It throws a FATAL ERROR when i try to create a shader.
Here is the code
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);
And here is the error:
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)
I am using org.lwjgl.opengl.GL46C and org.lwjgl.glfw.GLFW
You are missing the call to GL.createCapabilities()
. It is needed for LWJGL to obtain the function pointers for OpenGL functions from a thread-local context.
Please see the code and explaining comments on 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();