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)
还不够,需要在打开时指定,没有为此找到任何文档。
答案 0 :(得分:0)
GLSL着色器的第一个非空行必须是#version
预处理器语句。还有别的错误。