0

嗨,我在 C 中编写了一个简单的着色器错误检查器来检查编译和链接时间的错误。glShaderSource()我在使功能正常工作方面遇到了很大的问题。我首先使用为代码创建空间,malloc(codelength * sizeof(char))然后使用此行将源附加到创建的着色器对象glShaderSource(shader, 1, (const char **) &code, NULL);。我相信问题出在这条线上。我什至尝试更改NULL代码的长度,但无济于事。当我尝试获取有关着色器的信息时,它会返回零glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &compileloglength);和零,glGetShaderiv(shaders[0], GL_COMPILE_STATUS, &compileloglength);请不要将我指向已经存在的着色器错误检查器,除非它具有相关代码,因为我喜欢做这样的小项目。

4

2 回答 2

2

只是为了确保:您是否创建了有效的 OpenGL 上下文?你需要一个支持 GLSL 的 OpenGL 上下文来处理你用来工作的那些函数。

如果您想在不先创建 OpenGL 上下文的情况下进行静态 GLSL 检查,可以使用 Mesa 项目的独立 GLSL 编译器。

于 2013-10-05T08:33:42.027 回答
0

您调用glShaderSource为您的着色器提供源代码。所以,例如

char *source =
"varying vec2 texCoordVarying;"
"uniform sampler2D texture;"
""
"void main()"
"{"
    "gl_FragColor = texture2D(texture, texCoordVarying);"
"}";

glShaderSource(shader, 1, &source, NULL);

您的描述表明您正在为源创建空间,而不是在其中放置任何东西,然后将未填充的空间提供给 OpenGL?如果是这样,那么您很可能malloc碰巧给了您一个空字符串。这不会产生任何构建错误,因为空字符串是有效的着色器,它只是不做任何事情。glLinkProgram您可能会因未能提供合适main()的 s而引发错误。

于 2013-10-05T00:16:06.283 回答