2015-06-23 79 views
2

我正在关注YouTube上的教程,但是我有OpenGL的问题,我无法解决。我不知道如何修复它。在当前线程中没有OpenGL上下文是最新的

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(); 

} 
} 
+0

考虑到一些新人提出的问题 - 写得很好的问题。正如在下面的答案中已经指出的那样,OpenGL只能用于调用Display.create()的同一线程上。 – Joehot200

回答

2

的OpenGL上下文绑定到一个线程在创建时,所以他们只能从该线程使用。请参阅答案here.

相关问题