OpenGL 不报告着色器编译器错误
OpenGL not reporting shader compiler errors
我无法让 OpenGL 正常工作。它在所有着色器上都失败,只是 returns 一个长度为 0.
的信息日志
为了看看它是否真的是 OpenGL,我创建了一小段代码来测试它:
GLuint s = glCreateShader(GL_VERTEX_SHADER);
const char *src = "bad\nsource\ncode";
glShaderSource(s, 1, &src, 0);
GLint len;
glGetShaderiv(s, GL_INFO_LOG_LENGTH, &len);
std::vector<char> buffer(len+1);
glGetShaderInfoLog(s, len, 0, buffer.data());
buffer[len] = '[=10=]';
std::cout << len << std::endl;
std::cout << buffer.data() << std::endl;
而当 运行 时,它只是将 0
打印到控制台。
发生了什么事?
您需要编译着色器才能获得错误日志。
伪代码:
glCompileShader(shader);
GLint status;
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
if(status == GL_FALSE) {
GLint infolog_length;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infolog_length);
GLchar[] infolog = new GLchar[infolog_length+1];
glGetShaderInfoLog(shader, infolog_length, null, infolog.ptr);
// print infolog etc.
}
来自文档:
glGetShaderInfoLog returns the information log for the specified shader object. The information log for a shader object is modified when the shader is compiled. The string that is returned will be null terminated.
我无法让 OpenGL 正常工作。它在所有着色器上都失败,只是 returns 一个长度为 0.
的信息日志为了看看它是否真的是 OpenGL,我创建了一小段代码来测试它:
GLuint s = glCreateShader(GL_VERTEX_SHADER);
const char *src = "bad\nsource\ncode";
glShaderSource(s, 1, &src, 0);
GLint len;
glGetShaderiv(s, GL_INFO_LOG_LENGTH, &len);
std::vector<char> buffer(len+1);
glGetShaderInfoLog(s, len, 0, buffer.data());
buffer[len] = '[=10=]';
std::cout << len << std::endl;
std::cout << buffer.data() << std::endl;
而当 运行 时,它只是将 0
打印到控制台。
发生了什么事?
您需要编译着色器才能获得错误日志。
伪代码:
glCompileShader(shader);
GLint status;
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
if(status == GL_FALSE) {
GLint infolog_length;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infolog_length);
GLchar[] infolog = new GLchar[infolog_length+1];
glGetShaderInfoLog(shader, infolog_length, null, infolog.ptr);
// print infolog etc.
}
来自文档:
glGetShaderInfoLog returns the information log for the specified shader object. The information log for a shader object is modified when the shader is compiled. The string that is returned will be null terminated.