数值类型
GLSL 支持两种数据值类型:
- 数据类型:整数(比如:0、1、2)和浮点数(比如:3.14、29.98)。没有小数点(.)的值被认为是整数,而有小数点的值则被认为是浮点数。
- 布尔值类型:true和false两个布尔常量。
注意:GLSL ES 不支持字符串类型。
变量
变量名需要符合下面规则:
- 只包括 a~z, A~Z, 0~9 和下划线(_)。
- 变量名的首字母不能是数字 。不能以 gl、webgl 或 webgl 开头,这些已经被OpenGL ES 保留了。
- 不能是 GLSL ES 中的关键字和保留字,但你的变量的一份可以是它们。
GLSL ES是强类型语言
GLSL ES 要求你具体指明变量的数据类型: <类型> <变量名>
如 vec4 a_position
。 在进行赋值操作(=)时,等号左右两侧的数据类型必须一样,否则会出错。
基本类型
类型 | 描述 |
---|---|
float | 单精度浮点数类型 |
int | 整型数 |
bool | 布尔值 |
下面是声明基本类型变量的例子:
代码语言:javascript复制float klimt; //变量为一个浮点数
int utrillo; //变量为一个整型数
bool doga; //变量为一个布尔值
赋值和类型转换
使用等号(=)可以将值赋给变量,GLSL ES 是强类型语言,在语义上 8 和 8.0 是一个值,但是,将 8 赋值给浮点型变量时会出错。
要将一个整型数值赋值给浮点型变量,需要将整形数转换成浮点数,这个过程称为类型转换。 我们可以使用内置函数 float() 将整型数转换为浮点数,如下所示: int i = 0; float f1 = float(i); float f2 = float(8);
GLSL ES 类型转换内置函数:
转换 | 函数 | 描述 |
---|---|---|
转换为整型数 | int(float) | 去掉浮点数小数部分,转换为整型数 |
int(bool) | true 转换为1,false 转换为0 | |
转换为浮点点 | float(int) | 将整型数转换为浮点数 |
float(bool) | true 转换为1.0,false转换为0.0 | |
转换为布尔值 | bool(int) | 0转换为false,非0转换为true |
bool(float) | 0.0 转换为false,非0转换为 true |
运算符
GLSL ES 支持运算类型如下:
类别 | GLSL ES 数据类型 | 描述 |
---|---|---|
- | 取负 | int 或 float |
* | 乘法 | int 或 float,运算的返回值类型与参与运算的值类型相同 |
/ | 除法 | |
| 加法 | |
- | 减法 | |
| 自增(前缀或后缀) | int 或 float,运算的返回值类型与参与运算的值类型相同 |
-- | 自减(前缀或后缀) | |
= | 赋值 | int、float 或 bool |
= -= *= /= | 算术赋值 | int 或 float |
< > <= >= | 比较 | |
== != | 比较(是否相等) | int、float 或 bool |
! | 取反 | bool 或结果为bool类型的表达式 |
&& | 逻辑与 | |
^^ | 逻辑异或 | |
condition ? expression1 : express 2 | 三元选择 | condition的类型为bool,expression1 和 expression2 的类型可以是除数组外的任意类型 |