Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenGL没有';编写着色器时找不到上下文。:LWJGL_Java_Opengl_Glsl_Lwjgl_Glfw - Fatal编程技术网

Java OpenGL没有';编写着色器时找不到上下文。:LWJGL

Java OpenGL没有';编写着色器时找不到上下文。:LWJGL,java,opengl,glsl,lwjgl,glfw,Java,Opengl,Glsl,Lwjgl,Glfw,我在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.ope

我在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
StaticShader.java:

package bengine.shaders;
导入org.lwjgl.glfw.glfw;
公共类StaticShader扩展着色器程序{
私有静态最终字符串VERTEX_FILE=“src/bengine/shaders/vertShader.glsl”;
私有静态最终字符串FRAGMENT_FILE=“src/bengine/shaders/fragmentShader.glsl”;
公共静态着色器(){
super(顶点文件、片段文件);
}
@凌驾
受保护的void bindAttributes(){
super.bindAttribute(0,“位置”);
}
}
两个着色器:

片段着色器:
#版本400核心
vec3颜色;
输出vec4列;
真空总管(真空){
col=vec4(颜色,1.0);
}
顶点着色器:
#版本400核心
在vec3位置;
输出vec3颜色;
真空总管(真空){
gl_位置=vec4(位置,1.0);
颜色=vec3(位置x、位置y、位置z);
}
还有窗户

package bengine.window;
导入bengine.math.Vector4;
导入bengine.shaders.ShaderProgram;
导入bengine.shaders.StaticShader;
导入org.lwjgl.opengl.GL;
导入org.lwjgl.opengl.GL11;
导入静态org.lwjgl.glfw.glfw.*;
公共抽象类自定义窗口{
私人长窗;
公共安全;
公共自定义窗口(int w、int h、字符串名称){
如果(!glfwInit()){
System.err.println(“Bengi引擎故障:GLFW初始化失败,这是一个内部错误,无法修复”);
}
glfwDefaultWindowHits();
this.window=glfwCreateWindow(w,h,name,0,0);
如果(this.window==0){
System.err.println(“Bengi发动机故障:窗口为0”);
}
System.out.println(“创建的窗口”);
glfwMakeContextCurrent(窗口);
System.out.println(“上下文生成”);
}
公开摘要无效呈现();
公共摘要无效更新();
公共抽象void init();
公共无效交换缓冲区(){
glfwSwapBuffers(此.window);
}
public void enableGLClearWith(整数模式,矢量4颜色){
GL11.glClearColor(color.getX()、color.getY()、color.getZ()、color.getW());
GL11.glClear(模式);
}
公共void运行任务(任务任务){
task.runTask();
}
受保护的void gameloop(){
glfwInit();//避免空指针
//glfwMakeContextCurrent(窗口);
init();
GL.createCapabilities(真实);
而(!glfwWindowShouldClose(this.window)){
//swapBuffers();
render();
更新();
glfwPollEvents();
}
}
}
Main.java:

packagemain;
导入bengine.math.Vector4;
进口孟加拉。窗口。*;
导入苯丙氨酸常数;
导入bengine.window.WindowRunner;
导入bengine.math.Vector3;
导入bengine.renderer.Mesh;
导入bengine.renderer.renderer;
导入bengine.renderer.Vertex;
导入bengine.shaders.StaticShader;
//导入org.lwjgl.opengl.GL11;
公共级jav{
公共静态自定义窗口;
公共静态void main(字符串[]args){
网格=新网格(
新顶点[]{
新顶点(新矢量3(-0.5f,-0.5f,-0.5f)),
新顶点(新矢量3(-0.5f,0.5f,-0.5f)),
新顶点(新向量3(0.5f,-0.5f,-0.5f)),
新顶点(新向量3(0.5f,0.5f,-0.5f)),
新顶点(新矢量3(0.0f,0.6f,-0.5f)),
},
新int[]{
0, 1, 2, 1, 3, 2, 1, 4, 3
}
);
渲染器=新渲染器();
窗口=新自定义窗口(1200800,“你好世界”){
@凌驾
公共无效呈现(){
swapBuffers();
启用GLClearWith(常数.COLOR,新矢量4(0f,0f,0f,1f));
shader.start();
renderer.renderMesh(网格,常量.TRI_RENDER);
shader.stop();
}
@凌驾
公共无效更新(){
}
@凌驾
公共void init(){
shader=新的StaticShader();
}
};
WindowRunner=新的WindowRunner();
runner.runWindow(窗口);
}
}
和窗口运行程序(稍后已弃用)

package bengine.window;
导入org.jetbrains.annotations.NotNull;
公共类WindowRunner{
公共静态void runWindow(@NotNull CustomWindow window){
gameloop();
}
}

我不知道为什么会发生这种情况,渲染器中的所有其他包和其他包都有上下文。请回答。

GL.createCapabilities(true)init()之前调用code>
。中的注释是一个抽象方法。它被覆盖,并且在
init
中构造
StaticShader
对象。因此,必须事先确保OpenGL的功能:

受保护的void gameloop(){
GL.createCapabilities(真实);
init();
而(!glfwWindowShouldClose(this.window)){
//swapBuffers();
render();
更新();
glfwPollEvents();
}
}

GL.createCapabilities(true)init()之前调用code>
。中的注释是一个抽象方法。它被覆盖,并且在
init
中构造
StaticShader
对象。因此,必须事先确保OpenGL的功能:

受保护的void gameloop(){
GL.createCapabilities(真实);
init();
而(!glfwWindowShouldClose(this.window)){
//swapBuffers();
render();
更新();
glfwPollEvents();
}
}

在哪里调用StaticShader类的构造函数?gameloop()在哪里被调用?窗口管理器是做什么的?不知道你在哪根线上