当超过一个char指针时编译错误(glShaderSource)

GLSL Compiling error when more than one char pointer (glShaderSource)

本文关键字:指针 编译 错误 glShaderSource char 一个      更新时间:2023-10-16

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

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

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

    Vertex shader failed to compile with the following errors:
这个宏的目的是改变我从顶点传递到片段的颜色的类型限定符,也许有另一种方法可以使用统一和布局,但问题是为什么着色器会失败?我想知道是否有另一个OpenGL命令必须指定2个字符指针。顺便说一下,这是有效的:
 ...
 glShaderSource(vId, 1, &vertSrcs[1], NULL);
 ...

编辑:既然我不能回答我自己的问题,找到解决方案

非常奇怪的问题,字符串加载器恰好是问题所在。如果不使用ifstreamstd::ios:: binary标志,即使以null结尾,字符串也会被加载一些垃圾信息,因此连接字符串将产生错误。由于某种原因,除了调用

之外,gl编译器之前并没有抱怨单字符串版本。
inStream.flags(std::ios::in | std::ios::binary)

是不够的,它需要在打开时指定,没有找到相应的文档

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