]> git.xonotic.org Git - xonotic/netradiant.git/blob - libs/ddslib.h
Merge commit 'c3765eb6e7f6879e5a34c48f71e5ee7bc8b8851f' into master-merge
[xonotic/netradiant.git] / libs / ddslib.h
1 /* -----------------------------------------------------------------------------
2
3    DDS Library
4
5    Based on code from Nvidia's DDS example:
6    http://www.nvidia.com/object/dxtc_decompression_code.html
7
8    Copyright (c) 2003 Randy Reddig
9    All rights reserved.
10
11    Redistribution and use in source and binary forms, with or without modification,
12    are permitted provided that the following conditions are met:
13
14    Redistributions of source code must retain the above copyright notice, this list
15    of conditions and the following disclaimer.
16
17    Redistributions in binary form must reproduce the above copyright notice, this
18    list of conditions and the following disclaimer in the documentation and/or
19    other materials provided with the distribution.
20
21    Neither the names of the copyright holders nor the names of its contributors may
22    be used to endorse or promote products derived from this software without
23    specific prior written permission.
24
25    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
26    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
29    ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
32    ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
36    ----------------------------------------------------------------------------- */
37
38
39
40 /* marker */
41 #ifndef DDSLIB_H
42 #define DDSLIB_H
43
44
45
46 /* dependencies */
47 #include <stdio.h>
48 #include <memory.h>
49
50
51
52 /* c++ marker */
53 #ifdef __cplusplus
54 extern "C"
55 {
56 #endif
57
58
59
60 /* dds definition */
61 typedef enum
62 {
63         DDS_PF_ARGB8888,
64         DDS_PF_DXT1,
65         DDS_PF_DXT2,
66         DDS_PF_DXT3,
67         DDS_PF_DXT4,
68         DDS_PF_DXT5,
69         DDS_PF_UNKNOWN
70 }
71 ddsPF_t;
72
73
74 /* 16bpp stuff */
75 #define DDS_LOW_5       0x001F;
76 #define DDS_MID_6       0x07E0;
77 #define DDS_HIGH_5      0xF800;
78 #define DDS_MID_555     0x03E0;
79 #define DDS_HI_555      0x7C00;
80
81
82 /* structures */
83 typedef struct ddsColorKey_s
84 {
85         unsigned int colorSpaceLowValue;
86         unsigned int colorSpaceHighValue;
87 }
88 ddsColorKey_t;
89
90
91 typedef struct ddsCaps_s
92 {
93         unsigned int caps1;
94         unsigned int caps2;
95         unsigned int caps3;
96         unsigned int caps4;
97 }
98 ddsCaps_t;
99
100
101 typedef struct ddsMultiSampleCaps_s
102 {
103         unsigned short flipMSTypes;
104         unsigned short bltMSTypes;
105 }
106 ddsMultiSampleCaps_t;
107
108
109 typedef struct ddsPixelFormat_s
110 {
111         unsigned int size;
112         unsigned int flags;
113         unsigned int fourCC;
114         union
115         {
116                 unsigned int rgbBitCount;
117                 unsigned int yuvBitCount;
118                 unsigned int zBufferBitDepth;
119                 unsigned int alphaBitDepth;
120                 unsigned int luminanceBitCount;
121                 unsigned int bumpBitCount;
122                 unsigned int privateFormatBitCount;
123         };
124         union
125         {
126                 unsigned int rBitMask;
127                 unsigned int yBitMask;
128                 unsigned int stencilBitDepth;
129                 unsigned int luminanceBitMask;
130                 unsigned int bumpDuBitMask;
131                 unsigned int operations;
132         };
133         union
134         {
135                 unsigned int gBitMask;
136                 unsigned int uBitMask;
137                 unsigned int zBitMask;
138                 unsigned int bumpDvBitMask;
139                 ddsMultiSampleCaps_t multiSampleCaps;
140         };
141         union
142         {
143                 unsigned int bBitMask;
144                 unsigned int vBitMask;
145                 unsigned int stencilBitMask;
146                 unsigned int bumpLuminanceBitMask;
147         };
148         union
149         {
150                 unsigned int rgbAlphaBitMask;
151                 unsigned int yuvAlphaBitMask;
152                 unsigned int luminanceAlphaBitMask;
153                 unsigned int rgbZBitMask;
154                 unsigned int yuvZBitMask;
155         };
156 }
157 ddsPixelFormat_t;
158
159
160 typedef struct ddsBuffer_s
161 {
162         /* magic: 'dds ' */
163         char magic[ 4 ];
164
165         /* directdraw surface */
166         unsigned int size;
167         unsigned int flags;
168         unsigned int height;
169         unsigned int width;
170         union
171         {
172                 int pitch;
173                 unsigned int linearSize;
174         };
175         unsigned int backBufferCount;
176         union
177         {
178                 unsigned int mipMapCount;
179                 unsigned int refreshRate;
180                 unsigned int srcVBHandle;
181         };
182         unsigned int alphaBitDepth;
183         unsigned int reserved;
184         unsigned int surface; // void *surface;
185         union
186         {
187                 ddsColorKey_t ckDestOverlay;
188                 unsigned int emptyFaceColor;
189         };
190         ddsColorKey_t ckDestBlt;
191         ddsColorKey_t ckSrcOverlay;
192         ddsColorKey_t ckSrcBlt;
193         union
194         {
195                 ddsPixelFormat_t pixelFormat;
196                 unsigned int fvf;
197         };
198         ddsCaps_t ddsCaps;
199         unsigned int textureStage;
200
201         /* data (Varying size) */
202         unsigned char data[ 4 ];
203 }
204 ddsBuffer_t;
205
206
207 typedef struct ddsColorBlock_s
208 {
209         unsigned short colors[ 2 ];
210         unsigned char row[ 4 ];
211 }
212 ddsColorBlock_t;
213
214
215 typedef struct ddsAlphaBlockExplicit_s
216 {
217         unsigned short row[ 4 ];
218 }
219 ddsAlphaBlockExplicit_t;
220
221
222 typedef struct ddsAlphaBlock3BitLinear_s
223 {
224         unsigned char alpha0;
225         unsigned char alpha1;
226         unsigned char stuff[ 6 ];
227 }
228 ddsAlphaBlock3BitLinear_t;
229
230
231 typedef struct ddsColor_s
232 {
233         unsigned char r, g, b, a;
234 }
235 ddsColor_t;
236
237
238
239 /* public functions */
240 int                     DDSGetInfo( ddsBuffer_t *dds, int *width, int *height, ddsPF_t *pf );
241 int                     DDSDecompress( ddsBuffer_t *dds, unsigned char *pixels );
242
243
244
245 /* end marker */
246 #ifdef __cplusplus
247 }
248 #endif
249
250 #endif