DDS Image: Difference between revisions
Jump to navigation
Jump to search
imported>Ikskoks |
imported>Ikskoks |
||
| (27 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
== DDS == | == DDS == | ||
* ''' Format Type ''': Image <br> | * ''' Format Type ''': Image / Texture<br> | ||
* ''' [http://en.wikipedia.org/wiki/Endianness Endian Order] ''': Little Endian <br> | * ''' [http://en.wikipedia.org/wiki/Endianness Endian Order] ''': Little Endian <br> | ||
* ''' Signature ''': DDS <br> | |||
| Line 13: | Line 14: | ||
// little endian | // little endian | ||
4 bytes (char) - | 4 bytes (char) - signature // "DDS " | ||
// surface format header | // surface format header | ||
4 bytes (uint32) - header size // "124" | 4 bytes (uint32) - header size // "124" | ||
4 bytes - flags // DDSD_CAPS, DDSD_PIXELFORMAT, DDSD_WIDTH and DDSD_HEIGHT flags are required | 4 bytes - flags // DDSD_CAPS, DDSD_PIXELFORMAT, DDSD_WIDTH and DDSD_HEIGHT flags are required | ||
4 bytes (uint32) - height in pixels | 4 bytes (uint32) - height in pixels | ||
4 bytes (uint32) - width in pixels | 4 bytes (uint32) - width in pixels | ||
4 bytes (uint32) - pitch or linear size | 4 bytes (uint32) - pitch or linear size // calculated from equation | ||
// see notes below for details | |||
// pitch can be "0" | |||
4 bytes (uint32) - depth of the volume // can be "0" | 4 bytes (uint32) - depth of the volume // can be "0" | ||
4 bytes (uint32) - number of mipmaps | 4 bytes (uint32) - number of mipmaps | ||
| Line 28: | Line 29: | ||
// pixel format structure (32 bytes) | // pixel format structure (32 bytes) | ||
4 bytes (uint32) - structure size | 4 bytes (uint32) - structure size // always 32 | ||
4 bytes - flags | 4 bytes - flags | ||
4 bytes (char) - compression type // "DXT1", "DXT2", "DXT3", "DXT4", | 4 bytes (char) - compression type // "DXT1", "DXT2", "DXT3", "DXT4", "DXT5" or nulls for no compression | ||
4 bytes (uint32) - RGB bit count // 16, 24, or 32 | 4 bytes (uint32) - RGB bit count // 16, 24, or 32 | ||
4 bytes (uint32) - R bit mask | 4 bytes (uint32) - R bit mask | ||
| Line 38: | Line 39: | ||
// capabilities structure | // capabilities structure (16 bytes) | ||
4 bytes (uint32) - caps 1 | 4 bytes (uint32) - caps 1 | ||
4 bytes (uint32) - caps 2 | 4 bytes (uint32) - caps 2 | ||
| Line 48: | Line 49: | ||
x bytes - image data | x bytes - image data / main surface data | ||
// additional surfaces (optional) | |||
num_of_surfaces * | |||
{ | |||
x bytes - additional surfaces data | |||
} | |||
</pre> | </pre> | ||
</div> | </div> | ||
| Line 58: | Line 66: | ||
=== Notes and Comments === | === Notes and Comments === | ||
* DDS texture can have additional surfaces (mipmaps) which should always be smaller than the main surface. | |||
=== Pitch calculation === | |||
For block-compressed formats, compute the pitch as: <br> | |||
'''max( 1, ((width+3)/4) ) * block-size''' <br> | |||
The block-size is 8 bytes for DXT1, BC1 and BC4 formats <br> | |||
but 16 bytes for other block-compressed formats. <br><br> | |||
For R8G8_B8G8, G8R8_G8B8, legacy UYVY-packed, and legacy YUY2-packed formats: <br> | |||
'''((width+1) >> 1) * 4''' <br><br> | |||
For other formats: <br> | |||
'''( width * bits-per-pixel + 7 ) / 8''' <br> | |||
=== Games === | === Games === | ||
List of games using this file format: | List of games using this file format: | ||
* 0 A.D. (*.DDS) (PC) | |||
* Disney Sing It (*.TEX) | |||
* Rigs of Rods (*.DDS) (PC) | |||
* Star Stable Online | * Star Stable Online | ||
* Many more... | * Many more... | ||
Latest revision as of 20:55, 16 July 2023
DDS
- Format Type : Image / Texture
- Endian Order : Little Endian
- Signature : DDS
Format Specifications
// DDS file format
// little endian
4 bytes (char) - signature // "DDS "
// surface format header
4 bytes (uint32) - header size // "124"
4 bytes - flags // DDSD_CAPS, DDSD_PIXELFORMAT, DDSD_WIDTH and DDSD_HEIGHT flags are required
4 bytes (uint32) - height in pixels
4 bytes (uint32) - width in pixels
4 bytes (uint32) - pitch or linear size // calculated from equation
// see notes below for details
// pitch can be "0"
4 bytes (uint32) - depth of the volume // can be "0"
4 bytes (uint32) - number of mipmaps
44 bytes - reserved
// pixel format structure (32 bytes)
4 bytes (uint32) - structure size // always 32
4 bytes - flags
4 bytes (char) - compression type // "DXT1", "DXT2", "DXT3", "DXT4", "DXT5" or nulls for no compression
4 bytes (uint32) - RGB bit count // 16, 24, or 32
4 bytes (uint32) - R bit mask
4 bytes (uint32) - G bit mask
4 bytes (uint32) - B bit mask
4 bytes (uint32) - A bit mask
// capabilities structure (16 bytes)
4 bytes (uint32) - caps 1
4 bytes (uint32) - caps 2
4 bytes (uint32) - reserved 1
4 bytes (uint32) - reserved 2
4 bytes (uint32) - reserved
x bytes - image data / main surface data
// additional surfaces (optional)
num_of_surfaces *
{
x bytes - additional surfaces data
}
MultiEx BMS Script
Not written yet.
Notes and Comments
- DDS texture can have additional surfaces (mipmaps) which should always be smaller than the main surface.
Pitch calculation
For block-compressed formats, compute the pitch as:
max( 1, ((width+3)/4) ) * block-size
The block-size is 8 bytes for DXT1, BC1 and BC4 formats
but 16 bytes for other block-compressed formats.
For R8G8_B8G8, G8R8_G8B8, legacy UYVY-packed, and legacy YUY2-packed formats:
((width+1) >> 1) * 4
For other formats:
( width * bits-per-pixel + 7 ) / 8
Games
List of games using this file format:
- 0 A.D. (*.DDS) (PC)
- Disney Sing It (*.TEX)
- Rigs of Rods (*.DDS) (PC)
- Star Stable Online
- Many more...
Compatible Programs
- IrfanView
- GIMP
- Adobe Photoshop
- XnView MP
- Windows Texture Viewer
- paint.NET
- DDS File Viewer