我的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着色器编译器被破坏的情况,还是其他人的着色器编译器过于宽松?
我的解决方法是在本地调试着色器时仅包含此指令。
答案 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。