“#line 0”在GLSL中有效吗?

时间:2013-08-11 20:24:16

标签: 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.

我用

#line 0

在" real"之前包含一串前导码(如#version和一些精度说明符)之后重置行号。着色器。任何人都知道这是Vivante着色器编译器被破坏的情况,还是其他人的着色器编译器过于宽松?

我的解决方法是在本地调试着色器时仅包含此指令。

1 个答案:

答案 0 :(得分:4)

GLES Shading Language spec对此问题有所说明(第3.4节“预处理器”):

  在宏替换之后,#line必须具有以下两种形式之一:

#line line
#line line source-string-number
     

其中line和source-string-number是常量整数表达式。处理完该指令后   (包括其新行),实现将表现为好像以下行有行号和   以源字符串编号source-string-number开头。后续源字符串将被编号   顺序,直到另一个#line指令覆盖该编号。

这不排除0(甚至是负值)。 但也有

  

__LINE__将替换一个十进制整数常量,该常量比前面的换行符数多一个   在当前的源字符串中。

有人可能认为这意味着行号永远不会低于1,因为这意味着新行的负数。 YMMV。