数值类型

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 布尔值

下面是声明基本类型变量的例子:

  1. float klimt; //变量为一个浮点数

  2. int utrillo; //变量为一个整型数

  3. 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 的类型可以是除数组外的任意类型