File: il__dds_8h-source.html

package info (click to toggle)
devil 1.7.8-10
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye, buster, stretch
  • size: 9,796 kB
  • sloc: ansic: 45,835; sh: 15,558; cpp: 4,009; python: 1,300; pascal: 792; makefile: 307; cs: 192; fortran: 5
file content (242 lines) | stat: -rw-r--r-- 21,081 bytes parent folder | download | duplicates (5)
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&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;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) &lt;&lt; 8) |   \</span>
<a name="l00142"></a>00142 <span class="preprocessor">                        ((ILint)(ILbyte)(ch2) &lt;&lt; 16) | ((ILint)(ILbyte)(ch3) &lt;&lt; 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&nbsp;
<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>