您的位置:首页 > 编程语言

03 WebGL 着色器编程语言GLSL ES的变量类型、赋值和类型转换、运算符

2017-05-27 16:53 351 查看
GLSL ES是强类型语言

GLSL ES不像JavaScript,使用var关键字来声明所有变量。GLSL ES要求你具体地指明变量的数据类型。我们在示例程序中用来这种方式声明变量:

<类型><变量名>

如:

vec4 a_Position;
我们知道,在定义如main()函数这类函数的时候,必须制定函数的返回值。同样,在进行赋值操作(=)的时候,等号两侧的数据类型也必须一样,否则就出错。

因此,GLSL ES被称为强类型语言,你必须时刻注意变量的类型。

基本类型:



为变量制定类型有利于WebGL系统检查代码错误,提高程序的运行效率。下面是一些声明基本类型变量的例子:

float klimt; //变量为一个浮点数
int utrillo;//变量为一个整型数
bool doga;//变量为一个布尔值


赋值和类型转换
使用等号(=)可以将值赋给变量。我们说过,GLSL ES是强类型语言,所以如果等号左侧变量的类型与等号右侧的值(或变量)类型不一致,就会出错。

int i = 8; //没问题
float f1 = 8;//错误
float f2 = 8.0;//没问题
float f3 = 8.0f;//错误:c语言中常用的像8.0f这样的表达式是不被允许的
在语义上,8和8.0其实是一个数值。但是,当你将8赋值给浮点型变量f1时,确实会出错。而且,你将看到如下的错误信息:

failed to compile shader: ERROR: 0:11:'=' : cannot convert from 'const mediump int' to 'float'.
要将一个整型数值赋值给浮点型变量,需要将整型数转换成浮点数,这个过程称为类型转换。比如,我们可以使用内置的函数float()来讲整型数转换成浮点数,如下所示:

int i = 8;
float f1 = float(i);//将8转换为8.0并赋值给f1
float f2 = float(8);//同上
GLSL ES支持以下几种用于类型转换的内置函数,如下:



运算符:

GLSL ES支持的运算类型与javascript类似:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐