gpt4 book ai didi

c++ - 无法从 glGetShaderInfoLog 检索错误消息

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:07 24 4
gpt4 key购买 nike

我正在尝试构建一个由单个片段着色器组成的简单 OpenGL 3.2 程序,但我似乎无法真正编译该着色器。我相当确定我的着色器语法是正确的,但即使不是,我也无法使用 glGetShaderInfoLog 检索错误消息。 .

我开发了一个简短的程序来展示这一点:

GLuint shader = glCreateShader(GL_FRAGMENT_SHADER);

const char *shaderData =
"#version 120\n"
"void main()\n"
"{\n"
" gl_FragColor = gl_Color;\n"
"}\n";
glShaderSource(shader, 1, &shaderData, NULL);

GLint status;
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);

if (status == GL_FALSE)
{
GLint infoLogLength;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength);

GLchar* strInfoLog = new GLchar[infoLogLength + 1];
glGetShaderInfoLog(shader, infoLogLength, NULL, strInfoLog);

fprintf(stderr, "Compilation error in shader %s: %s\n", this->name, strInfoLog);
delete[] strInfoLog;
}

这会产生消息:

Compilation error in shader Fragment Shader:

问题似乎是对 getShaderiv 的调用检索 GL_INFO_LOG_LENGTH value 每次都返回 0,因此我分配了一个空字符串。我已尝试将此值硬编码为 100,但我仍然没有收到任何来自 getShaderInfoLog 的信息.

我这里关心的不是修复着色器(如果错误我可以自己修复),而是获取调试信息。我知道这是可以做到的,因为我用过 Shader Maker简单地开发着色器,我能够得到非常详细的调试信息。例如:

ERROR: 0:11: 'undefined_variable' : syntax error syntax error

除非 Shader Marker 内部有自己的验证工具,否则我确信它必须使用与我尝试使用的方法相同的方法。我在 Internet 上看到了几个示例,其中人们以相同的方式检索着色器的错误消息,所以我相当确定我做的是正确的。

现在,我收到一个编译时警告,可能会解释这个问题:

#warning gl.h and gl3.h are both included. Compiler will not invoke errors if using removed OpenGL functionality.

进行全文搜索后,我找不到任何我调用 #include <OpenGL/gl.h> 的地方,所以我猜测这个 header 包含在 NSOpenGL* 之一中。类。我相当确定我没有在这个简短的程序中使用任何已删除的功能,而且这个问题在 Google 上只有大约 5 次点击,但我想我还是最好提一下。

最佳答案

如前一条评论所述,glCompileShader 调用缺失。

关于c++ - 无法从 glGetShaderInfoLog 检索错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12291314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com