Shader.h 中声明新函数:
private:
void checkCompileErrors(unsigned int ID, std::string type);
Shader.cpp 中定义新函数:
void Shader::checkCompileErrors(unsigned int ID, std::string type)
{
int success;
char infolog[512];
if (type != "PROGRAM")
{
glGetShaderiv(ID, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(ID, 512, NULL, infolog);
cout << "shader compile error:" << infolog << endl;
}
}
else
{
glGetProgramiv(ID, GL_LINK_STATUS, &success);
if (!success)
{
glGetProgramInfoLog(ID, 512, NULL, infolog);
cout << "program link error:" << infolog << endl;
}
}
}
在着色器后加入函数排查错误(Shader.cpp中):
unsigned int vertex, fragment;
vertex = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex, 1, &vertexSource, NULL);
glCompileShader(vertex);
//检查顶点着色器错误
checkCompileErrors(vertex, "VERTEX");
fragment = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment, 1, &fragmentSource, NULL);
glCompileShader(fragment);
//检查片段着色器错误
checkCompileErrors(fragment, "FRAGMENT");
ID = glCreateProgram();
glAttachShader(ID, vertex);//依附到ID着色器程序上
glAttachShader(ID, fragment);
glLinkProgram(ID);
//检查链接错误
checkCompileErrors(ID, "PROGRAM");
glGetShaderInfoLog用法同glGetProgramInfoLog一样