线程异常 "main" org.lwjgl.opengl.OpenGLException: 无效操作 (1282) - LWJGL
Exception in thread "main" org.lwjgl.opengl.OpenGLException: Invalid operation (1282) - LWJGL
我尝试使用 lwjgl 创建游戏。我做错了什么并在下面出现错误。我该如何解决?它究竟意味着什么?
Exception in thread "main" org.lwjgl.opengl.OpenGLException: Invalid operation (1282)
at org.lwjgl.opengl.Util.checkGLError(Util.java:59)
at org.lwjgl.opengl.GL20.glUniform1f(GL20.java:338)
at com.base.engine.Shader.setUniformf(Shader.java:119)
at com.base.engine.Game.update(Game.java:63)
at com.base.engine.MainComponent.run(MainComponent.java:85)
at com.base.engine.MainComponent.start(MainComponent.java:38)
at com.base.engine.MainComponent.main(MainComponent.java:131)
Java Result: 1
GL_INVALID_OPERATION is generated if there is no current program object.
您在 Game
的 render()
方法中绑定您的着色器程序:
public void render()
{
shader.bind();
mesh.draw();
}
但是,如教程 11 中的 MainComponent
class 所示:
private void run()
{
// ...
while(unprocessedTime > frameTime)
{
// ...
game.update();
// ...
}
if(render)
{
render();
frames++;
}
// ...
}
private void render()
{
RenderUtil.clearScreen();
game.render();
Window.render();
}
此处 game.update()
在 render()
之前被调用(因此 game.render()
)。
因为着色器程序只在game.render()
中绑定,在game.update()
的第一次调用时没有程序绑定,这意味着GL_INVALID_OPERATION
被抛出。
这不是真正的问题,因为从第二帧开始,程序就被绑定了,所以从那里一切都会完美地工作。但是,您可能已打开调试模式,这意味着 LWJGL 不会默默地忽略 OpenGL 错误,而是抛出异常。
因此您可以关闭调试模式,或者我建议您在 Game
构造函数的末尾绑定一次着色器程序,而不是每帧绑定一次。只要你只有一个着色器程序,它就可以完美运行。
我尝试使用 lwjgl 创建游戏。我做错了什么并在下面出现错误。我该如何解决?它究竟意味着什么?
Exception in thread "main" org.lwjgl.opengl.OpenGLException: Invalid operation (1282)
at org.lwjgl.opengl.Util.checkGLError(Util.java:59)
at org.lwjgl.opengl.GL20.glUniform1f(GL20.java:338)
at com.base.engine.Shader.setUniformf(Shader.java:119)
at com.base.engine.Game.update(Game.java:63)
at com.base.engine.MainComponent.run(MainComponent.java:85)
at com.base.engine.MainComponent.start(MainComponent.java:38)
at com.base.engine.MainComponent.main(MainComponent.java:131)
Java Result: 1
GL_INVALID_OPERATION is generated if there is no current program object.
您在 Game
的 render()
方法中绑定您的着色器程序:
public void render()
{
shader.bind();
mesh.draw();
}
但是,如教程 11 中的 MainComponent
class 所示:
private void run()
{
// ...
while(unprocessedTime > frameTime)
{
// ...
game.update();
// ...
}
if(render)
{
render();
frames++;
}
// ...
}
private void render()
{
RenderUtil.clearScreen();
game.render();
Window.render();
}
此处 game.update()
在 render()
之前被调用(因此 game.render()
)。
因为着色器程序只在game.render()
中绑定,在game.update()
的第一次调用时没有程序绑定,这意味着GL_INVALID_OPERATION
被抛出。
这不是真正的问题,因为从第二帧开始,程序就被绑定了,所以从那里一切都会完美地工作。但是,您可能已打开调试模式,这意味着 LWJGL 不会默默地忽略 OpenGL 错误,而是抛出异常。
因此您可以关闭调试模式,或者我建议您在 Game
构造函数的末尾绑定一次着色器程序,而不是每帧绑定一次。只要你只有一个着色器程序,它就可以完美运行。