DDS 紋理範例

針對未壓縮的紋理,請使用DDSD_PITCH和DDPF_RGB旗標;針對壓縮紋理,請使用DDSD_LINEARSIZE和DDPF_FOURCC旗標。 針對 mipmapped 紋理,請使用DDSD_MIPMAPCOUNT、DDSCAPS_MIPMAP和DDSCAPS_COMPLEX旗標以及 mipmap 計數成員。 如果產生 mipmap,通常會寫入向下到 1 到 1 的所有層級。

對於壓縮紋理,每個 Mipmap 層級影像的大小通常是前一個大小的第四分之一,最小為 8 (DXT1) 或 16 (DXT2-5) 位元組, (方形紋理) 。 使用下列公式來計算非方形紋理的每個層級大小:

max(1, ( (width + 3) / 4 ) ) x max(1, ( (height + 3) / 4 ) ) x 8(DXT1) or 16(DXT2-5)

下表列出每一層針對 256-by-256 R8G8B8 紋理佔用的空間量,而不需使用壓縮。

DDS 元件 # 位元組
header 128
256 by-256 主要映射 196608
128-by-128 mipmap 影像 49152
64 by-64 mipmap 影像 12288
32 by-32 mipmap 影像 3072
16 by-16 mipmap 影像 768
8-by-8 mipmap 影像 192
4-by-4 mipmap 影像 48
2-by-2 mipmap 影像 12
1-by-1 mipmap 影像 3

 

下表列出每一層使用壓縮 (DXT1) ,針對相同紋理佔用的空間量。

DDS 元件 # 位元組
header 128
256 by-64 主要映射 8192
128-by-32 mipmap 影像 2048
64 by-16 mipmap 影像 512
32 by-8 mipmap 影像 128
16 by-4 mipmap 影像 32
8-by-2 Mipmap 影像 16
4-by-1 mipmap 影像 8
2-by-1 mipmap 影像 8
1-by-1 mipmap 影像 8

 

下表列出每一層使用 DXGI 壓縮格式 (所佔用的空間量,在此案例中BC3_UNORM) 因此需要擴充標頭:

DDS 元件 # 位元組
標頭 (FourCC 設為 「DX10」) 128
擴充標頭 (DXGI 格式設定為 DXGI_FORMAT_BC3_UNORM) 20
256 by-64 主要映射 16384
128-by-32 mipmap 影像 4096
64 by-16 mipmap 影像 1024
32 by-8 mipmap 影像 256
16 by-4 mipmap 影像 64
8-by-2 Mipmap 影像 32
4-by-1 mipmap 影像 16
2-by-1 mipmap 影像 16
1-by-1 mipmap 影像 16

 

DDS 的程式設計指南