- Correct implementation of HUSKEY internals, including functions:
[wine] / include / d3dtypes.h
1 /* FIXME: Need to add C++ code for certain structs for headers - this is going to be a problem
2           if WINE continues to only use C code  - I suppose that we could always inline in
3           the header file to get around that little problem... */
4 /* FIXME: We need to implement versioning on everything directx 5 and up if these headers
5           are going to be generically useful for directx stuff */
6
7 #ifndef __WINE_D3DTYPES_H
8 #define __WINE_D3DTYPES_H
9
10 /* #include <windows.h> FIXME: Need to include for compatibility. Inclusion caused compile fail */
11
12 #include <float.h>
13 #include "ddraw.h"
14
15 #define D3DVALP(val, prec)      ((float)(val))
16 #define D3DVAL(val)             ((float)(val))
17 typedef float D3DVALUE,*LPD3DVALUE;
18 #define D3DDivide(a, b)         (float)((double) (a) / (double) (b))
19 #define D3DMultiply(a, b)       ((a) * (b))
20
21 typedef LONG D3DFIXED;
22
23
24 #ifndef RGB_MAKE
25 #define CI_GETALPHA(ci)    ((ci) >> 24)
26 #define CI_GETINDEX(ci)    (((ci) >> 8) & 0xffff)
27 #define CI_GETFRACTION(ci) ((ci) & 0xff)
28 #define CI_ROUNDINDEX(ci)  CI_GETINDEX((ci) + 0x80)
29 #define CI_MASKALPHA(ci)   ((ci) & 0xffffff)
30 #define CI_MAKE(a, i, f)    (((a) << 24) | ((i) << 8) | (f))
31
32 #define RGBA_GETALPHA(rgb)      ((rgb) >> 24)
33 #define RGBA_GETRED(rgb)        (((rgb) >> 16) & 0xff)
34 #define RGBA_GETGREEN(rgb)      (((rgb) >> 8) & 0xff)
35 #define RGBA_GETBLUE(rgb)       ((rgb) & 0xff)
36 #define RGBA_MAKE(r, g, b, a)   ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
37
38 #define D3DRGB(r, g, b) \
39     (0xff000000L | ( ((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255))
40 #define D3DRGBA(r, g, b, a) \
41     (   (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) \
42     |   (((long)((g) * 255)) << 8) | (long)((b) * 255) \
43     )
44
45 #define RGB_GETRED(rgb)         (((rgb) >> 16) & 0xff)
46 #define RGB_GETGREEN(rgb)       (((rgb) >> 8) & 0xff)
47 #define RGB_GETBLUE(rgb)        ((rgb) & 0xff)
48 #define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
49 #define RGB_MAKE(r, g, b)       ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b)))
50 #define RGBA_TORGB(rgba)       ((D3DCOLOR) ((rgba) & 0xffffff))
51 #define RGB_TORGBA(rgb)        ((D3DCOLOR) ((rgb) | 0xff000000))
52
53 #endif
54
55 #define D3DENUMRET_CANCEL                        DDENUMRET_CANCEL
56 #define D3DENUMRET_OK                            DDENUMRET_OK
57
58 typedef HRESULT CALLBACK (*LPD3DVALIDATECALLBACK)(LPVOID lpUserArg, DWORD dwOffset);
59 typedef HRESULT CALLBACK (*LPD3DENUMTEXTUREFORMATSCALLBACK)(LPDDSURFACEDESC lpDdsd, LPVOID lpContext);
60 typedef HRESULT CALLBACK (*LPD3DENUMPIXELFORMATSCALLBACK)(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext);
61
62 typedef DWORD D3DCOLOR, *LPD3DCOLOR;
63
64 typedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE;
65 typedef DWORD D3DTEXTUREHANDLE,  *LPD3DTEXTUREHANDLE;
66 typedef DWORD D3DMATRIXHANDLE,   *LPD3DMATRIXHANDLE;
67
68 typedef struct _D3DCOLORVALUE {
69         union {
70                 D3DVALUE r;
71                 D3DVALUE dvR;
72         } DUMMYUNIONNAME1;
73         union {
74                 D3DVALUE g;
75                 D3DVALUE dvG;
76         } DUMMYUNIONNAME2;
77         union {
78                 D3DVALUE b;
79                 D3DVALUE dvB;
80         } DUMMYUNIONNAME3;
81         union {
82                 D3DVALUE a;
83                 D3DVALUE dvA;
84         } DUMMYUNIONNAME4;
85 } D3DCOLORVALUE,*LPD3DCOLORVALUE;
86
87 typedef struct _D3DRECT {
88   union {
89     LONG x1;
90     LONG lX1;
91   } DUMMYUNIONNAME1;
92   union {
93     LONG y1;
94     LONG lY1;
95   } DUMMYUNIONNAME2;
96   union {
97     LONG x2;
98     LONG lX2;
99   } DUMMYUNIONNAME3;
100   union {
101     LONG y2;
102     LONG lY2;
103   } DUMMYUNIONNAME4;
104 } D3DRECT, *LPD3DRECT;
105
106 typedef struct _D3DVECTOR {
107   union {
108         D3DVALUE        x;
109     D3DVALUE dvX;
110   } DUMMYUNIONNAME1;
111   union {
112         D3DVALUE        y;
113     D3DVALUE dvY;
114   } DUMMYUNIONNAME2;
115   union {
116         D3DVALUE        z;
117     D3DVALUE dvZ;
118   } DUMMYUNIONNAME3;
119 #if defined(__cplusplus) && defined(D3D_OVERLOADS)
120   /* the definitions for these methods are in d3dvec.inl */
121 public:
122   /*** constructors ***/
123   _D3DVECTOR() {}
124   _D3DVECTOR(D3DVALUE f);
125   _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z);
126   _D3DVECTOR(const D3DVALUE f[3]);
127
128   /*** assignment operators ***/
129   _D3DVECTOR& operator += (const _D3DVECTOR& v);
130   _D3DVECTOR& operator -= (const _D3DVECTOR& v);
131   _D3DVECTOR& operator *= (const _D3DVECTOR& v);
132   _D3DVECTOR& operator /= (const _D3DVECTOR& v);
133   _D3DVECTOR& operator *= (D3DVALUE s);
134   _D3DVECTOR& operator /= (D3DVALUE s);
135
136   /*** unary operators ***/
137   friend _D3DVECTOR operator + (const _D3DVECTOR& v);
138   friend _D3DVECTOR operator - (const _D3DVECTOR& v);
139
140   /*** binary operators ***/
141   friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
142   friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
143
144   friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s);
145   friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v);
146   friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s);
147
148   friend D3DVALUE SquareMagnitude(const _D3DVECTOR& v);
149   friend D3DVALUE Magnitude(const _D3DVECTOR& v);
150
151   friend _D3DVECTOR Normalize(const _D3DVECTOR& v);
152
153   friend D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2);
154   friend _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2);
155 #endif
156 } D3DVECTOR,*LPD3DVECTOR;
157
158 typedef struct _D3DHVERTEX {
159     DWORD         dwFlags;
160  union {
161     D3DVALUE    hx;
162     D3DVALUE    dvHX;
163   } DUMMYUNIONNAME1;
164   union {
165     D3DVALUE    hy;
166     D3DVALUE    dvHY;
167   } DUMMYUNIONNAME2;
168   union {
169     D3DVALUE    hz;
170     D3DVALUE    dvHZ;
171   } DUMMYUNIONNAME3;
172 } D3DHVERTEX, *LPD3DHVERTEX;
173
174 /*
175  * Transformed/lit vertices
176  */
177 typedef struct _D3DTLVERTEX {
178   union {
179     D3DVALUE    sx;
180     D3DVALUE    dvSX;
181   } DUMMYUNIONNAME1;
182   union {
183     D3DVALUE    sy;
184     D3DVALUE    dvSY;
185   } DUMMYUNIONNAME2;
186   union {
187     D3DVALUE    sz;
188     D3DVALUE    dvSZ;
189   } DUMMYUNIONNAME3;
190   union {
191     D3DVALUE    rhw;
192     D3DVALUE    dvRHW;
193   } DUMMYUNIONNAME4;
194   union {
195     D3DCOLOR    color;
196     D3DCOLOR    dcColor;
197   } DUMMYUNIONNAME5;
198   union {
199     D3DCOLOR    specular;
200     D3DCOLOR    dcSpecular;
201   } DUMMYUNIONNAME6;
202   union {
203     D3DVALUE    tu;
204     D3DVALUE    dvTU;
205   } DUMMYUNIONNAME7;
206   union {
207     D3DVALUE    tv;
208     D3DVALUE    dvTV;
209   } DUMMYUNIONNAME8;
210 #if defined(__cplusplus) && defined(D3D_OVERLOADS)
211 public:
212   _D3DTLVERTEX() {}
213   _D3DTLVERTEX(const D3DVECTOR& v, float _rhw, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) {
214     sx = v.x; sy = v.y; sz = v.z; rhw = _rhw;
215     color = _color; specular = _specular;
216     tu = _tu; tv = _tv;
217   }
218 #endif
219 } D3DTLVERTEX, *LPD3DTLVERTEX;
220
221 typedef struct _D3DLVERTEX {
222   union {
223     D3DVALUE x;
224     D3DVALUE dvX;
225   } DUMMYUNIONNAME1;
226   union {
227     D3DVALUE y;
228     D3DVALUE dvY;
229   } DUMMYUNIONNAME2;
230   union {
231     D3DVALUE z;
232     D3DVALUE dvZ;
233   } DUMMYUNIONNAME3;
234   DWORD            dwReserved;
235   union {
236     D3DCOLOR     color;
237     D3DCOLOR     dcColor;
238   } DUMMYUNIONNAME4;
239   union {
240     D3DCOLOR     specular;
241     D3DCOLOR     dcSpecular;
242   } DUMMYUNIONNAME5;
243   union {
244     D3DVALUE     tu;
245     D3DVALUE     dvTU;
246   } DUMMYUNIONNAME6;
247   union {
248     D3DVALUE     tv;
249     D3DVALUE     dvTV;
250   } DUMMYUNIONNAME7;
251 } D3DLVERTEX, *LPD3DLVERTEX;
252
253 typedef struct _D3DVERTEX {
254   union {
255     D3DVALUE     x;
256     D3DVALUE     dvX;
257   } DUMMYUNIONNAME1;
258   union {
259     D3DVALUE     y;
260     D3DVALUE     dvY;
261   } DUMMYUNIONNAME2;
262   union {
263     D3DVALUE     z;
264     D3DVALUE     dvZ;
265   } DUMMYUNIONNAME3;
266   union {
267     D3DVALUE     nx;
268     D3DVALUE     dvNX;
269   } DUMMYUNIONNAME4;
270   union {
271     D3DVALUE     ny;
272     D3DVALUE     dvNY;
273   } DUMMYUNIONNAME5;
274   union {
275     D3DVALUE     nz;
276     D3DVALUE     dvNZ;
277   } DUMMYUNIONNAME6;
278   union {
279     D3DVALUE     tu;
280     D3DVALUE     dvTU;
281   } DUMMYUNIONNAME7;
282   union {
283     D3DVALUE     tv;
284     D3DVALUE     dvTV;
285   } DUMMYUNIONNAME8;
286 #if defined(__cplusplus) && defined(D3D_OVERLOADS)
287 public:
288   _D3DVERTEX() {}
289   _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv) {
290     x  = v.x; y  = v.y; z  = v.z;
291     nx = n.x; ny = n.y; nz = n.z;
292     tu = _tu; tv = _tv;
293   }
294 #endif
295 } D3DVERTEX, *LPD3DVERTEX;
296
297 typedef struct _D3DMATRIX {
298   D3DVALUE        _11, _12, _13, _14;
299   D3DVALUE        _21, _22, _23, _24;
300   D3DVALUE        _31, _32, _33, _34;
301   D3DVALUE        _41, _42, _43, _44;
302 #if defined(__cplusplus) && defined(D3D_OVERLOADS)
303   _D3DMATRIX() { }
304
305     /* This is different from MS, but avoids anonymous structs. */
306     D3DVALUE &operator () (int r, int c)
307         { return ((D3DVALUE [4][4])&_11)[r][c]; }
308     const D3DVALUE &operator() (int r, int c) const
309         { return ((const D3DVALUE [4][4])&_11)[r][c]; }
310 #endif
311 } D3DMATRIX, *LPD3DMATRIX;
312
313 #if defined(__cplusplus) && defined(D3D_OVERLOADS)
314 #include "d3dvec.inl"
315 #endif
316
317 typedef struct _D3DVIEWPORT {
318   DWORD       dwSize;
319   DWORD       dwX;
320   DWORD       dwY;
321   DWORD       dwWidth;
322   DWORD       dwHeight;
323   D3DVALUE    dvScaleX;
324   D3DVALUE    dvScaleY;
325   D3DVALUE    dvMaxX;
326   D3DVALUE    dvMaxY;
327   D3DVALUE    dvMinZ;
328   D3DVALUE    dvMaxZ;
329 } D3DVIEWPORT, *LPD3DVIEWPORT;
330
331 typedef struct _D3DVIEWPORT2 {
332   DWORD       dwSize;
333   DWORD       dwX;
334   DWORD       dwY;
335   DWORD       dwWidth;
336   DWORD       dwHeight;
337   D3DVALUE    dvClipX;
338   D3DVALUE    dvClipY;
339   D3DVALUE    dvClipWidth;
340   D3DVALUE    dvClipHeight;
341   D3DVALUE    dvMinZ;
342   D3DVALUE    dvMaxZ;
343 } D3DVIEWPORT2, *LPD3DVIEWPORT2;
344
345 typedef struct _D3DVIEWPORT7 {
346   DWORD       dwX;
347   DWORD       dwY;
348   DWORD       dwWidth;
349   DWORD       dwHeight;
350   D3DVALUE    dvMinZ;
351   D3DVALUE    dvMaxZ;
352 } D3DVIEWPORT7, *LPD3DVIEWPORT7;
353
354 #define D3DMAXUSERCLIPPLANES 32
355
356 #define D3DCLIPPLANE0 (1 << 0)
357 #define D3DCLIPPLANE1 (1 << 1)
358 #define D3DCLIPPLANE2 (1 << 2)
359 #define D3DCLIPPLANE3 (1 << 3)
360 #define D3DCLIPPLANE4 (1 << 4)
361 #define D3DCLIPPLANE5 (1 << 5)
362
363 #define D3DCLIP_LEFT     0x00000001
364 #define D3DCLIP_RIGHT    0x00000002
365 #define D3DCLIP_TOP      0x00000004
366 #define D3DCLIP_BOTTOM   0x00000008
367 #define D3DCLIP_FRONT    0x00000010
368 #define D3DCLIP_BACK     0x00000020
369 #define D3DCLIP_GEN0     0x00000040
370 #define D3DCLIP_GEN1     0x00000080
371 #define D3DCLIP_GEN2     0x00000100
372 #define D3DCLIP_GEN3     0x00000200
373 #define D3DCLIP_GEN4     0x00000400
374 #define D3DCLIP_GEN5     0x00000800
375
376 #define D3DSTATUS_CLIPUNIONLEFT                 D3DCLIP_LEFT
377 #define D3DSTATUS_CLIPUNIONRIGHT                D3DCLIP_RIGHT
378 #define D3DSTATUS_CLIPUNIONTOP                  D3DCLIP_TOP
379 #define D3DSTATUS_CLIPUNIONBOTTOM               D3DCLIP_BOTTOM
380 #define D3DSTATUS_CLIPUNIONFRONT                D3DCLIP_FRONT
381 #define D3DSTATUS_CLIPUNIONBACK                 D3DCLIP_BACK
382 #define D3DSTATUS_CLIPUNIONGEN0                 D3DCLIP_GEN0
383 #define D3DSTATUS_CLIPUNIONGEN1                 D3DCLIP_GEN1
384 #define D3DSTATUS_CLIPUNIONGEN2                 D3DCLIP_GEN2
385 #define D3DSTATUS_CLIPUNIONGEN3                 D3DCLIP_GEN3
386 #define D3DSTATUS_CLIPUNIONGEN4                 D3DCLIP_GEN4
387 #define D3DSTATUS_CLIPUNIONGEN5                 D3DCLIP_GEN5
388
389 #define D3DSTATUS_CLIPINTERSECTIONLEFT          0x00001000
390 #define D3DSTATUS_CLIPINTERSECTIONRIGHT         0x00002000
391 #define D3DSTATUS_CLIPINTERSECTIONTOP           0x00004000
392 #define D3DSTATUS_CLIPINTERSECTIONBOTTOM        0x00008000
393 #define D3DSTATUS_CLIPINTERSECTIONFRONT         0x00010000
394 #define D3DSTATUS_CLIPINTERSECTIONBACK          0x00020000
395 #define D3DSTATUS_CLIPINTERSECTIONGEN0          0x00040000
396 #define D3DSTATUS_CLIPINTERSECTIONGEN1          0x00080000
397 #define D3DSTATUS_CLIPINTERSECTIONGEN2          0x00100000
398 #define D3DSTATUS_CLIPINTERSECTIONGEN3          0x00200000
399 #define D3DSTATUS_CLIPINTERSECTIONGEN4          0x00400000
400 #define D3DSTATUS_CLIPINTERSECTIONGEN5          0x00800000
401 #define D3DSTATUS_ZNOTVISIBLE                   0x01000000
402
403 #define D3DSTATUS_CLIPUNIONALL  (               \
404             D3DSTATUS_CLIPUNIONLEFT     |       \
405             D3DSTATUS_CLIPUNIONRIGHT    |       \
406             D3DSTATUS_CLIPUNIONTOP      |       \
407             D3DSTATUS_CLIPUNIONBOTTOM   |       \
408             D3DSTATUS_CLIPUNIONFRONT    |       \
409             D3DSTATUS_CLIPUNIONBACK     |       \
410             D3DSTATUS_CLIPUNIONGEN0     |       \
411             D3DSTATUS_CLIPUNIONGEN1     |       \
412             D3DSTATUS_CLIPUNIONGEN2     |       \
413             D3DSTATUS_CLIPUNIONGEN3     |       \
414             D3DSTATUS_CLIPUNIONGEN4     |       \
415             D3DSTATUS_CLIPUNIONGEN5             \
416             )
417
418 #define D3DSTATUS_CLIPINTERSECTIONALL   (               \
419             D3DSTATUS_CLIPINTERSECTIONLEFT      |       \
420             D3DSTATUS_CLIPINTERSECTIONRIGHT     |       \
421             D3DSTATUS_CLIPINTERSECTIONTOP       |       \
422             D3DSTATUS_CLIPINTERSECTIONBOTTOM    |       \
423             D3DSTATUS_CLIPINTERSECTIONFRONT     |       \
424             D3DSTATUS_CLIPINTERSECTIONBACK      |       \
425             D3DSTATUS_CLIPINTERSECTIONGEN0      |       \
426             D3DSTATUS_CLIPINTERSECTIONGEN1      |       \
427             D3DSTATUS_CLIPINTERSECTIONGEN2      |       \
428             D3DSTATUS_CLIPINTERSECTIONGEN3      |       \
429             D3DSTATUS_CLIPINTERSECTIONGEN4      |       \
430             D3DSTATUS_CLIPINTERSECTIONGEN5              \
431             )
432
433 #define D3DSTATUS_DEFAULT       (                       \
434             D3DSTATUS_CLIPINTERSECTIONALL       |       \
435             D3DSTATUS_ZNOTVISIBLE)
436
437 #define D3DTRANSFORM_CLIPPED       0x00000001
438 #define D3DTRANSFORM_UNCLIPPED     0x00000002
439
440 typedef struct _D3DTRANSFORMDATA {
441   DWORD           dwSize;
442   LPVOID          lpIn;
443   DWORD           dwInSize;
444   LPVOID          lpOut;
445   DWORD           dwOutSize;
446   LPD3DHVERTEX    lpHOut;
447   DWORD           dwClip;
448   DWORD           dwClipIntersection;
449   DWORD           dwClipUnion;
450   D3DRECT         drExtent;
451 } D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA;
452
453 typedef struct _D3DLIGHTINGELEMENT {
454   D3DVECTOR dvPosition;
455   D3DVECTOR dvNormal;
456 } D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT;
457
458 typedef struct _D3DMATERIAL {
459   DWORD               dwSize;
460   union {
461     D3DCOLORVALUE   diffuse;
462     D3DCOLORVALUE   dcvDiffuse;
463   } DUMMYUNIONNAME;
464   union {
465     D3DCOLORVALUE   ambient;
466     D3DCOLORVALUE   dcvAmbient;
467   } DUMMYUNIONNAME1;
468   union {
469     D3DCOLORVALUE   specular;
470     D3DCOLORVALUE   dcvSpecular;
471   } DUMMYUNIONNAME2;
472   union {
473     D3DCOLORVALUE   emissive;
474     D3DCOLORVALUE   dcvEmissive;
475   } DUMMYUNIONNAME3;
476   union {
477     D3DVALUE        power;
478     D3DVALUE        dvPower;
479   } DUMMYUNIONNAME4;
480   D3DTEXTUREHANDLE    hTexture;
481   DWORD               dwRampSize;
482 } D3DMATERIAL, *LPD3DMATERIAL;
483
484 typedef struct _D3DMATERIAL7 {
485   union {
486     D3DCOLORVALUE   diffuse;
487     D3DCOLORVALUE   dcvDiffuse;
488   } DUMMYUNIONNAME;
489   union {
490     D3DCOLORVALUE   ambient;
491     D3DCOLORVALUE   dcvAmbient;
492   } DUMMYUNIONNAME1;
493   union {
494     D3DCOLORVALUE   specular;
495     D3DCOLORVALUE   dcvSpecular;
496   } DUMMYUNIONNAME2;
497   union {
498     D3DCOLORVALUE   emissive;
499     D3DCOLORVALUE   dcvEmissive;
500   } DUMMYUNIONNAME3;
501   union {
502     D3DVALUE        power;
503     D3DVALUE        dvPower;
504   } DUMMYUNIONNAME4;
505 } D3DMATERIAL7, *LPD3DMATERIAL7;
506
507 typedef enum {
508   D3DLIGHT_POINT          = 1,
509   D3DLIGHT_SPOT           = 2,
510   D3DLIGHT_DIRECTIONAL    = 3,
511   D3DLIGHT_PARALLELPOINT  = 4,
512   D3DLIGHT_GLSPOT         = 5,
513   D3DLIGHT_FORCE_DWORD    = 0x7fffffff
514 } D3DLIGHTTYPE;
515
516 typedef struct _D3DLIGHT {
517     DWORD           dwSize;
518     D3DLIGHTTYPE    dltType;
519     D3DCOLORVALUE   dcvColor;
520     D3DVECTOR       dvPosition;
521     D3DVECTOR       dvDirection;
522     D3DVALUE        dvRange;
523     D3DVALUE        dvFalloff;
524     D3DVALUE        dvAttenuation0;
525     D3DVALUE        dvAttenuation1;
526     D3DVALUE        dvAttenuation2;
527     D3DVALUE        dvTheta;
528     D3DVALUE        dvPhi;
529 } D3DLIGHT,*LPD3DLIGHT;
530
531 typedef struct _D3DLIGHT7 {
532     D3DLIGHTTYPE    dltType;
533     D3DCOLORVALUE   dcvDiffuse;
534     D3DCOLORVALUE   dcvSpecular;
535     D3DCOLORVALUE   dcvAmbient;
536     D3DVECTOR       dvPosition;
537     D3DVECTOR       dvDirection;
538     D3DVALUE        dvRange;
539     D3DVALUE        dvFalloff;
540     D3DVALUE        dvAttenuation0;
541     D3DVALUE        dvAttenuation1;
542     D3DVALUE        dvAttenuation2;
543     D3DVALUE        dvTheta;
544     D3DVALUE        dvPhi;
545 } D3DLIGHT7, *LPD3DLIGHT7;
546
547 #define D3DLIGHT_ACTIVE         0x00000001
548 #define D3DLIGHT_NO_SPECULAR    0x00000002
549 #define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR) /* 0x3 */
550
551 #define D3DLIGHT_RANGE_MAX              ((float)sqrt(FLT_MAX))
552
553 typedef struct _D3DLIGHT2 {
554   DWORD           dwSize;
555   D3DLIGHTTYPE    dltType;
556   D3DCOLORVALUE   dcvColor;
557   D3DVECTOR       dvPosition;
558   D3DVECTOR       dvDirection;
559   D3DVALUE        dvRange;
560   D3DVALUE        dvFalloff;
561   D3DVALUE        dvAttenuation0;
562   D3DVALUE        dvAttenuation1;
563   D3DVALUE        dvAttenuation2;
564   D3DVALUE        dvTheta;
565   D3DVALUE        dvPhi;
566   DWORD           dwFlags;
567 } D3DLIGHT2, *LPD3DLIGHT2;
568
569 typedef struct _D3DLIGHTDATA {
570   DWORD                dwSize;
571   LPD3DLIGHTINGELEMENT lpIn;
572   DWORD                dwInSize;
573   LPD3DTLVERTEX        lpOut;
574   DWORD                dwOutSize;
575 } D3DLIGHTDATA, *LPD3DLIGHTDATA;
576
577 #define D3DCOLOR_MONO   1
578 #define D3DCOLOR_RGB    2
579
580 typedef DWORD D3DCOLORMODEL;
581
582
583 #define D3DCLEAR_TARGET   0x00000001
584 #define D3DCLEAR_ZBUFFER  0x00000002
585 #define D3DCLEAR_STENCIL  0x00000004
586
587 typedef enum _D3DOPCODE {
588   D3DOP_POINT           = 1,
589   D3DOP_LINE            = 2,
590   D3DOP_TRIANGLE        = 3,
591   D3DOP_MATRIXLOAD      = 4,
592   D3DOP_MATRIXMULTIPLY  = 5,
593   D3DOP_STATETRANSFORM  = 6,
594   D3DOP_STATELIGHT      = 7,
595   D3DOP_STATERENDER     = 8,
596   D3DOP_PROCESSVERTICES = 9,
597   D3DOP_TEXTURELOAD     = 10,
598   D3DOP_EXIT            = 11,
599   D3DOP_BRANCHFORWARD   = 12,
600   D3DOP_SPAN            = 13,
601   D3DOP_SETSTATUS       = 14,
602
603   D3DOP_FORCE_DWORD     = 0x7fffffff
604 } D3DOPCODE;
605
606 typedef struct _D3DINSTRUCTION {
607   BYTE bOpcode;
608   BYTE bSize;
609   WORD wCount;
610 } D3DINSTRUCTION, *LPD3DINSTRUCTION;
611
612 typedef struct _D3DTEXTURELOAD {
613   D3DTEXTUREHANDLE hDestTexture;
614   D3DTEXTUREHANDLE hSrcTexture;
615 } D3DTEXTURELOAD, *LPD3DTEXTURELOAD;
616
617 typedef struct _D3DPICKRECORD {
618   BYTE     bOpcode;
619   BYTE     bPad;
620   DWORD    dwOffset;
621   D3DVALUE dvZ;
622 } D3DPICKRECORD, *LPD3DPICKRECORD;
623
624 typedef enum {
625   D3DSHADE_FLAT         = 1,
626   D3DSHADE_GOURAUD      = 2,
627   D3DSHADE_PHONG        = 3,
628   D3DSHADE_FORCE_DWORD  = 0x7fffffff
629 } D3DSHADEMODE;
630
631 typedef enum {
632   D3DFILL_POINT         = 1,
633   D3DFILL_WIREFRAME     = 2,
634   D3DFILL_SOLID         = 3,
635   D3DFILL_FORCE_DWORD   = 0x7fffffff
636 } D3DFILLMODE;
637
638 typedef struct _D3DLINEPATTERN {
639   WORD    wRepeatFactor;
640   WORD    wLinePattern;
641 } D3DLINEPATTERN;
642
643 typedef enum {
644   D3DFILTER_NEAREST          = 1,
645   D3DFILTER_LINEAR           = 2,
646   D3DFILTER_MIPNEAREST       = 3,
647   D3DFILTER_MIPLINEAR        = 4,
648   D3DFILTER_LINEARMIPNEAREST = 5,
649   D3DFILTER_LINEARMIPLINEAR  = 6,
650   D3DFILTER_FORCE_DWORD      = 0x7fffffff
651 } D3DTEXTUREFILTER;
652
653 typedef enum {
654   D3DBLEND_ZERO            = 1,
655   D3DBLEND_ONE             = 2,
656   D3DBLEND_SRCCOLOR        = 3,
657   D3DBLEND_INVSRCCOLOR     = 4,
658   D3DBLEND_SRCALPHA        = 5,
659   D3DBLEND_INVSRCALPHA     = 6,
660   D3DBLEND_DESTALPHA       = 7,
661   D3DBLEND_INVDESTALPHA    = 8,
662   D3DBLEND_DESTCOLOR       = 9,
663   D3DBLEND_INVDESTCOLOR    = 10,
664   D3DBLEND_SRCALPHASAT     = 11,
665   D3DBLEND_BOTHSRCALPHA    = 12,
666   D3DBLEND_BOTHINVSRCALPHA = 13,
667   D3DBLEND_FORCE_DWORD     = 0x7fffffff
668 } D3DBLEND;
669
670 typedef enum {
671   D3DTBLEND_DECAL         = 1,
672   D3DTBLEND_MODULATE      = 2,
673   D3DTBLEND_DECALALPHA    = 3,
674   D3DTBLEND_MODULATEALPHA = 4,
675   D3DTBLEND_DECALMASK     = 5,
676   D3DTBLEND_MODULATEMASK  = 6,
677   D3DTBLEND_COPY          = 7,
678   D3DTBLEND_ADD           = 8,
679   D3DTBLEND_FORCE_DWORD   = 0x7fffffff
680 } D3DTEXTUREBLEND;
681  
682 typedef enum _D3DTEXTUREADDRESS {
683     D3DTADDRESS_WRAP           = 1,
684     D3DTADDRESS_MIRROR         = 2,
685     D3DTADDRESS_CLAMP          = 3,
686     D3DTADDRESS_BORDER         = 4,
687     D3DTADDRESS_FORCE_DWORD    = 0x7fffffff
688 } D3DTEXTUREADDRESS;
689
690 typedef enum {
691   D3DCULL_NONE        = 1,
692   D3DCULL_CW          = 2,
693   D3DCULL_CCW         = 3,
694   D3DCULL_FORCE_DWORD = 0x7fffffff
695 } D3DCULL;
696
697 typedef enum {
698   D3DCMP_NEVER        = 1,
699   D3DCMP_LESS         = 2,
700   D3DCMP_EQUAL        = 3,
701   D3DCMP_LESSEQUAL    = 4,
702   D3DCMP_GREATER      = 5,
703   D3DCMP_NOTEQUAL     = 6,
704   D3DCMP_GREATEREQUAL = 7,
705   D3DCMP_ALWAYS       = 8,
706   D3DCMP_FORCE_DWORD  = 0x7fffffff
707 } D3DCMPFUNC;
708
709 typedef enum _D3DSTENCILOP {
710   D3DSTENCILOP_KEEP        = 1,
711   D3DSTENCILOP_ZERO        = 2,
712   D3DSTENCILOP_REPLACE     = 3,
713   D3DSTENCILOP_INCRSAT     = 4,
714   D3DSTENCILOP_DECRSAT     = 5,
715   D3DSTENCILOP_INVERT      = 6,
716   D3DSTENCILOP_INCR        = 7,
717   D3DSTENCILOP_DECR        = 8,
718   D3DSTENCILOP_FORCE_DWORD = 0x7fffffff
719 } D3DSTENCILOP;
720
721 typedef enum _D3DFOGMODE {
722   D3DFOG_NONE         = 0,
723   D3DFOG_EXP          = 1,
724   D3DFOG_EXP2         = 2,
725   D3DFOG_LINEAR       = 3,
726   D3DFOG_FORCE_DWORD  = 0x7fffffff
727 } D3DFOGMODE;
728
729 typedef enum _D3DZBUFFERTYPE {
730   D3DZB_FALSE        = 0,
731   D3DZB_TRUE         = 1,
732   D3DZB_USEW         = 2,
733   D3DZB_FORCE_DWORD  = 0x7fffffff
734 } D3DZBUFFERTYPE;
735
736 typedef enum _D3DANTIALIASMODE {
737   D3DANTIALIAS_NONE            = 0,
738   D3DANTIALIAS_SORTDEPENDENT   = 1,
739   D3DANTIALIAS_SORTINDEPENDENT = 2,
740   D3DANTIALIAS_FORCE_DWORD     = 0x7fffffff
741 } D3DANTIALIASMODE;
742
743 typedef enum {
744   D3DVT_VERTEX        = 1,
745   D3DVT_LVERTEX       = 2,
746   D3DVT_TLVERTEX      = 3,
747   D3DVT_FORCE_DWORD   = 0x7fffffff
748 } D3DVERTEXTYPE;
749
750 typedef enum {
751   D3DPT_POINTLIST     = 1,
752   D3DPT_LINELIST      = 2,
753   D3DPT_LINESTRIP     = 3,
754   D3DPT_TRIANGLELIST  = 4,
755   D3DPT_TRIANGLESTRIP = 5,
756   D3DPT_TRIANGLEFAN   = 6,
757   D3DPT_FORCE_DWORD   = 0x7fffffff
758 } D3DPRIMITIVETYPE;
759
760 #define D3DSTATE_OVERRIDE_BIAS      256
761
762 #define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS))
763
764 typedef enum _D3DTRANSFORMSTATETYPE {
765     D3DTRANSFORMSTATE_WORLD         = 1,
766     D3DTRANSFORMSTATE_VIEW          = 2,
767     D3DTRANSFORMSTATE_PROJECTION    = 3,
768     D3DTRANSFORMSTATE_WORLD1        = 4,
769     D3DTRANSFORMSTATE_WORLD2        = 5,
770     D3DTRANSFORMSTATE_WORLD3        = 6,
771     D3DTRANSFORMSTATE_TEXTURE0      = 16,
772     D3DTRANSFORMSTATE_TEXTURE1      = 17,
773     D3DTRANSFORMSTATE_TEXTURE2      = 18,
774     D3DTRANSFORMSTATE_TEXTURE3      = 19,
775     D3DTRANSFORMSTATE_TEXTURE4      = 20,
776     D3DTRANSFORMSTATE_TEXTURE5      = 21,
777     D3DTRANSFORMSTATE_TEXTURE6      = 22,
778     D3DTRANSFORMSTATE_TEXTURE7      = 23,
779     D3DTRANSFORMSTATE_FORCE_DWORD   = 0x7fffffff
780 } D3DTRANSFORMSTATETYPE;
781
782 typedef enum {
783   D3DLIGHTSTATE_MATERIAL      = 1,
784   D3DLIGHTSTATE_AMBIENT       = 2,
785   D3DLIGHTSTATE_COLORMODEL    = 3,
786   D3DLIGHTSTATE_FOGMODE       = 4,
787   D3DLIGHTSTATE_FOGSTART      = 5,
788   D3DLIGHTSTATE_FOGEND        = 6,
789   D3DLIGHTSTATE_FOGDENSITY    = 7,
790   D3DLIGHTSTATE_COLORVERTEX   = 8,
791   D3DLIGHTSTATE_FORCE_DWORD   = 0x7fffffff
792 } D3DLIGHTSTATETYPE;
793
794 typedef enum {
795   D3DRENDERSTATE_TEXTUREHANDLE      = 1,
796   D3DRENDERSTATE_ANTIALIAS          = 2,
797   D3DRENDERSTATE_TEXTUREADDRESS     = 3,
798   D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4,
799   D3DRENDERSTATE_WRAPU              = 5,
800   D3DRENDERSTATE_WRAPV              = 6,
801   D3DRENDERSTATE_ZENABLE            = 7,
802   D3DRENDERSTATE_FILLMODE           = 8,
803   D3DRENDERSTATE_SHADEMODE          = 9,
804   D3DRENDERSTATE_LINEPATTERN        = 10,
805   D3DRENDERSTATE_MONOENABLE         = 11,
806   D3DRENDERSTATE_ROP2               = 12,
807   D3DRENDERSTATE_PLANEMASK          = 13,
808   D3DRENDERSTATE_ZWRITEENABLE       = 14,
809   D3DRENDERSTATE_ALPHATESTENABLE    = 15,
810   D3DRENDERSTATE_LASTPIXEL          = 16,
811   D3DRENDERSTATE_TEXTUREMAG         = 17,
812   D3DRENDERSTATE_TEXTUREMIN         = 18,
813   D3DRENDERSTATE_SRCBLEND           = 19,
814   D3DRENDERSTATE_DESTBLEND          = 20,
815   D3DRENDERSTATE_TEXTUREMAPBLEND    = 21,
816   D3DRENDERSTATE_CULLMODE           = 22,
817   D3DRENDERSTATE_ZFUNC              = 23,
818   D3DRENDERSTATE_ALPHAREF           = 24,
819   D3DRENDERSTATE_ALPHAFUNC          = 25,
820   D3DRENDERSTATE_DITHERENABLE       = 26,
821   D3DRENDERSTATE_ALPHABLENDENABLE   = 27,
822   D3DRENDERSTATE_FOGENABLE          = 28,
823   D3DRENDERSTATE_SPECULARENABLE     = 29,
824   D3DRENDERSTATE_ZVISIBLE           = 30,
825   D3DRENDERSTATE_SUBPIXEL           = 31,
826   D3DRENDERSTATE_SUBPIXELX          = 32,
827   D3DRENDERSTATE_STIPPLEDALPHA      = 33,
828   D3DRENDERSTATE_FOGCOLOR           = 34,
829   D3DRENDERSTATE_FOGTABLEMODE       = 35,
830   D3DRENDERSTATE_FOGTABLESTART      = 36,
831   D3DRENDERSTATE_FOGTABLEEND        = 37,
832   D3DRENDERSTATE_FOGTABLEDENSITY    = 38,
833   D3DRENDERSTATE_FOGSTART           = 36,
834   D3DRENDERSTATE_FOGEND             = 37,
835   D3DRENDERSTATE_FOGDENSITY         = 38,
836   D3DRENDERSTATE_STIPPLEENABLE      = 39,
837   D3DRENDERSTATE_EDGEANTIALIAS      = 40,
838   D3DRENDERSTATE_COLORKEYENABLE     = 41,
839   D3DRENDERSTATE_BORDERCOLOR        = 43,
840   D3DRENDERSTATE_TEXTUREADDRESSU    = 44,
841   D3DRENDERSTATE_TEXTUREADDRESSV    = 45,
842   D3DRENDERSTATE_MIPMAPLODBIAS      = 46,
843   D3DRENDERSTATE_ZBIAS              = 47,
844   D3DRENDERSTATE_RANGEFOGENABLE     = 48,
845   D3DRENDERSTATE_ANISOTROPY         = 49,
846   D3DRENDERSTATE_FLUSHBATCH         = 50,
847   D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT = 51,
848
849   D3DRENDERSTATE_STENCILENABLE      = 52,
850   D3DRENDERSTATE_STENCILFAIL        = 53,
851   D3DRENDERSTATE_STENCILZFAIL       = 54,
852   D3DRENDERSTATE_STENCILPASS        = 55,
853   D3DRENDERSTATE_STENCILFUNC        = 56,
854   D3DRENDERSTATE_STENCILREF         = 57,
855   D3DRENDERSTATE_STENCILMASK        = 58,
856   D3DRENDERSTATE_STENCILWRITEMASK   = 59,
857   D3DRENDERSTATE_TEXTUREFACTOR      = 60,
858
859   D3DRENDERSTATE_STIPPLEPATTERN00   = 64,
860   D3DRENDERSTATE_STIPPLEPATTERN01   = 65,
861   D3DRENDERSTATE_STIPPLEPATTERN02   = 66,
862   D3DRENDERSTATE_STIPPLEPATTERN03   = 67,
863   D3DRENDERSTATE_STIPPLEPATTERN04   = 68,
864   D3DRENDERSTATE_STIPPLEPATTERN05   = 69,
865   D3DRENDERSTATE_STIPPLEPATTERN06   = 70,
866   D3DRENDERSTATE_STIPPLEPATTERN07   = 71,
867   D3DRENDERSTATE_STIPPLEPATTERN08   = 72,
868   D3DRENDERSTATE_STIPPLEPATTERN09   = 73,
869   D3DRENDERSTATE_STIPPLEPATTERN10   = 74,
870   D3DRENDERSTATE_STIPPLEPATTERN11   = 75,
871   D3DRENDERSTATE_STIPPLEPATTERN12   = 76,
872   D3DRENDERSTATE_STIPPLEPATTERN13   = 77,
873   D3DRENDERSTATE_STIPPLEPATTERN14   = 78,
874   D3DRENDERSTATE_STIPPLEPATTERN15   = 79,
875   D3DRENDERSTATE_STIPPLEPATTERN16   = 80,
876   D3DRENDERSTATE_STIPPLEPATTERN17   = 81,
877   D3DRENDERSTATE_STIPPLEPATTERN18   = 82,
878   D3DRENDERSTATE_STIPPLEPATTERN19   = 83,
879   D3DRENDERSTATE_STIPPLEPATTERN20   = 84,
880   D3DRENDERSTATE_STIPPLEPATTERN21   = 85,
881   D3DRENDERSTATE_STIPPLEPATTERN22   = 86,
882   D3DRENDERSTATE_STIPPLEPATTERN23   = 87,
883   D3DRENDERSTATE_STIPPLEPATTERN24   = 88,
884   D3DRENDERSTATE_STIPPLEPATTERN25   = 89,
885   D3DRENDERSTATE_STIPPLEPATTERN26   = 90,
886   D3DRENDERSTATE_STIPPLEPATTERN27   = 91,
887   D3DRENDERSTATE_STIPPLEPATTERN28   = 92,
888   D3DRENDERSTATE_STIPPLEPATTERN29   = 93,
889   D3DRENDERSTATE_STIPPLEPATTERN30   = 94,
890   D3DRENDERSTATE_STIPPLEPATTERN31   = 95,
891
892   D3DRENDERSTATE_WRAP0              = 128,
893   D3DRENDERSTATE_WRAP1              = 129,
894   D3DRENDERSTATE_WRAP2              = 130,
895   D3DRENDERSTATE_WRAP3              = 131,
896   D3DRENDERSTATE_WRAP4              = 132,
897   D3DRENDERSTATE_WRAP5              = 133,
898   D3DRENDERSTATE_WRAP6              = 134,
899   D3DRENDERSTATE_WRAP7              = 135,
900   D3DRENDERSTATE_CLIPPING            = 136,
901   D3DRENDERSTATE_LIGHTING            = 137,
902   D3DRENDERSTATE_EXTENTS             = 138,
903   D3DRENDERSTATE_AMBIENT             = 139,
904   D3DRENDERSTATE_FOGVERTEXMODE       = 140,
905   D3DRENDERSTATE_COLORVERTEX         = 141,
906   D3DRENDERSTATE_LOCALVIEWER         = 142,
907   D3DRENDERSTATE_NORMALIZENORMALS    = 143,
908   D3DRENDERSTATE_COLORKEYBLENDENABLE = 144,
909   D3DRENDERSTATE_DIFFUSEMATERIALSOURCE    = 145,
910   D3DRENDERSTATE_SPECULARMATERIALSOURCE   = 146,
911   D3DRENDERSTATE_AMBIENTMATERIALSOURCE    = 147,
912   D3DRENDERSTATE_EMISSIVEMATERIALSOURCE   = 148,
913   D3DRENDERSTATE_VERTEXBLEND              = 151,
914   D3DRENDERSTATE_CLIPPLANEENABLE          = 152,
915
916   D3DRENDERSTATE_FORCE_DWORD        = 0x7fffffff
917
918   /* FIXME: We have some retired values that are being reused for DirectX 7 */
919 } D3DRENDERSTATETYPE;
920
921 typedef enum _D3DMATERIALCOLORSOURCE
922 {
923     D3DMCS_MATERIAL = 0,
924     D3DMCS_COLOR1   = 1,
925     D3DMCS_COLOR2   = 2,
926     D3DMCS_FORCE_DWORD = 0x7fffffff
927 } D3DMATERIALCOLORSOURCE;
928
929 #define D3DRENDERSTATE_BLENDENABLE      D3DRENDERSTATE_ALPHABLENDENABLE
930 #define D3DRENDERSTATE_WRAPBIAS                 128UL
931 #define D3DWRAP_U   0x00000001L
932 #define D3DWRAP_V   0x00000002L
933
934 #define D3DWRAPCOORD_0   0x00000001L
935 #define D3DWRAPCOORD_1   0x00000002L
936 #define D3DWRAPCOORD_2   0x00000004L
937 #define D3DWRAPCOORD_3   0x00000008L
938
939 #define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))
940
941 typedef struct _D3DSTATE {
942   union {
943     D3DTRANSFORMSTATETYPE dtstTransformStateType;
944     D3DLIGHTSTATETYPE     dlstLightStateType;
945     D3DRENDERSTATETYPE    drstRenderStateType;
946   } DUMMYUNIONNAME1;
947   union {
948     DWORD                 dwArg[1];
949     D3DVALUE              dvArg[1];
950   } DUMMYUNIONNAME2;
951 } D3DSTATE, *LPD3DSTATE;
952
953 typedef struct _D3DMATRIXLOAD {
954   D3DMATRIXHANDLE hDestMatrix;
955   D3DMATRIXHANDLE hSrcMatrix;
956 } D3DMATRIXLOAD, *LPD3DMATRIXLOAD;
957
958 typedef struct _D3DMATRIXMULTIPLY {
959   D3DMATRIXHANDLE hDestMatrix;
960   D3DMATRIXHANDLE hSrcMatrix1;
961   D3DMATRIXHANDLE hSrcMatrix2;
962 } D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY;
963
964 typedef struct _D3DPROCESSVERTICES {
965   DWORD dwFlags;
966   WORD  wStart;
967   WORD  wDest;
968   DWORD dwCount;
969   DWORD dwReserved;
970 } D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES;
971
972 #define D3DPROCESSVERTICES_TRANSFORMLIGHT       0x00000000L
973 #define D3DPROCESSVERTICES_TRANSFORM            0x00000001L
974 #define D3DPROCESSVERTICES_COPY                 0x00000002L
975 #define D3DPROCESSVERTICES_OPMASK               0x00000007L
976
977 #define D3DPROCESSVERTICES_UPDATEEXTENTS        0x00000008L
978 #define D3DPROCESSVERTICES_NOCOLOR              0x00000010L
979
980 typedef enum _D3DTEXTURESTAGESTATETYPE
981 {
982     D3DTSS_COLOROP        =  1,
983     D3DTSS_COLORARG1      =  2,
984     D3DTSS_COLORARG2      =  3,
985     D3DTSS_ALPHAOP        =  4,
986     D3DTSS_ALPHAARG1      =  5,
987     D3DTSS_ALPHAARG2      =  6,
988     D3DTSS_BUMPENVMAT00   =  7,
989     D3DTSS_BUMPENVMAT01   =  8,
990     D3DTSS_BUMPENVMAT10   =  9,
991     D3DTSS_BUMPENVMAT11   = 10,
992     D3DTSS_TEXCOORDINDEX  = 11,
993     D3DTSS_ADDRESS        = 12,
994     D3DTSS_ADDRESSU       = 13,
995     D3DTSS_ADDRESSV       = 14,
996     D3DTSS_BORDERCOLOR    = 15,
997     D3DTSS_MAGFILTER      = 16,
998     D3DTSS_MINFILTER      = 17,
999     D3DTSS_MIPFILTER      = 18,
1000     D3DTSS_MIPMAPLODBIAS  = 19,
1001     D3DTSS_MAXMIPLEVEL    = 20,
1002     D3DTSS_MAXANISOTROPY  = 21,
1003     D3DTSS_BUMPENVLSCALE  = 22,
1004     D3DTSS_BUMPENVLOFFSET = 23,
1005     D3DTSS_TEXTURETRANSFORMFLAGS = 24,
1006     D3DTSS_FORCE_DWORD   = 0x7fffffff
1007 } D3DTEXTURESTAGESTATETYPE;
1008
1009 #define D3DTSS_TCI_PASSTHRU                             0x00000000
1010 #define D3DTSS_TCI_CAMERASPACENORMAL                    0x00010000
1011 #define D3DTSS_TCI_CAMERASPACEPOSITION                  0x00020000
1012 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR          0x00030000
1013
1014 typedef enum _D3DTEXTUREOP
1015 {
1016     D3DTOP_DISABLE    = 1,
1017     D3DTOP_SELECTARG1 = 2,
1018     D3DTOP_SELECTARG2 = 3,
1019
1020     D3DTOP_MODULATE   = 4,
1021     D3DTOP_MODULATE2X = 5,
1022     D3DTOP_MODULATE4X = 6,
1023
1024     D3DTOP_ADD          =  7,
1025     D3DTOP_ADDSIGNED    =  8,
1026     D3DTOP_ADDSIGNED2X  =  9,
1027     D3DTOP_SUBTRACT     = 10,
1028     D3DTOP_ADDSMOOTH    = 11,
1029
1030     D3DTOP_BLENDDIFFUSEALPHA    = 12,
1031     D3DTOP_BLENDTEXTUREALPHA    = 13,
1032     D3DTOP_BLENDFACTORALPHA     = 14,
1033     D3DTOP_BLENDTEXTUREALPHAPM  = 15,
1034     D3DTOP_BLENDCURRENTALPHA    = 16,
1035
1036     D3DTOP_PREMODULATE            = 17,
1037     D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
1038     D3DTOP_MODULATECOLOR_ADDALPHA = 19,
1039     D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
1040     D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
1041
1042     D3DTOP_BUMPENVMAP           = 22,
1043     D3DTOP_BUMPENVMAPLUMINANCE  = 23,
1044     D3DTOP_DOTPRODUCT3          = 24,
1045
1046     D3DTOP_FORCE_DWORD = 0x7fffffff
1047 } D3DTEXTUREOP;
1048
1049 #define D3DTA_SELECTMASK        0x0000000f
1050 #define D3DTA_DIFFUSE           0x00000000
1051 #define D3DTA_CURRENT           0x00000001
1052 #define D3DTA_TEXTURE           0x00000002
1053 #define D3DTA_TFACTOR           0x00000003
1054 #define D3DTA_SPECULAR          0x00000004
1055 #define D3DTA_COMPLEMENT        0x00000010
1056 #define D3DTA_ALPHAREPLICATE    0x00000020
1057
1058 typedef enum _D3DTEXTUREMAGFILTER
1059 {
1060     D3DTFG_POINT        = 1,
1061     D3DTFG_LINEAR       = 2,
1062     D3DTFG_FLATCUBIC    = 3,
1063     D3DTFG_GAUSSIANCUBIC = 4,
1064     D3DTFG_ANISOTROPIC  = 5,
1065     D3DTFG_FORCE_DWORD  = 0x7fffffff
1066 } D3DTEXTUREMAGFILTER;
1067
1068 typedef enum _D3DTEXTUREMINFILTER
1069 {
1070     D3DTFN_POINT        = 1,
1071     D3DTFN_LINEAR       = 2,
1072     D3DTFN_ANISOTROPIC  = 3,
1073     D3DTFN_FORCE_DWORD  = 0x7fffffff
1074 } D3DTEXTUREMINFILTER;
1075
1076 typedef enum _D3DTEXTUREMIPFILTER
1077 {
1078     D3DTFP_NONE         = 1,
1079     D3DTFP_POINT        = 2,
1080     D3DTFP_LINEAR       = 3,
1081     D3DTFP_FORCE_DWORD  = 0x7fffffff
1082 } D3DTEXTUREMIPFILTER;
1083
1084 #define D3DTRIFLAG_START                        0x00000000L
1085 #define D3DTRIFLAG_STARTFLAT(len) (len)
1086 #define D3DTRIFLAG_ODD                          0x0000001eL
1087 #define D3DTRIFLAG_EVEN                         0x0000001fL
1088
1089 #define D3DTRIFLAG_EDGEENABLE1                  0x00000100L
1090 #define D3DTRIFLAG_EDGEENABLE2                  0x00000200L
1091 #define D3DTRIFLAG_EDGEENABLE3                  0x00000400L
1092 #define D3DTRIFLAG_EDGEENABLETRIANGLE \
1093         (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3)
1094
1095 typedef struct _D3DTRIANGLE {
1096   union {
1097     WORD v1;
1098     WORD wV1;
1099   } DUMMYUNIONNAME1;
1100   union {
1101     WORD v2;
1102     WORD wV2;
1103   } DUMMYUNIONNAME2;
1104   union {
1105     WORD v3;
1106     WORD wV3;
1107   } DUMMYUNIONNAME3;
1108   WORD     wFlags;
1109 } D3DTRIANGLE, *LPD3DTRIANGLE;
1110
1111 typedef struct _D3DLINE {
1112   union {
1113     WORD v1;
1114     WORD wV1;
1115   } DUMMYUNIONNAME1;
1116   union {
1117     WORD v2;
1118     WORD wV2;
1119   } DUMMYUNIONNAME2;
1120 } D3DLINE, *LPD3DLINE;
1121
1122 typedef struct _D3DSPAN {
1123   WORD wCount;
1124   WORD wFirst;
1125 } D3DSPAN, *LPD3DSPAN;
1126
1127 typedef struct _D3DPOINT {
1128   WORD wCount;
1129   WORD wFirst;
1130 } D3DPOINT, *LPD3DPOINT;
1131
1132 typedef struct _D3DBRANCH {
1133   DWORD dwMask;
1134   DWORD dwValue;
1135   BOOL  bNegate;
1136   DWORD dwOffset;
1137 } D3DBRANCH, *LPD3DBRANCH;
1138
1139 typedef struct _D3DSTATUS {
1140   DWORD   dwFlags;
1141   DWORD   dwStatus;
1142   D3DRECT drExtent;
1143 } D3DSTATUS, *LPD3DSTATUS;
1144
1145 #define D3DSETSTATUS_STATUS   0x00000001L
1146 #define D3DSETSTATUS_EXTENTS  0x00000002L
1147 #define D3DSETSTATUS_ALL      (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS)
1148
1149 typedef struct _D3DCLIPSTATUS {
1150   DWORD dwFlags;
1151   DWORD dwStatus;
1152   float minx, maxx;
1153   float miny, maxy;
1154   float minz, maxz;
1155 } D3DCLIPSTATUS, *LPD3DCLIPSTATUS;
1156
1157 #define D3DCLIPSTATUS_STATUS        0x00000001L
1158 #define D3DCLIPSTATUS_EXTENTS2      0x00000002L
1159 #define D3DCLIPSTATUS_EXTENTS3      0x00000004L
1160
1161 typedef struct {
1162   DWORD        dwSize;
1163   DWORD        dwTrianglesDrawn;
1164   DWORD        dwLinesDrawn;
1165   DWORD        dwPointsDrawn;
1166   DWORD        dwSpansDrawn;
1167   DWORD        dwVerticesProcessed;
1168 } D3DSTATS, *LPD3DSTATS;
1169
1170 #define D3DEXECUTE_CLIPPED       0x00000001l
1171 #define D3DEXECUTE_UNCLIPPED     0x00000002l
1172
1173 typedef struct _D3DEXECUTEDATA {
1174   DWORD     dwSize;
1175   DWORD     dwVertexOffset;
1176   DWORD     dwVertexCount;
1177   DWORD     dwInstructionOffset;
1178   DWORD     dwInstructionLength;
1179   DWORD     dwHVertexOffset;
1180   D3DSTATUS dsStatus;
1181 } D3DEXECUTEDATA, *LPD3DEXECUTEDATA;
1182
1183 #define D3DPAL_FREE 0x00
1184 #define D3DPAL_READONLY 0x40
1185 #define D3DPAL_RESERVED 0x80
1186
1187 typedef struct _D3DVERTEXBUFFERDESC {
1188   DWORD dwSize;
1189   DWORD dwCaps;
1190   DWORD dwFVF;
1191   DWORD dwNumVertices;
1192 } D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC;
1193
1194 #define D3DVBCAPS_SYSTEMMEMORY      0x00000800l
1195 #define D3DVBCAPS_WRITEONLY         0x00010000l
1196 #define D3DVBCAPS_OPTIMIZED         0x80000000l
1197 #define D3DVBCAPS_DONOTCLIP         0x00000001l
1198
1199 #define D3DVOP_LIGHT       (1 << 10)
1200 #define D3DVOP_TRANSFORM   (1 << 0)
1201 #define D3DVOP_CLIP        (1 << 2)
1202 #define D3DVOP_EXTENTS     (1 << 3)
1203
1204 #define D3DMAXNUMVERTICES    ((1<<16) - 1)
1205
1206 #define D3DMAXNUMPRIMITIVES  ((1<<16) - 1)
1207
1208 #define D3DPV_DONOTCOPYDATA (1 << 0)
1209
1210 #define D3DFVF_RESERVED0        0x001
1211 #define D3DFVF_POSITION_MASK    0x00E
1212 #define D3DFVF_XYZ              0x002
1213 #define D3DFVF_XYZRHW           0x004
1214 #define D3DFVF_XYZB1            0x006
1215 #define D3DFVF_XYZB2            0x008
1216 #define D3DFVF_XYZB3            0x00a
1217 #define D3DFVF_XYZB4            0x00c
1218 #define D3DFVF_XYZB5            0x00e
1219
1220 #define D3DFVF_NORMAL           0x010
1221 #define D3DFVF_RESERVED1        0x020
1222 #define D3DFVF_DIFFUSE          0x040
1223 #define D3DFVF_SPECULAR         0x080
1224 #define D3DFVF_TEXCOUNT_MASK    0xf00
1225 #define D3DFVF_TEXCOUNT_SHIFT   8
1226 #define D3DFVF_TEX0             0x000
1227 #define D3DFVF_TEX1             0x100
1228 #define D3DFVF_TEX2             0x200
1229 #define D3DFVF_TEX3             0x300
1230 #define D3DFVF_TEX4             0x400
1231 #define D3DFVF_TEX5             0x500
1232 #define D3DFVF_TEX6             0x600
1233 #define D3DFVF_TEX7             0x700
1234 #define D3DFVF_TEX8             0x800
1235
1236 #define D3DFVF_RESERVED2        0xf000
1237
1238 #define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 )
1239 #define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \
1240                          D3DFVF_SPECULAR | D3DFVF_TEX1 )
1241 #define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \
1242                           D3DFVF_TEX1 )
1243
1244 typedef struct _D3DDP_PTRSTRIDE {
1245   LPVOID lpvData;
1246   DWORD  dwStride;
1247 } D3DDP_PTRSTRIDE;
1248
1249 #define D3DDP_MAXTEXCOORD 8
1250
1251 typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA  {
1252   D3DDP_PTRSTRIDE position;
1253   D3DDP_PTRSTRIDE normal;
1254   D3DDP_PTRSTRIDE diffuse;
1255   D3DDP_PTRSTRIDE specular;
1256   D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD];
1257 } D3DDRAWPRIMITIVESTRIDEDDATA ,*LPD3DDRAWPRIMITIVESTRIDEDDATA;
1258
1259 #define D3DVIS_INSIDE_FRUSTUM       0
1260 #define D3DVIS_INTERSECT_FRUSTUM    1
1261 #define D3DVIS_OUTSIDE_FRUSTUM      2
1262 #define D3DVIS_INSIDE_LEFT          0
1263 #define D3DVIS_INTERSECT_LEFT       (1 << 2)
1264 #define D3DVIS_OUTSIDE_LEFT         (2 << 2)
1265 #define D3DVIS_INSIDE_RIGHT         0
1266 #define D3DVIS_INTERSECT_RIGHT      (1 << 4)
1267 #define D3DVIS_OUTSIDE_RIGHT        (2 << 4)
1268 #define D3DVIS_INSIDE_TOP           0
1269 #define D3DVIS_INTERSECT_TOP        (1 << 6)
1270 #define D3DVIS_OUTSIDE_TOP          (2 << 6)
1271 #define D3DVIS_INSIDE_BOTTOM        0
1272 #define D3DVIS_INTERSECT_BOTTOM     (1 << 8)
1273 #define D3DVIS_OUTSIDE_BOTTOM       (2 << 8)
1274 #define D3DVIS_INSIDE_NEAR          0
1275 #define D3DVIS_INTERSECT_NEAR       (1 << 10)
1276 #define D3DVIS_OUTSIDE_NEAR         (2 << 10)
1277 #define D3DVIS_INSIDE_FAR           0
1278 #define D3DVIS_INTERSECT_FAR        (1 << 12)
1279 #define D3DVIS_OUTSIDE_FAR          (2 << 12)
1280
1281 #define D3DVIS_MASK_FRUSTUM         (3 << 0)
1282 #define D3DVIS_MASK_LEFT            (3 << 2)
1283 #define D3DVIS_MASK_RIGHT           (3 << 4)
1284 #define D3DVIS_MASK_TOP             (3 << 6)
1285 #define D3DVIS_MASK_BOTTOM          (3 << 8)
1286 #define D3DVIS_MASK_NEAR            (3 << 10)
1287 #define D3DVIS_MASK_FAR             (3 << 12)
1288
1289 #define D3DDEVINFOID_TEXTUREMANAGER    1
1290 #define D3DDEVINFOID_D3DTEXTUREMANAGER 2
1291 #define D3DDEVINFOID_TEXTURING         3
1292
1293 typedef enum _D3DSTATEBLOCKTYPE
1294 {
1295     D3DSBT_ALL           = 1,
1296     D3DSBT_PIXELSTATE    = 2,
1297     D3DSBT_VERTEXSTATE   = 3,
1298     D3DSBT_FORCE_DWORD   = 0xffffffff
1299 } D3DSTATEBLOCKTYPE;
1300
1301 typedef enum _D3DVERTEXBLENDFLAGS
1302 {
1303     D3DVBLEND_DISABLE  = 0,
1304     D3DVBLEND_1WEIGHT  = 1,
1305     D3DVBLEND_2WEIGHTS = 2,
1306     D3DVBLEND_3WEIGHTS = 3,
1307 } D3DVERTEXBLENDFLAGS;
1308
1309 typedef enum _D3DTEXTURETRANSFORMFLAGS {
1310     D3DTTFF_DISABLE         = 0,
1311     D3DTTFF_COUNT1          = 1,
1312     D3DTTFF_COUNT2          = 2,
1313     D3DTTFF_COUNT3          = 3,
1314     D3DTTFF_COUNT4          = 4,
1315     D3DTTFF_PROJECTED       = 256,
1316     D3DTTFF_FORCE_DWORD     = 0x7fffffff
1317 } D3DTEXTURETRANSFORMFLAGS;
1318
1319 #define D3DFVF_TEXTUREFORMAT2 0
1320 #define D3DFVF_TEXTUREFORMAT1 3
1321 #define D3DFVF_TEXTUREFORMAT3 1
1322 #define D3DFVF_TEXTUREFORMAT4 2
1323
1324 #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
1325 #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
1326 #define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
1327 #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
1328
1329 #endif