3

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

我得到的错误是:

(2:0) : error : Expect positive integer-line-number after #line.

我用

#line 0

在包含一堆前导码后重置行号(如#version在“真实”着色器之前任何人都知道这是 Vivante 着色器编译器被破坏的情况,还是其他所有人的着色器编译器都过于宽松?

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

4

1 回答 1

4

GLES着色语言规范对这个问题有这样的说法(第 3.4 节“预处理器”):

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

#line line
#line line source-string-number

其中 line 和 source-string-number 是常量整数表达式。在处理了这个指令(包括它的换行符)之后,实现将表现得好像下一行有行号 line 并以源字符串号 source-string-number 开头。随后的源字符串将按顺序编号,直到另一个 #line 指令覆盖该编号。

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

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

有人可能会争辩说,这意味着行号永远不能低于 1,因为这意味着负数的换行符。YMMV。

于 2013-08-11T22:34:49.580 回答