2012-09-05 5 views
3

하나의 조각 쉐이더로 구성된 간단한 OpenGL 3.2 프로그램을 빌드하려하지만 실제 쉐이더를 컴파일 할 수없는 것 같습니다. 나는 쉐이더 문법이 정확하다고 확신하지만, 그렇지 않은 경우에도 glGetShaderInfoLog을 사용하여 오류 메시지를 검색 할 수는 없다. 쉐이더 조각 쉐이더에서glGetShaderInfoLog에서 오류 메시지를 가져올 수 없습니다.

컴파일 오류 :

문제는 것이이 메시지를 얻을 수

GLuint shader = glCreateShader(GL_FRAGMENT_SHADER); 

const char *shaderData = 
      "#version 120\n" 
      "void main()\n" 
      "{\n" 
      " gl_FragColor = gl_Color;\n" 
      "}\n"; 
glShaderSource(shader, 1, &shaderData, NULL); 

GLint status; 
glGetShaderiv(shader, GL_COMPILE_STATUS, &status); 

if (status == GL_FALSE) 
{ 
    GLint infoLogLength; 
    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength); 

    GLchar* strInfoLog = new GLchar[infoLogLength + 1]; 
    glGetShaderInfoLog(shader, infoLogLength, NULL, strInfoLog); 

    fprintf(stderr, "Compilation error in shader %s: %s\n", this->name, strInfoLog); 
    delete[] strInfoLog; 
} 

:

나는 행동이 보여주는 짧은 프로그램을 개발 0이 될 때마다 GL_INFO_LOG_LENGTH 값을 검색하기 위해 getShaderiv을 호출하면 매번 0이 반환되므로 빈 strin을 할당합니다. 지. 이 값을 100으로 하드 코딩하려고했지만 여전히 getShaderInfoLog에서 아무것도 수신하지 않습니다.

내 관심사는 셰이더를 수정하는 것이 아니라 디버깅 정보를 얻는 것입니다. 나는 셰이더를 간단히 개발하기 위해 Shader Maker을 사용했기 때문에 이것이 가능하다는 것을 알고 있으며 매우 자세한 디버그 메시지를 얻을 수 있습니다. 예를 들어 : ERROR: 0:11: 'undefined_variable' : syntax error syntax error

쉐이더 마커 자체 검증 도구가없는 한

내부적으로, 나는 내가 사용하려고 같은 방법을 사용하는 확신합니다. 사람들이 같은 방식으로 쉐이더에 대한 오류 메시지를 검색하는 인터넷에서 몇 가지 예를 보았습니다. 그래서 올바르게 수행하고 있다고 확신합니다. 나는 #include <OpenGL/gl.h>를 호출 할 경우

#warning gl.h and gl3.h are both included. Compiler will not invoke errors if using removed OpenGL functionality.

전체 텍스트 검색을 수행 한 후, 난 아무데도 찾을 수 없습니다 :

는 지금, 나는 잠재적으로이 문제를 설명 할 수있는 컴파일시 경고를 받고 있습니다 그래서 나는이 헤더가 NSOpenGL* 클래스 중 하나에 포함되어 있다고 추측합니다. 나는이 짧은 프로그램에서 제거 된 기능을 사용하지 않을 것이라고 확신하고 있으며,이 문제는 Google에 약 5 건의 조회가 있지만 어쨌든이 문제를 더 잘 언급 할 것이라고 생각했습니다.

+4

코드에'glCompileShader'가 표시되지 않습니다. – JWWalker

+0

오 마이 갓! 나는 내가 그것을 놓쳤다라고 생각할 수 없다! 예상대로 내 오류 메시지가 나타납니다. 나는 당신이이 질문에 대한 대답으로 이것을 써서 제안을 해줄 것을 제안합니다. 초기 시간까지 코드를 작성하면 이러한 현상이 발생합니다. –

답변

7

이전 메모에서 언급했듯이 glCompileShader 전화가 없습니다.