2013-09-27 6 views
1

LWJGL 응용 프로그램에서 Shader를 구현하려고합니다. 쉐이더를 연결하려고하면 '잘못된 Enum'예외가 발생합니다. 좋아, 코드OpenGL 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())); 
    } 

} 

는 생산 .... 더 talke 출력 :

테스터 : 없음 오류

테스터 : 잘못된 열거 :

유효성 검사

테스터를 성공적인 오류 없음

유효성 확인 성공

그래서이 함수의 예외 소스를 따릅니다. 이 유효성 검사 기능은 무엇입니까? 프로그램 로그가 'Validation successfull'이면이 오류가 발생합니다. 아니면 응용 프로그램에서 GL 함수를 사용하는 다른 상황에서 오류가 발생 했습니까? 그리고 Invlaid Enum Error는 무엇을 의미합니까? 그것은 내가 GL 타입을 잘못 사용한 것을 의미합니까?

답변

2

GL_LINK_STATUS은 쉐이더 상태 인 glGetShader{iv} (...)으로 쿼리 할 수있는 것이 아닙니다. 각 셰이더에 GL_COMPILE_STATUS을 사용하려고했을 것입니다. 내가 언급 된 기능 및 열거 형을 사용하여 모든 쉐이더를 연결 한 후

GL20.glGetProgram (progID, GL20.GL_LINK_STATUS); 

가 이상적으로 각 쉐이더의 컴파일 상태를 확인해야하고, 다음 링크 상태 :

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

GL_LINK_STATUS

glGetProgram{iv} (...) 만 유효한 열거입니다 위.

+0

그래, 파일을로드하고 쉐이더 소스를 얻는 다른 기능에서 컴파일 상태를 확인합니다. –

+0

그래, 어쨌든. 이것은 귀하의 오류의 원인입니다. 'GL_LINK_STATUS'를'glGetShader (...)'에 넘겨 줄 수 없으므로,이 에러 메세지가 나옵니다. 나는 당신이 그것을 고치기 위해해야 ​​할 것을 설명했다. –

+0

아, 네가 무슨 뜻인지 알 겠어, glGetShader (....)를 지우고 너의 것으로 대체 했어. 오류가 사라졌습니다. 정말 고마워요. D –

관련 문제