过去两天我一直在研究 DDS 格式并编写 DDS 纹理加载器,只是出于好奇,我遇到了一些我认为理所当然的东西,即“音高计算公式”。我真的很好奇为什么它们被指定完全一样,没有任何理由。
例如,对于块压缩格式(DXT#n、BC#n),全部基于 S3TC,其计算方式为
最大值(1,(宽度+3)/4)*块大小
所以,max 给出了两个值中较大的一个,但为什么它会起作用呢?为什么要将纹理的宽度加 3,然后将其划分为“半字节边界”?
另一方面,一些遗留类型是:
(( 宽度+1 ) >> 1) * 4
因此,右移基本上是在二进制基础上移动小数点,或除以二。那么,为什么要加 1,然后除以 2 再乘以 4?丢失最右边的两位?
最后一个,对于其他格式:
( 宽度 * bpp + 7) / 8
我了解每个像素的位数和最接近的字节边界划分,但为什么要加 7?
有人可以多写一点吗?或者指出我正确的方向?