当前位置: 首页 > 面试题库 >

当前线程中没有OpenGL上下文

西门庆
2023-03-14
问题内容

我正在关注youtube上的教程,但是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();

}
}

问题答案:

您需要调用glfwMakeContextCurrent将OpenGL上下文绑定到您的线程。LWJGL网站上也有一个工作示例。



 类似资料:
  • 我正在使用入门示例(来自https://www.lwjgl.org/guide{which unchanged works fine}),但将其更改为使用OpenGL ES 3.0(出于与此问题无关的原因)。 我正在使用最新的LWJGL版本3.1.1,选择最小的OpenGL ES作为我的预设(从https://www.lwjgl.org/download)以及使用windows本机。(我正在运行W

  • 我在LWJGL 3中使用OpenGL,我得到以下错误; 这是RenderUtil类,initGraphics是从我的主类的构造函数中调用的。在使用GLFW创建了一个窗口后,我还尝试调用initGraphics,该窗口也生成了类似的错误消息。 另外,我没有使用多线程。要创建一个窗口,我调用方法from my main method."

  • 我想用。tmx文件作为TileMap 这是我的主要课程: 在intellij中编译程序时,我遇到了以下问题: 2017年6月20日星期二23:37:23 IRDT错误:在当前线程中未找到OpenGL上下文。JAVAlang.RuntimeException:在当前线程中找不到OpenGL上下文。在org。lwjgl。opengl。背景。getCapabilities(GLContext.java:

  • 问题内容: 我正在使用一个有趣的世界编辑器,并使用Java和JLWGL。到目前为止一切正常。现在,我尝试创建一个窗口,可以在其中添加要使用的地形或新模型。问题是,当我尝试从主界面创建地形并创建并显示该地形时,但是当我尝试通过按钮事件监听器调用该地形时,出现错误: 在当前线程中未找到OpenGL上下文。 我基本上知道为什么会得到错误。我用来获取输入并单击按钮的框架没有opengl上下文。 现在的问题

  • 我正在使用Java和JLWGL开发一个有趣的世界编辑器。到目前为止,一切正常。现在我试着创建一个窗口,在那里我可以添加一个地形或一个新模型来使用。问题是,当我尝试从主线程创建地形时,它被创建并显示,但当我尝试通过按钮eventlistener调用它时,我得到了一个错误:在当前线程中找不到OpenGL上下文。我基本上知道我为什么会出错。我用来获取输入并单击按钮的框架没有opengl上下文。 我现在的

  • 问题内容: 我正在玩纸牌游戏,目前拥有良好的基础,但是在eclipse中运行它时遇到了错误。我也使用光滑的2d。 这是来自控制台的错误。 线程“主”中的异常java.lang.RuntimeException:在当前线程中找不到OpenGL上下文。在org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)在org.lwjgl.op