OpenGL LWJGL无效枚举

时间:2013-09-27 22:58:59

标签: java opengl lwjgl

我想在LWJGL应用程序中实现Shader。 得到了一个无效的枚举'如果我尝试附加着色器,则例外。 好吧,Code talke更多......

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()));
    }

}

产生输出:

测试人员:没有错误

测试人员:没有错误

验证成功

测试人员:无效的枚举

验证成功

所以我遵循此函数的Exception源代码。 这个验证功能是什么?如果程序日志是“验证成功”,那么会产生此错误的原因是什么?或者是在我在应用程序中使用GL函数的任何其他情况调用的错误?什么意味着Invlaid Enum错误?这意味着我使用了GL Type错误?

1 个答案:

答案 0 :(得分:2)

GL_LINK_STATUS不是您可以使用glGetShader{iv} (...)查询的内容,也就是着色器状态。您可能打算对每个着色器使用GL_COMPILE_STATUS

GL20.glGetShader (vertShaderID, GL20.GL_COMPILE_STATUS);
GL20.glGetShader (fragShaderID, GL20.GL_COMPILE_STATUS);

GL_LINK_STATUS只是glGetProgram{iv} (...)的有效枚举:

GL20.glGetProgram (progID, GL20.GL_LINK_STATUS);

理想情况下,您应该检查每个着色器的编译状态,然后使用上面提到的函数和枚举链接所有着色器后的链接状态。