하나의 조각 쉐이더로 구성된 간단한 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 건의 조회가 있지만 어쨌든이 문제를 더 잘 언급 할 것이라고 생각했습니다.
코드에'glCompileShader'가 표시되지 않습니다. – JWWalker
오 마이 갓! 나는 내가 그것을 놓쳤다라고 생각할 수 없다! 예상대로 내 오류 메시지가 나타납니다. 나는 당신이이 질문에 대한 대답으로 이것을 써서 제안을 해줄 것을 제안합니다. 초기 시간까지 코드를 작성하면 이러한 현상이 발생합니다. –