着色器(shader)是运行在GPU上的小程序,为图形渲染管线某个特定部分而运行。
着色器也是一种非常独立的程序,它们之间不能相互通信,它们之间唯一沟通只有通过输入输出。
GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。
着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数。
每个着色器的入口点都是main函数,在这个函数中我们处理所有的输入变量,并将结果输出到输出变量中。
通过 GL_MAX_VERTEX_ATTRIBS 来查询顶点属性。
GLSL数据类型:int
、float
、double
、uint
和bool
。
GLSL两种容器类型:分别是向量(Vector)和矩阵(Matrix)。
GLSL中的向量是一个可以包含有1、2、3或者4个分量的容器,分量的类型可以是前面默认基础类型的任意一个。
vecn | 包含n 个float分量的默认向量 |
bvecn | 包含n 个bool分量的向量 |
ivecn | 包含n 个int分量的向量 |
uvecn | 包含n 个unsigned int分量的向量 |
dvecn | 包含n 个double分量的向量 |
你可以分别使用.x
、.y
、.z
和.w
来获取它们的第1、2、3、4个分量。GLSL也允许你对颜色使用rgba
,或是对纹理坐标使用stpq
访问相同的分量。
GLSL定义了in
和out
关键字专门来实现输入输出。