d3dtypes.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:78k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*==========================================================================;
  2.  *
  3.  *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  4.  *
  5.  *  File:   d3dtypes.h
  6.  *  Content:    Direct3D types include file
  7.  *
  8.  ***************************************************************************/
  9. #ifndef _D3DTYPES_H_
  10. #define _D3DTYPES_H_
  11. #ifndef DIRECT3D_VERSION
  12. #define DIRECT3D_VERSION         0x0700
  13. #endif
  14. #if (DIRECT3D_VERSION >= 0x0800)
  15. #pragma message("should not include d3dtypes.h when compiling for DX8 or newer interfaces")
  16. #endif
  17. #include <windows.h>
  18. #include <float.h>
  19. #include "ddraw.h"
  20. #pragma warning(disable:4201) // anonymous unions warning
  21. #pragma pack(4)
  22. /* D3DVALUE is the fundamental Direct3D fractional data type */
  23. #define D3DVALP(val, prec) ((float)(val))
  24. #define D3DVAL(val) ((float)(val))
  25. #ifndef DX_SHARED_DEFINES
  26. /*
  27.  * This definition is shared with other DirectX components whose header files
  28.  * might already have defined it. Therefore, we don't define this type if
  29.  * someone else already has (as indicated by the definition of
  30.  * DX_SHARED_DEFINES). We don't set DX_SHARED_DEFINES here as there are
  31.  * other types in this header that are also shared. The last of these
  32.  * shared defines in this file will set DX_SHARED_DEFINES.
  33.  */
  34. typedef float D3DVALUE, *LPD3DVALUE;
  35. #endif /* DX_SHARED_DEFINES */
  36. #define D3DDivide(a, b)    (float)((double) (a) / (double) (b))
  37. #define D3DMultiply(a, b)    ((a) * (b))
  38. typedef LONG D3DFIXED;
  39. #ifndef RGB_MAKE
  40. /*
  41.  * Format of CI colors is
  42.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  43.  *  |    alpha      |         color index           |   fraction    |
  44.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  45.  */
  46. #define CI_GETALPHA(ci)    ((ci) >> 24)
  47. #define CI_GETINDEX(ci)    (((ci) >> 8) & 0xffff)
  48. #define CI_GETFRACTION(ci) ((ci) & 0xff)
  49. #define CI_ROUNDINDEX(ci)  CI_GETINDEX((ci) + 0x80)
  50. #define CI_MASKALPHA(ci)   ((ci) & 0xffffff)
  51. #define CI_MAKE(a, i, f)    (((a) << 24) | ((i) << 8) | (f))
  52. /*
  53.  * Format of RGBA colors is
  54.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  55.  *  |    alpha      |      red      |     green     |     blue      |
  56.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  57.  */
  58. #define RGBA_GETALPHA(rgb)      ((rgb) >> 24)
  59. #define RGBA_GETRED(rgb)        (((rgb) >> 16) & 0xff)
  60. #define RGBA_GETGREEN(rgb)      (((rgb) >> 8) & 0xff)
  61. #define RGBA_GETBLUE(rgb)       ((rgb) & 0xff)
  62. #define RGBA_MAKE(r, g, b, a)   ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
  63. /* D3DRGB and D3DRGBA may be used as initialisers for D3DCOLORs
  64.  * The float values must be in the range 0..1
  65.  */
  66. #define D3DRGB(r, g, b) 
  67.     (0xff000000L | ( ((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255))
  68. #define D3DRGBA(r, g, b, a) 
  69.     (   (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) 
  70.     |   (((long)((g) * 255)) << 8) | (long)((b) * 255) 
  71.     )
  72. /*
  73.  * Format of RGB colors is
  74.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  75.  *  |    ignored    |      red      |     green     |     blue      |
  76.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  77.  */
  78. #define RGB_GETRED(rgb)         (((rgb) >> 16) & 0xff)
  79. #define RGB_GETGREEN(rgb)       (((rgb) >> 8) & 0xff)
  80. #define RGB_GETBLUE(rgb)        ((rgb) & 0xff)
  81. #define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
  82. #define RGB_MAKE(r, g, b)       ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b)))
  83. #define RGBA_TORGB(rgba)       ((D3DCOLOR) ((rgba) & 0xffffff))
  84. #define RGB_TORGBA(rgb)        ((D3DCOLOR) ((rgb) | 0xff000000))
  85. #endif
  86. /*
  87.  * Flags for Enumerate functions
  88.  */
  89. /*
  90.  * Stop the enumeration
  91.  */
  92. #define D3DENUMRET_CANCEL                        DDENUMRET_CANCEL
  93. /*
  94.  * Continue the enumeration
  95.  */
  96. #define D3DENUMRET_OK                            DDENUMRET_OK
  97. typedef HRESULT (CALLBACK* LPD3DVALIDATECALLBACK)(LPVOID lpUserArg, DWORD dwOffset);
  98. typedef HRESULT (CALLBACK* LPD3DENUMTEXTUREFORMATSCALLBACK)(LPDDSURFACEDESC lpDdsd, LPVOID lpContext);
  99. typedef HRESULT (CALLBACK* LPD3DENUMPIXELFORMATSCALLBACK)(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext);
  100. #ifndef DX_SHARED_DEFINES
  101. /*
  102.  * This definition is shared with other DirectX components whose header files
  103.  * might already have defined it. Therefore, we don't define this type if
  104.  * someone else already has (as indicated by the definition of
  105.  * DX_SHARED_DEFINES). We don't set DX_SHARED_DEFINES here as there are
  106.  * other types in this header that are also shared. The last of these
  107.  * shared defines in this file will set DX_SHARED_DEFINES.
  108.  */
  109. #ifndef D3DCOLOR_DEFINED
  110. typedef DWORD D3DCOLOR;
  111. #define D3DCOLOR_DEFINED
  112. #endif
  113. typedef DWORD *LPD3DCOLOR;
  114. #endif /* DX_SHARED_DEFINES */
  115. typedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE;
  116. typedef DWORD D3DTEXTUREHANDLE, *LPD3DTEXTUREHANDLE;
  117. typedef DWORD D3DMATRIXHANDLE, *LPD3DMATRIXHANDLE;
  118. #ifndef D3DCOLORVALUE_DEFINED
  119. typedef struct _D3DCOLORVALUE {
  120.     union {
  121.     D3DVALUE r;
  122.     D3DVALUE dvR;
  123.     };
  124.     union {
  125.     D3DVALUE g;
  126.     D3DVALUE dvG;
  127.     };
  128.     union {
  129.     D3DVALUE b;
  130.     D3DVALUE dvB;
  131.     };
  132.     union {
  133.     D3DVALUE a;
  134.     D3DVALUE dvA;
  135.     };
  136. } D3DCOLORVALUE;
  137. #define D3DCOLORVALUE_DEFINED
  138. #endif
  139. typedef struct _D3DCOLORVALUE *LPD3DCOLORVALUE;
  140. #ifndef D3DRECT_DEFINED
  141. typedef struct _D3DRECT {
  142.     union {
  143.     LONG x1;
  144.     LONG lX1;
  145.     };
  146.     union {
  147.     LONG y1;
  148.     LONG lY1;
  149.     };
  150.     union {
  151.     LONG x2;
  152.     LONG lX2;
  153.     };
  154.     union {
  155.     LONG y2;
  156.     LONG lY2;
  157.     };
  158. } D3DRECT;
  159. #define D3DRECT_DEFINED
  160. #endif
  161. typedef struct _D3DRECT *LPD3DRECT;
  162. #ifndef DX_SHARED_DEFINES
  163. /*
  164.  * This definition is shared with other DirectX components whose header files
  165.  * might already have defined it. Therefore, we don't define this type if
  166.  * someone else already has (as indicated by the definition of
  167.  * DX_SHARED_DEFINES).
  168.  */
  169. #ifndef D3DVECTOR_DEFINED
  170. typedef struct _D3DVECTOR {
  171.     union {
  172.     D3DVALUE x;
  173.     D3DVALUE dvX;
  174.     };
  175.     union {
  176.     D3DVALUE y;
  177.     D3DVALUE dvY;
  178.     };
  179.     union {
  180.     D3DVALUE z;
  181.     D3DVALUE dvZ;
  182.     };
  183. #if(DIRECT3D_VERSION >= 0x0500)
  184. #if (defined __cplusplus) && (defined D3D_OVERLOADS)
  185. public:
  186.     // =====================================
  187.     // Constructors
  188.     // =====================================
  189.     _D3DVECTOR() { }
  190.     _D3DVECTOR(D3DVALUE f);
  191.     _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z);
  192.     _D3DVECTOR(const D3DVALUE f[3]);
  193.     // =====================================
  194.     // Access grants
  195.     // =====================================
  196.     const D3DVALUE&operator[](int i) const;
  197.     D3DVALUE&operator[](int i);
  198.     // =====================================
  199.     // Assignment operators
  200.     // =====================================
  201.     _D3DVECTOR& operator += (const _D3DVECTOR& v);
  202.     _D3DVECTOR& operator -= (const _D3DVECTOR& v);
  203.     _D3DVECTOR& operator *= (const _D3DVECTOR& v);
  204.     _D3DVECTOR& operator /= (const _D3DVECTOR& v);
  205.     _D3DVECTOR& operator *= (D3DVALUE s);
  206.     _D3DVECTOR& operator /= (D3DVALUE s);
  207.     // =====================================
  208.     // Unary operators
  209.     // =====================================
  210.     friend _D3DVECTOR operator + (const _D3DVECTOR& v);
  211.     friend _D3DVECTOR operator - (const _D3DVECTOR& v);
  212.     // =====================================
  213.     // Binary operators
  214.     // =====================================
  215.     // Addition and subtraction
  216.         friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  217.         friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  218.     // Scalar multiplication and division
  219.         friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s);
  220.         friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v);
  221.         friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s);
  222.     // Memberwise multiplication and division
  223.         friend _D3DVECTOR operator * (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  224.         friend _D3DVECTOR operator / (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  225.     // Vector dominance
  226.         friend int operator < (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  227.         friend int operator <= (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  228.     // Bitwise equality
  229.         friend int operator == (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  230.     // Length-related functions
  231.         friend D3DVALUE SquareMagnitude (const _D3DVECTOR& v);
  232.         friend D3DVALUE Magnitude (const _D3DVECTOR& v);
  233.     // Returns vector with same direction and unit length
  234.         friend _D3DVECTOR Normalize (const _D3DVECTOR& v);
  235.     // Return min/max component of the input vector
  236.         friend D3DVALUE Min (const _D3DVECTOR& v);
  237.         friend D3DVALUE Max (const _D3DVECTOR& v);
  238.     // Return memberwise min/max of input vectors
  239.         friend _D3DVECTOR Minimize (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  240.         friend _D3DVECTOR Maximize (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  241.     // Dot and cross product
  242.         friend D3DVALUE DotProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  243.         friend _D3DVECTOR CrossProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
  244. #endif
  245. #endif /* DIRECT3D_VERSION >= 0x0500 */
  246. } D3DVECTOR;
  247. #define D3DVECTOR_DEFINED
  248. #endif
  249. typedef struct _D3DVECTOR *LPD3DVECTOR;
  250. /*
  251.  * As this is the last of the shared defines to be defined we now set
  252.  * D3D_SHARED_DEFINES to flag that fact that this header has defined these
  253.  * types.
  254.  */
  255. #define DX_SHARED_DEFINES
  256. #endif /* DX_SHARED_DEFINES */
  257. /*
  258.  * Vertex data types supported in an ExecuteBuffer.
  259.  */
  260. /*
  261.  * Homogeneous vertices
  262.  */
  263. typedef struct _D3DHVERTEX {
  264.     DWORD           dwFlags;        /* Homogeneous clipping flags */
  265.     union {
  266.     D3DVALUE    hx;
  267.     D3DVALUE    dvHX;
  268.     };
  269.     union {
  270.     D3DVALUE    hy;
  271.     D3DVALUE    dvHY;
  272.     };
  273.     union {
  274.     D3DVALUE    hz;
  275.     D3DVALUE    dvHZ;
  276.     };
  277. } D3DHVERTEX, *LPD3DHVERTEX;
  278. /*
  279.  * Transformed/lit vertices
  280.  */
  281. typedef struct _D3DTLVERTEX {
  282.     union {
  283.     D3DVALUE    sx;             /* Screen coordinates */
  284.     D3DVALUE    dvSX;
  285.     };
  286.     union {
  287.     D3DVALUE    sy;
  288.     D3DVALUE    dvSY;
  289.     };
  290.     union {
  291.     D3DVALUE    sz;
  292.     D3DVALUE    dvSZ;
  293.     };
  294.     union {
  295.     D3DVALUE    rhw;        /* Reciprocal of homogeneous w */
  296.     D3DVALUE    dvRHW;
  297.     };
  298.     union {
  299.     D3DCOLOR    color;          /* Vertex color */
  300.     D3DCOLOR    dcColor;
  301.     };
  302.     union {
  303.     D3DCOLOR    specular;       /* Specular component of vertex */
  304.     D3DCOLOR    dcSpecular;
  305.     };
  306.     union {
  307.     D3DVALUE    tu;             /* Texture coordinates */
  308.     D3DVALUE    dvTU;
  309.     };
  310.     union {
  311.     D3DVALUE    tv;
  312.     D3DVALUE    dvTV;
  313.     };
  314. #if(DIRECT3D_VERSION >= 0x0500)
  315. #if (defined __cplusplus) && (defined D3D_OVERLOADS)
  316.     _D3DTLVERTEX() { }
  317.     _D3DTLVERTEX(const D3DVECTOR& v, float _rhw,
  318.                  D3DCOLOR _color, D3DCOLOR _specular,
  319.                  float _tu, float _tv)
  320.         { sx = v.x; sy = v.y; sz = v.z; rhw = _rhw;
  321.           color = _color; specular = _specular;
  322.           tu = _tu; tv = _tv;
  323.         }
  324. #endif
  325. #endif /* DIRECT3D_VERSION >= 0x0500 */
  326. } D3DTLVERTEX, *LPD3DTLVERTEX;
  327. /*
  328.  * Untransformed/lit vertices
  329.  */
  330. typedef struct _D3DLVERTEX {
  331.     union {
  332.     D3DVALUE     x;             /* Homogeneous coordinates */
  333.     D3DVALUE     dvX;
  334.     };
  335.     union {
  336.     D3DVALUE     y;
  337.     D3DVALUE     dvY;
  338.     };
  339.     union {
  340.     D3DVALUE     z;
  341.     D3DVALUE     dvZ;
  342.     };
  343.     DWORD            dwReserved;
  344.     union {
  345.     D3DCOLOR     color;         /* Vertex color */
  346.     D3DCOLOR     dcColor;
  347.     };
  348.     union {
  349.     D3DCOLOR     specular;      /* Specular component of vertex */
  350.     D3DCOLOR     dcSpecular;
  351.     };
  352.     union {
  353.     D3DVALUE     tu;            /* Texture coordinates */
  354.     D3DVALUE     dvTU;
  355.     };
  356.     union {
  357.     D3DVALUE     tv;
  358.     D3DVALUE     dvTV;
  359.     };
  360. #if(DIRECT3D_VERSION >= 0x0500)
  361. #if (defined __cplusplus) && (defined D3D_OVERLOADS)
  362.     _D3DLVERTEX() { }
  363.     _D3DLVERTEX(const D3DVECTOR& v,
  364.                 D3DCOLOR _color, D3DCOLOR _specular,
  365.                 float _tu, float _tv)
  366.         { x = v.x; y = v.y; z = v.z; dwReserved = 0;
  367.           color = _color; specular = _specular;
  368.           tu = _tu; tv = _tv;
  369.         }
  370. #endif
  371. #endif /* DIRECT3D_VERSION >= 0x0500 */
  372. } D3DLVERTEX, *LPD3DLVERTEX;
  373. /*
  374.  * Untransformed/unlit vertices
  375.  */
  376. typedef struct _D3DVERTEX {
  377.     union {
  378.     D3DVALUE     x;             /* Homogeneous coordinates */
  379.     D3DVALUE     dvX;
  380.     };
  381.     union {
  382.     D3DVALUE     y;
  383.     D3DVALUE     dvY;
  384.     };
  385.     union {
  386.     D3DVALUE     z;
  387.     D3DVALUE     dvZ;
  388.     };
  389.     union {
  390.     D3DVALUE     nx;            /* Normal */
  391.     D3DVALUE     dvNX;
  392.     };
  393.     union {
  394.     D3DVALUE     ny;
  395.     D3DVALUE     dvNY;
  396.     };
  397.     union {
  398.     D3DVALUE     nz;
  399.     D3DVALUE     dvNZ;
  400.     };
  401.     union {
  402.     D3DVALUE     tu;            /* Texture coordinates */
  403.     D3DVALUE     dvTU;
  404.     };
  405.     union {
  406.     D3DVALUE     tv;
  407.     D3DVALUE     dvTV;
  408.     };
  409. #if(DIRECT3D_VERSION >= 0x0500)
  410. #if (defined __cplusplus) && (defined D3D_OVERLOADS)
  411.     _D3DVERTEX() { }
  412.     _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv)
  413.         { x = v.x; y = v.y; z = v.z;
  414.           nx = n.x; ny = n.y; nz = n.z;
  415.           tu = _tu; tv = _tv;
  416.         }
  417. #endif
  418. #endif /* DIRECT3D_VERSION >= 0x0500 */
  419. } D3DVERTEX, *LPD3DVERTEX;
  420. /*
  421.  * Matrix, viewport, and tranformation structures and definitions.
  422.  */
  423. #ifndef D3DMATRIX_DEFINED
  424. typedef struct _D3DMATRIX {
  425. #if(DIRECT3D_VERSION >= 0x0500)
  426. #if (defined __cplusplus) && (defined D3D_OVERLOADS)
  427.     union {
  428.         struct {
  429. #endif
  430. #endif /* DIRECT3D_VERSION >= 0x0500 */
  431.             D3DVALUE        _11, _12, _13, _14;
  432.             D3DVALUE        _21, _22, _23, _24;
  433.             D3DVALUE        _31, _32, _33, _34;
  434.             D3DVALUE        _41, _42, _43, _44;
  435. #if(DIRECT3D_VERSION >= 0x0500)
  436. #if (defined __cplusplus) && (defined D3D_OVERLOADS)
  437.         };
  438.         D3DVALUE m[4][4];
  439.     };
  440.     _D3DMATRIX() { }
  441.     _D3DMATRIX( D3DVALUE _m00, D3DVALUE _m01, D3DVALUE _m02, D3DVALUE _m03,
  442.                 D3DVALUE _m10, D3DVALUE _m11, D3DVALUE _m12, D3DVALUE _m13,
  443.                 D3DVALUE _m20, D3DVALUE _m21, D3DVALUE _m22, D3DVALUE _m23,
  444.                 D3DVALUE _m30, D3DVALUE _m31, D3DVALUE _m32, D3DVALUE _m33
  445.         )
  446.         {
  447.                 m[0][0] = _m00; m[0][1] = _m01; m[0][2] = _m02; m[0][3] = _m03;
  448.                 m[1][0] = _m10; m[1][1] = _m11; m[1][2] = _m12; m[1][3] = _m13;
  449.                 m[2][0] = _m20; m[2][1] = _m21; m[2][2] = _m22; m[2][3] = _m23;
  450.                 m[3][0] = _m30; m[3][1] = _m31; m[3][2] = _m32; m[3][3] = _m33;
  451.         }
  452.     D3DVALUE& operator()(int iRow, int iColumn) { return m[iRow][iColumn]; }
  453.     const D3DVALUE& operator()(int iRow, int iColumn) const { return m[iRow][iColumn]; }
  454. #if(DIRECT3D_VERSION >= 0x0600)
  455.     friend _D3DMATRIX operator* (const _D3DMATRIX&, const _D3DMATRIX&);
  456. #endif /* DIRECT3D_VERSION >= 0x0600 */
  457. #endif
  458. #endif /* DIRECT3D_VERSION >= 0x0500 */
  459. } D3DMATRIX;
  460. #define D3DMATRIX_DEFINED
  461. #endif
  462. typedef struct _D3DMATRIX *LPD3DMATRIX;
  463. #if (defined __cplusplus) && (defined D3D_OVERLOADS)
  464. #include "d3dvec.inl"
  465. #endif
  466. typedef struct _D3DVIEWPORT {
  467.     DWORD       dwSize;
  468.     DWORD       dwX;
  469.     DWORD       dwY;        /* Top left */
  470.     DWORD       dwWidth;
  471.     DWORD       dwHeight;   /* Dimensions */
  472.     D3DVALUE    dvScaleX;   /* Scale homogeneous to screen */
  473.     D3DVALUE    dvScaleY;   /* Scale homogeneous to screen */
  474.     D3DVALUE    dvMaxX;     /* Min/max homogeneous x coord */
  475.     D3DVALUE    dvMaxY;     /* Min/max homogeneous y coord */
  476.     D3DVALUE    dvMinZ;
  477.     D3DVALUE    dvMaxZ;     /* Min/max homogeneous z coord */
  478. } D3DVIEWPORT, *LPD3DVIEWPORT;
  479. #if(DIRECT3D_VERSION >= 0x0500)
  480. typedef struct _D3DVIEWPORT2 {
  481.     DWORD       dwSize;
  482.     DWORD       dwX;
  483.     DWORD       dwY;        /* Viewport Top left */
  484.     DWORD       dwWidth;
  485.     DWORD       dwHeight;   /* Viewport Dimensions */
  486.     D3DVALUE    dvClipX;        /* Top left of clip volume */
  487.     D3DVALUE    dvClipY;
  488.     D3DVALUE    dvClipWidth;    /* Clip Volume Dimensions */
  489.     D3DVALUE    dvClipHeight;
  490.     D3DVALUE    dvMinZ;         /* Min/max of clip Volume */
  491.     D3DVALUE    dvMaxZ;
  492. } D3DVIEWPORT2, *LPD3DVIEWPORT2;
  493. #endif /* DIRECT3D_VERSION >= 0x0500 */
  494. #if(DIRECT3D_VERSION >= 0x0700)
  495. typedef struct _D3DVIEWPORT7 {
  496.     DWORD       dwX;
  497.     DWORD       dwY;            /* Viewport Top left */
  498.     DWORD       dwWidth;
  499.     DWORD       dwHeight;       /* Viewport Dimensions */
  500.     D3DVALUE    dvMinZ;         /* Min/max of clip Volume */
  501.     D3DVALUE    dvMaxZ;
  502. } D3DVIEWPORT7, *LPD3DVIEWPORT7;
  503. #endif /* DIRECT3D_VERSION >= 0x0700 */
  504. /*
  505.  * Values for clip fields.
  506.  */
  507. #if(DIRECT3D_VERSION >= 0x0700)
  508. // Max number of user clipping planes, supported in D3D.
  509. #define D3DMAXUSERCLIPPLANES 32
  510. // These bits could be ORed together to use with D3DRENDERSTATE_CLIPPLANEENABLE
  511. //
  512. #define D3DCLIPPLANE0 (1 << 0)
  513. #define D3DCLIPPLANE1 (1 << 1)
  514. #define D3DCLIPPLANE2 (1 << 2)
  515. #define D3DCLIPPLANE3 (1 << 3)
  516. #define D3DCLIPPLANE4 (1 << 4)
  517. #define D3DCLIPPLANE5 (1 << 5)
  518. #endif /* DIRECT3D_VERSION >= 0x0700 */
  519. #define D3DCLIP_LEFT                0x00000001L
  520. #define D3DCLIP_RIGHT               0x00000002L
  521. #define D3DCLIP_TOP             0x00000004L
  522. #define D3DCLIP_BOTTOM              0x00000008L
  523. #define D3DCLIP_FRONT               0x00000010L
  524. #define D3DCLIP_BACK                0x00000020L
  525. #define D3DCLIP_GEN0                0x00000040L
  526. #define D3DCLIP_GEN1                0x00000080L
  527. #define D3DCLIP_GEN2                0x00000100L
  528. #define D3DCLIP_GEN3                0x00000200L
  529. #define D3DCLIP_GEN4                0x00000400L
  530. #define D3DCLIP_GEN5                0x00000800L
  531. /*
  532.  * Values for d3d status.
  533.  */
  534. #define D3DSTATUS_CLIPUNIONLEFT         D3DCLIP_LEFT
  535. #define D3DSTATUS_CLIPUNIONRIGHT        D3DCLIP_RIGHT
  536. #define D3DSTATUS_CLIPUNIONTOP          D3DCLIP_TOP
  537. #define D3DSTATUS_CLIPUNIONBOTTOM       D3DCLIP_BOTTOM
  538. #define D3DSTATUS_CLIPUNIONFRONT        D3DCLIP_FRONT
  539. #define D3DSTATUS_CLIPUNIONBACK         D3DCLIP_BACK
  540. #define D3DSTATUS_CLIPUNIONGEN0         D3DCLIP_GEN0
  541. #define D3DSTATUS_CLIPUNIONGEN1         D3DCLIP_GEN1
  542. #define D3DSTATUS_CLIPUNIONGEN2         D3DCLIP_GEN2
  543. #define D3DSTATUS_CLIPUNIONGEN3         D3DCLIP_GEN3
  544. #define D3DSTATUS_CLIPUNIONGEN4         D3DCLIP_GEN4
  545. #define D3DSTATUS_CLIPUNIONGEN5         D3DCLIP_GEN5
  546. #define D3DSTATUS_CLIPINTERSECTIONLEFT      0x00001000L
  547. #define D3DSTATUS_CLIPINTERSECTIONRIGHT     0x00002000L
  548. #define D3DSTATUS_CLIPINTERSECTIONTOP       0x00004000L
  549. #define D3DSTATUS_CLIPINTERSECTIONBOTTOM    0x00008000L
  550. #define D3DSTATUS_CLIPINTERSECTIONFRONT     0x00010000L
  551. #define D3DSTATUS_CLIPINTERSECTIONBACK      0x00020000L
  552. #define D3DSTATUS_CLIPINTERSECTIONGEN0      0x00040000L
  553. #define D3DSTATUS_CLIPINTERSECTIONGEN1      0x00080000L
  554. #define D3DSTATUS_CLIPINTERSECTIONGEN2      0x00100000L
  555. #define D3DSTATUS_CLIPINTERSECTIONGEN3      0x00200000L
  556. #define D3DSTATUS_CLIPINTERSECTIONGEN4      0x00400000L
  557. #define D3DSTATUS_CLIPINTERSECTIONGEN5      0x00800000L
  558. #define D3DSTATUS_ZNOTVISIBLE               0x01000000L
  559. /* Do not use 0x80000000 for any status flags in future as it is reserved */
  560. #define D3DSTATUS_CLIPUNIONALL  (       
  561.         D3DSTATUS_CLIPUNIONLEFT |   
  562.         D3DSTATUS_CLIPUNIONRIGHT    |   
  563.         D3DSTATUS_CLIPUNIONTOP  |   
  564.         D3DSTATUS_CLIPUNIONBOTTOM   |   
  565.         D3DSTATUS_CLIPUNIONFRONT    |   
  566.         D3DSTATUS_CLIPUNIONBACK |   
  567.         D3DSTATUS_CLIPUNIONGEN0 |   
  568.         D3DSTATUS_CLIPUNIONGEN1 |   
  569.         D3DSTATUS_CLIPUNIONGEN2 |   
  570.         D3DSTATUS_CLIPUNIONGEN3 |   
  571.         D3DSTATUS_CLIPUNIONGEN4 |   
  572.         D3DSTATUS_CLIPUNIONGEN5     
  573.         )
  574. #define D3DSTATUS_CLIPINTERSECTIONALL   (       
  575.         D3DSTATUS_CLIPINTERSECTIONLEFT  |   
  576.         D3DSTATUS_CLIPINTERSECTIONRIGHT |   
  577.         D3DSTATUS_CLIPINTERSECTIONTOP   |   
  578.         D3DSTATUS_CLIPINTERSECTIONBOTTOM    |   
  579.         D3DSTATUS_CLIPINTERSECTIONFRONT |   
  580.         D3DSTATUS_CLIPINTERSECTIONBACK  |   
  581.         D3DSTATUS_CLIPINTERSECTIONGEN0  |   
  582.         D3DSTATUS_CLIPINTERSECTIONGEN1  |   
  583.         D3DSTATUS_CLIPINTERSECTIONGEN2  |   
  584.         D3DSTATUS_CLIPINTERSECTIONGEN3  |   
  585.         D3DSTATUS_CLIPINTERSECTIONGEN4  |   
  586.         D3DSTATUS_CLIPINTERSECTIONGEN5      
  587.         )
  588. #define D3DSTATUS_DEFAULT   (           
  589.         D3DSTATUS_CLIPINTERSECTIONALL   |   
  590.         D3DSTATUS_ZNOTVISIBLE)
  591. /*
  592.  * Options for direct transform calls
  593.  */
  594. #define D3DTRANSFORM_CLIPPED       0x00000001l
  595. #define D3DTRANSFORM_UNCLIPPED     0x00000002l
  596. typedef struct _D3DTRANSFORMDATA {
  597.     DWORD           dwSize;
  598.     LPVOID      lpIn;           /* Input vertices */
  599.     DWORD           dwInSize;       /* Stride of input vertices */
  600.     LPVOID      lpOut;          /* Output vertices */
  601.     DWORD           dwOutSize;      /* Stride of output vertices */
  602.     LPD3DHVERTEX    lpHOut;         /* Output homogeneous vertices */
  603.     DWORD           dwClip;         /* Clipping hint */
  604.     DWORD           dwClipIntersection;
  605.     DWORD           dwClipUnion;    /* Union of all clip flags */
  606.     D3DRECT         drExtent;       /* Extent of transformed vertices */
  607. } D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA;
  608. /*
  609.  * Structure defining position and direction properties for lighting.
  610.  */
  611. typedef struct _D3DLIGHTINGELEMENT {
  612.     D3DVECTOR dvPosition;           /* Lightable point in model space */
  613.     D3DVECTOR dvNormal;             /* Normalised unit vector */
  614. } D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT;
  615. /*
  616.  * Structure defining material properties for lighting.
  617.  */
  618. typedef struct _D3DMATERIAL {
  619.     DWORD           dwSize;
  620.     union {
  621.     D3DCOLORVALUE   diffuse;        /* Diffuse color RGBA */
  622.     D3DCOLORVALUE   dcvDiffuse;
  623.     };
  624.     union {
  625.     D3DCOLORVALUE   ambient;        /* Ambient color RGB */
  626.     D3DCOLORVALUE   dcvAmbient;
  627.     };
  628.     union {
  629.     D3DCOLORVALUE   specular;       /* Specular 'shininess' */
  630.     D3DCOLORVALUE   dcvSpecular;
  631.     };
  632.     union {
  633.     D3DCOLORVALUE   emissive;       /* Emissive color RGB */
  634.     D3DCOLORVALUE   dcvEmissive;
  635.     };
  636.     union {
  637.     D3DVALUE        power;          /* Sharpness if specular highlight */
  638.     D3DVALUE        dvPower;
  639.     };
  640.     D3DTEXTUREHANDLE    hTexture;       /* Handle to texture map */
  641.     DWORD           dwRampSize;
  642. } D3DMATERIAL, *LPD3DMATERIAL;
  643. #if(DIRECT3D_VERSION >= 0x0700)
  644. typedef struct _D3DMATERIAL7 {
  645.     union {
  646.     D3DCOLORVALUE   diffuse;        /* Diffuse color RGBA */
  647.     D3DCOLORVALUE   dcvDiffuse;
  648.     };
  649.     union {
  650.     D3DCOLORVALUE   ambient;        /* Ambient color RGB */
  651.     D3DCOLORVALUE   dcvAmbient;
  652.     };
  653.     union {
  654.     D3DCOLORVALUE   specular;       /* Specular 'shininess' */
  655.     D3DCOLORVALUE   dcvSpecular;
  656.     };
  657.     union {
  658.     D3DCOLORVALUE   emissive;       /* Emissive color RGB */
  659.     D3DCOLORVALUE   dcvEmissive;
  660.     };
  661.     union {
  662.     D3DVALUE        power;          /* Sharpness if specular highlight */
  663.     D3DVALUE        dvPower;
  664.     };
  665. } D3DMATERIAL7, *LPD3DMATERIAL7;
  666. #endif /* DIRECT3D_VERSION >= 0x0700 */
  667. #if(DIRECT3D_VERSION < 0x0800)
  668. typedef enum _D3DLIGHTTYPE {
  669.     D3DLIGHT_POINT          = 1,
  670.     D3DLIGHT_SPOT           = 2,
  671.     D3DLIGHT_DIRECTIONAL    = 3,
  672. // Note: The following light type (D3DLIGHT_PARALLELPOINT)
  673. // is no longer supported from D3D for DX7 onwards.
  674.     D3DLIGHT_PARALLELPOINT  = 4,
  675. #if(DIRECT3D_VERSION < 0x0500) // For backward compatible headers
  676.     D3DLIGHT_GLSPOT         = 5,
  677. #endif
  678.     D3DLIGHT_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */
  679. } D3DLIGHTTYPE;
  680. #else
  681. typedef enum _D3DLIGHTTYPE D3DLIGHTTYPE;
  682. #define D3DLIGHT_PARALLELPOINT  (D3DLIGHTTYPE)4
  683. #define D3DLIGHT_GLSPOT         (D3DLIGHTTYPE)5
  684. #endif //(DIRECT3D_VERSION < 0x0800)
  685. /*
  686.  * Structure defining a light source and its properties.
  687.  */
  688. typedef struct _D3DLIGHT {
  689.     DWORD           dwSize;
  690.     D3DLIGHTTYPE    dltType;            /* Type of light source */
  691.     D3DCOLORVALUE   dcvColor;           /* Color of light */
  692.     D3DVECTOR       dvPosition;         /* Position in world space */
  693.     D3DVECTOR       dvDirection;        /* Direction in world space */
  694.     D3DVALUE        dvRange;            /* Cutoff range */
  695.     D3DVALUE        dvFalloff;          /* Falloff */
  696.     D3DVALUE        dvAttenuation0;     /* Constant attenuation */
  697.     D3DVALUE        dvAttenuation1;     /* Linear attenuation */
  698.     D3DVALUE        dvAttenuation2;     /* Quadratic attenuation */
  699.     D3DVALUE        dvTheta;            /* Inner angle of spotlight cone */
  700.     D3DVALUE        dvPhi;              /* Outer angle of spotlight cone */
  701. } D3DLIGHT, *LPD3DLIGHT;
  702. #if(DIRECT3D_VERSION >= 0x0700)
  703. typedef struct _D3DLIGHT7 {
  704.     D3DLIGHTTYPE    dltType;            /* Type of light source */
  705.     D3DCOLORVALUE   dcvDiffuse;         /* Diffuse color of light */
  706.     D3DCOLORVALUE   dcvSpecular;        /* Specular color of light */
  707.     D3DCOLORVALUE   dcvAmbient;         /* Ambient color of light */
  708.     D3DVECTOR       dvPosition;         /* Position in world space */
  709.     D3DVECTOR       dvDirection;        /* Direction in world space */
  710.     D3DVALUE        dvRange;            /* Cutoff range */
  711.     D3DVALUE        dvFalloff;          /* Falloff */
  712.     D3DVALUE        dvAttenuation0;     /* Constant attenuation */
  713.     D3DVALUE        dvAttenuation1;     /* Linear attenuation */
  714.     D3DVALUE        dvAttenuation2;     /* Quadratic attenuation */
  715.     D3DVALUE        dvTheta;            /* Inner angle of spotlight cone */
  716.     D3DVALUE        dvPhi;              /* Outer angle of spotlight cone */
  717. } D3DLIGHT7, *LPD3DLIGHT7;
  718. #endif /* DIRECT3D_VERSION >= 0x0700 */
  719. #if(DIRECT3D_VERSION >= 0x0500)
  720. /*
  721.  * Structure defining a light source and its properties.
  722.  */
  723. /* flags bits */
  724. #define D3DLIGHT_ACTIVE         0x00000001
  725. #define D3DLIGHT_NO_SPECULAR    0x00000002
  726. #define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR)
  727. /* maximum valid light range */
  728. #define D3DLIGHT_RANGE_MAX      ((float)sqrt(FLT_MAX))
  729. typedef struct _D3DLIGHT2 {
  730.     DWORD           dwSize;
  731.     D3DLIGHTTYPE    dltType;        /* Type of light source */
  732.     D3DCOLORVALUE   dcvColor;       /* Color of light */
  733.     D3DVECTOR       dvPosition;     /* Position in world space */
  734.     D3DVECTOR       dvDirection;    /* Direction in world space */
  735.     D3DVALUE        dvRange;        /* Cutoff range */
  736.     D3DVALUE        dvFalloff;      /* Falloff */
  737.     D3DVALUE        dvAttenuation0; /* Constant attenuation */
  738.     D3DVALUE        dvAttenuation1; /* Linear attenuation */
  739.     D3DVALUE        dvAttenuation2; /* Quadratic attenuation */
  740.     D3DVALUE        dvTheta;        /* Inner angle of spotlight cone */
  741.     D3DVALUE        dvPhi;          /* Outer angle of spotlight cone */
  742.     DWORD           dwFlags;
  743. } D3DLIGHT2, *LPD3DLIGHT2;
  744. #endif /* DIRECT3D_VERSION >= 0x0500 */
  745. typedef struct _D3DLIGHTDATA {
  746.     DWORD                dwSize;
  747.     LPD3DLIGHTINGELEMENT lpIn;      /* Input positions and normals */
  748.     DWORD                dwInSize;  /* Stride of input elements */
  749.     LPD3DTLVERTEX        lpOut;     /* Output colors */
  750.     DWORD                dwOutSize; /* Stride of output colors */
  751. } D3DLIGHTDATA, *LPD3DLIGHTDATA;
  752. #if(DIRECT3D_VERSION >= 0x0500)
  753. /*
  754.  * Before DX5, these values were in an enum called
  755.  * D3DCOLORMODEL. This was not correct, since they are
  756.  * bit flags. A driver can surface either or both flags
  757.  * in the dcmColorModel member of D3DDEVICEDESC.
  758.  */
  759. #define D3DCOLOR_MONO   1
  760. #define D3DCOLOR_RGB    2
  761. typedef DWORD D3DCOLORMODEL;
  762. #endif /* DIRECT3D_VERSION >= 0x0500 */
  763. /*
  764.  * Options for clearing
  765.  */
  766. #define D3DCLEAR_TARGET            0x00000001l  /* Clear target surface */
  767. #define D3DCLEAR_ZBUFFER           0x00000002l  /* Clear target z buffer */
  768. #if(DIRECT3D_VERSION >= 0x0600)
  769. #define D3DCLEAR_STENCIL           0x00000004l  /* Clear stencil planes */
  770. #endif /* DIRECT3D_VERSION >= 0x0600 */
  771. /*
  772.  * Execute buffers are allocated via Direct3D.  These buffers may then
  773.  * be filled by the application with instructions to execute along with
  774.  * vertex data.
  775.  */
  776. /*
  777.  * Supported op codes for execute instructions.
  778.  */
  779. typedef enum _D3DOPCODE {
  780.     D3DOP_POINT                 = 1,
  781.     D3DOP_LINE                  = 2,
  782.     D3DOP_TRIANGLE      = 3,
  783.     D3DOP_MATRIXLOAD        = 4,
  784.     D3DOP_MATRIXMULTIPLY    = 5,
  785.     D3DOP_STATETRANSFORM        = 6,
  786.     D3DOP_STATELIGHT        = 7,
  787.     D3DOP_STATERENDER       = 8,
  788.     D3DOP_PROCESSVERTICES       = 9,
  789.     D3DOP_TEXTURELOAD       = 10,
  790.     D3DOP_EXIT                  = 11,
  791.     D3DOP_BRANCHFORWARD     = 12,
  792.     D3DOP_SPAN          = 13,
  793.     D3DOP_SETSTATUS     = 14,
  794. #if(DIRECT3D_VERSION >= 0x0500)
  795.     D3DOP_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */
  796. #endif /* DIRECT3D_VERSION >= 0x0500 */
  797. } D3DOPCODE;
  798. typedef struct _D3DINSTRUCTION {
  799.     BYTE bOpcode;   /* Instruction opcode */
  800.     BYTE bSize;     /* Size of each instruction data unit */
  801.     WORD wCount;    /* Count of instruction data units to follow */
  802. } D3DINSTRUCTION, *LPD3DINSTRUCTION;
  803. /*
  804.  * Structure for texture loads
  805.  */
  806. typedef struct _D3DTEXTURELOAD {
  807.     D3DTEXTUREHANDLE hDestTexture;
  808.     D3DTEXTUREHANDLE hSrcTexture;
  809. } D3DTEXTURELOAD, *LPD3DTEXTURELOAD;
  810. /*
  811.  * Structure for picking
  812.  */
  813. typedef struct _D3DPICKRECORD {
  814.     BYTE     bOpcode;
  815.     BYTE     bPad;
  816.     DWORD    dwOffset;
  817.     D3DVALUE dvZ;
  818. } D3DPICKRECORD, *LPD3DPICKRECORD;
  819. /*
  820.  * The following defines the rendering states which can be set in the
  821.  * execute buffer.
  822.  */
  823. #if(DIRECT3D_VERSION < 0x0800)
  824. typedef enum _D3DSHADEMODE {
  825.     D3DSHADE_FLAT              = 1,
  826.     D3DSHADE_GOURAUD           = 2,
  827.     D3DSHADE_PHONG             = 3,
  828. #if(DIRECT3D_VERSION >= 0x0500)
  829.     D3DSHADE_FORCE_DWORD       = 0x7fffffff, /* force 32-bit size enum */
  830. #endif /* DIRECT3D_VERSION >= 0x0500 */
  831. } D3DSHADEMODE;
  832. typedef enum _D3DFILLMODE {
  833.     D3DFILL_POINT          = 1,
  834.     D3DFILL_WIREFRAME          = 2,
  835.     D3DFILL_SOLID          = 3,
  836. #if(DIRECT3D_VERSION >= 0x0500)
  837.     D3DFILL_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */
  838. #endif /* DIRECT3D_VERSION >= 0x0500 */
  839. } D3DFILLMODE;
  840. typedef struct _D3DLINEPATTERN {
  841.     WORD    wRepeatFactor;
  842.     WORD    wLinePattern;
  843. } D3DLINEPATTERN;
  844. #endif //(DIRECT3D_VERSION < 0x0800)
  845. typedef enum _D3DTEXTUREFILTER {
  846.     D3DFILTER_NEAREST          = 1,
  847.     D3DFILTER_LINEAR           = 2,
  848.     D3DFILTER_MIPNEAREST       = 3,
  849.     D3DFILTER_MIPLINEAR        = 4,
  850.     D3DFILTER_LINEARMIPNEAREST = 5,
  851.     D3DFILTER_LINEARMIPLINEAR  = 6,
  852. #if(DIRECT3D_VERSION >= 0x0500)
  853.     D3DFILTER_FORCE_DWORD      = 0x7fffffff, /* force 32-bit size enum */
  854. #endif /* DIRECT3D_VERSION >= 0x0500 */
  855. } D3DTEXTUREFILTER;
  856. #if(DIRECT3D_VERSION < 0x0800)
  857. typedef enum _D3DBLEND {
  858.     D3DBLEND_ZERO              = 1,
  859.     D3DBLEND_ONE               = 2,
  860.     D3DBLEND_SRCCOLOR          = 3,
  861.     D3DBLEND_INVSRCCOLOR       = 4,
  862.     D3DBLEND_SRCALPHA          = 5,
  863.     D3DBLEND_INVSRCALPHA       = 6,
  864.     D3DBLEND_DESTALPHA         = 7,
  865.     D3DBLEND_INVDESTALPHA      = 8,
  866.     D3DBLEND_DESTCOLOR         = 9,
  867.     D3DBLEND_INVDESTCOLOR      = 10,
  868.     D3DBLEND_SRCALPHASAT       = 11,
  869.     D3DBLEND_BOTHSRCALPHA      = 12,
  870.     D3DBLEND_BOTHINVSRCALPHA   = 13,
  871. #if(DIRECT3D_VERSION >= 0x0500)
  872.     D3DBLEND_FORCE_DWORD       = 0x7fffffff, /* force 32-bit size enum */
  873. #endif /* DIRECT3D_VERSION >= 0x0500 */
  874. } D3DBLEND;
  875. #endif //(DIRECT3D_VERSION < 0x0800)
  876. typedef enum _D3DTEXTUREBLEND {
  877.     D3DTBLEND_DECAL            = 1,
  878.     D3DTBLEND_MODULATE         = 2,
  879.     D3DTBLEND_DECALALPHA       = 3,
  880.     D3DTBLEND_MODULATEALPHA    = 4,
  881.     D3DTBLEND_DECALMASK        = 5,
  882.     D3DTBLEND_MODULATEMASK     = 6,
  883.     D3DTBLEND_COPY             = 7,
  884. #if(DIRECT3D_VERSION >= 0x0500)
  885.     D3DTBLEND_ADD              = 8,
  886.     D3DTBLEND_FORCE_DWORD      = 0x7fffffff, /* force 32-bit size enum */
  887. #endif /* DIRECT3D_VERSION >= 0x0500 */
  888. } D3DTEXTUREBLEND;
  889. #if(DIRECT3D_VERSION < 0x0800)
  890. typedef enum _D3DTEXTUREADDRESS {
  891.     D3DTADDRESS_WRAP           = 1,
  892.     D3DTADDRESS_MIRROR         = 2,
  893.     D3DTADDRESS_CLAMP          = 3,
  894. #if(DIRECT3D_VERSION >= 0x0500)
  895.     D3DTADDRESS_BORDER         = 4,
  896.     D3DTADDRESS_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */
  897. #endif /* DIRECT3D_VERSION >= 0x0500 */
  898. } D3DTEXTUREADDRESS;
  899. typedef enum _D3DCULL {
  900.     D3DCULL_NONE               = 1,
  901.     D3DCULL_CW                 = 2,
  902.     D3DCULL_CCW                = 3,
  903. #if(DIRECT3D_VERSION >= 0x0500)
  904.     D3DCULL_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */
  905. #endif /* DIRECT3D_VERSION >= 0x0500 */
  906. } D3DCULL;
  907. typedef enum _D3DCMPFUNC {
  908.     D3DCMP_NEVER               = 1,
  909.     D3DCMP_LESS                = 2,
  910.     D3DCMP_EQUAL               = 3,
  911.     D3DCMP_LESSEQUAL           = 4,
  912.     D3DCMP_GREATER             = 5,
  913.     D3DCMP_NOTEQUAL            = 6,
  914.     D3DCMP_GREATEREQUAL        = 7,
  915.     D3DCMP_ALWAYS              = 8,
  916. #if(DIRECT3D_VERSION >= 0x0500)
  917.     D3DCMP_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */
  918. #endif /* DIRECT3D_VERSION >= 0x0500 */
  919. } D3DCMPFUNC;
  920. #if(DIRECT3D_VERSION >= 0x0600)
  921. typedef enum _D3DSTENCILOP {
  922.     D3DSTENCILOP_KEEP           = 1,
  923.     D3DSTENCILOP_ZERO           = 2,
  924.     D3DSTENCILOP_REPLACE        = 3,
  925.     D3DSTENCILOP_INCRSAT        = 4,
  926.     D3DSTENCILOP_DECRSAT        = 5,
  927.     D3DSTENCILOP_INVERT         = 6,
  928.     D3DSTENCILOP_INCR           = 7,
  929.     D3DSTENCILOP_DECR           = 8,
  930.     D3DSTENCILOP_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */
  931. } D3DSTENCILOP;
  932. #endif /* DIRECT3D_VERSION >= 0x0600 */
  933. typedef enum _D3DFOGMODE {
  934.     D3DFOG_NONE                = 0,
  935.     D3DFOG_EXP                 = 1,
  936.     D3DFOG_EXP2                = 2,
  937. #if(DIRECT3D_VERSION >= 0x0500)
  938.     D3DFOG_LINEAR              = 3,
  939.     D3DFOG_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */
  940. #endif /* DIRECT3D_VERSION >= 0x0500 */
  941. } D3DFOGMODE;
  942. #if(DIRECT3D_VERSION >= 0x0600)
  943. typedef enum _D3DZBUFFERTYPE {
  944.     D3DZB_FALSE                 = 0,
  945.     D3DZB_TRUE                  = 1, // Z buffering
  946.     D3DZB_USEW                  = 2, // W buffering
  947.     D3DZB_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */
  948. } D3DZBUFFERTYPE;
  949. #endif /* DIRECT3D_VERSION >= 0x0600 */
  950. #endif //(DIRECT3D_VERSION < 0x0800)
  951. #if(DIRECT3D_VERSION >= 0x0500)
  952. typedef enum _D3DANTIALIASMODE {
  953.     D3DANTIALIAS_NONE          = 0,
  954.     D3DANTIALIAS_SORTDEPENDENT = 1,
  955.     D3DANTIALIAS_SORTINDEPENDENT = 2,
  956.     D3DANTIALIAS_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */
  957. } D3DANTIALIASMODE;
  958. // Vertex types supported by Direct3D
  959. typedef enum _D3DVERTEXTYPE {
  960.     D3DVT_VERTEX        = 1,
  961.     D3DVT_LVERTEX       = 2,
  962.     D3DVT_TLVERTEX      = 3,
  963.     D3DVT_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */
  964. } D3DVERTEXTYPE;
  965. #if(DIRECT3D_VERSION < 0x0800)
  966. // Primitives supported by draw-primitive API
  967. typedef enum _D3DPRIMITIVETYPE {
  968.     D3DPT_POINTLIST     = 1,
  969.     D3DPT_LINELIST      = 2,
  970.     D3DPT_LINESTRIP     = 3,
  971.     D3DPT_TRIANGLELIST  = 4,
  972.     D3DPT_TRIANGLESTRIP = 5,
  973.     D3DPT_TRIANGLEFAN   = 6,
  974.     D3DPT_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */
  975. } D3DPRIMITIVETYPE;
  976. #endif //(DIRECT3D_VERSION < 0x0800)
  977. #endif /* DIRECT3D_VERSION >= 0x0500 */
  978. /*
  979.  * Amount to add to a state to generate the override for that state.
  980.  */
  981. #define D3DSTATE_OVERRIDE_BIAS      256
  982. /*
  983.  * A state which sets the override flag for the specified state type.
  984.  */
  985. #define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS))
  986. #if(DIRECT3D_VERSION < 0x0800)
  987. typedef enum _D3DTRANSFORMSTATETYPE {
  988.     D3DTRANSFORMSTATE_WORLD         = 1,
  989.     D3DTRANSFORMSTATE_VIEW          = 2,
  990.     D3DTRANSFORMSTATE_PROJECTION    = 3,
  991. #if(DIRECT3D_VERSION >= 0x0700)
  992.     D3DTRANSFORMSTATE_WORLD1        = 4,  // 2nd matrix to blend
  993.     D3DTRANSFORMSTATE_WORLD2        = 5,  // 3rd matrix to blend
  994.     D3DTRANSFORMSTATE_WORLD3        = 6,  // 4th matrix to blend
  995.     D3DTRANSFORMSTATE_TEXTURE0      = 16,
  996.     D3DTRANSFORMSTATE_TEXTURE1      = 17,
  997.     D3DTRANSFORMSTATE_TEXTURE2      = 18,
  998.     D3DTRANSFORMSTATE_TEXTURE3      = 19,
  999.     D3DTRANSFORMSTATE_TEXTURE4      = 20,
  1000.     D3DTRANSFORMSTATE_TEXTURE5      = 21,
  1001.     D3DTRANSFORMSTATE_TEXTURE6      = 22,
  1002.     D3DTRANSFORMSTATE_TEXTURE7      = 23,
  1003. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1004. #if(DIRECT3D_VERSION >= 0x0500)
  1005.     D3DTRANSFORMSTATE_FORCE_DWORD     = 0x7fffffff, /* force 32-bit size enum */
  1006. #endif /* DIRECT3D_VERSION >= 0x0500 */
  1007. } D3DTRANSFORMSTATETYPE;
  1008. #else
  1009. //
  1010. // legacy transform state names
  1011. //
  1012. typedef enum _D3DTRANSFORMSTATETYPE D3DTRANSFORMSTATETYPE;
  1013. #define D3DTRANSFORMSTATE_WORLD         (D3DTRANSFORMSTATETYPE)1
  1014. #define D3DTRANSFORMSTATE_VIEW          (D3DTRANSFORMSTATETYPE)2
  1015. #define D3DTRANSFORMSTATE_PROJECTION    (D3DTRANSFORMSTATETYPE)3
  1016. #define D3DTRANSFORMSTATE_WORLD1        (D3DTRANSFORMSTATETYPE)4
  1017. #define D3DTRANSFORMSTATE_WORLD2        (D3DTRANSFORMSTATETYPE)5
  1018. #define D3DTRANSFORMSTATE_WORLD3        (D3DTRANSFORMSTATETYPE)6
  1019. #define D3DTRANSFORMSTATE_TEXTURE0      (D3DTRANSFORMSTATETYPE)16
  1020. #define D3DTRANSFORMSTATE_TEXTURE1      (D3DTRANSFORMSTATETYPE)17
  1021. #define D3DTRANSFORMSTATE_TEXTURE2      (D3DTRANSFORMSTATETYPE)18
  1022. #define D3DTRANSFORMSTATE_TEXTURE3      (D3DTRANSFORMSTATETYPE)19
  1023. #define D3DTRANSFORMSTATE_TEXTURE4      (D3DTRANSFORMSTATETYPE)20
  1024. #define D3DTRANSFORMSTATE_TEXTURE5      (D3DTRANSFORMSTATETYPE)21
  1025. #define D3DTRANSFORMSTATE_TEXTURE6      (D3DTRANSFORMSTATETYPE)22
  1026. #define D3DTRANSFORMSTATE_TEXTURE7      (D3DTRANSFORMSTATETYPE)23
  1027. #endif //(DIRECT3D_VERSION < 0x0800)
  1028. typedef enum _D3DLIGHTSTATETYPE {
  1029.     D3DLIGHTSTATE_MATERIAL          = 1,
  1030.     D3DLIGHTSTATE_AMBIENT           = 2,
  1031.     D3DLIGHTSTATE_COLORMODEL        = 3,
  1032.     D3DLIGHTSTATE_FOGMODE           = 4,
  1033.     D3DLIGHTSTATE_FOGSTART          = 5,
  1034.     D3DLIGHTSTATE_FOGEND            = 6,
  1035.     D3DLIGHTSTATE_FOGDENSITY        = 7,
  1036. #if(DIRECT3D_VERSION >= 0x0600)
  1037.     D3DLIGHTSTATE_COLORVERTEX       = 8,
  1038. #endif /* DIRECT3D_VERSION >= 0x0600 */
  1039. #if(DIRECT3D_VERSION >= 0x0500)
  1040.     D3DLIGHTSTATE_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */
  1041. #endif /* DIRECT3D_VERSION >= 0x0500 */
  1042. } D3DLIGHTSTATETYPE;
  1043. #if(DIRECT3D_VERSION < 0x0800)
  1044. typedef enum _D3DRENDERSTATETYPE {
  1045.     D3DRENDERSTATE_ANTIALIAS          = 2,    /* D3DANTIALIASMODE */
  1046.     D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4,    /* TRUE for perspective correction */
  1047.     D3DRENDERSTATE_ZENABLE            = 7,    /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */
  1048.     D3DRENDERSTATE_FILLMODE           = 8,    /* D3DFILL_MODE        */
  1049.     D3DRENDERSTATE_SHADEMODE          = 9,    /* D3DSHADEMODE */
  1050.     D3DRENDERSTATE_LINEPATTERN        = 10,   /* D3DLINEPATTERN */
  1051.     D3DRENDERSTATE_ZWRITEENABLE       = 14,   /* TRUE to enable z writes */
  1052.     D3DRENDERSTATE_ALPHATESTENABLE    = 15,   /* TRUE to enable alpha tests */
  1053.     D3DRENDERSTATE_LASTPIXEL          = 16,   /* TRUE for last-pixel on lines */
  1054.     D3DRENDERSTATE_SRCBLEND           = 19,   /* D3DBLEND */
  1055.     D3DRENDERSTATE_DESTBLEND          = 20,   /* D3DBLEND */
  1056.     D3DRENDERSTATE_CULLMODE           = 22,   /* D3DCULL */
  1057.     D3DRENDERSTATE_ZFUNC              = 23,   /* D3DCMPFUNC */
  1058.     D3DRENDERSTATE_ALPHAREF           = 24,   /* D3DFIXED */
  1059.     D3DRENDERSTATE_ALPHAFUNC          = 25,   /* D3DCMPFUNC */
  1060.     D3DRENDERSTATE_DITHERENABLE       = 26,   /* TRUE to enable dithering */
  1061. #if(DIRECT3D_VERSION >= 0x0500)
  1062.     D3DRENDERSTATE_ALPHABLENDENABLE   = 27,   /* TRUE to enable alpha blending */
  1063. #endif /* DIRECT3D_VERSION >= 0x0500 */
  1064.     D3DRENDERSTATE_FOGENABLE          = 28,   /* TRUE to enable fog blending */
  1065.     D3DRENDERSTATE_SPECULARENABLE     = 29,   /* TRUE to enable specular */
  1066.     D3DRENDERSTATE_ZVISIBLE           = 30,   /* TRUE to enable z checking */
  1067.     D3DRENDERSTATE_STIPPLEDALPHA      = 33,   /* TRUE to enable stippled alpha (RGB device only) */
  1068.     D3DRENDERSTATE_FOGCOLOR           = 34,   /* D3DCOLOR */
  1069.     D3DRENDERSTATE_FOGTABLEMODE       = 35,   /* D3DFOGMODE */
  1070. #if(DIRECT3D_VERSION >= 0x0700)
  1071.     D3DRENDERSTATE_FOGSTART           = 36,   /* Fog start (for both vertex and pixel fog) */
  1072.     D3DRENDERSTATE_FOGEND             = 37,   /* Fog end      */
  1073.     D3DRENDERSTATE_FOGDENSITY         = 38,   /* Fog density  */
  1074. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1075. #if(DIRECT3D_VERSION >= 0x0500)
  1076.     D3DRENDERSTATE_EDGEANTIALIAS      = 40,   /* TRUE to enable edge antialiasing */
  1077.     D3DRENDERSTATE_COLORKEYENABLE     = 41,   /* TRUE to enable source colorkeyed textures */
  1078.     D3DRENDERSTATE_ZBIAS              = 47,   /* LONG Z bias */
  1079.     D3DRENDERSTATE_RANGEFOGENABLE     = 48,   /* Enables range-based fog */
  1080. #endif /* DIRECT3D_VERSION >= 0x0500 */
  1081. #if(DIRECT3D_VERSION >= 0x0600)
  1082.     D3DRENDERSTATE_STENCILENABLE      = 52,   /* BOOL enable/disable stenciling */
  1083.     D3DRENDERSTATE_STENCILFAIL        = 53,   /* D3DSTENCILOP to do if stencil test fails */
  1084.     D3DRENDERSTATE_STENCILZFAIL       = 54,   /* D3DSTENCILOP to do if stencil test passes and Z test fails */
  1085.     D3DRENDERSTATE_STENCILPASS        = 55,   /* D3DSTENCILOP to do if both stencil and Z tests pass */
  1086.     D3DRENDERSTATE_STENCILFUNC        = 56,   /* D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */
  1087.     D3DRENDERSTATE_STENCILREF         = 57,   /* Reference value used in stencil test */
  1088.     D3DRENDERSTATE_STENCILMASK        = 58,   /* Mask value used in stencil test */
  1089.     D3DRENDERSTATE_STENCILWRITEMASK   = 59,   /* Write mask applied to values written to stencil buffer */
  1090.     D3DRENDERSTATE_TEXTUREFACTOR      = 60,   /* D3DCOLOR used for multi-texture blend */
  1091. #endif /* DIRECT3D_VERSION >= 0x0600 */
  1092. #if(DIRECT3D_VERSION >= 0x0600)
  1093.     /*
  1094.      * 128 values [128, 255] are reserved for texture coordinate wrap flags.
  1095.      * These are constructed with the D3DWRAP_U and D3DWRAP_V macros. Using
  1096.      * a flags word preserves forward compatibility with texture coordinates
  1097.      * that are >2D.
  1098.      */
  1099.     D3DRENDERSTATE_WRAP0              = 128,  /* wrap for 1st texture coord. set */
  1100.     D3DRENDERSTATE_WRAP1              = 129,  /* wrap for 2nd texture coord. set */
  1101.     D3DRENDERSTATE_WRAP2              = 130,  /* wrap for 3rd texture coord. set */
  1102.     D3DRENDERSTATE_WRAP3              = 131,  /* wrap for 4th texture coord. set */
  1103.     D3DRENDERSTATE_WRAP4              = 132,  /* wrap for 5th texture coord. set */
  1104.     D3DRENDERSTATE_WRAP5              = 133,  /* wrap for 6th texture coord. set */
  1105.     D3DRENDERSTATE_WRAP6              = 134,  /* wrap for 7th texture coord. set */
  1106.     D3DRENDERSTATE_WRAP7              = 135,  /* wrap for 8th texture coord. set */
  1107. #endif /* DIRECT3D_VERSION >= 0x0600 */
  1108. #if(DIRECT3D_VERSION >= 0x0700)
  1109.     D3DRENDERSTATE_CLIPPING            = 136,
  1110.     D3DRENDERSTATE_LIGHTING            = 137,
  1111.     D3DRENDERSTATE_EXTENTS             = 138,
  1112.     D3DRENDERSTATE_AMBIENT             = 139,
  1113.     D3DRENDERSTATE_FOGVERTEXMODE       = 140,
  1114.     D3DRENDERSTATE_COLORVERTEX         = 141,
  1115.     D3DRENDERSTATE_LOCALVIEWER         = 142,
  1116.     D3DRENDERSTATE_NORMALIZENORMALS    = 143,
  1117.     D3DRENDERSTATE_COLORKEYBLENDENABLE = 144,
  1118.     D3DRENDERSTATE_DIFFUSEMATERIALSOURCE    = 145,
  1119.     D3DRENDERSTATE_SPECULARMATERIALSOURCE   = 146,
  1120.     D3DRENDERSTATE_AMBIENTMATERIALSOURCE    = 147,
  1121.     D3DRENDERSTATE_EMISSIVEMATERIALSOURCE   = 148,
  1122.     D3DRENDERSTATE_VERTEXBLEND              = 151,
  1123.     D3DRENDERSTATE_CLIPPLANEENABLE          = 152,
  1124. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1125. //
  1126. // retired renderstates - not supported for DX7 interfaces
  1127. //
  1128.     D3DRENDERSTATE_TEXTUREHANDLE      = 1,    /* Texture handle for legacy interfaces (Texture,Texture2) */
  1129.     D3DRENDERSTATE_TEXTUREADDRESS     = 3,    /* D3DTEXTUREADDRESS  */
  1130.     D3DRENDERSTATE_WRAPU              = 5,    /* TRUE for wrapping in u */
  1131.     D3DRENDERSTATE_WRAPV              = 6,    /* TRUE for wrapping in v */
  1132.     D3DRENDERSTATE_MONOENABLE         = 11,   /* TRUE to enable mono rasterization */
  1133.     D3DRENDERSTATE_ROP2               = 12,   /* ROP2 */
  1134.     D3DRENDERSTATE_PLANEMASK          = 13,   /* DWORD physical plane mask */
  1135.     D3DRENDERSTATE_TEXTUREMAG         = 17,   /* D3DTEXTUREFILTER */
  1136.     D3DRENDERSTATE_TEXTUREMIN         = 18,   /* D3DTEXTUREFILTER */
  1137.     D3DRENDERSTATE_TEXTUREMAPBLEND    = 21,   /* D3DTEXTUREBLEND */
  1138.     D3DRENDERSTATE_SUBPIXEL           = 31,   /* TRUE to enable subpixel correction */
  1139.     D3DRENDERSTATE_SUBPIXELX          = 32,   /* TRUE to enable correction in X only */
  1140.     D3DRENDERSTATE_STIPPLEENABLE      = 39,   /* TRUE to enable stippling */
  1141. #if(DIRECT3D_VERSION >= 0x0500)
  1142.     D3DRENDERSTATE_BORDERCOLOR        = 43,   /* Border color for texturing w/border */
  1143.     D3DRENDERSTATE_TEXTUREADDRESSU    = 44,   /* Texture addressing mode for U coordinate */
  1144.     D3DRENDERSTATE_TEXTUREADDRESSV    = 45,   /* Texture addressing mode for V coordinate */
  1145.     D3DRENDERSTATE_MIPMAPLODBIAS      = 46,   /* D3DVALUE Mipmap LOD bias */
  1146.     D3DRENDERSTATE_ANISOTROPY         = 49,   /* Max. anisotropy. 1 = no anisotropy */
  1147. #endif /* DIRECT3D_VERSION >= 0x0500 */
  1148.     D3DRENDERSTATE_FLUSHBATCH         = 50,   /* Explicit flush for DP batching (DX5 Only) */
  1149. #if(DIRECT3D_VERSION >= 0x0600)
  1150.     D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT=51, /* BOOL enable sort-independent transparency */
  1151. #endif /* DIRECT3D_VERSION >= 0x0600 */
  1152.     D3DRENDERSTATE_STIPPLEPATTERN00   = 64,   /* Stipple pattern 01...  */
  1153.     D3DRENDERSTATE_STIPPLEPATTERN01   = 65,
  1154.     D3DRENDERSTATE_STIPPLEPATTERN02   = 66,
  1155.     D3DRENDERSTATE_STIPPLEPATTERN03   = 67,
  1156.     D3DRENDERSTATE_STIPPLEPATTERN04   = 68,
  1157.     D3DRENDERSTATE_STIPPLEPATTERN05   = 69,
  1158.     D3DRENDERSTATE_STIPPLEPATTERN06   = 70,
  1159.     D3DRENDERSTATE_STIPPLEPATTERN07   = 71,
  1160.     D3DRENDERSTATE_STIPPLEPATTERN08   = 72,
  1161.     D3DRENDERSTATE_STIPPLEPATTERN09   = 73,
  1162.     D3DRENDERSTATE_STIPPLEPATTERN10   = 74,
  1163.     D3DRENDERSTATE_STIPPLEPATTERN11   = 75,
  1164.     D3DRENDERSTATE_STIPPLEPATTERN12   = 76,
  1165.     D3DRENDERSTATE_STIPPLEPATTERN13   = 77,
  1166.     D3DRENDERSTATE_STIPPLEPATTERN14   = 78,
  1167.     D3DRENDERSTATE_STIPPLEPATTERN15   = 79,
  1168.     D3DRENDERSTATE_STIPPLEPATTERN16   = 80,
  1169.     D3DRENDERSTATE_STIPPLEPATTERN17   = 81,
  1170.     D3DRENDERSTATE_STIPPLEPATTERN18   = 82,
  1171.     D3DRENDERSTATE_STIPPLEPATTERN19   = 83,
  1172.     D3DRENDERSTATE_STIPPLEPATTERN20   = 84,
  1173.     D3DRENDERSTATE_STIPPLEPATTERN21   = 85,
  1174.     D3DRENDERSTATE_STIPPLEPATTERN22   = 86,
  1175.     D3DRENDERSTATE_STIPPLEPATTERN23   = 87,
  1176.     D3DRENDERSTATE_STIPPLEPATTERN24   = 88,
  1177.     D3DRENDERSTATE_STIPPLEPATTERN25   = 89,
  1178.     D3DRENDERSTATE_STIPPLEPATTERN26   = 90,
  1179.     D3DRENDERSTATE_STIPPLEPATTERN27   = 91,
  1180.     D3DRENDERSTATE_STIPPLEPATTERN28   = 92,
  1181.     D3DRENDERSTATE_STIPPLEPATTERN29   = 93,
  1182.     D3DRENDERSTATE_STIPPLEPATTERN30   = 94,
  1183.     D3DRENDERSTATE_STIPPLEPATTERN31   = 95,
  1184. //
  1185. // retired renderstate names - the values are still used under new naming conventions
  1186. //
  1187.     D3DRENDERSTATE_FOGTABLESTART      = 36,   /* Fog table start    */
  1188.     D3DRENDERSTATE_FOGTABLEEND        = 37,   /* Fog table end      */
  1189.     D3DRENDERSTATE_FOGTABLEDENSITY    = 38,   /* Fog table density  */
  1190. #if(DIRECT3D_VERSION >= 0x0500)
  1191.     D3DRENDERSTATE_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */
  1192. #endif /* DIRECT3D_VERSION >= 0x0500 */
  1193. } D3DRENDERSTATETYPE;
  1194. #else
  1195. typedef enum _D3DRENDERSTATETYPE D3DRENDERSTATETYPE;
  1196. //
  1197. // legacy renderstate names
  1198. //
  1199. #define D3DRENDERSTATE_TEXTUREPERSPECTIVE       (D3DRENDERSTATETYPE)4
  1200. #define D3DRENDERSTATE_ZENABLE                  (D3DRENDERSTATETYPE)7
  1201. #define D3DRENDERSTATE_FILLMODE                 (D3DRENDERSTATETYPE)8
  1202. #define D3DRENDERSTATE_SHADEMODE                (D3DRENDERSTATETYPE)9
  1203. #define D3DRENDERSTATE_LINEPATTERN              (D3DRENDERSTATETYPE)10
  1204. #define D3DRENDERSTATE_ZWRITEENABLE             (D3DRENDERSTATETYPE)14
  1205. #define D3DRENDERSTATE_ALPHATESTENABLE          (D3DRENDERSTATETYPE)15
  1206. #define D3DRENDERSTATE_LASTPIXEL                (D3DRENDERSTATETYPE)16
  1207. #define D3DRENDERSTATE_SRCBLEND                 (D3DRENDERSTATETYPE)19
  1208. #define D3DRENDERSTATE_DESTBLEND                (D3DRENDERSTATETYPE)20
  1209. #define D3DRENDERSTATE_CULLMODE                 (D3DRENDERSTATETYPE)22
  1210. #define D3DRENDERSTATE_ZFUNC                    (D3DRENDERSTATETYPE)23
  1211. #define D3DRENDERSTATE_ALPHAREF                 (D3DRENDERSTATETYPE)24
  1212. #define D3DRENDERSTATE_ALPHAFUNC                (D3DRENDERSTATETYPE)25
  1213. #define D3DRENDERSTATE_DITHERENABLE             (D3DRENDERSTATETYPE)26
  1214. #define D3DRENDERSTATE_ALPHABLENDENABLE         (D3DRENDERSTATETYPE)27
  1215. #define D3DRENDERSTATE_FOGENABLE                (D3DRENDERSTATETYPE)28
  1216. #define D3DRENDERSTATE_SPECULARENABLE           (D3DRENDERSTATETYPE)29
  1217. #define D3DRENDERSTATE_ZVISIBLE                 (D3DRENDERSTATETYPE)30
  1218. #define D3DRENDERSTATE_STIPPLEDALPHA            (D3DRENDERSTATETYPE)33
  1219. #define D3DRENDERSTATE_FOGCOLOR                 (D3DRENDERSTATETYPE)34
  1220. #define D3DRENDERSTATE_FOGTABLEMODE             (D3DRENDERSTATETYPE)35
  1221. #define D3DRENDERSTATE_FOGSTART                 (D3DRENDERSTATETYPE)36
  1222. #define D3DRENDERSTATE_FOGEND                   (D3DRENDERSTATETYPE)37
  1223. #define D3DRENDERSTATE_FOGDENSITY               (D3DRENDERSTATETYPE)38
  1224. #define D3DRENDERSTATE_EDGEANTIALIAS            (D3DRENDERSTATETYPE)40
  1225. #define D3DRENDERSTATE_ZBIAS                    (D3DRENDERSTATETYPE)47
  1226. #define D3DRENDERSTATE_RANGEFOGENABLE           (D3DRENDERSTATETYPE)48
  1227. #define D3DRENDERSTATE_STENCILENABLE            (D3DRENDERSTATETYPE)52
  1228. #define D3DRENDERSTATE_STENCILFAIL              (D3DRENDERSTATETYPE)53
  1229. #define D3DRENDERSTATE_STENCILZFAIL             (D3DRENDERSTATETYPE)54
  1230. #define D3DRENDERSTATE_STENCILPASS              (D3DRENDERSTATETYPE)55
  1231. #define D3DRENDERSTATE_STENCILFUNC              (D3DRENDERSTATETYPE)56
  1232. #define D3DRENDERSTATE_STENCILREF               (D3DRENDERSTATETYPE)57
  1233. #define D3DRENDERSTATE_STENCILMASK              (D3DRENDERSTATETYPE)58
  1234. #define D3DRENDERSTATE_STENCILWRITEMASK         (D3DRENDERSTATETYPE)59
  1235. #define D3DRENDERSTATE_TEXTUREFACTOR            (D3DRENDERSTATETYPE)60
  1236. #define D3DRENDERSTATE_WRAP0                    (D3DRENDERSTATETYPE)128
  1237. #define D3DRENDERSTATE_WRAP1                    (D3DRENDERSTATETYPE)129
  1238. #define D3DRENDERSTATE_WRAP2                    (D3DRENDERSTATETYPE)130
  1239. #define D3DRENDERSTATE_WRAP3                    (D3DRENDERSTATETYPE)131
  1240. #define D3DRENDERSTATE_WRAP4                    (D3DRENDERSTATETYPE)132
  1241. #define D3DRENDERSTATE_WRAP5                    (D3DRENDERSTATETYPE)133
  1242. #define D3DRENDERSTATE_WRAP6                    (D3DRENDERSTATETYPE)134
  1243. #define D3DRENDERSTATE_WRAP7                    (D3DRENDERSTATETYPE)135
  1244. #define D3DRENDERSTATE_CLIPPING                 (D3DRENDERSTATETYPE)136
  1245. #define D3DRENDERSTATE_LIGHTING                 (D3DRENDERSTATETYPE)137
  1246. #define D3DRENDERSTATE_EXTENTS                  (D3DRENDERSTATETYPE)138
  1247. #define D3DRENDERSTATE_AMBIENT                  (D3DRENDERSTATETYPE)139
  1248. #define D3DRENDERSTATE_FOGVERTEXMODE            (D3DRENDERSTATETYPE)140
  1249. #define D3DRENDERSTATE_COLORVERTEX              (D3DRENDERSTATETYPE)141
  1250. #define D3DRENDERSTATE_LOCALVIEWER              (D3DRENDERSTATETYPE)142
  1251. #define D3DRENDERSTATE_NORMALIZENORMALS         (D3DRENDERSTATETYPE)143
  1252. #define D3DRENDERSTATE_COLORKEYBLENDENABLE      (D3DRENDERSTATETYPE)144
  1253. #define D3DRENDERSTATE_DIFFUSEMATERIALSOURCE    (D3DRENDERSTATETYPE)145
  1254. #define D3DRENDERSTATE_SPECULARMATERIALSOURCE   (D3DRENDERSTATETYPE)146
  1255. #define D3DRENDERSTATE_AMBIENTMATERIALSOURCE    (D3DRENDERSTATETYPE)147
  1256. #define D3DRENDERSTATE_EMISSIVEMATERIALSOURCE   (D3DRENDERSTATETYPE)148
  1257. #define D3DRENDERSTATE_VERTEXBLEND              (D3DRENDERSTATETYPE)151
  1258. #define D3DRENDERSTATE_CLIPPLANEENABLE          (D3DRENDERSTATETYPE)152
  1259. //
  1260. // retired renderstates - not supported for DX7 interfaces
  1261. //
  1262. #define D3DRENDERSTATE_TEXTUREHANDLE     (D3DRENDERSTATETYPE)1
  1263. #define D3DRENDERSTATE_ANTIALIAS         (D3DRENDERSTATETYPE)2
  1264. #define D3DRENDERSTATE_TEXTUREADDRESS    (D3DRENDERSTATETYPE)3
  1265. #define D3DRENDERSTATE_WRAPU             (D3DRENDERSTATETYPE)5
  1266. #define D3DRENDERSTATE_WRAPV             (D3DRENDERSTATETYPE)6
  1267. #define D3DRENDERSTATE_MONOENABLE        (D3DRENDERSTATETYPE)11
  1268. #define D3DRENDERSTATE_ROP2              (D3DRENDERSTATETYPE)12
  1269. #define D3DRENDERSTATE_PLANEMASK         (D3DRENDERSTATETYPE)13
  1270. #define D3DRENDERSTATE_TEXTUREMAG        (D3DRENDERSTATETYPE)17
  1271. #define D3DRENDERSTATE_TEXTUREMIN        (D3DRENDERSTATETYPE)18
  1272. #define D3DRENDERSTATE_TEXTUREMAPBLEND   (D3DRENDERSTATETYPE)21
  1273. #define D3DRENDERSTATE_SUBPIXEL          (D3DRENDERSTATETYPE)31
  1274. #define D3DRENDERSTATE_SUBPIXELX         (D3DRENDERSTATETYPE)32
  1275. #define D3DRENDERSTATE_STIPPLEENABLE     (D3DRENDERSTATETYPE)39
  1276. #define D3DRENDERSTATE_OLDALPHABLENDENABLE  (D3DRENDERSTATETYPE)42
  1277. #define D3DRENDERSTATE_BORDERCOLOR       (D3DRENDERSTATETYPE)43
  1278. #define D3DRENDERSTATE_TEXTUREADDRESSU   (D3DRENDERSTATETYPE)44
  1279. #define D3DRENDERSTATE_TEXTUREADDRESSV   (D3DRENDERSTATETYPE)45
  1280. #define D3DRENDERSTATE_MIPMAPLODBIAS     (D3DRENDERSTATETYPE)46
  1281. #define D3DRENDERSTATE_ANISOTROPY        (D3DRENDERSTATETYPE)49
  1282. #define D3DRENDERSTATE_FLUSHBATCH        (D3DRENDERSTATETYPE)50
  1283. #define D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT (D3DRENDERSTATETYPE)51
  1284. #define D3DRENDERSTATE_STIPPLEPATTERN00  (D3DRENDERSTATETYPE)64
  1285. #define D3DRENDERSTATE_STIPPLEPATTERN01  (D3DRENDERSTATETYPE)65
  1286. #define D3DRENDERSTATE_STIPPLEPATTERN02  (D3DRENDERSTATETYPE)66
  1287. #define D3DRENDERSTATE_STIPPLEPATTERN03  (D3DRENDERSTATETYPE)67
  1288. #define D3DRENDERSTATE_STIPPLEPATTERN04  (D3DRENDERSTATETYPE)68
  1289. #define D3DRENDERSTATE_STIPPLEPATTERN05  (D3DRENDERSTATETYPE)69
  1290. #define D3DRENDERSTATE_STIPPLEPATTERN06  (D3DRENDERSTATETYPE)70
  1291. #define D3DRENDERSTATE_STIPPLEPATTERN07  (D3DRENDERSTATETYPE)71
  1292. #define D3DRENDERSTATE_STIPPLEPATTERN08  (D3DRENDERSTATETYPE)72
  1293. #define D3DRENDERSTATE_STIPPLEPATTERN09  (D3DRENDERSTATETYPE)73
  1294. #define D3DRENDERSTATE_STIPPLEPATTERN10  (D3DRENDERSTATETYPE)74
  1295. #define D3DRENDERSTATE_STIPPLEPATTERN11  (D3DRENDERSTATETYPE)75
  1296. #define D3DRENDERSTATE_STIPPLEPATTERN12  (D3DRENDERSTATETYPE)76
  1297. #define D3DRENDERSTATE_STIPPLEPATTERN13  (D3DRENDERSTATETYPE)77
  1298. #define D3DRENDERSTATE_STIPPLEPATTERN14  (D3DRENDERSTATETYPE)78
  1299. #define D3DRENDERSTATE_STIPPLEPATTERN15  (D3DRENDERSTATETYPE)79
  1300. #define D3DRENDERSTATE_STIPPLEPATTERN16  (D3DRENDERSTATETYPE)80
  1301. #define D3DRENDERSTATE_STIPPLEPATTERN17  (D3DRENDERSTATETYPE)81
  1302. #define D3DRENDERSTATE_STIPPLEPATTERN18  (D3DRENDERSTATETYPE)82
  1303. #define D3DRENDERSTATE_STIPPLEPATTERN19  (D3DRENDERSTATETYPE)83
  1304. #define D3DRENDERSTATE_STIPPLEPATTERN20  (D3DRENDERSTATETYPE)84
  1305. #define D3DRENDERSTATE_STIPPLEPATTERN21  (D3DRENDERSTATETYPE)85
  1306. #define D3DRENDERSTATE_STIPPLEPATTERN22  (D3DRENDERSTATETYPE)86
  1307. #define D3DRENDERSTATE_STIPPLEPATTERN23  (D3DRENDERSTATETYPE)87
  1308. #define D3DRENDERSTATE_STIPPLEPATTERN24  (D3DRENDERSTATETYPE)88
  1309. #define D3DRENDERSTATE_STIPPLEPATTERN25  (D3DRENDERSTATETYPE)89
  1310. #define D3DRENDERSTATE_STIPPLEPATTERN26  (D3DRENDERSTATETYPE)90
  1311. #define D3DRENDERSTATE_STIPPLEPATTERN27  (D3DRENDERSTATETYPE)91
  1312. #define D3DRENDERSTATE_STIPPLEPATTERN28  (D3DRENDERSTATETYPE)92
  1313. #define D3DRENDERSTATE_STIPPLEPATTERN29  (D3DRENDERSTATETYPE)93
  1314. #define D3DRENDERSTATE_STIPPLEPATTERN30  (D3DRENDERSTATETYPE)94
  1315. #define D3DRENDERSTATE_STIPPLEPATTERN31  (D3DRENDERSTATETYPE)95
  1316. //
  1317. // retired renderstates - not supported for DX8 interfaces
  1318. //
  1319. #define D3DRENDERSTATE_COLORKEYENABLE        (D3DRENDERSTATETYPE)41
  1320. #define D3DRENDERSTATE_COLORKEYBLENDENABLE   (D3DRENDERSTATETYPE)144
  1321. //
  1322. // retired renderstate names - the values are still used under new naming conventions
  1323. //
  1324. #define D3DRENDERSTATE_BLENDENABLE       (D3DRENDERSTATETYPE)27
  1325. #define D3DRENDERSTATE_FOGTABLESTART     (D3DRENDERSTATETYPE)36
  1326. #define D3DRENDERSTATE_FOGTABLEEND       (D3DRENDERSTATETYPE)37
  1327. #define D3DRENDERSTATE_FOGTABLEDENSITY   (D3DRENDERSTATETYPE)38
  1328. #endif //(DIRECT3D_VERSION < 0x0800)
  1329. #if(DIRECT3D_VERSION < 0x0800)
  1330. // Values for material source
  1331. typedef enum _D3DMATERIALCOLORSOURCE
  1332. {
  1333.     D3DMCS_MATERIAL = 0,                // Color from material is used
  1334.     D3DMCS_COLOR1   = 1,                // Diffuse vertex color is used
  1335.     D3DMCS_COLOR2   = 2,                // Specular vertex color is used
  1336.     D3DMCS_FORCE_DWORD = 0x7fffffff,    // force 32-bit size enum
  1337. } D3DMATERIALCOLORSOURCE;
  1338. #if(DIRECT3D_VERSION >= 0x0500)
  1339. // For back-compatibility with legacy compilations
  1340. #define D3DRENDERSTATE_BLENDENABLE      D3DRENDERSTATE_ALPHABLENDENABLE
  1341. #endif /* DIRECT3D_VERSION >= 0x0500 */
  1342. #if(DIRECT3D_VERSION >= 0x0600)
  1343. // Bias to apply to the texture coordinate set to apply a wrap to.
  1344. #define D3DRENDERSTATE_WRAPBIAS                 128UL
  1345. /* Flags to construct the WRAP render states */
  1346. #define D3DWRAP_U   0x00000001L
  1347. #define D3DWRAP_V   0x00000002L
  1348. #endif /* DIRECT3D_VERSION >= 0x0600 */
  1349. #if(DIRECT3D_VERSION >= 0x0700)
  1350. /* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */
  1351. #define D3DWRAPCOORD_0   0x00000001L    // same as D3DWRAP_U
  1352. #define D3DWRAPCOORD_1   0x00000002L    // same as D3DWRAP_V
  1353. #define D3DWRAPCOORD_2   0x00000004L
  1354. #define D3DWRAPCOORD_3   0x00000008L
  1355. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1356. #endif //(DIRECT3D_VERSION < 0x0800)
  1357. #define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))
  1358. typedef struct _D3DSTATE {
  1359.     union {
  1360. #if(DIRECT3D_VERSION < 0x0800)
  1361.     D3DTRANSFORMSTATETYPE   dtstTransformStateType;
  1362. #endif //(DIRECT3D_VERSION < 0x0800)
  1363.     D3DLIGHTSTATETYPE   dlstLightStateType;
  1364.     D3DRENDERSTATETYPE  drstRenderStateType;
  1365.     };
  1366.     union {
  1367.     DWORD           dwArg[1];
  1368.     D3DVALUE        dvArg[1];
  1369.     };
  1370. } D3DSTATE, *LPD3DSTATE;
  1371. /*
  1372.  * Operation used to load matrices
  1373.  * hDstMat = hSrcMat
  1374.  */
  1375. typedef struct _D3DMATRIXLOAD {
  1376.     D3DMATRIXHANDLE hDestMatrix;   /* Destination matrix */
  1377.     D3DMATRIXHANDLE hSrcMatrix;   /* Source matrix */
  1378. } D3DMATRIXLOAD, *LPD3DMATRIXLOAD;
  1379. /*
  1380.  * Operation used to multiply matrices
  1381.  * hDstMat = hSrcMat1 * hSrcMat2
  1382.  */
  1383. typedef struct _D3DMATRIXMULTIPLY {
  1384.     D3DMATRIXHANDLE hDestMatrix;   /* Destination matrix */
  1385.     D3DMATRIXHANDLE hSrcMatrix1;  /* First source matrix */
  1386.     D3DMATRIXHANDLE hSrcMatrix2;  /* Second source matrix */
  1387. } D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY;
  1388. /*
  1389.  * Operation used to transform and light vertices.
  1390.  */
  1391. typedef struct _D3DPROCESSVERTICES {
  1392.     DWORD        dwFlags;    /* Do we transform or light or just copy? */
  1393.     WORD         wStart;     /* Index to first vertex in source */
  1394.     WORD         wDest;      /* Index to first vertex in local buffer */
  1395.     DWORD        dwCount;    /* Number of vertices to be processed */
  1396.     DWORD    dwReserved; /* Must be zero */
  1397. } D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES;
  1398. #define D3DPROCESSVERTICES_TRANSFORMLIGHT   0x00000000L
  1399. #define D3DPROCESSVERTICES_TRANSFORM        0x00000001L
  1400. #define D3DPROCESSVERTICES_COPY         0x00000002L
  1401. #define D3DPROCESSVERTICES_OPMASK       0x00000007L
  1402. #define D3DPROCESSVERTICES_UPDATEEXTENTS    0x00000008L
  1403. #define D3DPROCESSVERTICES_NOCOLOR      0x00000010L
  1404. #if(DIRECT3D_VERSION >= 0x0600)
  1405. #if(DIRECT3D_VERSION < 0x0800)
  1406. /*
  1407.  * State enumerants for per-stage texture processing.
  1408.  */
  1409. typedef enum _D3DTEXTURESTAGESTATETYPE
  1410. {
  1411.     D3DTSS_COLOROP        =  1, /* D3DTEXTUREOP - per-stage blending controls for color channels */
  1412.     D3DTSS_COLORARG1      =  2, /* D3DTA_* (texture arg) */
  1413.     D3DTSS_COLORARG2      =  3, /* D3DTA_* (texture arg) */
  1414.     D3DTSS_ALPHAOP        =  4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */
  1415.     D3DTSS_ALPHAARG1      =  5, /* D3DTA_* (texture arg) */
  1416.     D3DTSS_ALPHAARG2      =  6, /* D3DTA_* (texture arg) */
  1417.     D3DTSS_BUMPENVMAT00   =  7, /* D3DVALUE (bump mapping matrix) */
  1418.     D3DTSS_BUMPENVMAT01   =  8, /* D3DVALUE (bump mapping matrix) */
  1419.     D3DTSS_BUMPENVMAT10   =  9, /* D3DVALUE (bump mapping matrix) */
  1420.     D3DTSS_BUMPENVMAT11   = 10, /* D3DVALUE (bump mapping matrix) */
  1421.     D3DTSS_TEXCOORDINDEX  = 11, /* identifies which set of texture coordinates index this texture */
  1422.     D3DTSS_ADDRESS        = 12, /* D3DTEXTUREADDRESS for both coordinates */
  1423.     D3DTSS_ADDRESSU       = 13, /* D3DTEXTUREADDRESS for U coordinate */
  1424.     D3DTSS_ADDRESSV       = 14, /* D3DTEXTUREADDRESS for V coordinate */
  1425.     D3DTSS_BORDERCOLOR    = 15, /* D3DCOLOR */
  1426.     D3DTSS_MAGFILTER      = 16, /* D3DTEXTUREMAGFILTER filter to use for magnification */
  1427.     D3DTSS_MINFILTER      = 17, /* D3DTEXTUREMINFILTER filter to use for minification */
  1428.     D3DTSS_MIPFILTER      = 18, /* D3DTEXTUREMIPFILTER filter to use between mipmaps during minification */
  1429.     D3DTSS_MIPMAPLODBIAS  = 19, /* D3DVALUE Mipmap LOD bias */
  1430.     D3DTSS_MAXMIPLEVEL    = 20, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */
  1431.     D3DTSS_MAXANISOTROPY  = 21, /* DWORD maximum anisotropy */
  1432.     D3DTSS_BUMPENVLSCALE  = 22, /* D3DVALUE scale for bump map luminance */
  1433.     D3DTSS_BUMPENVLOFFSET = 23, /* D3DVALUE offset for bump map luminance */
  1434. #if(DIRECT3D_VERSION >= 0x0700)
  1435.     D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */
  1436. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1437.     D3DTSS_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */
  1438. } D3DTEXTURESTAGESTATETYPE;
  1439. #if(DIRECT3D_VERSION >= 0x0700)
  1440. // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position
  1441. // and normal in the camera space) should be taken as texture coordinates
  1442. // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from
  1443. //
  1444. #define D3DTSS_TCI_PASSTHRU                             0x00000000
  1445. #define D3DTSS_TCI_CAMERASPACENORMAL                    0x00010000
  1446. #define D3DTSS_TCI_CAMERASPACEPOSITION                  0x00020000
  1447. #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR          0x00030000
  1448. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1449. /*
  1450.  * Enumerations for COLOROP and ALPHAOP texture blending operations set in
  1451.  * texture processing stage controls in D3DRENDERSTATE.
  1452.  */
  1453. typedef enum _D3DTEXTUREOP
  1454. {
  1455. // Control
  1456.     D3DTOP_DISABLE    = 1,      // disables stage
  1457.     D3DTOP_SELECTARG1 = 2,      // the default
  1458.     D3DTOP_SELECTARG2 = 3,
  1459. // Modulate
  1460.     D3DTOP_MODULATE   = 4,      // multiply args together
  1461.     D3DTOP_MODULATE2X = 5,      // multiply and  1 bit
  1462.     D3DTOP_MODULATE4X = 6,      // multiply and  2 bits
  1463. // Add
  1464.     D3DTOP_ADD          =  7,   // add arguments together
  1465.     D3DTOP_ADDSIGNED    =  8,   // add with -0.5 bias
  1466.     D3DTOP_ADDSIGNED2X  =  9,   // as above but left  1 bit
  1467.     D3DTOP_SUBTRACT     = 10,   // Arg1 - Arg2, with no saturation
  1468.     D3DTOP_ADDSMOOTH    = 11,   // add 2 args, subtract product
  1469.                                 // Arg1 + Arg2 - Arg1*Arg2
  1470.                                 // = Arg1 + (1-Arg1)*Arg2
  1471. // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
  1472.     D3DTOP_BLENDDIFFUSEALPHA    = 12, // iterated alpha
  1473.     D3DTOP_BLENDTEXTUREALPHA    = 13, // texture alpha
  1474.     D3DTOP_BLENDFACTORALPHA     = 14, // alpha from D3DRENDERSTATE_TEXTUREFACTOR
  1475.     // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)
  1476.     D3DTOP_BLENDTEXTUREALPHAPM  = 15, // texture alpha
  1477.     D3DTOP_BLENDCURRENTALPHA    = 16, // by alpha of current color
  1478. // Specular mapping
  1479.     D3DTOP_PREMODULATE            = 17,     // modulate with next texture before use
  1480.     D3DTOP_MODULATEALPHA_ADDCOLOR = 18,     // Arg1.RGB + Arg1.A*Arg2.RGB
  1481.                                             // COLOROP only
  1482.     D3DTOP_MODULATECOLOR_ADDALPHA = 19,     // Arg1.RGB*Arg2.RGB + Arg1.A
  1483.                                             // COLOROP only
  1484.     D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,  // (1-Arg1.A)*Arg2.RGB + Arg1.RGB
  1485.                                             // COLOROP only
  1486.     D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,  // (1-Arg1.RGB)*Arg2.RGB + Arg1.A
  1487.                                             // COLOROP only
  1488. // Bump mapping
  1489.     D3DTOP_BUMPENVMAP           = 22, // per pixel env map perturbation
  1490.     D3DTOP_BUMPENVMAPLUMINANCE  = 23, // with luminance channel
  1491.     // This can do either diffuse or specular bump mapping with correct input.
  1492.     // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)
  1493.     // where each component has been scaled and offset to make it signed.
  1494.     // The result is replicated into all four (including alpha) channels.
  1495.     // This is a valid COLOROP only.
  1496.     D3DTOP_DOTPRODUCT3          = 24,
  1497.     D3DTOP_FORCE_DWORD = 0x7fffffff,
  1498. } D3DTEXTUREOP;
  1499. /*
  1500.  * Values for COLORARG1,2 and ALPHAARG1,2 texture blending operations
  1501.  * set in texture processing stage controls in D3DRENDERSTATE.
  1502.  */
  1503. #define D3DTA_SELECTMASK        0x0000000f  // mask for arg selector
  1504. #define D3DTA_DIFFUSE           0x00000000  // select diffuse color
  1505. #define D3DTA_CURRENT           0x00000001  // select result of previous stage
  1506. #define D3DTA_TEXTURE           0x00000002  // select texture color
  1507. #define D3DTA_TFACTOR           0x00000003  // select RENDERSTATE_TEXTUREFACTOR
  1508. #if(DIRECT3D_VERSION >= 0x0700)
  1509. #define D3DTA_SPECULAR          0x00000004  // select specular color
  1510. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1511. #define D3DTA_COMPLEMENT        0x00000010  // take 1.0 - x
  1512. #define D3DTA_ALPHAREPLICATE    0x00000020  // replicate alpha to color components
  1513. #endif //(DIRECT3D_VERSION < 0x0800)
  1514. /*
  1515.  *  IDirect3DTexture2 State Filter Types
  1516.  */
  1517. typedef enum _D3DTEXTUREMAGFILTER
  1518. {
  1519.     D3DTFG_POINT        = 1,    // nearest
  1520.     D3DTFG_LINEAR       = 2,    // linear interpolation
  1521.     D3DTFG_FLATCUBIC    = 3,    // cubic
  1522.     D3DTFG_GAUSSIANCUBIC = 4,   // different cubic kernel
  1523.     D3DTFG_ANISOTROPIC  = 5,    //
  1524. #if(DIRECT3D_VERSION >= 0x0700)
  1525. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1526.     D3DTFG_FORCE_DWORD  = 0x7fffffff,   // force 32-bit size enum
  1527. } D3DTEXTUREMAGFILTER;
  1528. typedef enum _D3DTEXTUREMINFILTER
  1529. {
  1530.     D3DTFN_POINT        = 1,    // nearest
  1531.     D3DTFN_LINEAR       = 2,    // linear interpolation
  1532.     D3DTFN_ANISOTROPIC  = 3,    //
  1533.     D3DTFN_FORCE_DWORD  = 0x7fffffff,   // force 32-bit size enum
  1534. } D3DTEXTUREMINFILTER;
  1535. typedef enum _D3DTEXTUREMIPFILTER
  1536. {
  1537.     D3DTFP_NONE         = 1,    // mipmapping disabled (use MAG filter)
  1538.     D3DTFP_POINT        = 2,    // nearest
  1539.     D3DTFP_LINEAR       = 3,    // linear interpolation
  1540.     D3DTFP_FORCE_DWORD  = 0x7fffffff,   // force 32-bit size enum
  1541. } D3DTEXTUREMIPFILTER;
  1542. #endif /* DIRECT3D_VERSION >= 0x0600 */
  1543. /*
  1544.  * Triangle flags
  1545.  */
  1546. /*
  1547.  * Tri strip and fan flags.
  1548.  * START loads all three vertices
  1549.  * EVEN and ODD load just v3 with even or odd culling
  1550.  * START_FLAT contains a count from 0 to 29 that allows the
  1551.  * whole strip or fan to be culled in one hit.
  1552.  * e.g. for a quad len = 1
  1553.  */
  1554. #define D3DTRIFLAG_START            0x00000000L
  1555. #define D3DTRIFLAG_STARTFLAT(len) (len)     /* 0 < len < 30 */
  1556. #define D3DTRIFLAG_ODD              0x0000001eL
  1557. #define D3DTRIFLAG_EVEN             0x0000001fL
  1558. /*
  1559.  * Triangle edge flags
  1560.  * enable edges for wireframe or antialiasing
  1561.  */
  1562. #define D3DTRIFLAG_EDGEENABLE1          0x00000100L /* v0-v1 edge */
  1563. #define D3DTRIFLAG_EDGEENABLE2          0x00000200L /* v1-v2 edge */
  1564. #define D3DTRIFLAG_EDGEENABLE3          0x00000400L /* v2-v0 edge */
  1565. #define D3DTRIFLAG_EDGEENABLETRIANGLE 
  1566.         (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3)
  1567. /*
  1568.  * Primitive structures and related defines.  Vertex offsets are to types
  1569.  * D3DVERTEX, D3DLVERTEX, or D3DTLVERTEX.
  1570.  */
  1571. /*
  1572.  * Triangle list primitive structure
  1573.  */
  1574. typedef struct _D3DTRIANGLE {
  1575.     union {
  1576.     WORD    v1;            /* Vertex indices */
  1577.     WORD    wV1;
  1578.     };
  1579.     union {
  1580.     WORD    v2;
  1581.     WORD    wV2;
  1582.     };
  1583.     union {
  1584.     WORD    v3;
  1585.     WORD    wV3;
  1586.     };
  1587.     WORD        wFlags;       /* Edge (and other) flags */
  1588. } D3DTRIANGLE, *LPD3DTRIANGLE;
  1589. /*
  1590.  * Line list structure.
  1591.  * The instruction count defines the number of line segments.
  1592.  */
  1593. typedef struct _D3DLINE {
  1594.     union {
  1595.     WORD    v1;            /* Vertex indices */
  1596.     WORD    wV1;
  1597.     };
  1598.     union {
  1599.     WORD    v2;
  1600.     WORD    wV2;
  1601.     };
  1602. } D3DLINE, *LPD3DLINE;
  1603. /*
  1604.  * Span structure
  1605.  * Spans join a list of points with the same y value.
  1606.  * If the y value changes, a new span is started.
  1607.  */
  1608. typedef struct _D3DSPAN {
  1609.     WORD    wCount; /* Number of spans */
  1610.     WORD    wFirst; /* Index to first vertex */
  1611. } D3DSPAN, *LPD3DSPAN;
  1612. /*
  1613.  * Point structure
  1614.  */
  1615. typedef struct _D3DPOINT {
  1616.     WORD    wCount;     /* number of points     */
  1617.     WORD    wFirst;     /* index to first vertex    */
  1618. } D3DPOINT, *LPD3DPOINT;
  1619. /*
  1620.  * Forward branch structure.
  1621.  * Mask is logically anded with the driver status mask
  1622.  * if the result equals 'value', the branch is taken.
  1623.  */
  1624. typedef struct _D3DBRANCH {
  1625.     DWORD   dwMask;     /* Bitmask against D3D status */
  1626.     DWORD   dwValue;
  1627.     BOOL    bNegate;        /* TRUE to negate comparison */
  1628.     DWORD   dwOffset;   /* How far to branch forward (0 for exit)*/
  1629. } D3DBRANCH, *LPD3DBRANCH;
  1630. /*
  1631.  * Status used for set status instruction.
  1632.  * The D3D status is initialised on device creation
  1633.  * and is modified by all execute calls.
  1634.  */
  1635. typedef struct _D3DSTATUS {
  1636.     DWORD       dwFlags;    /* Do we set extents or status */
  1637.     DWORD   dwStatus;   /* D3D status */
  1638.     D3DRECT drExtent;
  1639. } D3DSTATUS, *LPD3DSTATUS;
  1640. #define D3DSETSTATUS_STATUS     0x00000001L
  1641. #define D3DSETSTATUS_EXTENTS        0x00000002L
  1642. #define D3DSETSTATUS_ALL    (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS)
  1643. #if(DIRECT3D_VERSION >= 0x0500)
  1644. typedef struct _D3DCLIPSTATUS {
  1645.     DWORD dwFlags; /* Do we set 2d extents, 3D extents or status */
  1646.     DWORD dwStatus; /* Clip status */
  1647.     float minx, maxx; /* X extents */
  1648.     float miny, maxy; /* Y extents */
  1649.     float minz, maxz; /* Z extents */
  1650. } D3DCLIPSTATUS, *LPD3DCLIPSTATUS;
  1651. #define D3DCLIPSTATUS_STATUS        0x00000001L
  1652. #define D3DCLIPSTATUS_EXTENTS2      0x00000002L
  1653. #define D3DCLIPSTATUS_EXTENTS3      0x00000004L
  1654. #endif /* DIRECT3D_VERSION >= 0x0500 */
  1655. /*
  1656.  * Statistics structure
  1657.  */
  1658. typedef struct _D3DSTATS {
  1659.     DWORD        dwSize;
  1660.     DWORD        dwTrianglesDrawn;
  1661.     DWORD        dwLinesDrawn;
  1662.     DWORD        dwPointsDrawn;
  1663.     DWORD        dwSpansDrawn;
  1664.     DWORD        dwVerticesProcessed;
  1665. } D3DSTATS, *LPD3DSTATS;
  1666. /*
  1667.  * Execute options.
  1668.  * When calling using D3DEXECUTE_UNCLIPPED all the primitives
  1669.  * inside the buffer must be contained within the viewport.
  1670.  */
  1671. #define D3DEXECUTE_CLIPPED       0x00000001l
  1672. #define D3DEXECUTE_UNCLIPPED     0x00000002l
  1673. typedef struct _D3DEXECUTEDATA {
  1674.     DWORD       dwSize;
  1675.     DWORD       dwVertexOffset;
  1676.     DWORD       dwVertexCount;
  1677.     DWORD       dwInstructionOffset;
  1678.     DWORD       dwInstructionLength;
  1679.     DWORD       dwHVertexOffset;
  1680.     D3DSTATUS   dsStatus;   /* Status after execute */
  1681. } D3DEXECUTEDATA, *LPD3DEXECUTEDATA;
  1682. /*
  1683.  * Palette flags.
  1684.  * This are or'ed with the peFlags in the PALETTEENTRYs passed to DirectDraw.
  1685.  */
  1686. #define D3DPAL_FREE 0x00    /* Renderer may use this entry freely */
  1687. #define D3DPAL_READONLY 0x40    /* Renderer may not set this entry */
  1688. #define D3DPAL_RESERVED 0x80    /* Renderer may not use this entry */
  1689. #if(DIRECT3D_VERSION >= 0x0600)
  1690. typedef struct _D3DVERTEXBUFFERDESC {
  1691.     DWORD dwSize;
  1692.     DWORD dwCaps;
  1693.     DWORD dwFVF;
  1694.     DWORD dwNumVertices;
  1695. } D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC;
  1696. #define D3DVBCAPS_SYSTEMMEMORY      0x00000800l
  1697. #define D3DVBCAPS_WRITEONLY         0x00010000l
  1698. #define D3DVBCAPS_OPTIMIZED         0x80000000l
  1699. #define D3DVBCAPS_DONOTCLIP         0x00000001l
  1700. /* Vertex Operations for ProcessVertices */
  1701. #define D3DVOP_LIGHT       (1 << 10)
  1702. #define D3DVOP_TRANSFORM   (1 << 0)
  1703. #define D3DVOP_CLIP        (1 << 2)
  1704. #define D3DVOP_EXTENTS     (1 << 3)
  1705. #if(DIRECT3D_VERSION < 0x0800)
  1706. /* The maximum number of vertices user can pass to any d3d
  1707.    drawing function or to create vertex buffer with
  1708. */
  1709. #define D3DMAXNUMVERTICES    ((1<<16) - 1)
  1710. /* The maximum number of primitives user can pass to any d3d
  1711.    drawing function.
  1712. */
  1713. #define D3DMAXNUMPRIMITIVES  ((1<<16) - 1)
  1714. #if(DIRECT3D_VERSION >= 0x0700)
  1715. /* Bits for dwFlags in ProcessVertices call */
  1716. #define D3DPV_DONOTCOPYDATA (1 << 0)
  1717. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1718. #endif //(DIRECT3D_VERSION < 0x0800)
  1719. //-------------------------------------------------------------------
  1720. #if(DIRECT3D_VERSION < 0x0800)
  1721. // Flexible vertex format bits
  1722. //
  1723. #define D3DFVF_RESERVED0        0x001
  1724. #define D3DFVF_POSITION_MASK    0x00E
  1725. #define D3DFVF_XYZ              0x002
  1726. #define D3DFVF_XYZRHW           0x004
  1727. #if(DIRECT3D_VERSION >= 0x0700)
  1728. #define D3DFVF_XYZB1            0x006
  1729. #define D3DFVF_XYZB2            0x008
  1730. #define D3DFVF_XYZB3            0x00a
  1731. #define D3DFVF_XYZB4            0x00c
  1732. #define D3DFVF_XYZB5            0x00e
  1733. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1734. #define D3DFVF_NORMAL           0x010
  1735. #define D3DFVF_RESERVED1        0x020
  1736. #define D3DFVF_DIFFUSE          0x040
  1737. #define D3DFVF_SPECULAR         0x080
  1738. #define D3DFVF_TEXCOUNT_MASK    0xf00
  1739. #define D3DFVF_TEXCOUNT_SHIFT   8
  1740. #define D3DFVF_TEX0             0x000
  1741. #define D3DFVF_TEX1             0x100
  1742. #define D3DFVF_TEX2             0x200
  1743. #define D3DFVF_TEX3             0x300
  1744. #define D3DFVF_TEX4             0x400
  1745. #define D3DFVF_TEX5             0x500
  1746. #define D3DFVF_TEX6             0x600
  1747. #define D3DFVF_TEX7             0x700
  1748. #define D3DFVF_TEX8             0x800
  1749. #define D3DFVF_RESERVED2        0xf000  // 4 reserved bits
  1750. #else
  1751. #define D3DFVF_RESERVED1        0x020
  1752. #endif //(DIRECT3D_VERSION < 0x0800)
  1753. #define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 )
  1754. #define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | 
  1755.                          D3DFVF_SPECULAR | D3DFVF_TEX1 )
  1756. #define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | 
  1757.                           D3DFVF_TEX1 )
  1758. typedef struct _D3DDP_PTRSTRIDE
  1759. {
  1760.     LPVOID lpvData;
  1761.     DWORD  dwStride;
  1762. } D3DDP_PTRSTRIDE;
  1763. #define D3DDP_MAXTEXCOORD 8
  1764. typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA
  1765. {
  1766.     D3DDP_PTRSTRIDE position;
  1767.     D3DDP_PTRSTRIDE normal;
  1768.     D3DDP_PTRSTRIDE diffuse;
  1769.     D3DDP_PTRSTRIDE specular;
  1770.     D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD];
  1771. } D3DDRAWPRIMITIVESTRIDEDDATA, *LPD3DDRAWPRIMITIVESTRIDEDDATA;
  1772. //---------------------------------------------------------------------
  1773. // ComputeSphereVisibility return values
  1774. //
  1775. #define D3DVIS_INSIDE_FRUSTUM       0
  1776. #define D3DVIS_INTERSECT_FRUSTUM    1
  1777. #define D3DVIS_OUTSIDE_FRUSTUM      2
  1778. #define D3DVIS_INSIDE_LEFT          0
  1779. #define D3DVIS_INTERSECT_LEFT       (1 << 2)
  1780. #define D3DVIS_OUTSIDE_LEFT         (2 << 2)
  1781. #define D3DVIS_INSIDE_RIGHT         0
  1782. #define D3DVIS_INTERSECT_RIGHT      (1 << 4)
  1783. #define D3DVIS_OUTSIDE_RIGHT        (2 << 4)
  1784. #define D3DVIS_INSIDE_TOP           0
  1785. #define D3DVIS_INTERSECT_TOP        (1 << 6)
  1786. #define D3DVIS_OUTSIDE_TOP          (2 << 6)
  1787. #define D3DVIS_INSIDE_BOTTOM        0
  1788. #define D3DVIS_INTERSECT_BOTTOM     (1 << 8)
  1789. #define D3DVIS_OUTSIDE_BOTTOM       (2 << 8)
  1790. #define D3DVIS_INSIDE_NEAR          0
  1791. #define D3DVIS_INTERSECT_NEAR       (1 << 10)
  1792. #define D3DVIS_OUTSIDE_NEAR         (2 << 10)
  1793. #define D3DVIS_INSIDE_FAR           0
  1794. #define D3DVIS_INTERSECT_FAR        (1 << 12)
  1795. #define D3DVIS_OUTSIDE_FAR          (2 << 12)
  1796. #define D3DVIS_MASK_FRUSTUM         (3 << 0)
  1797. #define D3DVIS_MASK_LEFT            (3 << 2)
  1798. #define D3DVIS_MASK_RIGHT           (3 << 4)
  1799. #define D3DVIS_MASK_TOP             (3 << 6)
  1800. #define D3DVIS_MASK_BOTTOM          (3 << 8)
  1801. #define D3DVIS_MASK_NEAR            (3 << 10)
  1802. #define D3DVIS_MASK_FAR             (3 << 12)
  1803. #endif /* DIRECT3D_VERSION >= 0x0600 */
  1804. #if(DIRECT3D_VERSION < 0x0800)
  1805. #if(DIRECT3D_VERSION >= 0x0700)
  1806. // To be used with GetInfo()
  1807. #define D3DDEVINFOID_TEXTUREMANAGER    1
  1808. #define D3DDEVINFOID_D3DTEXTUREMANAGER 2
  1809. #define D3DDEVINFOID_TEXTURING         3
  1810. typedef enum _D3DSTATEBLOCKTYPE
  1811. {
  1812.     D3DSBT_ALL           = 1, // capture all state
  1813.     D3DSBT_PIXELSTATE    = 2, // capture pixel state
  1814.     D3DSBT_VERTEXSTATE   = 3, // capture vertex state
  1815.     D3DSBT_FORCE_DWORD   = 0xffffffff
  1816. } D3DSTATEBLOCKTYPE;
  1817. // The D3DVERTEXBLENDFLAGS type is used with D3DRENDERSTATE_VERTEXBLEND state.
  1818. //
  1819. typedef enum _D3DVERTEXBLENDFLAGS
  1820. {
  1821.     D3DVBLEND_DISABLE  = 0, // Disable vertex blending
  1822.     D3DVBLEND_1WEIGHT  = 1, // blend between 2 matrices
  1823.     D3DVBLEND_2WEIGHTS = 2, // blend between 3 matrices
  1824.     D3DVBLEND_3WEIGHTS = 3, // blend between 4 matrices
  1825. } D3DVERTEXBLENDFLAGS;
  1826. typedef enum _D3DTEXTURETRANSFORMFLAGS {
  1827.     D3DTTFF_DISABLE         = 0,    // texture coordinates are passed directly
  1828.     D3DTTFF_COUNT1          = 1,    // rasterizer should expect 1-D texture coords
  1829.     D3DTTFF_COUNT2          = 2,    // rasterizer should expect 2-D texture coords
  1830.     D3DTTFF_COUNT3          = 3,    // rasterizer should expect 3-D texture coords
  1831.     D3DTTFF_COUNT4          = 4,    // rasterizer should expect 4-D texture coords
  1832.     D3DTTFF_PROJECTED       = 256,  // texcoords to be divided by COUNTth element
  1833.     D3DTTFF_FORCE_DWORD     = 0x7fffffff,
  1834. } D3DTEXTURETRANSFORMFLAGS;
  1835. // Macros to set texture coordinate format bits in the FVF id
  1836. #define D3DFVF_TEXTUREFORMAT2 0         // Two floating point values
  1837. #define D3DFVF_TEXTUREFORMAT1 3         // One floating point value
  1838. #define D3DFVF_TEXTUREFORMAT3 1         // Three floating point values
  1839. #define D3DFVF_TEXTUREFORMAT4 2         // Four floating point values
  1840. #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
  1841. #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
  1842. #define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
  1843. #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
  1844. #endif /* DIRECT3D_VERSION >= 0x0700 */
  1845. #else
  1846. //
  1847. // legacy vertex blend names
  1848. //
  1849. typedef enum _D3DVERTEXBLENDFLAGS D3DVERTEXBLENDFLAGS;
  1850. #define D3DVBLEND_DISABLE  (D3DVERTEXBLENDFLAGS)0
  1851. #define D3DVBLEND_1WEIGHT  (D3DVERTEXBLENDFLAGS)1
  1852. #define D3DVBLEND_2WEIGHTS (D3DVERTEXBLENDFLAGS)2
  1853. #define D3DVBLEND_3WEIGHTS (D3DVERTEXBLENDFLAGS)3
  1854. #endif //(DIRECT3D_VERSION < 0x0800)
  1855. #pragma pack()
  1856. #pragma warning(default:4201)
  1857. #endif /* _D3DTYPES_H_ */