Java LWJGL OpenGL在创建着色器时未找到上下文

Java LWJGL OpenGL在创建着色器时未找到上下文,java,opengl,shader,lwjgl,Java,Opengl,Shader,Lwjgl,调用glCreateShader()时,在当前线程中找不到OpenGL上下文。运行时异常,我在执行此操作之前已初始化显示 这是我的主要职责: public static void main(String[] args) { MainDisplay md = new MainDisplay(); md.create(); md.init(); md.run(); } 以下是创建函数: public void create() { try {

调用glCreateShader()时,在当前线程中找不到OpenGL上下文。运行时异常,我在执行此操作之前已初始化显示 这是我的主要职责:

public static void main(String[] args) {
    MainDisplay md = new MainDisplay();
    md.create();
    md.init();
    md.run();
}
以下是创建函数:

public void create() {
    try {
        Display.setDisplayMode(new DisplayMode(1920, 1080));
        Display.setTitle("Dryad Engine 1.0.0");
        Display.setFullscreen(false);
        Display.setResizable(true);
    } catch (LWJGLException ex) {
        Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex);
        System.exit(-1);
    }
}
以下是init func:

public void init() {
    //glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // commented because I get the same error ..
    try {
        shaderProgramID = ShaderFactory.createShaderProgram("vertexShader", "fragmentShader");
        glUseProgram(shaderProgramID);
        bunny = OBJLoader.parseOBJ(new File("src/com/dryadengine/assets/bunny.obj"));
        FloatBuffer vbo = BufferUtils.createFloatBuffer(bunny.getVertices().length);
        vbo.put(bunny.getVertices());
        vbo.flip();
        vboID = glGenBuffers();
        glBindBuffer(GL_ARRAY_BUFFER, vboID);
        glBufferData(GL_ARRAY_BUFFER, vbo, GL_STATIC_DRAW);
        vPositionID = glGetAttribLocation(shaderProgramID, "vPosition");
        glEnableVertexAttribArray(vPositionID);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex);
    }
}
shaderProgramID = ShaderFactory.createShaderProgram("vertexShader", "fragmentShader");
我在init func中从该调用中获得异常:

public void init() {
    //glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // commented because I get the same error ..
    try {
        shaderProgramID = ShaderFactory.createShaderProgram("vertexShader", "fragmentShader");
        glUseProgram(shaderProgramID);
        bunny = OBJLoader.parseOBJ(new File("src/com/dryadengine/assets/bunny.obj"));
        FloatBuffer vbo = BufferUtils.createFloatBuffer(bunny.getVertices().length);
        vbo.put(bunny.getVertices());
        vbo.flip();
        vboID = glGenBuffers();
        glBindBuffer(GL_ARRAY_BUFFER, vboID);
        glBufferData(GL_ARRAY_BUFFER, vbo, GL_STATIC_DRAW);
        vPositionID = glGetAttribLocation(shaderProgramID, "vPosition");
        glEnableVertexAttribArray(vPositionID);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex);
    }
}
shaderProgramID = ShaderFactory.createShaderProgram("vertexShader", "fragmentShader");
以下是createShaderProgram函数:

public static int createShaderProgram(String vertexShaderName, String fragmentShaderName) throws FileNotFoundException, IOException {
    ArrayList<Integer> shaders = new ArrayList();
    shaders.add(ShaderFactory.compileShader(GL_VERTEX_SHADER, getShaderFileCode(COMMON_SHADERS_PATH + vertexShaderName + SHADER_EXTENSION)));
    shaders.add(ShaderFactory.compileShader(GL_FRAGMENT_SHADER, getShaderFileCode(COMMON_SHADERS_PATH + fragmentShaderName + SHADER_EXTENSION)));
    return ShaderFactory.linkProgram(shaders);
}
现在更准确地说,异常来自compileShader func中的此调用:

int shaderID = glCreateShader(shaderType);

似乎openGL无法为我生成一个新的着色器程序,为什么?我在调用显示之前初始化了它,所以它可能是什么?

您需要调用
Display.create()
来创建OpengGL上下文。你可以在你的
create()
方法中将这个添加到try块的末尾。

我真是个白痴,不知道我怎么会错过它。谢谢