OpenGL在编码着色器时找不到上下文。:LWJGL

codernaut1

我当时在使用lwjgl,只是对我的引擎进行编码,因为我将其重用于其他项目。但是,当我在编码着色器并进行测试时,出现了此错误。

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 org.lwjgl.opengl.GL20.glCreateShader(GL20.java:253)
    at bengine.shaders.ShaderProgram.loadShader(ShaderProgram.java:51)
    at bengine.shaders.ShaderProgram.<init>(ShaderProgram.java:13)
    at bengine.shaders.StaticShader.<init>(StaticShader.java:10)
    at Main.jav$1.init(jav.java:53)
    at bengine.window.CustomWindow.gameloop(CustomWindow.java:54)
    at bengine.window.WindowRunner.runWindow(WindowRunner.java:7)
    at Main.jav.main(jav.java:59)

Process finished with exit code 1

我需要答案,请提供答案,并告诉您这是否是关闭的话题。

这是我的代码:

ShaderProgram.java:

package bengine.shaders;

import org.lwjgl.opengl.GL20;

import java.io.*;

public abstract class ShaderProgram {
    private int shadersID;
    private int vertexShaderID;
    private int fragmentShaderID;

    public ShaderProgram(String vertFile, String fragFile) {
        vertexShaderID = ShaderProgram.loadShader(vertFile, GL20.GL_VERTEX_SHADER);
        fragmentShaderID = ShaderProgram.loadShader(fragFile, GL20.GL_FRAGMENT_SHADER);
        shadersID = GL20.glCreateProgram();
        GL20.glAttachShader(shadersID, vertexShaderID);
        GL20.glAttachShader(shadersID, fragmentShaderID);
        GL20.glLinkProgram(shadersID);
        GL20.glValidateProgram(shadersID);
    }

    public void start() { GL20.glUseProgram(shadersID); }
    public void stop() { GL20.glUseProgram(0); }
    public void clear() {
        stop();
        GL20.glDetachShader(shadersID, vertexShaderID);
        GL20.glDetachShader(shadersID, fragmentShaderID);
        GL20.glDeleteShader(vertexShaderID);
        GL20.glDeleteShader(fragmentShaderID);
        GL20.glDeleteProgram(shadersID);
    }

    protected void bindAttribute(int attribute, String variableName) {
        GL20.glBindAttribLocation(shadersID, attribute, variableName);
    }

    protected abstract void bindAttributes();

    private static int loadShader(String file, int type) {
        StringBuilder shaderSource = new StringBuilder();
        try {
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String line;
            while((line = reader.readLine()) != null) {
                shaderSource.append(line).append("\n");
            }
        } catch(IOException e) {
            e.printStackTrace();
        }

        int shaderID = GL20.glCreateShader(type);
        GL20.glShaderSource(shaderID, shaderSource);
        GL20.glCompileShader(shaderID);
        return shaderID;
    }
}

StaticShader.java:

package bengine.shaders;

import org.lwjgl.glfw.GLFW;

public class StaticShader extends ShaderProgram {
    private static final String VERTEX_FILE = "src/bengine/shaders/vertShader.glsl";
    private static final String FRAGMENT_FILE = "src/bengine/shaders/fragmentShader.glsl";

    public StaticShader() {
        super(VERTEX_FILE, FRAGMENT_FILE);
    }

    @Override
    protected void bindAttributes() {
        super.bindAttribute(0, "position");
    }
}

两个着色器:

fragment shader:

#version 400 core

in vec3 colour;
out vec4 col;

void main(void) {
    col = vec4(colour, 1.0);
}

vertex shader:

#version 400 core

in vec3 position;
out vec3 colour;

void main(void) {
    gl_Position = vec4(position, 1.0);

    colour = vec3(position.x, position.y, position.z);
}

还有窗户。

package bengine.window;

import bengine.math.Vector4;
import bengine.shaders.ShaderProgram;
import bengine.shaders.StaticShader;
import org.lwjgl.opengl.GL;
import org.lwjgl.opengl.GL11;

import static org.lwjgl.glfw.GLFW.*;

public abstract class CustomWindow {
    private long window;
    public StaticShader shader;
    public CustomWindow(int w, int h, String name) {
        if(!glfwInit()) {
            System.err.println("Bengi engine failure: GLFW initialization failed, this is a internal error, can't be fixed.");
        }

        glfwDefaultWindowHints();
        this.window = glfwCreateWindow(w, h, name, 0, 0);

        if(this.window == 0) {
            System.err.println("Bengi engine failure: Window is 0.");
        }

        System.out.println("Window created.");

        glfwMakeContextCurrent(window);

        System.out.println("Context was made.");
    }

    public abstract void render();
    public abstract void update();
    public abstract void init();

    public void swapBuffers() {
        glfwSwapBuffers(this.window);
    }

    public void enableGLClearWith(int mode, Vector4 color) {
        GL11.glClearColor(color.getX(), color.getY(), color.getZ(), color.getW());
        GL11.glClear(mode);
    }

    public void runTask(Task task) {
        task.runTask();
    }

    protected void gameloop() {
        glfwInit(); // to avoid null pointer
        //glfwMakeContextCurrent(window);

        init();

        GL.createCapabilities(true);

        while(!glfwWindowShouldClose(this.window)) {
            //swapBuffers();
            render();
            update();

            glfwPollEvents();
        }
    }
}

Main.java:

package Main;

import bengine.math.Vector4;
import bengine.window.*;
import bengine.CONSTANTS;

import bengine.window.WindowRunner;
import bengine.math.Vector3;
import bengine.renderer.Mesh;
import bengine.renderer.Renderer;
import bengine.renderer.Vertex;
import bengine.shaders.StaticShader;
//import org.lwjgl.opengl.GL11;

public class jav {
    public static CustomWindow window;

    public static void main(String[] args) {
        Mesh mesh = new Mesh(
                new Vertex[] {
                        new Vertex(new Vector3(-0.5f, -0.5f, -0.5f)),
                        new Vertex(new Vector3(-0.5f, 0.5f, -0.5f)),
                        new Vertex(new Vector3(0.5f, -0.5f, -0.5f)),
                        new Vertex(new Vector3(0.5f, 0.5f, -0.5f)),
                        new Vertex(new Vector3(0.0f, 0.6f, -0.5f)),
                },

                new int[] {
                        0, 1, 2, 1, 3, 2, 1, 4, 3
                }
        );

        Renderer renderer = new Renderer();

        window = new CustomWindow(1200, 800, "hello world") {
            @Override
            public void render() {
                swapBuffers();

                enableGLClearWith(CONSTANTS.COLOR, new Vector4(0f, 0f, 0f, 1f));
                shader.start();
                renderer.renderMesh(mesh, CONSTANTS.TRI_RENDER);
                shader.stop();
            }

            @Override
            public void update() {

            }

            @Override
            public void init() {
                shader = new StaticShader();
            }
        };

        WindowRunner runner = new WindowRunner();

        runner.runWindow(window);
    }
}

和窗口运行器(稍后弃用)

package bengine.window;

import org.jetbrains.annotations.NotNull;

public class WindowRunner {
    public static void runWindow(@NotNull CustomWindow window) {
        window.gameloop();
    }
}

我不知道它为什么会发生,渲染器中的所有其他包以及其他包都具有上下文。请回答。

拉比德76

GL.createCapabilities(true);必须先打电话init()中的注释是一种抽象方法。它将被覆盖,并在StaticShader中构造对象init因此,必须事先确保OpenGL功能:

protected void gameloop() {
    
    GL.createCapabilities(true);
    init();

    while(!glfwWindowShouldClose(this.window)) {
        //swapBuffers();
        render();
        update();

        glfwPollEvents();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

找不到上下文的DownstreamContext

来自分类Dev

EF 6启用迁移找不到上下文

来自分类Dev

Jazz:找不到上下文根

来自分类Dev

LWJGL Opengl着色器错误

来自分类Dev

Spring Eureka服务器在客户端URL中找不到上下文路径

来自分类Dev

WebSphere Liberty概要文件:找不到上下文根

来自分类Dev

应用EF 6代码优先的迁移-找不到上下文类型

来自分类Dev

找不到上下文中的owin.Environment项目

来自分类Dev

cmake:oglplus找不到上下文初始化库(glfw)

来自分类Dev

没有glfw上下文无法编译着色器

来自分类Dev

在threejs可视化中从webgl上下文填充着色器属性

来自分类Dev

找不到Spring Application上下文

来自分类Dev

找不到Spring Application上下文

来自分类Dev

毕加索 - 找不到“上下文”

来自分类Dev

LWJGL 3更改OpenGL上下文/ ContextAttribs替代

来自分类Dev

LWJGL - OpenGL 上下文在关闭挂钩中丢失

来自分类Dev

在当前线程中找不到OpenGL上下文?W

来自分类Dev

在当前线程中找不到OpenGL上下文?轻量级

来自分类Dev

上下文jQuery选择器找不到某些元素,为什么?

来自分类Dev

使用Groovy类加载器找不到Spring上下文

来自分类Dev

通过@Resource注入TimerService时,“在JNDI上下文中找不到注入数据”

来自分类Dev

永久违反:执行npm测试时,在“ Connect(AddTodo)”的上下文中找不到“存储”。

来自分类Dev

错误:无法准备上下文:在构建和标记Docker映像时找不到路径“”

来自分类Dev

调用Azure Powershell cmdlet时出现“在上下文中找不到订阅”错误

来自分类Dev

顶点着色器无法编译。找不到错误

来自分类Dev

使用next.js时出现服务器错误,错误:找不到react-redux上下文值;请确保组件包装在<Provider>中

来自分类Dev

在上下文或道具中都找不到“商店”

来自分类Dev

找不到符号“上下文”,android.content.Context

来自分类Dev

从外部jar包含Spring上下文找不到服务

Related 相关文章

  1. 1

    找不到上下文的DownstreamContext

  2. 2

    EF 6启用迁移找不到上下文

  3. 3

    Jazz:找不到上下文根

  4. 4

    LWJGL Opengl着色器错误

  5. 5

    Spring Eureka服务器在客户端URL中找不到上下文路径

  6. 6

    WebSphere Liberty概要文件:找不到上下文根

  7. 7

    应用EF 6代码优先的迁移-找不到上下文类型

  8. 8

    找不到上下文中的owin.Environment项目

  9. 9

    cmake:oglplus找不到上下文初始化库(glfw)

  10. 10

    没有glfw上下文无法编译着色器

  11. 11

    在threejs可视化中从webgl上下文填充着色器属性

  12. 12

    找不到Spring Application上下文

  13. 13

    找不到Spring Application上下文

  14. 14

    毕加索 - 找不到“上下文”

  15. 15

    LWJGL 3更改OpenGL上下文/ ContextAttribs替代

  16. 16

    LWJGL - OpenGL 上下文在关闭挂钩中丢失

  17. 17

    在当前线程中找不到OpenGL上下文?W

  18. 18

    在当前线程中找不到OpenGL上下文?轻量级

  19. 19

    上下文jQuery选择器找不到某些元素,为什么?

  20. 20

    使用Groovy类加载器找不到Spring上下文

  21. 21

    通过@Resource注入TimerService时,“在JNDI上下文中找不到注入数据”

  22. 22

    永久违反:执行npm测试时,在“ Connect(AddTodo)”的上下文中找不到“存储”。

  23. 23

    错误:无法准备上下文:在构建和标记Docker映像时找不到路径“”

  24. 24

    调用Azure Powershell cmdlet时出现“在上下文中找不到订阅”错误

  25. 25

    顶点着色器无法编译。找不到错误

  26. 26

    使用next.js时出现服务器错误,错误:找不到react-redux上下文值;请确保组件包装在<Provider>中

  27. 27

    在上下文或道具中都找不到“商店”

  28. 28

    找不到符号“上下文”,android.content.Context

  29. 29

    从外部jar包含Spring上下文找不到服务

热门标签

归档