变量和数据类型
可用的数据类型只有4种:有符号整数,无符号整数,浮点数,布尔值。 OpenGL着色语言中没有指针和字符串或字符。返回值可以为void。
向量类型
所有4种基本数据类型都可以存储在二维、三维或者四维向量中:
OpenGL着色语言向量数据类型
GLSL 类型 | 描述 |
---|---|
vec2,vec3,vec4 | 2分量、3分量和4分量浮点向量 |
ivec2,ivec3,ivec4 | 2分量、3分量和4分量整数向量 |
uvec2,uvec3,uvec4 | 2分量、3分量和4分量无符号整数向量 |
bvec2,vbec3,bvec4 | 2分量、3分量和4分量布尔向量 |
矩阵类型
矩阵类型只支持浮点数
OpenGL着色语言矩阵数据类型
GLSL 类型 | 描述 |
---|---|
mat2,mat2x2 | 两行两列 |
mat3,mat3x3 | 三行三列 |
mat4,mat4x4 | 四行四列 |
mat2x3 | 三行两列 |
mat2x4 | 四行两列 |
mat3x2 | 两行三列 |
mat3x4 | 四行三列 |
mat4x2 | 两行四列 |
mat4x3 | 三行四列 |
存储限定符
限定符用于将变量标记为输入变量、输出变量或常量。
变量存储限定符
限定符 | 描述 |
---|---|
const | 一个编译时常量,或者说是一个队函数来说为只读的参数 |
in | 一个从以前的截断传递过来的变量 |
in | centroid 一个从以前的截断传递过来的变量,使用质心插值 |
out | 传递到下一个处理阶段或者在一个函数中指定一个返回值 |
out | centroid 传递到下一个处理阶段,使用质心插值 |
inout | 一个读/写变量,只能用于局部函数参数 |
uniform | 一个从客户端代码传递过来的变量,在顶点之间不做改变 |
着色器统一值
属性是每个顶点位置、表面法线和纹理坐标等都需要的,而统一值则用于为整个图元批次向保持不变的(统一(uniform)的)着色器传递数据。 创建一个统一值只需在变量声明开始时放置一个uniform关键词:
uniform float u_time; // 总是只读的