Opengl es 是"#第0行“;在GLSL中有效吗?
我的GLSL(OpenGL ES 2.0,#version 100”)着色器无法在Vivante GC800 GPU上编译。着色器在许多其他GPU上编译良好 我得到的错误是:Opengl es 是"#第0行“;在GLSL中有效吗?,opengl-es,glsl,glsles,Opengl Es,Glsl,Glsles,我的GLSL(OpenGL ES 2.0,#version 100”)着色器无法在Vivante GC800 GPU上编译。着色器在许多其他GPU上编译良好 我得到的错误是: (2:0) : error : Expect positive integer-line-number after #line. 我用 在“real”着色器之前包含一组前导码(如#version和一些精度说明符)后重置行号。有人知道这是Vivante着色器编译器被破坏的情况,还是其他所有人的着色器编译器过于宽松的情况吗
(2:0) : error : Expect positive integer-line-number after #line.
我用
在“real”着色器之前包含一组前导码(如#version
和一些精度说明符)后重置行号。有人知道这是Vivante着色器编译器被破坏的情况,还是其他所有人的着色器编译器过于宽松的情况吗
我的解决方法是仅在本地调试着色器时才包含此指令。有关于此问题的说明(第3.4节“预处理器”):
#行在宏替换后必须具有以下两种形式之一:
#line line
#line line source-string-number
其中,行数和源字符串数是常量整数表达式。在处理本指令之后
(包括它的新行),实现的行为将如同以下行具有行号和行
以源字符串编号开始源字符串编号。随后的源字符串将被编号
按顺序,直到另一个#行指令覆盖该编号
这不排除0(甚至负值)。
但是也有
\uuuuu行
将替换一个十进制整数常量,该常量比前面的换行数多一个
在当前源字符串中
有人可能会说,这意味着行号永远不能低于1,因为这意味着换行数为负数。YMMV.啊,所以我应该用“#第1行”。我认为这与C不同,但似乎“#行0”在C预处理器中也无效:。哇。。。GLSL和GLSL ES之间是否存在差异?我正在查看,它说“在处理了这个指令(包括它的新行)之后,实现的行为就好像它在第+1行编译一样”。没有加1更有意义,我认为C预处理器也是这样做的。
#line line
#line line source-string-number