2012-04-22 2 views
1

나는 공유 정점/조각이 성공적으로 컴파일되었는지 여부를 확인하고 항상 그러나 LWJGL GLSL 쉐이더 유효성 검사가 항상 실패

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

이 LWJGL

내에서 사용하는 것이 유효한 기능이 이 체크를 건너 뛰고 쉐이더 만 사용하더라도 괜찮습니다. 그래서,이 쉐이더 유효성 검사의 문제점은 무엇입니까?

답변

0

그것은 쉐이더의 유효성을 확인하기 위해 infolog 길이를 사용하는 것이 적절하지 않습니다. 당신이 프로그램 또는 여기 쉐이더를 참조하는 경우

는 잘 모르겠어요,하지만 당신은 결과를 실패/부울 패스를하기 위해 각각 GL_LINK_STATUS/GL_COMPILE_STATUS와 glGetProgramiv 또는 glGetShaderiv를 호출해야합니다. 로그를 검색 할 문자의 버퍼를 할당 할 때

정보] 로그 길이

에만 유용하고 로그의 내용은 GPU 공급 업체 및 임의까지 완전히이다.

그것은 쉽게 길이 검사가 쓸모없는 것으로 만들 것 쉐이더 컴파일 후 infolog에 "Compile Successful"를 반환 할 수 있습니다.

+0

은, 지금은 이해합니다. 답장을 보내 주셔서 감사합니다 – codemonkey

1

이 부분

부울 isValid = 길이> 1;

당신에게 빈 정보 로그인에 대한 거짓 값을 얻을 것이다.

쉐이더에 대한 빈 정보 로그 내가 아는 좋은, 그래서 어떤 완벽하게 검증하는 쉐이더와 거짓 결과를 얻을 수 있습니다. 좋아

관련 문제