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.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 函数的任何其他情况调用的错误? Invlaid Enum 错误是什么意思?这意味着我使用了错误的 GL 类型?

最佳答案

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

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

关于java - OpenGL LWJGL 无效枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19061347/

相关文章:

java - HttpClient 中 "Connection Refused"异常和超时之间的区别

java - LWJGL Java 碰撞

python - 渲染灰色纹理而不是颜色

java - LWJGL 3D 渲染不起作用

java - 为什么我的片段着色器中的纹理坐标始终为 (0, 0)?

java - 制作《我的世界》模组。编译错误

java - 更改颜色设置已启用

java - 在 Spring boot 中将 AWS S3 文件下载为流

Java - 如何比较 Guava 范围?

c++ - 围绕当前位置旋转矩阵的快速方法