Java LWJGL GLSL着色器有效性检查始终失败,尽管着色器工作正常
我有一个函数,用于检查共享的顶点/片段是否已成功编译,是否可在LWJGL中使用Java LWJGL GLSL着色器有效性检查始终失败,尽管着色器工作正常,java,opengl,graphics,opengl-es,lwjgl,Java,Opengl,Graphics,Opengl Es,Lwjgl,我有一个函数,用于检查共享的顶点/片段是否已成功编译,是否可在LWJGL中使用 public static boolean isShaderValid(int shaderToCheck) { IntBuffer iVal = BufferUtils.createIntBuffer(1); glGetObjectParameterARB(shaderToCheck, GL_OBJECT_INFO_LOG_LENGTH_ARB, iVal); int length = iV
public static boolean isShaderValid(int shaderToCheck) {
IntBuffer iVal = BufferUtils.createIntBuffer(1);
glGetObjectParameterARB(shaderToCheck, GL_OBJECT_INFO_LOG_LENGTH_ARB, iVal);
int length = iVal.get();
boolean isValid = length>1;
if (isValid && verboseValidityCheck) {
printShaderLogInfo(shaderToCheck, iVal, length);
}
return isValid;
}
然而,这总是返回false,即使当我跳过此检查并仅使用着色器时,它仍然可以正常工作。那么,此着色器有效性检查有什么问题吗?使用infolog长度检查着色器的有效性是不合适的 我不确定您在这里指的是程序还是着色器,但您应该分别使用GL\u LINK\u STATUS/GL\u COMPILE\u STATUS调用或以获得布尔通过/失败结果 只有当您想要分配一个字符缓冲区来检索日志,并且日志内容完全由GPU供应商决定,并且是任意的时,info日志长度才有用
在着色器编译之后,它可以很容易地在信息日志中返回
“compilesuccessful”
,这将使您的长度检查毫无用处 使用infolog长度检查着色器的有效性是不合适的
我不确定您在这里指的是程序还是着色器,但您应该分别使用GL\u LINK\u STATUS/GL\u COMPILE\u STATUS调用或以获得布尔通过/失败结果
只有当您想要分配一个字符缓冲区来检索日志,并且日志内容完全由GPU供应商决定,并且是任意的时,info日志长度才有用
在着色器编译之后,它可以很容易地在信息日志中返回“compilesuccessful”
,这将使您的长度检查毫无用处 这部分
布尔值isValid=长度>1
将为任何空信息日志获取一个假值
据我所知,着色器的空信息日志是可以的,因此任何完美验证着色器都可能得到错误的结果。此部分
布尔值isValid=长度>1
将为任何空信息日志获取一个假值
据我所知,着色器的空信息日志是可以的,因此任何完全验证着色器的结果都可能是错误的。好的,我现在明白了。谢谢你的回复,我现在明白了。谢谢你的回复