DDS是DirectDraw Surface的缩写,实际上,它是DirectX纹理压缩(DirectX Texture Compression,简称DXTC)的产物。DDS文件的纹理压缩有很多方式,除了常见的DXTn外,也支持Mipmap, Cubemap, 和volume maps等更多的格式,但后者不会在这里介绍。
DDS文件数据包含一个固定128字节的DDS文件头(不包含DXT10,DXT10还需要20字节的扩展头,这里不讨论)和图像数据。DDS文件头的格式如下:
dwMagic |
4字节 1双字 |
DDS文件标识,固定为“DDS ”(有个空格), 即0x20534444。 |
dwSize |
4字节 1双字 |
DDS文件头大小(不包括标识的4字节),因此固定为124,即0x7C。 |
dwFlags |
4字节 1双字 |
DDS文件标志位。有8个位有效(标☆的表示DNF中DDS文件所需要的标志位): 0x00000001:☆每个DDS文件都必须有。 0x00000002:☆每个DDS文件都必须有。 0x00000004:☆每个DDS文件都必须有。 0x00000008:若纹理数据是非压缩,该位为1。 0x00001000:☆每个DDS文件都必须有。 0x00020000:若为Mipmap,该位为1。 0x00080000:☆若纹理数据是压缩的,该位为1。 0x00800000:若纹理具有深度数据(适用于volume maps),该位为1。 DNF里所有DDS文件的标志位均为0x0081007。 |
dwHeight |
4字节 1双字 |
图像高度(以像素为单位,一般是4的倍数) |
dwWidth |
4字节 1双字 |
图像宽度(以像素为单位,一般是4的倍数) |
dwPitchOrLinearSize |
4字节 1双字 |
对非压缩数据表示一行像素所需要的字节数; 对压缩数据则表示整个图像数据的字节数。 DNF里为后者。 |
dwDepth |
4字节 1双字 |
纹理具有深度数据时,表示纹理的深度。DNF里无用,固定为0。 |
dwMipMapCount |
4字节 1双字 |
Mipmap层数,适用于Mipm |