1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>DevIL: /home/dwoods/DevIL/src-IL/include/il_dds.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<h1>/home/dwoods/DevIL/src-IL/include/il_dds.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//-----------------------------------------------------------------------------</span>
<a name="l00002"></a>00002 <span class="comment">//</span>
<a name="l00003"></a>00003 <span class="comment">// ImageLib Sources</span>
<a name="l00004"></a>00004 <span class="comment">// Copyright (C) 2000-2008 by Denton Woods</span>
<a name="l00005"></a>00005 <span class="comment">// Last modified: 12/27/2008</span>
<a name="l00006"></a>00006 <span class="comment">//</span>
<a name="l00007"></a>00007 <span class="comment">// Filename: src-IL/include/il_dds.h</span>
<a name="l00008"></a>00008 <span class="comment">//</span>
<a name="l00009"></a>00009 <span class="comment">// Description: Reads from a DirectDraw Surface (.dds) file.</span>
<a name="l00010"></a>00010 <span class="comment">//</span>
<a name="l00011"></a>00011 <span class="comment">//-----------------------------------------------------------------------------</span>
<a name="l00012"></a>00012
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="preprocessor">#ifndef DDS_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#define DDS_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span>
<a name="l00017"></a>00017 <span class="preprocessor">#include "il_internal.h"</span>
<a name="l00018"></a>00018
<a name="l00019"></a>00019
<a name="l00020"></a>00020 <span class="preprocessor">#ifdef _WIN32</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor"> #pragma pack(push, dds_struct, 1)</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span>DDSHEAD
<a name="l00024"></a>00024 {
<a name="l00025"></a>00025 ILbyte Signature[4];
<a name="l00026"></a>00026
<a name="l00027"></a>00027 ILuint Size1; <span class="comment">// size of the structure (minus MagicNum)</span>
<a name="l00028"></a>00028 ILuint Flags1; <span class="comment">// determines what fields are valid</span>
<a name="l00029"></a>00029 ILuint Height; <span class="comment">// height of surface to be created</span>
<a name="l00030"></a>00030 ILuint Width; <span class="comment">// width of input surface</span>
<a name="l00031"></a>00031 ILuint LinearSize; <span class="comment">// Formless late-allocated optimized surface size</span>
<a name="l00032"></a>00032 ILuint Depth; <span class="comment">// Depth if a volume texture</span>
<a name="l00033"></a>00033 ILuint MipMapCount; <span class="comment">// number of mip-map levels requested</span>
<a name="l00034"></a>00034 ILuint AlphaBitDepth; <span class="comment">// depth of alpha buffer requested</span>
<a name="l00035"></a>00035
<a name="l00036"></a>00036 ILuint NotUsed[10];
<a name="l00037"></a>00037
<a name="l00038"></a>00038 ILuint Size2; <span class="comment">// size of structure</span>
<a name="l00039"></a>00039 ILuint Flags2; <span class="comment">// pixel format flags</span>
<a name="l00040"></a>00040 ILuint FourCC; <span class="comment">// (FOURCC code)</span>
<a name="l00041"></a>00041 ILuint RGBBitCount; <span class="comment">// how many bits per pixel</span>
<a name="l00042"></a>00042 ILuint RBitMask; <span class="comment">// mask for red bit</span>
<a name="l00043"></a>00043 ILuint GBitMask; <span class="comment">// mask for green bits</span>
<a name="l00044"></a>00044 ILuint BBitMask; <span class="comment">// mask for blue bits</span>
<a name="l00045"></a>00045 ILuint RGBAlphaBitMask; <span class="comment">// mask for alpha channel</span>
<a name="l00046"></a>00046
<a name="l00047"></a>00047 ILuint ddsCaps1, ddsCaps2, ddsCaps3, ddsCaps4; <span class="comment">// direct draw surface capabilities</span>
<a name="l00048"></a>00048 ILuint TextureStage;
<a name="l00049"></a>00049 } IL_PACKSTRUCT DDSHEAD;
<a name="l00050"></a>00050 <span class="preprocessor">#ifdef _WIN32</span>
<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor"> #pragma pack(pop, dds_struct)</span>
<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00053"></a>00053 <span class="preprocessor"></span>
<a name="l00054"></a>00054
<a name="l00055"></a>00055
<a name="l00056"></a>00056 <span class="comment">// use cast to struct instead of RGBA_MAKE as struct is</span>
<a name="l00057"></a>00057 <span class="comment">// much</span>
<a name="l00058"></a>00058 <span class="keyword">typedef</span> <span class="keyword">struct </span>Color8888
<a name="l00059"></a>00059 {
<a name="l00060"></a>00060 ILubyte r; <span class="comment">// change the order of names to change the </span>
<a name="l00061"></a>00061 ILubyte g; <span class="comment">// order of the output ARGB or BGRA, etc...</span>
<a name="l00062"></a>00062 ILubyte b; <span class="comment">// Last one is MSB, 1st is LSB.</span>
<a name="l00063"></a>00063 ILubyte a;
<a name="l00064"></a>00064 } Color8888;
<a name="l00065"></a>00065
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <span class="keyword">typedef</span> <span class="keyword">struct </span>Color888
<a name="l00068"></a>00068 {
<a name="l00069"></a>00069 ILubyte r; <span class="comment">// change the order of names to change the </span>
<a name="l00070"></a>00070 ILubyte g; <span class="comment">// order of the output ARGB or BGRA, etc...</span>
<a name="l00071"></a>00071 ILubyte b; <span class="comment">// Last one is MSB, 1st is LSB.</span>
<a name="l00072"></a>00072 } Color888;
<a name="l00073"></a>00073
<a name="l00074"></a>00074
<a name="l00075"></a>00075 <span class="keyword">typedef</span> <span class="keyword">struct </span>Color565
<a name="l00076"></a>00076 {
<a name="l00077"></a>00077 <span class="keywordtype">unsigned</span> nBlue : 5; <span class="comment">// order of names changes</span>
<a name="l00078"></a>00078 <span class="keywordtype">unsigned</span> nGreen : 6; <span class="comment">// byte order of output to 32 bit</span>
<a name="l00079"></a>00079 <span class="keywordtype">unsigned</span> nRed : 5;
<a name="l00080"></a>00080 } Color565;
<a name="l00081"></a>00081
<a name="l00082"></a>00082
<a name="l00083"></a>00083 <span class="keyword">typedef</span> <span class="keyword">struct </span>DXTColBlock
<a name="l00084"></a>00084 {
<a name="l00085"></a>00085 ILshort col0;
<a name="l00086"></a>00086 ILshort col1;
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="comment">// no bit fields - use bytes</span>
<a name="l00089"></a>00089 ILbyte row[4];
<a name="l00090"></a>00090 } DXTColBlock;
<a name="l00091"></a>00091
<a name="l00092"></a>00092 <span class="keyword">typedef</span> <span class="keyword">struct </span>DXTAlphaBlockExplicit
<a name="l00093"></a>00093 {
<a name="l00094"></a>00094 ILshort row[4];
<a name="l00095"></a>00095 } DXTAlphaBlockExplicit;
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <span class="keyword">typedef</span> <span class="keyword">struct </span>DXTAlphaBlock3BitLinear
<a name="l00098"></a>00098 {
<a name="l00099"></a>00099 ILbyte alpha0;
<a name="l00100"></a>00100 ILbyte alpha1;
<a name="l00101"></a>00101
<a name="l00102"></a>00102 ILbyte stuff[6];
<a name="l00103"></a>00103 } DXTAlphaBlock3BitLinear;
<a name="l00104"></a>00104
<a name="l00105"></a>00105
<a name="l00106"></a>00106 <span class="comment">// Defines</span>
<a name="l00107"></a>00107
<a name="l00108"></a>00108 <span class="comment">//Those 4 were added on 20040516 to make</span>
<a name="l00109"></a>00109 <span class="comment">//the written dds files more standard compliant</span>
<a name="l00110"></a>00110 <span class="preprocessor">#define DDS_CAPS 0x00000001L</span>
<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#define DDS_HEIGHT 0x00000002L</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#define DDS_WIDTH 0x00000004L</span>
<a name="l00113"></a>00113 <span class="preprocessor"></span>
<a name="l00114"></a>00114 <span class="preprocessor">#define DDS_RGB 0x00000040L</span>
<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#define DDS_PIXELFORMAT 0x00001000L</span>
<a name="l00116"></a>00116 <span class="preprocessor"></span>
<a name="l00117"></a>00117 <span class="preprocessor">#define DDS_LUMINANCE 0x00020000L</span>
<a name="l00118"></a>00118 <span class="preprocessor"></span>
<a name="l00119"></a>00119 <span class="preprocessor">#define DDS_ALPHAPIXELS 0x00000001L</span>
<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">#define DDS_ALPHA 0x00000002L</span>
<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor">#define DDS_FOURCC 0x00000004L</span>
<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">#define DDS_PITCH 0x00000008L</span>
<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#define DDS_COMPLEX 0x00000008L</span>
<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#define DDS_TEXTURE 0x00001000L</span>
<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor">#define DDS_MIPMAPCOUNT 0x00020000L</span>
<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">#define DDS_LINEARSIZE 0x00080000L</span>
<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor">#define DDS_VOLUME 0x00200000L</span>
<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="preprocessor">#define DDS_MIPMAP 0x00400000L</span>
<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor">#define DDS_DEPTH 0x00800000L</span>
<a name="l00130"></a>00130 <span class="preprocessor"></span>
<a name="l00131"></a>00131 <span class="preprocessor">#define DDS_CUBEMAP 0x00000200L</span>
<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor">#define DDS_CUBEMAP_POSITIVEX 0x00000400L</span>
<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">#define DDS_CUBEMAP_NEGATIVEX 0x00000800L</span>
<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor">#define DDS_CUBEMAP_POSITIVEY 0x00001000L</span>
<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#define DDS_CUBEMAP_NEGATIVEY 0x00002000L</span>
<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">#define DDS_CUBEMAP_POSITIVEZ 0x00004000L</span>
<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#define DDS_CUBEMAP_NEGATIVEZ 0x00008000L</span>
<a name="l00138"></a>00138 <span class="preprocessor"></span>
<a name="l00139"></a>00139
<a name="l00140"></a>00140 <span class="preprocessor">#define IL_MAKEFOURCC(ch0, ch1, ch2, ch3) \</span>
<a name="l00141"></a>00141 <span class="preprocessor"> ((ILint)(ILbyte)(ch0) | ((ILint)(ILbyte)(ch1) << 8) | \</span>
<a name="l00142"></a>00142 <span class="preprocessor"> ((ILint)(ILbyte)(ch2) << 16) | ((ILint)(ILbyte)(ch3) << 24 ))</span>
<a name="l00143"></a>00143 <span class="preprocessor"></span>
<a name="l00144"></a>00144 <span class="keyword">enum</span> PixFormat
<a name="l00145"></a>00145 {
<a name="l00146"></a>00146 PF_ARGB,
<a name="l00147"></a>00147 PF_RGB,
<a name="l00148"></a>00148 PF_DXT1,
<a name="l00149"></a>00149 PF_DXT2,
<a name="l00150"></a>00150 PF_DXT3,
<a name="l00151"></a>00151 PF_DXT4,
<a name="l00152"></a>00152 PF_DXT5,
<a name="l00153"></a>00153 PF_3DC,
<a name="l00154"></a>00154 PF_ATI1N,
<a name="l00155"></a>00155 PF_LUMINANCE,
<a name="l00156"></a>00156 PF_LUMINANCE_ALPHA,
<a name="l00157"></a>00157 PF_RXGB, <span class="comment">//Doom3 normal maps</span>
<a name="l00158"></a>00158 PF_A16B16G16R16,
<a name="l00159"></a>00159 PF_R16F,
<a name="l00160"></a>00160 PF_G16R16F,
<a name="l00161"></a>00161 PF_A16B16G16R16F,
<a name="l00162"></a>00162 PF_R32F,
<a name="l00163"></a>00163 PF_G32R32F,
<a name="l00164"></a>00164 PF_A32B32G32R32F,
<a name="l00165"></a>00165 PF_UNKNOWN = 0xFF
<a name="l00166"></a>00166 };
<a name="l00167"></a>00167
<a name="l00168"></a>00168 <span class="preprocessor">#define CUBEMAP_SIDES 6</span>
<a name="l00169"></a>00169 <span class="preprocessor"></span>
<a name="l00170"></a>00170 <span class="comment">// Internal functions</span>
<a name="l00171"></a>00171 ILboolean iLoadDdsInternal(<span class="keywordtype">void</span>);
<a name="l00172"></a>00172 ILboolean iIsValidDds(<span class="keywordtype">void</span>);
<a name="l00173"></a>00173 ILboolean iCheckDds(DDSHEAD *Head);
<a name="l00174"></a>00174 <span class="keywordtype">void</span> AdjustVolumeTexture(DDSHEAD *Head, ILuint CompFormat);
<a name="l00175"></a>00175 ILboolean ReadData();
<a name="l00176"></a>00176 ILboolean AllocImage(ILuint CompFormat);
<a name="l00177"></a>00177 ILboolean DdsDecompress(ILuint CompFormat);
<a name="l00178"></a>00178 ILboolean ReadMipmaps(ILuint CompFormat);
<a name="l00179"></a>00179 ILuint DecodePixelFormat();
<a name="l00180"></a>00180 <span class="keywordtype">void</span> DxtcReadColor(ILushort Data, Color8888* Out);
<a name="l00181"></a>00181 <span class="keywordtype">void</span> DxtcReadColors(<span class="keyword">const</span> ILubyte* Data, Color8888* Out);
<a name="l00182"></a>00182 ILboolean DecompressARGB(ILuint CompFormat);
<a name="l00183"></a>00183 ILboolean DecompressARGB16(ILuint CompFormat);
<a name="l00184"></a>00184 ILboolean DecompressDXT1(<a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *lImage, ILubyte *lCompData);
<a name="l00185"></a>00185 ILboolean DecompressDXT2(<a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *lImage, ILubyte *lCompData);
<a name="l00186"></a>00186 ILboolean DecompressDXT3(<a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *lImage, ILubyte *lCompData);
<a name="l00187"></a>00187 ILboolean DecompressDXT4(<a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *lImage, ILubyte *lCompData);
<a name="l00188"></a>00188 ILboolean DecompressDXT5(<a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *lImage, ILubyte *lCompData);
<a name="l00189"></a>00189 ILboolean Decompress3Dc();
<a name="l00190"></a>00190 ILboolean DecompressAti1n();
<a name="l00191"></a>00191 ILboolean DecompressRXGB();
<a name="l00192"></a>00192 ILboolean iConvFloat16ToFloat32(ILuint* dest, ILushort* src, ILuint size);
<a name="l00193"></a>00193 ILboolean DecompressFloat(ILuint lCompFormat);
<a name="l00194"></a>00194 <span class="keywordtype">void</span> CorrectPreMult();
<a name="l00195"></a>00195 <span class="keywordtype">void</span> GetBitsFromMask(ILuint Mask, ILuint *ShiftLeft, ILuint *ShiftRight);
<a name="l00196"></a>00196 ILboolean iSaveDdsInternal(<span class="keywordtype">void</span>);
<a name="l00197"></a>00197 ILboolean WriteHeader(<a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *Image, ILenum DXTCFormat, ILuint CubeFlags);
<a name="l00198"></a>00198 ILushort *CompressTo565(<a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *Image);
<a name="l00199"></a>00199 ILubyte *CompressTo88(<a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *Image);
<a name="l00200"></a>00200 ILuint Compress(<a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *Image, ILenum DXTCFormat);
<a name="l00201"></a>00201 ILboolean GetBlock(ILushort *Block, ILushort *Data, <a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *Image, ILuint XPos, ILuint YPos);
<a name="l00202"></a>00202 ILboolean GetAlphaBlock(ILubyte *Block, ILubyte *Data, <a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *Image, ILuint XPos, ILuint YPos);
<a name="l00203"></a>00203 ILboolean Get3DcBlock(ILubyte *Block, ILubyte *Data, <a class="code" href="structILimage.html" title="The Fundamental Image structure.">ILimage</a> *Image, ILuint XPos, ILuint YPos, <span class="keywordtype">int</span> channel);
<a name="l00204"></a>00204 <span class="keywordtype">void</span> ShortToColor565(ILushort Pixel, Color565 *Colour);
<a name="l00205"></a>00205 <span class="keywordtype">void</span> ShortToColor888(ILushort Pixel, Color888 *Colour);
<a name="l00206"></a>00206 ILushort Color565ToShort(Color565 *Colour);
<a name="l00207"></a>00207 ILushort Color888ToShort(Color888 *Colour);
<a name="l00208"></a>00208 ILuint GenBitMask(ILushort ex0, ILushort ex1, ILuint NumCols, ILushort *In, ILubyte *Alpha, Color888 *OutCol);
<a name="l00209"></a>00209 <span class="keywordtype">void</span> GenAlphaBitMask(ILubyte a0, ILubyte a1, ILubyte *In, ILubyte *Mask, ILubyte *Out);
<a name="l00210"></a>00210 ILuint RMSAlpha(ILubyte *Orig, ILubyte *Test);
<a name="l00211"></a>00211 ILuint Distance(Color888 *c1, Color888 *c2);
<a name="l00212"></a>00212 <span class="keywordtype">void</span> ChooseEndpoints(ILushort *Block, ILushort *ex0, ILushort *ex1);
<a name="l00213"></a>00213 <span class="keywordtype">void</span> ChooseAlphaEndpoints(ILubyte *Block, ILubyte *a0, ILubyte *a1);
<a name="l00214"></a>00214 <span class="keywordtype">void</span> CorrectEndDXT1(ILushort *ex0, ILushort *ex1, ILboolean HasAlpha);
<a name="l00215"></a>00215 <span class="keywordtype">void</span> PreMult(ILushort *Data, ILubyte *Alpha);
<a name="l00216"></a>00216
<a name="l00217"></a>00217
<a name="l00218"></a>00218 <span class="keyword">extern</span> ILuint CubemapDirections[CUBEMAP_SIDES];
<a name="l00219"></a>00219
<a name="l00220"></a>00220
<a name="l00221"></a>00221 <span class="preprocessor">#endif//DDS_H</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sun Mar 8 20:01:41 2009 for DevIL by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>
|