2013-05-08 75 views
2

我試圖設置一個簡單的頂點着色器。當我編譯它時,它失敗(根據GL_COMPILE_STATUS),但是信息日誌是空的,從調試的角度看,我沒有任何工作要做。頂點着色器無法編譯,但沒有來自Info Log的消息

這裏是我的代碼:

GLuint vertexShader, fragmentShader; 

char *code = 

"void main(void)\ 
{\ 
    vec4 a = gl_Vertex;\ 
    a.x = a.x * 0.5;\ 
    a.y = a.y * 0.5;\ 
    gl_Position = gl_ModelViewProjectionMatrix * a;\ 
}"; 


int length = strlen(code); 

vertexShader = glCreateShader(GL_VERTEX_SHADER); 
//fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); 
glShaderSource(vertexShader, 1, &code, &length); 

glCompileShader(GL_VERTEX_SHADER); 

GLint compiled; 
GLint logLength; 

glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &compiled); 

glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH , &logLength); 
if (logLength > 1) 
{ 
    GLchar* compiler_log = (GLchar*)malloc(logLength); 
    glGetShaderInfoLog(vertexShader, logLength, 0, compiler_log); 
    printf("%s\n", compiler_log); 
    free (compiler_log); 
} 

我知道,這是相當混亂,因爲我是新來的着色我敢肯定有什麼毛病我的着色器代碼。但是,讓我失望的是沒有調試信息。上面的代碼導致compiledGL_FALSE(表示代碼編譯失敗)和logLength爲0(表示信息日誌爲空)。是什麼賦予了?這不是信息日誌的全部要點嗎?

回答

2

glCompileShader採取從glCreateShader不着色器類型返回的着色號。

在這種情況下

glCompileShader(GL_VERTEX_SHADER); 

應該

glCompileShader(vertexShader); 
+0

哇,我覺得愚蠢。我想'GLenum'基本上是一個'GLuint',它並沒有給我一個錯誤。它也解釋了爲什麼'vertexShader'沒有錯誤日誌,因爲我甚至沒有嘗試過編譯它!我會暫時休息一下。 – 2013-05-08 19:33:29