ETCPACK
如何将一个 4x4 的像素块编码为 64 位数据呢?
以上就是编码后的 64 位数据块表示的意义
以RGB555基本色和RGB3333颜色差表示的编码为例,每个4x4 像素块经过ETC1 编码后的 64 位数据的内存布局大概是这样
假如编码前像素块表示为下图
我们需要得到图中编号2对应像素的颜色,需要进行如下的解码步骤:
indivial 模式,直接将4位数复制到尾部,得到8位
differential 模式,将5位中的高3位复制到尾部,得到8位
differential 模式,一定是将子块1基本色和子块2偏移值相加后再进行补位
上面知道目标像素位于子块2,这里还需要从编码数据的34-36获得子块2的修正表索引,得到索引为(1,1,0)=6,根据上面的映射表,根据下标(6, -b) 可以索引到像素的颜色差值为-106
其实从上面的解压过程可以推测出编码的过程
参考:
UI图集压缩优化,以及对Dither和ETC1算法的深入了解
几种主流贴图压缩算法的实现原理详解
OES_compressed_ETC1_RGB8_texture