webgl类型化数组

类型化数组的出现最大的作用就是提升了数组的性能,浏览器事先知道数组中的数据类型,故而处理起来更有效率。js中Array的内部实现是链表,可以动态增大减少元素,但是元素多的话,性能会比较差,类型化数组管理的是连续内存区域,知道了这块内存的起始位置,可以通过起始位置+N * 偏移量(一次加法一次乘法操作)访问到第N个位置的元素,而Array的话就需要通过链表一个一个的找下去。

类型化数组将实现拆分为缓冲视图两部分。一个缓冲(ArrayBuffer)描述的是内存中的一段二进制数据,缓冲没有格式可言,并且不提供机制访问其内容。为了访问在缓存对象中包含的内存,你需要使用视图。视图可以将二进制数据转换为实际有类型的数组。一个缓冲可以提供给多个视图进行读取,不同类型的视图读取的内存长度不同,读取出来的数据格式也不同。缓冲和视图的工作方式如下图所示:

image.png

webgl使用的各种类型化数组

数组类型 每个元素所占字节数 描述
Int8Array 1 8位整数型(signed char)
UInt8Array 1 8位无符号整数型(unsigned char)
Int16Array 2 16位整数型(signed short)
UInt16Array 2 16位无符号整数型(unsigned char)
Int32Array 4 32位整数型(signed int)
UInt32Array 4 32位无符号整数型(unsigned char)
Float32Array 4 单精度32位浮点数(float)
Float64Array 8 双精度64位浮点数(double)

类型化数组的方法、属性和常量

方法、属性和常量 描述
get(index) 获取第index个元素值
set(inex,value) 设置第index个元素的值为value
set(array,offset) 从第offset个蒜素开始将数组array中的值填充进去数据的长度
length 数组的长度
BYTES_PER_ELEMENT 数组中每个元素所占的字节数

类型化数组不支持``push()pop()方法

类型化数组创建的唯一方法就是使用new运算符

var vertices = new Float32Array([
    0.0,0.5,-0.5,-0.5,0.5,-0.5
])


 

猜你喜欢

转载自blog.csdn.net/chunzhenwang666/article/details/121182584