GLSL - OpenGL Shading Language

webgl2 使用 glsl es 3.0 需要着色器代码标明:#version 300 es
// in/out 替代 attribute/varying

命名规范:a_是缓冲区提供数据的属性。u_是输入到着色器中的uniforms。 v_用于varyings

uniform float u_kernel[9]; // 代表长度 input 为 9 的数组

着色器是使用 OpenGL ES Shading Language(GLSL)编写的程序,它携带着绘制形状的顶点信息以及构造绘制在屏幕上像素的所需数据,换句话说,它负责记录着像素点的位置和颜色。有顶点着色器和片段着色器

OpenGL 着色语言规格定义了 22 个基本资料类型,有些用法与 C 相同,其它的是绘图处理器特有的。
  • void – 用于没有返回值的函式
  • bool – 条件类型,其值可以是真或假
  • int – 带负号整数
  • float – 浮点数
  • vec2 – 2 个浮点数组成的向量
  • vec3 – 3 个浮点数组成的向量
  • vec4 – 4 个浮点数组成的向量
  • bvec2 – 2 个布林组成的向量
  • bvec3 – 3 个布林组成的向量
  • bvec4 – 4 个布林组成的向量
  • ivec2 – 2 个整数组成的向量
  • ivec3 – 3 个整数组成的向量
  • ivec4 – 4 个整数组成的向量
  • mat2 – 浮点数的 2X2 矩阵
  • mat3 – 浮点数的 3X3 矩阵
  • mat4 – 浮点数的 4X4 矩阵
  • sampler1D – 用来存取一维纹理的句柄(handle)(或:操作,作名词解。)
  • sampler2D – 用来存取二维纹理的句柄
  • sampler3D – 用来存取三维纹理的句柄
  • samplerCube – 用来存取立方映射纹理的句柄
  • sampler1Dshadow – 用来存取一维深度纹理的句柄
  • sampler2Dshadow – 用来存取二维深度纹理的句柄

GLSL 包含了 C和C++运算子,除了位元运算子和指标以外。

类似于 C语言,GLSL 支援循环和分支,包括 if、else、if/else、for、do-while、break、continue 等。

GLSL 着色器本身只是简单的字串集,这些字串集会传送到硬件厂商的驱动程式,并从程式内部的 OpenGL API 进入点编译(在GPU执行时编译)。着色器可从程式内部或读入纯文字档来即时建立,但必须以字串形式传送到驱动程式。