OpenGL ES 的渲染管线包含有一个可编程的顶点阶段和一个可编程的片段阶段。其余的阶段则有固定的功能,应用程序对其行为的控制非常有限。每个可编程阶段中编译单元的集合组成了一个着色器。在OpenGL ES 2.0 中,每个着色器只支持一个编译单元。着色程序则是一整套编译好并链接在一起的着色器的集合。着色器 shader 的编写需要使用着色语言 GL Shader Language(GLSL),GLSL 的语法与 C 语言很类似。
// 顶点着色器 .vsh
attribute vec4 position;
attribute vec4 color;
varying vec4 colorVarying;
void main(void) {
colorVarying = color;
gl_Position = position;
}
// 片段着色器 .fsh
varying lowp vec4 colorVarying;
void main(void) {
gl_FragColor = colorVarying;
}
习惯上,我们一般把顶点着色器命名为 xx.vsh,片段着色器命名为 xx.fsh。当然,你喜欢怎么样就怎么样~
和 C 语言程序对应,用 GLSL 写出的着色器,它同样包括:
- 变量 position
- 变量类型 vec4
- 限定符 attribute
- main 函数
- 基本赋值语句 colorVarying = color
- 内置变量 gl_Position
这一切,都是那么像…所以,在掌握 C 语言的基础上,GLSL 的学习成本是很低的。
变量
变量及变量类型
变量类别 | 变量类型 | 描述 |
---|---|---|
空 | void | 用于无返回值的函数或空的参数列表 |
标量 | float, int, bool | 浮点型,整型,布尔型的标量数据类型 |
浮点型向量 | float, vec2, vec3, vec4 | 包含1,2,3,4个元素的浮点型向量 |
整数型向量 | int, ivec2, ivec3, ivec4 | 包含1,2,3,4个元素的整型向量 |
布尔型向量 | bool, bvec2, bvec3, bvec4 | 包含1,2,3,4个元素的布尔型向量 |
矩阵matrix | mat2, mat3, mat4 | 尺寸为2x2,3x3,4x4的浮点型矩阵 |