/* img_dds.h - dds format reference Copyright (C) 2015 Uncle Mike This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ #ifndef IMG_DDS_H #define IMG_DDS_H /* ======================================================================== .DDS image format ======================================================================== */ #define DDSHEADER ((' '<<24)+('S'<<16)+('D'<<8)+'D') // little-endian "DDS " // various four-cc types #define TYPE_DXT1 (('1'<<24)+('T'<<16)+('X'<<8)+'D') // little-endian "DXT1" #define TYPE_DXT2 (('2'<<24)+('T'<<16)+('X'<<8)+'D') // little-endian "DXT2" #define TYPE_DXT3 (('3'<<24)+('T'<<16)+('X'<<8)+'D') // little-endian "DXT3" #define TYPE_DXT4 (('4'<<24)+('T'<<16)+('X'<<8)+'D') // little-endian "DXT4" #define TYPE_DXT5 (('5'<<24)+('T'<<16)+('X'<<8)+'D') // little-endian "DXT5" #define TYPE_ATI1 (('1'<<24)+('I'<<16)+('T'<<8)+'A') // little-endian "ATI1" #define TYPE_ATI2 (('2'<<24)+('I'<<16)+('T'<<8)+'A') // little-endian "ATI2" #define TYPE_RXGB (('B'<<24)+('G'<<16)+('X'<<8)+'R') // little-endian "RXGB" doom3 normalmaps #define TYPE_$ (('\0'<<24)+('\0'<<16)+('\0'<<8)+'$') // little-endian "$" #define TYPE_o (('\0'<<24)+('\0'<<16)+('\0'<<8)+'o') // little-endian "o" #define TYPE_p (('\0'<<24)+('\0'<<16)+('\0'<<8)+'p') // little-endian "p" #define TYPE_q (('\0'<<24)+('\0'<<16)+('\0'<<8)+'q') // little-endian "q" #define TYPE_r (('\0'<<24)+('\0'<<16)+('\0'<<8)+'r') // little-endian "r" #define TYPE_s (('\0'<<24)+('\0'<<16)+('\0'<<8)+'s') // little-endian "s" #define TYPE_t (('\0'<<24)+('\0'<<16)+('\0'<<8)+'t') // little-endian "t" // dwFlags1 #define DDS_CAPS 0x00000001L #define DDS_HEIGHT 0x00000002L #define DDS_WIDTH 0x00000004L #define DDS_PITCH 0x00000008L #define DDS_PIXELFORMAT 0x00001000L #define DDS_MIPMAPCOUNT 0x00020000L #define DDS_LINEARSIZE 0x00080000L #define DDS_DEPTH 0x00800000L // dwFlags2 #define DDS_ALPHAPIXELS 0x00000001L #define DDS_ALPHA 0x00000002L #define DDS_FOURCC 0x00000004L #define DDS_RGB 0x00000040L #define DDS_RGBA 0x00000041L // (DDS_RGB|DDS_ALPHAPIXELS) #define DDS_LUMINANCE 0x00020000L #define DDS_DUDV 0x00080000L // dwCaps1 #define DDS_COMPLEX 0x00000008L #define DDS_TEXTURE 0x00001000L #define DDS_MIPMAP 0x00400000L // dwCaps2 #define DDS_CUBEMAP 0x00000200L #define DDS_CUBEMAP_POSITIVEX 0x00000400L #define DDS_CUBEMAP_NEGATIVEX 0x00000800L #define DDS_CUBEMAP_POSITIVEY 0x00001000L #define DDS_CUBEMAP_NEGATIVEY 0x00002000L #define DDS_CUBEMAP_POSITIVEZ 0x00004000L #define DDS_CUBEMAP_NEGATIVEZ 0x00008000L #define DDS_CUBEMAP_ALL_SIDES 0x0000FC00L #define DDS_VOLUME 0x00200000L typedef struct dds_pf_s { uint32_t dwSize; uint32_t dwFlags; uint32_t dwFourCC; uint32_t dwRGBBitCount; uint32_t dwRBitMask; uint32_t dwGBitMask; uint32_t dwBBitMask; uint32_t dwABitMask; } dds_pixf_t; // DDCAPS2 typedef struct dds_caps_s { uint32_t dwCaps1; uint32_t dwCaps2; uint32_t dwCaps3; // currently unused uint32_t dwCaps4; // currently unused } dds_caps_t; typedef struct dds_s { uint32_t dwIdent; // must matched with DDSHEADER uint32_t dwSize; uint32_t dwFlags; // determines what fields are valid uint32_t dwHeight; uint32_t dwWidth; uint32_t dwLinearSize; // Formless late-allocated optimized surface size uint32_t dwDepth; // depth if a volume texture uint32_t dwMipMapCount; // number of mip-map levels requested uint32_t dwAlphaBitDepth; // depth of alpha buffer requested uint32_t dwReserved1[10]; // reserved for future expansions dds_pixf_t dsPixelFormat; dds_caps_t dsCaps; uint32_t dwTextureStage; } dds_t; #endif // IMG_DDS_H