Opengl es 是"#第0行“;在GLSL中有效吗?

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着色器编译器被破坏的情况,还是其他所有人的着色器编译器过于宽松的情况吗

我的GLSL(OpenGL ES 2.0,#version 100”)着色器无法在Vivante GC800 GPU上编译。着色器在许多其他GPU上编译良好

我得到的错误是:

(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