home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / d3dcaps.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  14KB  |  314 lines

  1. /*==========================================================================;
  2.  *
  3.  *  Copyright (C) 1995-1997 Microsoft Corporation.  All Rights Reserved.
  4.  *
  5.  *  File:    d3dcaps.h
  6.  *  Content:    Direct3D capabilities include file
  7.  *
  8.  ***************************************************************************/
  9.  
  10. #ifndef _D3DCAPS_H
  11. #define _D3DCAPS_H
  12.  
  13. /* 
  14.  *  Pull in DirectDraw include file automatically:
  15.  */
  16. #include <ddraw.h>
  17.  
  18. #pragma pack(4)
  19.  
  20. /* Description of capabilities of transform */
  21.  
  22. typedef struct _D3DTRANSFORMCAPS {
  23.     DWORD dwSize;
  24.     DWORD dwCaps;
  25. } D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS;
  26.  
  27. #define D3DTRANSFORMCAPS_CLIP        0x00000001L /* Will clip whilst transforming */
  28.  
  29. /* Description of capabilities of lighting */
  30.  
  31. typedef struct _D3DLIGHTINGCAPS {
  32.     DWORD dwSize;
  33.     DWORD dwCaps;                   /* Lighting caps */
  34.     DWORD dwLightingModel;          /* Lighting model - RGB or mono */
  35.     DWORD dwNumLights;              /* Number of lights that can be handled */
  36. } D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS;
  37.  
  38. #define D3DLIGHTINGMODEL_RGB        0x00000001L
  39. #define D3DLIGHTINGMODEL_MONO        0x00000002L
  40.  
  41. #define D3DLIGHTCAPS_POINT        0x00000001L /* Point lights supported */
  42. #define D3DLIGHTCAPS_SPOT        0x00000002L /* Spot lights supported */
  43. #define D3DLIGHTCAPS_DIRECTIONAL    0x00000004L /* Directional lights supported */
  44. #define D3DLIGHTCAPS_PARALLELPOINT    0x00000008L /* Parallel point lights supported */
  45.  
  46. /* Description of capabilities for each primitive type */
  47.  
  48. typedef struct _D3DPrimCaps {
  49.     DWORD dwSize;
  50.     DWORD dwMiscCaps;                 /* Capability flags */
  51.     DWORD dwRasterCaps;
  52.     DWORD dwZCmpCaps;
  53.     DWORD dwSrcBlendCaps;
  54.     DWORD dwDestBlendCaps;
  55.     DWORD dwAlphaCmpCaps;
  56.     DWORD dwShadeCaps;
  57.     DWORD dwTextureCaps;
  58.     DWORD dwTextureFilterCaps;
  59.     DWORD dwTextureBlendCaps;
  60.     DWORD dwTextureAddressCaps;
  61.     DWORD dwStippleWidth;             /* maximum width and height of */
  62.     DWORD dwStippleHeight;            /* of supported stipple (up to 32x32) */
  63. } D3DPRIMCAPS, *LPD3DPRIMCAPS;
  64.  
  65. /* D3DPRIMCAPS dwMiscCaps */
  66.  
  67. #define D3DPMISCCAPS_MASKPLANES        0x00000001L
  68. #define D3DPMISCCAPS_MASKZ        0x00000002L
  69. #define D3DPMISCCAPS_LINEPATTERNREP    0x00000004L
  70. #define D3DPMISCCAPS_CONFORMANT        0x00000008L
  71. #define D3DPMISCCAPS_CULLNONE        0x00000010L
  72. #define D3DPMISCCAPS_CULLCW        0x00000020L
  73. #define D3DPMISCCAPS_CULLCCW        0x00000040L
  74.  
  75. /* D3DPRIMCAPS dwRasterCaps */
  76.  
  77. #define D3DPRASTERCAPS_DITHER                   0x00000001L
  78. #define D3DPRASTERCAPS_ROP2                     0x00000002L
  79. #define D3DPRASTERCAPS_XOR                      0x00000004L
  80. #define D3DPRASTERCAPS_PAT                      0x00000008L
  81. #define D3DPRASTERCAPS_ZTEST                    0x00000010L
  82. #define D3DPRASTERCAPS_SUBPIXEL                 0x00000020L
  83. #define D3DPRASTERCAPS_SUBPIXELX                0x00000040L
  84. #define D3DPRASTERCAPS_FOGVERTEX                0x00000080L
  85. #define D3DPRASTERCAPS_FOGTABLE                 0x00000100L
  86. #define D3DPRASTERCAPS_STIPPLE                  0x00000200L
  87. #define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT   0x00000400L
  88. #define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT 0x00000800L
  89. #define D3DPRASTERCAPS_ANTIALIASEDGES           0x00001000L
  90. #define D3DPRASTERCAPS_MIPMAPLODBIAS            0x00002000L
  91. #define D3DPRASTERCAPS_ZBIAS                    0x00004000L
  92. #define D3DPRASTERCAPS_ZBUFFERLESSHSR           0x00008000L
  93. #define D3DPRASTERCAPS_FOGRANGE                 0x00010000L
  94. #define D3DPRASTERCAPS_ANISOTROPY               0x00020000L
  95.  
  96. /* D3DPRIMCAPS dwZCmpCaps, dwAlphaCmpCaps */
  97.  
  98. #define D3DPCMPCAPS_NEVER        0x00000001L
  99. #define D3DPCMPCAPS_LESS             0x00000002L
  100. #define D3DPCMPCAPS_EQUAL            0x00000004L
  101. #define D3DPCMPCAPS_LESSEQUAL        0x00000008L
  102. #define D3DPCMPCAPS_GREATER          0x00000010L
  103. #define D3DPCMPCAPS_NOTEQUAL         0x00000020L
  104. #define D3DPCMPCAPS_GREATEREQUAL     0x00000040L
  105. #define D3DPCMPCAPS_ALWAYS           0x00000080L
  106.  
  107. /* D3DPRIMCAPS dwSourceBlendCaps, dwDestBlendCaps */
  108.  
  109. #define D3DPBLENDCAPS_ZERO              0x00000001L
  110. #define D3DPBLENDCAPS_ONE               0x00000002L
  111. #define D3DPBLENDCAPS_SRCCOLOR          0x00000004L
  112. #define D3DPBLENDCAPS_INVSRCCOLOR       0x00000008L
  113. #define D3DPBLENDCAPS_SRCALPHA          0x00000010L
  114. #define D3DPBLENDCAPS_INVSRCALPHA       0x00000020L
  115. #define D3DPBLENDCAPS_DESTALPHA         0x00000040L
  116. #define D3DPBLENDCAPS_INVDESTALPHA      0x00000080L
  117. #define D3DPBLENDCAPS_DESTCOLOR         0x00000100L
  118. #define D3DPBLENDCAPS_INVDESTCOLOR      0x00000200L
  119. #define D3DPBLENDCAPS_SRCALPHASAT       0x00000400L
  120. #define D3DPBLENDCAPS_BOTHSRCALPHA      0x00000800L
  121. #define D3DPBLENDCAPS_BOTHINVSRCALPHA   0x00001000L
  122.  
  123. /* D3DPRIMCAPS dwShadeCaps */
  124.  
  125. #define D3DPSHADECAPS_COLORFLATMONO        0x00000001L
  126. #define D3DPSHADECAPS_COLORFLATRGB        0x00000002L
  127. #define D3DPSHADECAPS_COLORGOURAUDMONO        0x00000004L
  128. #define D3DPSHADECAPS_COLORGOURAUDRGB        0x00000008L
  129. #define D3DPSHADECAPS_COLORPHONGMONO        0x00000010L
  130. #define D3DPSHADECAPS_COLORPHONGRGB        0x00000020L
  131.  
  132. #define D3DPSHADECAPS_SPECULARFLATMONO        0x00000040L
  133. #define D3DPSHADECAPS_SPECULARFLATRGB        0x00000080L
  134. #define D3DPSHADECAPS_SPECULARGOURAUDMONO    0x00000100L
  135. #define D3DPSHADECAPS_SPECULARGOURAUDRGB    0x00000200L
  136. #define D3DPSHADECAPS_SPECULARPHONGMONO        0x00000400L
  137. #define D3DPSHADECAPS_SPECULARPHONGRGB        0x00000800L
  138.  
  139. #define D3DPSHADECAPS_ALPHAFLATBLEND        0x00001000L
  140. #define D3DPSHADECAPS_ALPHAFLATSTIPPLED        0x00002000L
  141. #define D3DPSHADECAPS_ALPHAGOURAUDBLEND        0x00004000L
  142. #define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED    0x00008000L
  143. #define D3DPSHADECAPS_ALPHAPHONGBLEND        0x00010000L
  144. #define D3DPSHADECAPS_ALPHAPHONGSTIPPLED    0x00020000L
  145.  
  146. #define D3DPSHADECAPS_FOGFLAT            0x00040000L
  147. #define D3DPSHADECAPS_FOGGOURAUD        0x00080000L
  148. #define D3DPSHADECAPS_FOGPHONG            0x00100000L
  149.  
  150. /* D3DPRIMCAPS dwTextureCaps */
  151.  
  152. #define D3DPTEXTURECAPS_PERSPECTIVE    0x00000001L
  153. #define D3DPTEXTURECAPS_POW2        0x00000002L
  154. #define D3DPTEXTURECAPS_ALPHA        0x00000004L
  155. #define D3DPTEXTURECAPS_TRANSPARENCY    0x00000008L
  156. #define D3DPTEXTURECAPS_BORDER        0x00000010L
  157. #define D3DPTEXTURECAPS_SQUAREONLY    0x00000020L
  158.  
  159. /* D3DPRIMCAPS dwTextureFilterCaps */
  160.  
  161. #define D3DPTFILTERCAPS_NEAREST        0x00000001L
  162. #define D3DPTFILTERCAPS_LINEAR        0x00000002L
  163. #define D3DPTFILTERCAPS_MIPNEAREST    0x00000004L
  164. #define D3DPTFILTERCAPS_MIPLINEAR    0x00000008L
  165. #define D3DPTFILTERCAPS_LINEARMIPNEAREST 0x00000010L
  166. #define D3DPTFILTERCAPS_LINEARMIPLINEAR    0x00000020L
  167.  
  168. /* D3DPRIMCAPS dwTextureBlendCaps */
  169.  
  170. #define D3DPTBLENDCAPS_DECAL        0x00000001L
  171. #define D3DPTBLENDCAPS_MODULATE        0x00000002L
  172. #define D3DPTBLENDCAPS_DECALALPHA    0x00000004L
  173. #define D3DPTBLENDCAPS_MODULATEALPHA    0x00000008L
  174. #define D3DPTBLENDCAPS_DECALMASK    0x00000010L
  175. #define D3DPTBLENDCAPS_MODULATEMASK    0x00000020L
  176. #define D3DPTBLENDCAPS_COPY        0x00000040L
  177. #define D3DPTBLENDCAPS_ADD        0x00000080L
  178.  
  179. /* D3DPRIMCAPS dwTextureAddressCaps */
  180. #define D3DPTADDRESSCAPS_WRAP        0x00000001L
  181. #define D3DPTADDRESSCAPS_MIRROR        0x00000002L
  182. #define D3DPTADDRESSCAPS_CLAMP        0x00000004L
  183. #define D3DPTADDRESSCAPS_BORDER     0x00000008L
  184. #define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010L
  185.  
  186. /*
  187.  * Description for a device.
  188.  * This is used to describe a device that is to be created or to query
  189.  * the current device.
  190.  */
  191. typedef struct _D3DDeviceDesc {
  192.     DWORD         dwSize;             /* Size of D3DDEVICEDESC structure */
  193.     DWORD         dwFlags;                 /* Indicates which fields have valid data */
  194.     D3DCOLORMODEL    dcmColorModel;         /* Color model of device */
  195.     DWORD         dwDevCaps;                 /* Capabilities of device */
  196.     D3DTRANSFORMCAPS dtcTransformCaps;       /* Capabilities of transform */
  197.     BOOL         bClipping;                 /* Device can do 3D clipping */
  198.     D3DLIGHTINGCAPS  dlcLightingCaps;        /* Capabilities of lighting */
  199.     D3DPRIMCAPS      dpcLineCaps;
  200.     D3DPRIMCAPS      dpcTriCaps;
  201.     DWORD         dwDeviceRenderBitDepth; /* One of DDBB_8, 16, etc.. */
  202.     DWORD         dwDeviceZBufferBitDepth;/* One of DDBD_16, 32, etc.. */
  203.     DWORD         dwMaxBufferSize;        /* Maximum execute buffer size */
  204.     DWORD         dwMaxVertexCount;       /* Maximum vertex count */
  205.     // *** New fields for DX5 *** //
  206.  
  207.     // Width and height caps are 0 for legacy HALs.
  208.     DWORD        dwMinTextureWidth, dwMinTextureHeight;
  209.     DWORD        dwMaxTextureWidth, dwMaxTextureHeight;
  210.     DWORD        dwMinStippleWidth, dwMaxStippleWidth;
  211.     DWORD        dwMinStippleHeight, dwMaxStippleHeight;
  212. } D3DDEVICEDESC, *LPD3DDEVICEDESC;
  213.  
  214. #define D3DDEVICEDESCSIZE (sizeof(D3DDEVICEDESC))
  215.  
  216. typedef HRESULT (FAR PASCAL * LPD3DENUMDEVICESCALLBACK)(LPGUID lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC, LPD3DDEVICEDESC, LPVOID);
  217.  
  218. /* D3DDEVICEDESC dwFlags indicating valid fields */
  219.  
  220. #define D3DDD_COLORMODEL        0x00000001L /* dcmColorModel is valid */
  221. #define D3DDD_DEVCAPS            0x00000002L /* dwDevCaps is valid */
  222. #define D3DDD_TRANSFORMCAPS         0x00000004L /* dtcTransformCaps is valid */
  223. #define D3DDD_LIGHTINGCAPS          0x00000008L /* dlcLightingCaps is valid */
  224. #define D3DDD_BCLIPPING             0x00000010L /* bClipping is valid */
  225. #define D3DDD_LINECAPS              0x00000020L /* dpcLineCaps is valid */
  226. #define D3DDD_TRICAPS               0x00000040L /* dpcTriCaps is valid */
  227. #define D3DDD_DEVICERENDERBITDEPTH  0x00000080L    /* dwDeviceRenderBitDepth is valid */
  228. #define D3DDD_DEVICEZBUFFERBITDEPTH 0x00000100L    /* dwDeviceZBufferBitDepth is valid */
  229. #define D3DDD_MAXBUFFERSIZE         0x00000200L /* dwMaxBufferSize is valid */
  230. #define D3DDD_MAXVERTEXCOUNT        0x00000400L /* dwMaxVertexCount is valid */
  231.  
  232. /* D3DDEVICEDESC dwDevCaps flags */
  233.  
  234. #define D3DDEVCAPS_FLOATTLVERTEX        0x00000001L /* Device accepts floating point */
  235.                                                     /* for post-transform vertex data */
  236. #define D3DDEVCAPS_SORTINCREASINGZ      0x00000002L /* Device needs data sorted for increasing Z*/
  237. #define D3DDEVCAPS_SORTDECREASINGZ      0X00000004L /* Device needs data sorted for decreasing Z*/
  238. #define D3DDEVCAPS_SORTEXACT            0x00000008L /* Device needs data sorted exactly */
  239.  
  240. #define D3DDEVCAPS_EXECUTESYSTEMMEMORY  0x00000010L /* Device can use execute buffers from system memory */
  241. #define D3DDEVCAPS_EXECUTEVIDEOMEMORY   0x00000020L /* Device can use execute buffers from video memory */
  242. #define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */
  243. #define D3DDEVCAPS_TLVERTEXVIDEOMEMORY  0x00000080L /* Device can use TL buffers from video memory */
  244. #define D3DDEVCAPS_TEXTURESYSTEMMEMORY  0x00000100L /* Device can texture from system memory */
  245. #define D3DDEVCAPS_TEXTUREVIDEOMEMORY    0x00000200L /* Device can texture from device memory */
  246. #define D3DDEVCAPS_DRAWPRIMTLVERTEX     0x00000400L /* Device can draw TLVERTEX primitives */
  247. #define D3DDEVCAPS_CANRENDERAFTERFLIP    0x00000800L /* Device can render without waiting for flip to complete */
  248. #define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */
  249.  
  250. #define D3DFDS_COLORMODEL     0x00000001L /* Match color model */
  251. #define D3DFDS_GUID         0x00000002L /* Match guid */
  252. #define D3DFDS_HARDWARE         0x00000004L /* Match hardware/software */
  253. #define D3DFDS_TRIANGLES     0x00000008L /* Match in triCaps */
  254. #define D3DFDS_LINES         0x00000010L /* Match in lineCaps  */
  255. #define D3DFDS_MISCCAPS         0x00000020L /* Match primCaps.dwMiscCaps */
  256. #define D3DFDS_RASTERCAPS     0x00000040L /* Match primCaps.dwRasterCaps */
  257. #define D3DFDS_ZCMPCAPS         0x00000080L /* Match primCaps.dwZCmpCaps */
  258. #define D3DFDS_ALPHACMPCAPS     0x00000100L /* Match primCaps.dwAlphaCmpCaps */
  259. #define D3DFDS_SRCBLENDCAPS     0x00000200L /* Match primCaps.dwSourceBlendCaps */
  260. #define D3DFDS_DSTBLENDCAPS     0x00000400L /* Match primCaps.dwDestBlendCaps */
  261. #define D3DFDS_SHADECAPS     0x00000800L /* Match primCaps.dwShadeCaps */
  262. #define D3DFDS_TEXTURECAPS     0x00001000L /* Match primCaps.dwTextureCaps */
  263. #define D3DFDS_TEXTUREFILTERCAPS 0x00002000L /* Match primCaps.dwTextureFilterCaps */
  264. #define D3DFDS_TEXTUREBLENDCAPS  0x00004000L /* Match primCaps.dwTextureBlendCaps */
  265. #define D3DFDS_TEXTUREADDRESSCAPS  0x00008000L /* Match primCaps.dwTextureBlendCaps */
  266.  
  267. /*
  268.  * FindDevice arguments
  269.  */
  270. typedef struct _D3DFINDDEVICESEARCH {
  271.     DWORD        dwSize;
  272.     DWORD        dwFlags;
  273.     BOOL        bHardware;
  274.     D3DCOLORMODEL    dcmColorModel;
  275.     GUID        guid;
  276.     DWORD        dwCaps;
  277.     D3DPRIMCAPS        dpcPrimCaps;
  278. } D3DFINDDEVICESEARCH, *LPD3DFINDDEVICESEARCH;
  279.  
  280. typedef struct _D3DFINDDEVICERESULT {
  281.     DWORD        dwSize;
  282.     GUID        guid;        /* guid which matched */
  283.     D3DDEVICEDESC       ddHwDesc;       /* hardware D3DDEVICEDESC */
  284.     D3DDEVICEDESC       ddSwDesc;       /* software D3DDEVICEDESC */
  285. } D3DFINDDEVICERESULT, *LPD3DFINDDEVICERESULT;
  286.  
  287.  
  288. /*
  289.  * Description of execute buffer.
  290.  */
  291. typedef struct _D3DExecuteBufferDesc {
  292.     DWORD        dwSize;        /* size of this structure */
  293.     DWORD        dwFlags;    /* flags indicating which fields are valid */
  294.     DWORD        dwCaps;        /* capabilities of execute buffer */
  295.     DWORD        dwBufferSize;    /* size of execute buffer data */
  296.     LPVOID        lpData;        /* pointer to actual data */
  297. } D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC;
  298.  
  299. /* D3DEXECUTEBUFFER dwFlags indicating valid fields */
  300.  
  301. #define D3DDEB_BUFSIZE        0x00000001l     /* buffer size valid */
  302. #define D3DDEB_CAPS        0x00000002l     /* caps valid */
  303. #define D3DDEB_LPDATA        0x00000004l     /* lpData valid */
  304.  
  305. /* D3DEXECUTEBUFFER dwCaps */
  306.  
  307. #define D3DDEBCAPS_SYSTEMMEMORY    0x00000001l     /* buffer in system memory */
  308. #define D3DDEBCAPS_VIDEOMEMORY    0x00000002l     /* buffer in device memory */
  309. #define D3DDEBCAPS_MEM (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY)
  310.  
  311. #pragma pack()
  312.  
  313. #endif /* _D3DCAPS_H_ */
  314.