Java OpenGL LWJGL无效枚举
我正在尝试在LWJGL应用程序中实现着色器。 如果尝试附加着色器,则出现“无效枚举”异常。 好的,密码说得更多Java OpenGL LWJGL无效枚举,java,opengl,lwjgl,Java,Opengl,Lwjgl,我正在尝试在LWJGL应用程序中实现着色器。 如果尝试附加着色器,则出现“无效枚举”异常。 好的,密码说得更多 private void attach(int progID) { GL20.glAttachShader(progID, vertShaderID); GL20.glAttachShader(progID, fragShaderID); System.out.println("Tester: " + GLU.gluErrorString(GL11.glGet
private void attach(int progID) {
GL20.glAttachShader(progID, vertShaderID);
GL20.glAttachShader(progID, fragShaderID);
System.out.println("Tester: " + GLU.gluErrorString(GL11.glGetError()));
GL20.glLinkProgram(progID);
System.out.println("Tester: " + GLU.gluErrorString(GL11.glGetError()));
if(GL20.glGetShader(progID, GL20.GL_LINK_STATUS) == GL11.GL_FALSE) {
System.err.println("error during linking shaders! " + GL20.glGetProgramInfoLog(progID, 1000) + " " + GLU.gluErrorString(GL11.glGetError()));
}
GL20.glValidateProgram(progID);
System.out.println(GL20.glGetProgramInfoLog(progID, 1000));
System.out.println("Tester: " + GLU.gluErrorString(GL11.glGetError()));
System.out.println(GL20.glGetProgramInfoLog(progID, 1000));
if(GL20.glGetShader(progID, GL20.GL_VALIDATE_STATUS) == GL11.GL_FALSE) {
System.err.println("error during validating shaders! " + GL20.glGetProgramInfoLog(progID, 1000) + " " + GLU.gluErrorString(GL11.glGetError()));
}
}
产生输出:
测试人员:没有错误
测试人员:没有错误
验证成功
测试器:无效的枚举
验证成功
所以我遵循这个函数的异常源。
这个验证功能是什么?如果程序日志为“验证成功”,则是什么导致此错误?或者该错误是从我在应用程序中使用GL函数的任何其他情况调用的?什么是INVLATED Enum错误?这意味着我使用了错误的GL类型?
GL\u LINK\u STATUS
不是您可以使用glGetShader{iv}(…)
查询的对象,即着色器状态。您可能打算对每个着色器使用GL\u COMPILE\u STATUS
GL20.glGetShader (vertShaderID, GL20.GL_COMPILE_STATUS);
GL20.glGetShader (fragShaderID, GL20.GL_COMPILE_STATUS);
GL_LINK_STATUS
仅是glGetProgram{iv}(…)
的有效枚举:
理想情况下,您应该检查每个着色器的编译状态,然后在使用我上面提到的函数和枚举链接所有着色器后检查链接状态。是的,我在另一个函数中检查编译状态以加载文件并获取着色器源OK,在任何情况下都是这样。这就是你犯错误的原因。您无法将
GL\u LINK\u STATUS
传递到glGetShader(…)
,否则它将向您发送此错误消息。我已经解释了你需要做什么来修复它。啊,好吧,我明白你的意思,已经删除了glGetShader(..)并替换为你的。错误消失了,非常感谢你:D
GL20.glGetProgram (progID, GL20.GL_LINK_STATUS);