Appearance
变量类型
标量类型
float
: 单精度浮点数
glsl
float a = 1.0;
float b = 2.0;
float c = a / b; // 可进行操作运算
int
: 整数
glsl
int a = 1;
int b = 2;
int c = a * b;
// int可以转换为float:
float a = 1.0;
int b = 2;
float c = a * float(b);
bool
: 布尔值
glsl
bool foo = true;
bool bar = false;
向量类型
GLSL 提供了 2-4 维的向量类型:
vec2
: 二维向量,包含两个 float 类型的分量
glsl
vec2 foo = vec2(1.0, 2.0);
glsl
vec2 foo = vec2(0.0);
foo.x = 1.0;
foo.y = 2.0;
vec3
: 三维向量,包含三个 float 类型的分量
glsl
vec3 bar = vec3(1.0, 2.0, 3.0);
bar.z = 4.0;
glsl
// 使用单个值初始化
vec3 v3 = vec3(1.0); // 所有分量都是1.0
glsl
// 从vec2创建vec3
vec2 foo = vec2(1.0, 2.0);
vec3 bar = vec3(foo, 3.0);
glsl
// 从vec3取部分创建vec2
vec3 foo = vec3(1.0, 2.0, 3.0);
vec2 bar = foo.xy;
// 或者改变取值顺序
vec2 bar = foo.yx;
vec4
: 四维向量,包含四个 float 类型的分量
glsl
vec4 foo = vec4(1.0, 2.0, 3.0, 4.0);
vec4 bar = vec4(foo.zw, vec2(5.0, 6.0));
矩阵类型
GLSL 支持 2x2 到 4x4 的矩阵:
mat2
: 2x2 浮点矩阵
glsl
mat2 m2 = mat2(1.0, 2.0, 3.0, 4.0);
mat3
: 3x3 浮点矩阵
glsl
mat3 m3 = mat3(
1.0, 2.0, 3.0,
4.0, 5.0, 6.0,
7.0, 8.0, 9.0
);
mat4
: 4x4 浮点矩阵
glsl
mat4 m4 = mat4(1.0); // 对角线为1.0,其他为0.0
采样器类型
用于纹理采样的特殊类型:
sampler2D
: 2D 纹理samplerCube
: 立方体贴图sampler3D
: 3D 纹理sampler2DArray
: 2D 纹理数组
限定符
存储限定符
const
: 编译时常量attribute
: 顶点属性(顶点着色器专用)uniform
: 统一变量uniform 声明的变量可以在 javascript 和 shader 之间传值,并且在顶点着色器和片元着色器中均可以接收。
varying
: 顶点着色器到片段着色器的插值变量
精度限定符
highp
: 高精度mediump
: 中等精度lowp
: 低精度
数组
支持固定大小的数组:
glsl
float array[10]; // 10个浮点数的数组
vec3 vectors[5]; // 5个vec3的数组
结构体
可以定义自定义结构体:
glsl
struct Light {
vec3 position;
vec3 color;
float intensity;
};
Light light = Light(vec3(0.0), vec3(1.0), 1.0);