"L. Spiro Engine"
|
00001 00016 #ifndef __LSI_DDS_H__ 00017 #define __LSI_DDS_H__ 00018 00019 #include "../LSIImageLib.h" 00020 #include "Vector/LSTLVector.h" 00021 00022 namespace lsi { 00023 00024 // == Enumerations. 00028 enum LSI_DDS_PIXEL_FORMAT_FLAGS { 00029 LSI_DPFF_ALPHAPIXELS = 0x1, 00030 LSI_DPFF_ALPHA = 0x2, 00031 LSI_DPFF_FOURCC = 0x4, 00032 LSI_DPFF_RGB = 0x40, 00033 LSI_DPFF_YUV = 0x200, 00034 LSI_DPFF_LUMINANCE = 0x20000, 00035 }; 00036 00040 enum LSI_DDS_FLAGS { 00041 LSI_DF_CAPS = 0x1, 00042 LSI_DF_HEIGHT = 0x2, 00043 LSI_DF_WIDTH = 0x4, 00044 LSI_DF_PITCH = 0x8, 00045 LSI_DF_PIXELFORMAT = 0x1000, 00046 LSI_DF_MIPMAPCOUNT = 0x20000, 00047 LSI_DF_LINEARSIZE = 0x80000, 00048 LSI_DF_DEPTH = 0x800000, 00049 }; 00050 00057 class CDds { 00058 public : 00059 // == Types. 00063 #pragma pack( push, 1 ) 00064 typedef struct LSI_DDS_PIXELFORMAT { 00065 LSUINT32 ui32Size; 00066 LSUINT32 ui32Flags; 00067 LSUINT32 ui32FourCC; 00068 LSUINT32 ui32RGBBitCount; 00069 LSUINT32 ui32RBitMask; 00070 LSUINT32 ui32GBitMask; 00071 LSUINT32 ui32BBitMask; 00072 LSUINT32 ui32ABitMask; 00073 } * LPLSI_DDS_PIXELFORMAT, * const LPCLSI_DDS_PIXELFORMAT; 00074 #pragma pack( pop ) 00075 00079 #pragma pack( push, 1 ) 00080 typedef struct LSI_DDS_HEADER { 00081 LSUINT32 ui32Size; 00082 LSUINT32 ui32Flags; 00083 LSUINT32 ui32Height; 00084 LSUINT32 ui32Width; 00085 LSUINT32 ui32PitchOrLinearSize; 00086 LSUINT32 ui32Depth; 00087 LSUINT32 ui32MipMapCount; 00088 LSUINT32 ui32Reserved1[11]; 00089 LSI_DDS_PIXELFORMAT dpPixelFormat; 00090 LSUINT32 ui32Caps; 00091 LSUINT32 ui32Caps2; 00092 LSUINT32 ui32Caps3; 00093 LSUINT32 ui32Caps4; 00094 LSUINT32 ui32Reserved2; 00095 } * LPLSI_DDS_HEADER, * const LPCLSI_DDS_HEADER; 00096 #pragma pack( pop ) 00097 00098 00099 // == Functions. 00112 static LSBOOL LSE_CALL LoadDds( const LSUINT8 * _pui8FileData, LSUINT32 _ui32DataLen, 00113 LSUINT32 &_ui32Width, LSUINT32 &_ui32Height, LSI_PIXEL_FORMAT &_pfFormat, 00114 CImageLib::CTexelBuffer &_tbReturn, 00115 CVector<CImageLib::CTexelBuffer> &_vMipMaps ); 00116 00123 static LSUINT32 LSE_CALL DdsBlockSize( LSI_PIXEL_FORMAT _pfFormat ); 00124 00131 static LSI_PIXEL_FORMAT LSE_CALL DdsPixelFormat( LSUINT32 _ui32FourCc ); 00132 00140 static LSUINT32 LSE_CALL DdsScanlineWidth( LSUINT32 _ui32Width, LSI_PIXEL_FORMAT _pfFormat ); 00141 00148 static LSUINT32 LSE_CALL DdsTotalScanlines( LSUINT32 _ui32Height ); 00149 00158 static LSUINT32 LSE_CALL GetCompressedSize( LSUINT32 _ui32Width, LSUINT32 _ui32Height, LSUINT32 _ui32Factor ); 00159 00160 protected : 00161 // == Functions. 00162 00163 00164 }; 00165 00166 } // namespace lsi 00167 00168 #endif // __LSI_DDS_H__