gl_Position

使用在顶点着色器中,存储点的位置。 gl_Position = vec4( 0.0, 0.0, 0.0, 1.0 );

gl_PointSize

使用在顶点着色器中,存储点的尺寸。 gl_PointSize = 10.0;

gl_FragColor

使用在片元着色器中,存储点的颜色。 gl_FragColor = vec4( 0.0, 1.0, 0.0, 1.0 );

gl_FragCoord

片段的窗口坐标。

gl_PointCoord

片段在被绘制的店内的坐标。

const

GLSL 不用 var 来声明一个变量,而是用 const,它写在类型之前。声明时就要赋值, 而且以后不再改值。否则报错: failed to compile shader: ERROR: 0:1: 'i' : variables with qualifier 'const' must be initialized
ERROR: 0:1: 'i' : syntax error

const int i = 0; const vec2 texCoord = vec2( 0.0, 1.0 ); const mat4 rotateMatrix = mat4( cosB, 0.0, sinB, 0.0, 0.0, 1.0, 0.0, 0.0, -sinB, 0.0, cosB, 0.0, 0.0, 0.0, 0.0, 1.0 )

attribute

使用在顶点着色器中,被用来从外部向顶点着色器内传输数据。只有顶点着色器能使用它。

GLSL ES 1. 在顶点着色器中,声明 attribute 变量 attribute vec4 a_Position;
2. 将 attribute 变量赋值给 gl_Position 变量 gl_Position = a_Position;
JavaScript 3. 获取 attribute 变量的存储位置 var a_Position = gl.getAttribLocation( gl.program, 'a_Position' );
4. 向 attribute 变量传输数据 gl.vertexAttrib3f( a_Position, 0.0, 0.0, 0.0 );

uniform

既可以使用在顶点着色器,也能使用在片元着色器,是对它们传入统一的数据。

GLSL ES 1. 在顶点着色器中,声明 uniform 变量,传递同一个偏移量 uniform vec4 u_translate;
2. 将 uniform 变量加上 attribute 变量再赋值给 gl_Position 变量 gl_Position = a_Position + u_translate;
JavaScript 3. 获取 uniform 变量的存储位置 var u_translate = gl.getUniformLocation(gl.program, 'u_translate');
4. 向 uniform 变量传输数据 gl.uniform4f( u_translate, Tx, Ty, Tz, 0.0 );
GLSL ES 1. 在片元着色器中,声明 uniform 变量,绘制同一种颜色 uniform vec4 u_FragColor;
2. 将 uniform 变量赋值给 gl_FragColor 变量 gl_FragColor = u_FragColor;
JavaScript 3. 获取 uniform 变量的存储位置 var u_FragColor = gl.getUniformLocation(gl.program, 'u_FragColor');
4. 向 uniform 变量传输数据 gl.uniform4f( u_FragColor, r, g, b, a );

varying

从顶点着色器向片元着色器传数据, 以及光栅化:在颜色缓冲区中插值。全在 GLSL ES 中进行,JavaSript 中不用对 varying 变量操作。

1. 在顶点着色器中,声明 attribute 变量 attribute vec4 a_Color;
2. 在顶点着色器中,声明 varying 变量 varying vec4 v_Color;
3. attribute 变量赋值给 varying 变量 v_Color = a_Color
4. 在片段着色器中,声明相同命名的 varying 变量 varying vec4 v_Color;
5. varying 变量赋值给 gl_Fragment gl_Fragment = v_Color