OpenGL Shading Language GLSL作为一种着色语言是纯粹的和GPU打交道的计算机语言。
因为GPU是多线程并行处理器,所以GLSL直接面向SIMD模型的多线程计算。
GLSL编写的着色器函数是对每个数据同时执行的。
每个顶点都会由顶点着色器中的算法处理,每个像素也都会由片段着色器中的算法处理。
因此,初学者在编写自己的着色器时,需要考虑到SIMD的并发特性,并用并行计算的思路来思考问题。
最常见用法是在顶点着色器里生成所需要的值,然后传给片断着色器用。
GLSL能做什么?
- 日以逼真的材质 -- 金属,岩石,木头,油漆等
- 日益逼真的光照效果 -- 区域光和软阴影
- 非现实材质 -- 美术效果,钢笔画,水墨画和对插画技术的模拟
- 针对纹理内存的新用途
- 更少的纹理访问
- 图形处理 -- 选择,边缘钝化遮蔽和复杂混合
- 动画效果 -- 关键帧插值,粒子系统
- 用户可编程的反走样方法
GLSL注意
- GLSL支持函数重载
- GLSL不存在数据类型的自动提升,类型必须严格保持一致。
- GLSL不支持指针,字符串,字符,它基本上是一种处理数字数据的语言
- GLSL不支持联合、枚举类型、结构体位字段及按位运算符
数据类型
GLSL有三种基本数据类型:float,int和bool,以及由这些数据类型组成的数组和结构体。
需要注意的是,GLSL并不支持指针。与C/C++不同的是,GLSL将向量和矩阵作为基本数据类型。
注意:GLSL不存在数据类型的自动提升,类型必须严格保持一致。