当超过一个char指针时编译错误(glShaderSource)
GLSL Compiling error when more than one char pointer (glShaderSource)
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);
...
编辑:既然我不能回答我自己的问题,找到解决方案
非常奇怪的问题,字符串加载器恰好是问题所在。如果不使用ifstream和std::ios:: binary标志,即使以null结尾,字符串也会被加载一些垃圾信息,因此连接字符串将产生错误。由于某种原因,除了调用
之外,gl编译器之前并没有抱怨单字符串版本。inStream.flags(std::ios::in | std::ios::binary)
是不够的,它需要在打开时指定,没有找到相应的文档
GLSL着色器的第一个非空行必须是#version
预处理器语句。
相关文章:
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- 编译器不会使用 -std=c++11 编译智能指针
- 为什么通过指针编译时不能分配 const 初始化
- std::less是否应该允许在编译时比较不相关的指针?
- 对带有唯一指针的 std::thread 使用类成员函数时出现编译错误
- 是否可以在编译时初始化对象的 C 样式函数指针,以便它调用对象的成员函数?
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 通过在编译时折叠带有索引的指针来分配 C 数组
- 使用指针编译代码后,.cpp文件将变为随机字符
- 如何在编译时创建具有函数签名的函数指针
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 唯一指向非指针编译错误
- C++成员函数指针编译错误
- 函数指针 - 编译时错误
- 指向函数的指针编译时出错
- 抽象类类型指针编译成功
- 指向回调函数的指针.编译错误
- c++类指针——编译错误