本文介绍了当前线程中没有OpenGL上下文是当前的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在关注youtube上的教程,但是OpenGL存在我无法解决的问题.我不知道该如何解决.
I'm following a tutorial on youtube but I have a problem with OpenGL that I'm not able to solve. I have no idea how I can fix it.
Exception in thread "EndlessRunner" java.lang.IllegalStateException: No OpenGL context is current in the current thread.
at org.lwjgl.opengl.GLContextWindows.createFromCurrent(GLContextWindows.java:61)
at org.lwjgl.opengl.GLContext.createFromCurrent(GLContext.java:36)
at net.alfredo.Main.init(Main.java:59)
at net.alfredo.Main.run(Main.java:91)
at java.lang.Thread.run(Unknown Source)
主要
package net.alfredo;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryUtil.*;
import java.nio.ByteBuffer;
import org.lwjgl.glfw.GLFWKeyCallback;
import org.lwjgl.glfw.GLFWvidmode;
import org.lwjgl.opengl.GLContext;
import Input.Input;
public class Main implements Runnable {
private Thread thread;
public boolean running = true;
private GLFWKeyCallback keyCallback;
public Long window;
public static void main(String args[]) {
Main game = new Main();
game.start();
}
public void start(){
running = true;
thread = new Thread(this, "EndlessRunner");
thread.start();
}
public void init(){
if(glfwInit() != GL_TRUE){
System.err.println("La inicializacion de GLWF fallo!");
}
glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);
window = glfwCreateWindow(800, 600, "Cuboid MMORPG", NULL, NULL);
if(window == NULL){
System.err.println("No se pudo crear la ventana!");
}
glfwSetKeyCallback(window, keyCallback = new Input());
ByteBuffer vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
glfwSetWindowPos(window, 100, 100);
glfwShowWindow(window);
GLContext.createFromCurrent();
glClearColor(0.56f , 0.250f, 0.425f, 1.0f);
glEnable(GL_DEPTH_TEST);
System.out.println("OpenGL: " + glGetString(GL_VERSION));
}
public void update(){
glfwPollEvents();
if(Input.keys[GLFW_KEY_SPACE]){
System.out.println("Has precionado la tecla Espacio!");
}
}
public void render(){
glfwSwapBuffers(window);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
@Override
public void run() {
init();
while(running){
update();
render();
if (glfwWindowShouldClose(window) == GL_TRUE){
running = false;
}
}
keyCallback.release();
}
}
推荐答案
您需要致电 glfwMakeContextCurrent 将OpenGL上下文绑定到您的线程. LWJGL网站上也有一个工作示例.
You need to call glfwMakeContextCurrent to bind the OpenGL context to your thread. There's a working example on the LWJGL website as well.
这篇关于当前线程中没有OpenGL上下文是当前的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!