当多个char指针(glShaderSource)时GLSL编译错误

时间:2011-12-09 00:41:27

标签: c++ opengl glsl

3.30 OpenGL和GLSL版本的代码有什么问题?

    const char *vertSrcs[2] = { "#define A_MACRO\n", vShaderSrc };
    const char *fragSrcs[2] = { "#define A_MACRO\n", fShaderSrc };
    glShaderSource(vId, 2, vertSrcs, NULL);
    glShaderSource(fId, 2, fragSrcs, NULL);

我在编译后用GL_COMPILE_STATUS收集着色器状态,得到这个错误:

    Vertex shader failed to compile with the following errors:

这个宏的目的是改变我从顶点传递到片段的颜色的类型限定符,也许还有另一种方法可以使用制服和布局来做到这一点,但问题是为什么着色器会失败?我想知道是否还有另一个必须指定2个char指针的OpenGL命令。 顺便说一句,这有效:

 ...
 glShaderSource(vId, 1, &vertSrcs[1], NULL);
 ...

编辑:由于我无法回答自己的问题,找到了解决方案

非常奇怪的问题,字符串加载器恰好是问题所在。不使用 ifstream 以及 std :: ios :: in | std :: ios :: binary 标志,即使null终止,字符串也会加载一些垃圾信息,因此连接字符串会产生错误。 出于某种原因,除了调用

之外,gl编译器之前没有使用单字符串版本进行投诉
inStream.flags(std::ios::in | std::ios::binary)

还不够,需要在打开时指定,没有为此找到任何文档。

1 个答案:

答案 0 :(得分:0)

GLSL着色器的第一个非空行必须是#version预处理器语句。还有别的错误。