OpenGL 未报告着色器编译器错误

OpenGL not reporting shader compiler errors

本文关键字:编译器 错误 报告 OpenGL      更新时间:2023-10-16

我在让OpenGL正常工作时遇到了问题。它在所有着色器上都失败,只是返回长度为 0 的信息日志。

为了看看它是否真的是OpenGL,我创建了一小段代码来测试它:

GLuint s = glCreateShader(GL_VERTEX_SHADER);
const char *src = "badnsourcencode";
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] = '';
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 返回指定着色器对象的信息日志。编译着色器时,将修改着色器对象的信息日志。返回的字符串将以 null 结尾。