有些OpenGL ES操作在顶点处理器和片元处理器之间有特定的功能,有些在片元处理器之后又特定的功能,着色器通过内建变量同这些固定功能进行通信。
在OpenGL ES中,内建特殊变量部分来自顶点着色器的输出变量,部分来自于片元着色器的输入变量和输出变量。不同于用户定义的varying变量,内建特殊变量不用在顶点语言和片元语言之间保持严格的一对一对应。相反,两个语言各有自己的一套变量集合。
7.1 顶点着色器特定变量
变量gl_Position仅可用在顶点语言中,并且用来写入奇次顶点位置。所有符合语法规则的顶点着色器都应该给该变量写入一个值。可以在着色器运行期间的任何时候给它写入新值,也可以随时读取它的值。这个值可以用在顶点处理开始之后的图元装配,剪裁,剔除和其他操作图元的固定功能上。如果检测到gl_Position没有被写入,或者在写入前被读取,编译器会产生一个诊断信息,但是并不是所有的情况都能检测的到。如果顶点着色器已经执行,但是并没有写入gl_Position,那么gl_Position的值是未定义的。
gl_PointSize也是只能用在顶点语言中,顶点着色器用它来写入将要光栅化的点的尺寸,单位是像素。
用来与特定功能通信的内建顶点着色器变量本质上是按照如下方式声明的:
highp vec4 gl_Position; // should be written to
mediump float gl_PointSize; // may be written to
如果这些值没有被写入过,那么它们的值是未定义的。着色器在给它们写入值之后也可以将它们的值读取出来以重新