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.