03 WebGL 着色器编程语言GLSL ES的变量类型、赋值和类型转换、运算符
2017-05-27 16:53
351 查看
GLSL ES是强类型语言
GLSL ES不像JavaScript,使用var关键字来声明所有变量。GLSL ES要求你具体地指明变量的数据类型。我们在示例程序中用来这种方式声明变量:
<类型><变量名>
如:
因此,GLSL ES被称为强类型语言,你必须时刻注意变量的类型。
基本类型:
为变量制定类型有利于WebGL系统检查代码错误,提高程序的运行效率。下面是一些声明基本类型变量的例子:
赋值和类型转换
使用等号(=)可以将值赋给变量。我们说过,GLSL ES是强类型语言,所以如果等号左侧变量的类型与等号右侧的值(或变量)类型不一致,就会出错。
运算符:
GLSL ES支持的运算类型与javascript类似:
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类似:
相关文章推荐
- 02 WebGL 着色器编程语言GLSL ES的数据值类型、变量
- 12 WebGL 着色器编程语言GLSL ES的全局变量和局部变量
- 09 WebGL 着色器编程语言GLSL ES的程序流程控制(分支ifelse和循环for)
- 05 WebGL 着色器编程语言GLSL ES的结构体
- 10 WebGL 着色器编程语言GLSL ES的函数
- 13 WebGL 着色器编程语言GLSL ES的精度限定字
- 04 WebGL 着色器编程语言GLSL ES的矢量和矩阵
- 11 WebGL 着色器编程语言GLSL ES的内置函数
- 14 WebGL 着色器编程语言GLSL ES的预处理指令
- 06 WebGL 着色器编程语言GLSL ES的数组
- JAVA关键字、标识符、注释、常量、进制的转换、变量、数据类型的转换、运算符(赋值、比较、逻辑、位、移位、三元)
- 07 WebGL 着色器编程语言GLSL ES的取样器(纹理)
- 08 WebGL 着色器编程语言GLSL ES的运算符优先级
- 变量_类型转换_ 算术运算符_转义字符_赋值和比较运算符_逻辑运算符_位运算符
- C++ 转换类型运算符 调用构造函数将变量转化成为一个对象的成员变量
- C++重载逗号,括号,类型转换,实现以奇怪的方式给变量赋值
- JS一起学03:js组成、下拉+text、字符串拼接、分号问题、数据类型、变量类型、作用域和闭包、命名、运算符、流程判断、调试、iNow、onchang
- 17.2015.08.04第十八节课 C#2 (数值类型及调用、引用类型及调用、装拆箱、常量、变量、数据类型转换、算术运算符、赋值运算符、关系运算符、逻辑运算符、字符串的常用方法)
- 类型转换算数运算符转移字符赋值和比较运算符逻辑运算符
- 防止Sql注入字符串 , 变量赋值时防止为空和类型转换