类型化数组:
ArrayBuffer:这是一个构造函数,创建时通过传入数字来为将来的使用而分配一定的字节。单位时B(1B=8b,1B = 2的8次方)。
这个构造函数的实例有一个属性:
byteLength:用于获取包含的字节数。
视图:
DataView:这是一个构造函数,创建这个构造函数的实例需要传入1-3个参数,第一个参数是类型化数组的实例,第二个参数是可选的字节偏移量和一个可选的要选择的字节量。
在实例化这个构造函数以后,它有这么几个属性:
byteOffset: 保存着字节偏移量。
byteLength:保存着字节长度信息。
读取和写入DataView的时候,要根据实际操作的数据类型,选择相应的getter和setter方法。下表列出了DataView支持的数据类型以及相应的读写方法。
方法 | 描述 |
在相对于视图开始处的指定字节偏移量位置处获取 Int8 值。 | |
在相对于视图开始处的指定字节偏移量位置处获取 Uint8 值。 | |
在相对于视图开始处的指定字节偏移量位置处获取 Int16 值。 | |
在相对于视图开始处的指定字节偏移量位置处获取 Uint16 值。 | |
在相对于视图开始处的指定字节偏移量位置处获取 Int32 值。 | |
在相对于视图开始处的指定字节偏移量位置处获取 Uint32 值。 | |
在相对于视图开始处的指定字节偏移量位置处获取 Float32 值。 | |
在相对于视图开始处的指定字节偏移量位置处获取 Float64 值。 | |
在相对于视图开始处的指定字节偏移量位置处存储 Int8 值。 | |
在相对于视图开始处的指定字节偏移量位置处存储 Uint8 值。 | |
在相对于视图开始处的指定字节偏移量位置处存储 Int16 值。 | |
在相对于视图开始处的指定字节偏移量位置处存储 Uint16 值。 | |
在相对于视图开始处的指定字节偏移量位置处存储 Int32 值。 | |
在相对于视图开始处的指定字节偏移量位置处存储 Uint32 值。 | |
在相对于视图开始处的指定字节偏移量位置处存储 Float32 值。 | |
在相对于视图开始处的指定字节偏移量位置处存储 Float64 值。 |
类型化视图:
类型化视图分好几种,并且它们都继承了DataView,以下就是这些构造函数:
Int8Array:表示8位二补码。
Uint8Array: 表示8位无符号整数。
Int16Array:表示16位二补码。
Uint16Array: 表示16位无符号整数。
Int32Array:表示32位二补码。
Uint32Array: 表示32位无符号整数。
Float32Array: 表示32位IEEE浮点值。
Float64Array: 表示64位IEEE浮点值。
这些构造函数创建的实例,根据类型不同,每个元素所占的字节也不同。比如Int8Array一个元素需要占用1B,而Int16Array一个元素占用2B。创建一个Int16Array的实例需要有5个元素,那么就需要10字节来创建。
实例化这些视图,可以有多种方式。
第一种:传入三个参数,第一个参数是要使用的ArrayBuffer对象,第二个参数是作为起点的字节偏移量,第三个参数是创建的长度。只有第一个参数是必须的。
第二种:不用创建ArrayBuffer对象,只要传入希望数组保存的元素数,相应的构造函数就会自动创建一个包含足够字节数的ArrayBuffer对象。
第三种:只要把常规数组传入类型化视图的构造函数即可。
使用类型化视图时,可以通过方括号语法访问每一个数据成员,也可以通过方括号为类型化视图的元素赋值(如果相应元素指定的字节数放不下相应的值,则实际保存的值时最大可能值的模。例如:无符号16位所能表示的最大数值是65535,如果想保存66536,那实际的保存值是0;如果想保存65537,那实际保存值是1,以此类推。)。可以通过length属性确定数组中有多少元素。
类型化视图还有一个方法。
subarray(开始元素的索引,可选的结束元素的索引):基于底层数组缓冲器,也就是ArrayBuffer的子集创建一个新视图。返回的类型与调用该方法的类型相同。如果这个部分的原本就设置了值,在通过这个方法创建的实例也会包含这些值。
方法命名:
webgl上下文的方法的命名规则:方法的后缀名会包含参数个数和接收的数据类型(f表示浮点数,i表示整数)。例如gl.uniform4f()表示接收4个浮点数,gl.uniform3i表示要接收3个整数。
也有方法接收的不是一个个参数,而是一个数组。这样的方法会在后缀名中包含字母v,例如:gl.uniform3iv()表示要接收3个值的整数
数组。