/* Jonathan Dummer 2007-07-31-10.32 simple DXT compression / decompression code public domain */ #ifndef HEADER_IMAGE_DXT #define HEADER_IMAGE_DXT /** Converts an image from an array of unsigned chars (RGB or RGBA) to DXT1 or DXT5, then saves the converted image to disk. \return 0 if failed, otherwise returns 1 **/ int save_image_as_DDS ( const char *filename, int width, int height, int channels, const unsigned char *const data ); /** take an image and convert it to DXT1 (no alpha) **/ unsigned char* convert_image_to_DXT1 ( const unsigned char *const uncompressed, int width, int height, int channels, int *out_size ); /** take an image and convert it to DXT5 (with alpha) **/ unsigned char* convert_image_to_DXT5 ( const unsigned char *const uncompressed, int width, int height, int channels, int *out_size ); /** A bunch of DirectDraw Surface structures and flags **/ typedef struct { unsigned int dwMagic; unsigned int dwSize; unsigned int dwFlags; unsigned int dwHeight; unsigned int dwWidth; unsigned int dwPitchOrLinearSize; unsigned int dwDepth; unsigned int dwMipMapCount; unsigned int dwReserved1[ 11 ]; /* DDPIXELFORMAT */ struct { unsigned int dwSize; unsigned int dwFlags; unsigned int dwFourCC; unsigned int dwRGBBitCount; unsigned int dwRBitMask; unsigned int dwGBitMask; unsigned int dwBBitMask; unsigned int dwAlphaBitMask; } sPixelFormat; /* DDCAPS2 */ struct { unsigned int dwCaps1; unsigned int dwCaps2; unsigned int dwDDSX; unsigned int dwReserved; } sCaps; unsigned int dwReserved2; } DDS_header ; /* the following constants were copied directly off the MSDN website */ /* The dwFlags member of the original DDSURFACEDESC2 structure can be set to one or more of the following values. */ #define DDSD_CAPS 0x00000001 #define DDSD_HEIGHT 0x00000002 #define DDSD_WIDTH 0x00000004 #define DDSD_PITCH 0x00000008 #define DDSD_PIXELFORMAT 0x00001000 #define DDSD_MIPMAPCOUNT 0x00020000 #define DDSD_LINEARSIZE 0x00080000 #define DDSD_DEPTH 0x00800000 /* DirectDraw Pixel Format */ #define DDPF_ALPHAPIXELS 0x00000001 #define DDPF_FOURCC 0x00000004 #define DDPF_RGB 0x00000040 /* The dwCaps1 member of the DDSCAPS2 structure can be set to one or more of the following values. */ #define DDSCAPS_COMPLEX 0x00000008 #define DDSCAPS_TEXTURE 0x00001000 #define DDSCAPS_MIPMAP 0x00400000 /* The dwCaps2 member of the DDSCAPS2 structure can be set to one or more of the following values. */ #define DDSCAPS2_CUBEMAP 0x00000200 #define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 #define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 #define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 #define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 #define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 #define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 #define DDSCAPS2_VOLUME 0x00200000 #endif /* HEADER_IMAGE_DXT */