Skip to main content

变量和数据类型

可用的数据类型只有4种:有符号整数,无符号整数,浮点数,布尔值。 OpenGL着色语言中没有指针和字符串或字符。返回值可以为void。

向量类型

所有4种基本数据类型都可以存储在二维、三维或者四维向量中:

OpenGL着色语言向量数据类型

GLSL 类型描述
vec2,vec3,vec42分量、3分量和4分量浮点向量
ivec2,ivec3,ivec42分量、3分量和4分量整数向量
uvec2,uvec3,uvec42分量、3分量和4分量无符号整数向量
bvec2,vbec3,bvec42分量、3分量和4分量布尔向量

矩阵类型

矩阵类型只支持浮点数

OpenGL着色语言矩阵数据类型

GLSL 类型描述
mat2,mat2x2两行两列
mat3,mat3x3三行三列
mat4,mat4x4四行四列
mat2x3三行两列
mat2x4四行两列
mat3x2两行三列
mat3x4四行三列
mat4x2两行四列
mat4x3三行四列

存储限定符

限定符用于将变量标记为输入变量、输出变量或常量。

变量存储限定符

限定符描述
const一个编译时常量,或者说是一个队函数来说为只读的参数
in一个从以前的截断传递过来的变量
incentroid 一个从以前的截断传递过来的变量,使用质心插值
out传递到下一个处理阶段或者在一个函数中指定一个返回值
outcentroid 传递到下一个处理阶段,使用质心插值
inout一个读/写变量,只能用于局部函数参数
uniform一个从客户端代码传递过来的变量,在顶点之间不做改变

着色器统一值

属性是每个顶点位置、表面法线和纹理坐标等都需要的,而统一值则用于为整个图元批次向保持不变的(统一(uniform)的)着色器传递数据。 创建一个统一值只需在变量声明开始时放置一个uniform关键词:

uniform float u_time; // 总是只读的

OpenGL GLSL 语法和函数详解