带你读《2022技术人的百宝黑皮书》——内存优化: 纹理压缩技术(3)https://developer.aliyun.com/article/1340978?groupCode=taobaotech
使用压缩纹理(WebGL)
在 WebGI 上使用纹理压缩主要有如下步骤
1.下载纹理压缩素材;
2.解析ktx文件;
3.判断设备支持的纹理压缩格式;
4.通过getExtension获取纹理压缩扩展:
5.上传纹理压缩数据到GPU;
其中上传纹理主要指compressedTexlmage2D、compressedTexlmage3D两个API,其入参均可以从KTX文件中拿
var ext = gl.getExtension('WEBGL_compressed_texture_etc'); var texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texture); gl.compressedTexImage2D(gl.TEXTURE_2D, 0, ext.COMPRESSED_RGBA8_ETC2_EAC, 512, 512, 0, textureData);
兼容性情况
- Android平台 Android平台由于机型、厂商众多, 纹理压缩的支持清况较为复杂, 其中E丁C1支持的最为广泛, 但是由千ETC1不支持Alpha通道, 导致其使用场景有限, ETC2罢盖度也挺高但是需要启用OpenGL es 3.x; 据google play统计, Andra旧中高端机型对ASTC的支持度覆盖度有77%以上(具体到GPU型号上, 高通骁龙415及以上(2015) , ARM Mali T624(2012)及以上, NVIDIA 丁egra k1(2014)及以上)。
- iOS平台 iOS平台PVR丁C格式支持最广泛, 苹果也推荐使用此格式; 在201泌 7芯片发布后, 开始支持(ETC/ETC2) 格式, 2014 AB芯片及以上, 开始支持ASTC格式;
综上, Andro口平台选用ETC + ASTC, iOS平台高版本使用ASTC 、低版本PVRTC兜底即可覆盖所有设备。开发者运行时可以 诵过API glgetString(GL_E XTENS IONS) 获取当前设备支持的 压缩纹理格式 , WebGL 通过getSupportedExtensions()API获得相同信患。
带你读《2022技术人的百宝黑皮书》——内存优化: 纹理压缩技术(5)https://developer.aliyun.com/article/1340976?groupCode=taobaotech