我正在尝试设置一个简单的顶点着色器。当我编译它时,它失败了(根据GL_COMPILE_STATUS),但是信息日志是空的,从调试的角度来看,我没有任何工作。
这是我的代码:
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);
}
我知道这非常混乱,因为我是着色器的新手,所以我确定我的着色器代码有问题。但是,让我感到害怕的是缺乏调试信息。上面的代码导致compiled
为GL_FALSE
(意味着代码无法编译),logLength
为0(意味着信息日志为空)。是什么赋予了?这不是信息日志的重点吗?
答案 0 :(得分:2)
glCompileShader
从glCreateShader
返回的着色器编号不是着色器类型。
在这种情况下
glCompileShader(GL_VERTEX_SHADER);
应该是
glCompileShader(vertexShader);