Subversion Repositories Games.Chess Giants

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*==========================================================================;
  2.  *
  3.  *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  4.  *
  5.  *  File:       ddraw.h
  6.  *  Content:    DirectDraw include file
  7.  *
  8.  ***************************************************************************/
  9.  
  10. #ifndef __DDRAW_INCLUDED__
  11. #define __DDRAW_INCLUDED__
  12.  
  13. //Disable the nameless union warning when building internally
  14. #undef ENABLE_NAMELESS_UNION_PRAGMA
  15. #ifdef DIRECTX_REDIST
  16. #define ENABLE_NAMELESS_UNION_PRAGMA
  17. #endif
  18.  
  19. #ifdef ENABLE_NAMELESS_UNION_PRAGMA
  20. #pragma warning(disable:4201)
  21. #endif
  22.  
  23. /*
  24.  * If you wish an application built against the newest version of DirectDraw
  25.  * to run against an older DirectDraw run time then define DIRECTDRAW_VERSION
  26.  * to be the earlies version of DirectDraw you wish to run against. For,
  27.  * example if you wish an application to run against a DX 3 runtime define
  28.  * DIRECTDRAW_VERSION to be 0x0300.
  29.  */
  30. #ifndef   DIRECTDRAW_VERSION
  31. #define   DIRECTDRAW_VERSION 0x0700
  32. #endif /* DIRECTDRAW_VERSION */
  33.  
  34. #if defined( _WIN32 )  && !defined( _NO_COM )
  35. #define COM_NO_WINDOWS_H
  36. #include <objbase.h>
  37. #else
  38. #define IUnknown            void
  39. #if !defined( NT_BUILD_ENVIRONMENT ) && !defined(WINNT)
  40.         #define CO_E_NOTINITIALIZED 0x800401F0L
  41. #endif
  42. #endif
  43.  
  44. #define _FACDD  0x876
  45. #define MAKE_DDHRESULT( code )  MAKE_HRESULT( 1, _FACDD, code )
  46.  
  47. #ifdef __cplusplus
  48. extern "C" {
  49. #endif
  50.  
  51. //
  52. // For compilers that don't support nameless unions, do a
  53. //
  54. // #define NONAMELESSUNION
  55. //
  56. // before #include <ddraw.h>
  57. //
  58. #ifndef DUMMYUNIONNAMEN
  59. #if defined(__cplusplus) || !defined(NONAMELESSUNION)
  60. #define DUMMYUNIONNAMEN(n)
  61. #else
  62. #define DUMMYUNIONNAMEN(n)      u##n
  63. #endif
  64. #endif
  65.  
  66. #ifndef MAKEFOURCC
  67.     #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
  68.                 ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |   \
  69.                 ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
  70. #endif //defined(MAKEFOURCC)
  71.  
  72. /*
  73.  * FOURCC codes for DX compressed-texture pixel formats
  74.  */
  75. #define FOURCC_DXT1  (MAKEFOURCC('D','X','T','1'))
  76. #define FOURCC_DXT2  (MAKEFOURCC('D','X','T','2'))
  77. #define FOURCC_DXT3  (MAKEFOURCC('D','X','T','3'))
  78. #define FOURCC_DXT4  (MAKEFOURCC('D','X','T','4'))
  79. #define FOURCC_DXT5  (MAKEFOURCC('D','X','T','5'))
  80.  
  81. /*
  82.  * GUIDS used by DirectDraw objects
  83.  */
  84. #if defined( _WIN32 ) && !defined( _NO_COM )
  85.  
  86. DEFINE_GUID( CLSID_DirectDraw,                  0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 );
  87. DEFINE_GUID( CLSID_DirectDraw7,                 0x3c305196,0x50db,0x11d3,0x9c,0xfe,0x00,0xc0,0x4f,0xd9,0x30,0xc5 );
  88. DEFINE_GUID( CLSID_DirectDrawClipper,           0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 );
  89. DEFINE_GUID( IID_IDirectDraw,                   0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  90. DEFINE_GUID( IID_IDirectDraw2,                  0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 );
  91. DEFINE_GUID( IID_IDirectDraw4,                  0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 );
  92. DEFINE_GUID( IID_IDirectDraw7,                  0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );
  93. DEFINE_GUID( IID_IDirectDrawSurface,            0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  94. DEFINE_GUID( IID_IDirectDrawSurface2,           0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 );
  95. DEFINE_GUID( IID_IDirectDrawSurface3,           0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB );
  96. DEFINE_GUID( IID_IDirectDrawSurface4,           0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B );
  97. DEFINE_GUID( IID_IDirectDrawSurface7,           0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );
  98. DEFINE_GUID( IID_IDirectDrawPalette,            0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  99. DEFINE_GUID( IID_IDirectDrawClipper,            0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  100. DEFINE_GUID( IID_IDirectDrawColorControl,       0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 );
  101. DEFINE_GUID( IID_IDirectDrawGammaControl,       0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E );
  102.  
  103. #endif
  104.  
  105. /*============================================================================
  106.  *
  107.  * DirectDraw Structures
  108.  *
  109.  * Various structures used to invoke DirectDraw.
  110.  *
  111.  *==========================================================================*/
  112.  
  113. struct IDirectDraw;
  114. struct IDirectDrawSurface;
  115. struct IDirectDrawPalette;
  116. struct IDirectDrawClipper;
  117.  
  118. typedef struct IDirectDraw              FAR *LPDIRECTDRAW;
  119. typedef struct IDirectDraw2             FAR *LPDIRECTDRAW2;
  120. typedef struct IDirectDraw4             FAR *LPDIRECTDRAW4;
  121. typedef struct IDirectDraw7             FAR *LPDIRECTDRAW7;
  122. typedef struct IDirectDrawSurface       FAR *LPDIRECTDRAWSURFACE;
  123. typedef struct IDirectDrawSurface2      FAR *LPDIRECTDRAWSURFACE2;
  124. typedef struct IDirectDrawSurface3      FAR *LPDIRECTDRAWSURFACE3;
  125. typedef struct IDirectDrawSurface4      FAR *LPDIRECTDRAWSURFACE4;
  126. typedef struct IDirectDrawSurface7      FAR *LPDIRECTDRAWSURFACE7;
  127. typedef struct IDirectDrawPalette               FAR *LPDIRECTDRAWPALETTE;
  128. typedef struct IDirectDrawClipper               FAR *LPDIRECTDRAWCLIPPER;
  129. typedef struct IDirectDrawColorControl          FAR *LPDIRECTDRAWCOLORCONTROL;
  130. typedef struct IDirectDrawGammaControl          FAR *LPDIRECTDRAWGAMMACONTROL;
  131.  
  132. typedef struct _DDFXROP                 FAR *LPDDFXROP;
  133. typedef struct _DDSURFACEDESC           FAR *LPDDSURFACEDESC;
  134. typedef struct _DDSURFACEDESC2          FAR *LPDDSURFACEDESC2;
  135. typedef struct _DDCOLORCONTROL          FAR *LPDDCOLORCONTROL;
  136.  
  137. /*
  138.  * API's
  139.  */
  140. #if (defined (WIN32) || defined( _WIN32 ) ) && !defined( _NO_COM )
  141. //#if defined( _WIN32 ) && !defined( _NO_ENUM )
  142.     typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKA)(GUID FAR *, LPSTR, LPSTR, LPVOID);
  143.     typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID);
  144.     extern HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext );
  145.     extern HRESULT WINAPI DirectDrawEnumerateA( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext );
  146.     /*
  147.      * Protect against old SDKs
  148.      */
  149.     #if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500)
  150.         #define HMONITOR_DECLARED
  151.         DECLARE_HANDLE(HMONITOR);
  152.     #endif
  153.     typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXA)(GUID FAR *, LPSTR, LPSTR, LPVOID, HMONITOR);
  154.     typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID, HMONITOR);
  155.     extern HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags);
  156.     extern HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags);
  157.     typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags);
  158.     typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags);
  159.  
  160.     #ifdef UNICODE
  161.         typedef LPDDENUMCALLBACKW           LPDDENUMCALLBACK;
  162.         #define DirectDrawEnumerate         DirectDrawEnumerateW
  163.         typedef LPDDENUMCALLBACKEXW         LPDDENUMCALLBACKEX;
  164.         typedef LPDIRECTDRAWENUMERATEEXW        LPDIRECTDRAWENUMERATEEX;
  165.         #define DirectDrawEnumerateEx       DirectDrawEnumerateExW
  166.     #else
  167.         typedef LPDDENUMCALLBACKA           LPDDENUMCALLBACK;
  168.         #define DirectDrawEnumerate         DirectDrawEnumerateA
  169.         typedef LPDDENUMCALLBACKEXA         LPDDENUMCALLBACKEX;
  170.         typedef LPDIRECTDRAWENUMERATEEXA        LPDIRECTDRAWENUMERATEEX;
  171.         #define DirectDrawEnumerateEx       DirectDrawEnumerateExA
  172.     #endif
  173.     extern HRESULT WINAPI DirectDrawCreate( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter );
  174.     extern HRESULT WINAPI DirectDrawCreateEx( GUID FAR * lpGuid, LPVOID  *lplpDD, REFIID  iid,IUnknown FAR *pUnkOuter );
  175.     extern HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR *lplpDDClipper, IUnknown FAR *pUnkOuter );
  176. #endif
  177. /*
  178.  * Flags for DirectDrawEnumerateEx
  179.  * DirectDrawEnumerateEx supercedes DirectDrawEnumerate. You must use GetProcAddress to
  180.  * obtain a function pointer (of type LPDIRECTDRAWENUMERATEEX) to DirectDrawEnumerateEx.
  181.  * By default, only the primary display device is enumerated.
  182.  * DirectDrawEnumerate is equivalent to DirectDrawEnumerate(,,DDENUM_NONDISPLAYDEVICES)
  183.  */
  184.  
  185. /*
  186.  * This flag causes enumeration of any GDI display devices which are part of
  187.  * the Windows Desktop
  188.  */
  189. #define DDENUM_ATTACHEDSECONDARYDEVICES     0x00000001L
  190.  
  191. /*
  192.  * This flag causes enumeration of any GDI display devices which are not
  193.  * part of the Windows Desktop
  194.  */
  195. #define DDENUM_DETACHEDSECONDARYDEVICES     0x00000002L
  196.  
  197. /*
  198.  * This flag causes enumeration of non-display devices
  199.  */
  200. #define DDENUM_NONDISPLAYDEVICES            0x00000004L
  201.  
  202.  
  203. #define REGSTR_KEY_DDHW_DESCRIPTION     "Description"
  204. #define REGSTR_KEY_DDHW_DRIVERNAME      "DriverName"
  205. #define REGSTR_PATH_DDHW                "Hardware\\DirectDrawDrivers"
  206.  
  207. #define DDCREATE_HARDWAREONLY           0x00000001l
  208. #define DDCREATE_EMULATIONONLY          0x00000002l
  209.  
  210. #if defined(WINNT) || !defined(WIN32)
  211. #ifndef _HRESULT_DEFINED
  212. #define _HRESULT_DEFINED
  213. typedef __success(return >= 0) long HRESULT;
  214. #endif // !_HRESULT_DEFINED
  215. #endif
  216.  
  217. //#ifndef WINNT
  218. typedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID);
  219. typedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK2)(LPDDSURFACEDESC2, LPVOID);
  220. typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID);
  221. typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK2)(LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID);
  222. typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK7)(LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID);
  223. //#endif
  224.  
  225. /*
  226.  * Generic pixel format with 8-bit RGB and alpha components
  227.  */
  228. typedef struct _DDARGB
  229. {
  230.     BYTE blue;
  231.     BYTE green;
  232.     BYTE red;
  233.     BYTE alpha;
  234. } DDARGB;
  235.  
  236. typedef DDARGB FAR *LPDDARGB;
  237.  
  238. /*
  239.  * This version of the structure remains for backwards source compatibility.
  240.  * The DDARGB structure is the one that should be used for all DirectDraw APIs.
  241.  */
  242. typedef struct _DDRGBA
  243. {
  244.     BYTE red;
  245.     BYTE green;
  246.     BYTE blue;
  247.     BYTE alpha;
  248. } DDRGBA;
  249.  
  250. typedef DDRGBA FAR *LPDDRGBA;
  251.  
  252.  
  253. /*
  254.  * DDCOLORKEY
  255.  */
  256. typedef struct _DDCOLORKEY
  257. {
  258.     DWORD       dwColorSpaceLowValue;   // low boundary of color space that is to
  259.                                         // be treated as Color Key, inclusive
  260.     DWORD       dwColorSpaceHighValue;  // high boundary of color space that is
  261.                                         // to be treated as Color Key, inclusive
  262. } DDCOLORKEY;
  263.  
  264. typedef DDCOLORKEY FAR* LPDDCOLORKEY;
  265.  
  266. /*
  267.  * DDBLTFX
  268.  * Used to pass override information to the DIRECTDRAWSURFACE callback Blt.
  269.  */
  270. typedef struct _DDBLTFX
  271. {
  272.     DWORD       dwSize;                         // size of structure
  273.     DWORD       dwDDFX;                         // FX operations
  274.     DWORD       dwROP;                          // Win32 raster operations
  275.     DWORD       dwDDROP;                        // Raster operations new for DirectDraw
  276.     DWORD       dwRotationAngle;                // Rotation angle for blt
  277.     DWORD       dwZBufferOpCode;                // ZBuffer compares
  278.     DWORD       dwZBufferLow;                   // Low limit of Z buffer
  279.     DWORD       dwZBufferHigh;                  // High limit of Z buffer
  280.     DWORD       dwZBufferBaseDest;              // Destination base value
  281.     DWORD       dwZDestConstBitDepth;           // Bit depth used to specify Z constant for destination
  282.     union
  283.     {
  284.         DWORD   dwZDestConst;                   // Constant to use as Z buffer for dest
  285.         LPDIRECTDRAWSURFACE lpDDSZBufferDest;   // Surface to use as Z buffer for dest
  286.     } DUMMYUNIONNAMEN(1);
  287.     DWORD       dwZSrcConstBitDepth;            // Bit depth used to specify Z constant for source
  288.     union
  289.     {
  290.         DWORD   dwZSrcConst;                    // Constant to use as Z buffer for src
  291.         LPDIRECTDRAWSURFACE lpDDSZBufferSrc;    // Surface to use as Z buffer for src
  292.     } DUMMYUNIONNAMEN(2);
  293.     DWORD       dwAlphaEdgeBlendBitDepth;       // Bit depth used to specify constant for alpha edge blend
  294.     DWORD       dwAlphaEdgeBlend;               // Alpha for edge blending
  295.     DWORD       dwReserved;
  296.     DWORD       dwAlphaDestConstBitDepth;       // Bit depth used to specify alpha constant for destination
  297.     union
  298.     {
  299.         DWORD   dwAlphaDestConst;               // Constant to use as Alpha Channel
  300.         LPDIRECTDRAWSURFACE lpDDSAlphaDest;     // Surface to use as Alpha Channel
  301.     } DUMMYUNIONNAMEN(3);
  302.     DWORD       dwAlphaSrcConstBitDepth;        // Bit depth used to specify alpha constant for source
  303.     union
  304.     {
  305.         DWORD   dwAlphaSrcConst;                // Constant to use as Alpha Channel
  306.         LPDIRECTDRAWSURFACE lpDDSAlphaSrc;      // Surface to use as Alpha Channel
  307.     } DUMMYUNIONNAMEN(4);
  308.     union
  309.     {
  310.         DWORD   dwFillColor;                    // color in RGB or Palettized
  311.         DWORD   dwFillDepth;                    // depth value for z-buffer
  312.         DWORD   dwFillPixel;                    // pixel value for RGBA or RGBZ
  313.         LPDIRECTDRAWSURFACE lpDDSPattern;       // Surface to use as pattern
  314.     } DUMMYUNIONNAMEN(5);
  315.     DDCOLORKEY  ddckDestColorkey;               // DestColorkey override
  316.     DDCOLORKEY  ddckSrcColorkey;                // SrcColorkey override
  317. } DDBLTFX;
  318.  
  319. typedef DDBLTFX FAR* LPDDBLTFX;
  320.  
  321.  
  322.  
  323. /*
  324.  * DDSCAPS
  325.  */
  326. typedef struct _DDSCAPS
  327. {
  328.     DWORD       dwCaps;         // capabilities of surface wanted
  329. } DDSCAPS;
  330.  
  331. typedef DDSCAPS FAR* LPDDSCAPS;
  332.  
  333.  
  334. /*
  335.  * DDOSCAPS
  336.  */
  337. typedef struct _DDOSCAPS
  338. {
  339.     DWORD       dwCaps;         // capabilities of surface wanted
  340. } DDOSCAPS;
  341.  
  342. typedef DDOSCAPS FAR* LPDDOSCAPS;
  343.  
  344. /*
  345.  * This structure is used internally by DirectDraw.
  346.  */
  347. typedef struct _DDSCAPSEX
  348. {
  349.     DWORD       dwCaps2;
  350.     DWORD       dwCaps3;
  351.     union
  352.     {
  353.         DWORD       dwCaps4;
  354.         DWORD       dwVolumeDepth;
  355.     } DUMMYUNIONNAMEN(1);
  356. } DDSCAPSEX, FAR * LPDDSCAPSEX;
  357.  
  358. /*
  359.  * DDSCAPS2
  360.  */
  361. typedef struct _DDSCAPS2
  362. {
  363.     DWORD       dwCaps;         // capabilities of surface wanted
  364.     DWORD       dwCaps2;
  365.     DWORD       dwCaps3;
  366.     union
  367.     {
  368.         DWORD       dwCaps4;
  369.         DWORD       dwVolumeDepth;
  370.     } DUMMYUNIONNAMEN(1);
  371. } DDSCAPS2;
  372.  
  373. typedef DDSCAPS2 FAR* LPDDSCAPS2;
  374.  
  375. /*
  376.  * DDCAPS
  377.  */
  378. #define DD_ROP_SPACE            (256/32)        // space required to store ROP array
  379. /*
  380.  * NOTE: Our choosen structure number scheme is to append a single digit to
  381.  * the end of the structure giving the version that structure is associated
  382.  * with.
  383.  */
  384.  
  385. /*
  386.  * This structure represents the DDCAPS structure released in DirectDraw 1.0.  It is used internally
  387.  * by DirectDraw to interpret caps passed into ddraw by drivers written prior to the release of DirectDraw 2.0.
  388.  * New applications should use the DDCAPS structure defined below.
  389.  */
  390. typedef struct _DDCAPS_DX1
  391. {
  392.     DWORD       dwSize;                 // size of the DDDRIVERCAPS structure
  393.     DWORD       dwCaps;                 // driver specific capabilities
  394.     DWORD       dwCaps2;                // more driver specific capabilites
  395.     DWORD       dwCKeyCaps;             // color key capabilities of the surface
  396.     DWORD       dwFXCaps;               // driver specific stretching and effects capabilites
  397.     DWORD       dwFXAlphaCaps;          // alpha driver specific capabilities
  398.     DWORD       dwPalCaps;              // palette capabilities
  399.     DWORD       dwSVCaps;               // stereo vision capabilities
  400.     DWORD       dwAlphaBltConstBitDepths;       // DDBD_2,4,8
  401.     DWORD       dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8
  402.     DWORD       dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8
  403.     DWORD       dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8
  404.     DWORD       dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8
  405.     DWORD       dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8
  406.     DWORD       dwZBufferBitDepths;             // DDBD_8,16,24,32
  407.     DWORD       dwVidMemTotal;          // total amount of video memory
  408.     DWORD       dwVidMemFree;           // amount of free video memory
  409.     DWORD       dwMaxVisibleOverlays;   // maximum number of visible overlays
  410.     DWORD       dwCurrVisibleOverlays;  // current number of visible overlays
  411.     DWORD       dwNumFourCCCodes;       // number of four cc codes
  412.     DWORD       dwAlignBoundarySrc;     // source rectangle alignment
  413.     DWORD       dwAlignSizeSrc;         // source rectangle byte size
  414.     DWORD       dwAlignBoundaryDest;    // dest rectangle alignment
  415.     DWORD       dwAlignSizeDest;        // dest rectangle byte size
  416.     DWORD       dwAlignStrideAlign;     // stride alignment
  417.     DWORD       dwRops[DD_ROP_SPACE];   // ROPS supported
  418.     DDSCAPS     ddsCaps;                // DDSCAPS structure has all the general capabilities
  419.     DWORD       dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  420.     DWORD       dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  421.     DWORD       dwMinLiveVideoStretch;  // OBSOLETE! This field remains for compatability reasons only
  422.     DWORD       dwMaxLiveVideoStretch;  // OBSOLETE! This field remains for compatability reasons only
  423.     DWORD       dwMinHwCodecStretch;    // OBSOLETE! This field remains for compatability reasons only
  424.     DWORD       dwMaxHwCodecStretch;    // OBSOLETE! This field remains for compatability reasons only
  425.     DWORD       dwReserved1;            // reserved
  426.     DWORD       dwReserved2;            // reserved
  427.     DWORD       dwReserved3;            // reserved
  428. } DDCAPS_DX1;
  429.  
  430. typedef DDCAPS_DX1 FAR* LPDDCAPS_DX1;
  431.  
  432. /*
  433.  * This structure is the DDCAPS structure as it was in version 2 and 3 of Direct X.
  434.  * It is present for back compatability.
  435.  */
  436. typedef struct _DDCAPS_DX3
  437. {
  438.     DWORD       dwSize;                 // size of the DDDRIVERCAPS structure
  439.     DWORD       dwCaps;                 // driver specific capabilities
  440.     DWORD       dwCaps2;                // more driver specific capabilites
  441.     DWORD       dwCKeyCaps;             // color key capabilities of the surface
  442.     DWORD       dwFXCaps;               // driver specific stretching and effects capabilites
  443.     DWORD       dwFXAlphaCaps;          // alpha driver specific capabilities
  444.     DWORD       dwPalCaps;              // palette capabilities
  445.     DWORD       dwSVCaps;               // stereo vision capabilities
  446.     DWORD       dwAlphaBltConstBitDepths;       // DDBD_2,4,8
  447.     DWORD       dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8
  448.     DWORD       dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8
  449.     DWORD       dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8
  450.     DWORD       dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8
  451.     DWORD       dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8
  452.     DWORD       dwZBufferBitDepths;             // DDBD_8,16,24,32
  453.     DWORD       dwVidMemTotal;          // total amount of video memory
  454.     DWORD       dwVidMemFree;           // amount of free video memory
  455.     DWORD       dwMaxVisibleOverlays;   // maximum number of visible overlays
  456.     DWORD       dwCurrVisibleOverlays;  // current number of visible overlays
  457.     DWORD       dwNumFourCCCodes;       // number of four cc codes
  458.     DWORD       dwAlignBoundarySrc;     // source rectangle alignment
  459.     DWORD       dwAlignSizeSrc;         // source rectangle byte size
  460.     DWORD       dwAlignBoundaryDest;    // dest rectangle alignment
  461.     DWORD       dwAlignSizeDest;        // dest rectangle byte size
  462.     DWORD       dwAlignStrideAlign;     // stride alignment
  463.     DWORD       dwRops[DD_ROP_SPACE];   // ROPS supported
  464.     DDSCAPS     ddsCaps;                // DDSCAPS structure has all the general capabilities
  465.     DWORD       dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  466.     DWORD       dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  467.     DWORD       dwMinLiveVideoStretch;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  468.     DWORD       dwMaxLiveVideoStretch;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  469.     DWORD       dwMinHwCodecStretch;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  470.     DWORD       dwMaxHwCodecStretch;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  471.     DWORD       dwReserved1;            // reserved
  472.     DWORD       dwReserved2;            // reserved
  473.     DWORD       dwReserved3;            // reserved
  474.     DWORD       dwSVBCaps;              // driver specific capabilities for System->Vmem blts
  475.     DWORD       dwSVBCKeyCaps;          // driver color key capabilities for System->Vmem blts
  476.     DWORD       dwSVBFXCaps;            // driver FX capabilities for System->Vmem blts
  477.     DWORD       dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts
  478.     DWORD       dwVSBCaps;              // driver specific capabilities for Vmem->System blts
  479.     DWORD       dwVSBCKeyCaps;          // driver color key capabilities for Vmem->System blts
  480.     DWORD       dwVSBFXCaps;            // driver FX capabilities for Vmem->System blts
  481.     DWORD       dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts
  482.     DWORD       dwSSBCaps;              // driver specific capabilities for System->System blts
  483.     DWORD       dwSSBCKeyCaps;          // driver color key capabilities for System->System blts
  484.     DWORD       dwSSBFXCaps;            // driver FX capabilities for System->System blts
  485.     DWORD       dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts
  486.     DWORD       dwReserved4;            // reserved
  487.     DWORD       dwReserved5;            // reserved
  488.     DWORD       dwReserved6;            // reserved
  489. } DDCAPS_DX3;
  490. typedef DDCAPS_DX3 FAR* LPDDCAPS_DX3;
  491.  
  492. /*
  493.  * This structure is the DDCAPS structure as it was in version 5 of Direct X.
  494.  * It is present for back compatability.
  495.  */
  496. typedef struct _DDCAPS_DX5
  497. {
  498. /*  0*/ DWORD   dwSize;                 // size of the DDDRIVERCAPS structure
  499. /*  4*/ DWORD   dwCaps;                 // driver specific capabilities
  500. /*  8*/ DWORD   dwCaps2;                // more driver specific capabilites
  501. /*  c*/ DWORD   dwCKeyCaps;             // color key capabilities of the surface
  502. /* 10*/ DWORD   dwFXCaps;               // driver specific stretching and effects capabilites
  503. /* 14*/ DWORD   dwFXAlphaCaps;          // alpha driver specific capabilities
  504. /* 18*/ DWORD   dwPalCaps;              // palette capabilities
  505. /* 1c*/ DWORD   dwSVCaps;               // stereo vision capabilities
  506. /* 20*/ DWORD   dwAlphaBltConstBitDepths;       // DDBD_2,4,8
  507. /* 24*/ DWORD   dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8
  508. /* 28*/ DWORD   dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8
  509. /* 2c*/ DWORD   dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8
  510. /* 30*/ DWORD   dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8
  511. /* 34*/ DWORD   dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8
  512. /* 38*/ DWORD   dwZBufferBitDepths;             // DDBD_8,16,24,32
  513. /* 3c*/ DWORD   dwVidMemTotal;          // total amount of video memory
  514. /* 40*/ DWORD   dwVidMemFree;           // amount of free video memory
  515. /* 44*/ DWORD   dwMaxVisibleOverlays;   // maximum number of visible overlays
  516. /* 48*/ DWORD   dwCurrVisibleOverlays;  // current number of visible overlays
  517. /* 4c*/ DWORD   dwNumFourCCCodes;       // number of four cc codes
  518. /* 50*/ DWORD   dwAlignBoundarySrc;     // source rectangle alignment
  519. /* 54*/ DWORD   dwAlignSizeSrc;         // source rectangle byte size
  520. /* 58*/ DWORD   dwAlignBoundaryDest;    // dest rectangle alignment
  521. /* 5c*/ DWORD   dwAlignSizeDest;        // dest rectangle byte size
  522. /* 60*/ DWORD   dwAlignStrideAlign;     // stride alignment
  523. /* 64*/ DWORD   dwRops[DD_ROP_SPACE];   // ROPS supported
  524. /* 84*/ DDSCAPS ddsCaps;                // DDSCAPS structure has all the general capabilities
  525. /* 88*/ DWORD   dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  526. /* 8c*/ DWORD   dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  527. /* 90*/ DWORD   dwMinLiveVideoStretch;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  528. /* 94*/ DWORD   dwMaxLiveVideoStretch;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  529. /* 98*/ DWORD   dwMinHwCodecStretch;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  530. /* 9c*/ DWORD   dwMaxHwCodecStretch;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  531. /* a0*/ DWORD   dwReserved1;            // reserved
  532. /* a4*/ DWORD   dwReserved2;            // reserved
  533. /* a8*/ DWORD   dwReserved3;            // reserved
  534. /* ac*/ DWORD   dwSVBCaps;              // driver specific capabilities for System->Vmem blts
  535. /* b0*/ DWORD   dwSVBCKeyCaps;          // driver color key capabilities for System->Vmem blts
  536. /* b4*/ DWORD   dwSVBFXCaps;            // driver FX capabilities for System->Vmem blts
  537. /* b8*/ DWORD   dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts
  538. /* d8*/ DWORD   dwVSBCaps;              // driver specific capabilities for Vmem->System blts
  539. /* dc*/ DWORD   dwVSBCKeyCaps;          // driver color key capabilities for Vmem->System blts
  540. /* e0*/ DWORD   dwVSBFXCaps;            // driver FX capabilities for Vmem->System blts
  541. /* e4*/ DWORD   dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts
  542. /*104*/ DWORD   dwSSBCaps;              // driver specific capabilities for System->System blts
  543. /*108*/ DWORD   dwSSBCKeyCaps;          // driver color key capabilities for System->System blts
  544. /*10c*/ DWORD   dwSSBFXCaps;            // driver FX capabilities for System->System blts
  545. /*110*/ DWORD   dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts
  546. // Members added for DX5:
  547. /*130*/ DWORD   dwMaxVideoPorts;        // maximum number of usable video ports
  548. /*134*/ DWORD   dwCurrVideoPorts;       // current number of video ports used
  549. /*138*/ DWORD   dwSVBCaps2;             // more driver specific capabilities for System->Vmem blts
  550. /*13c*/ DWORD   dwNLVBCaps;               // driver specific capabilities for non-local->local vidmem blts
  551. /*140*/ DWORD   dwNLVBCaps2;              // more driver specific capabilities non-local->local vidmem blts
  552. /*144*/ DWORD   dwNLVBCKeyCaps;           // driver color key capabilities for non-local->local vidmem blts
  553. /*148*/ DWORD   dwNLVBFXCaps;             // driver FX capabilities for non-local->local blts
  554. /*14c*/ DWORD   dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts
  555. } DDCAPS_DX5;
  556. typedef DDCAPS_DX5 FAR* LPDDCAPS_DX5;
  557.  
  558. typedef struct _DDCAPS_DX6
  559. {
  560. /*  0*/ DWORD   dwSize;                 // size of the DDDRIVERCAPS structure
  561. /*  4*/ DWORD   dwCaps;                 // driver specific capabilities
  562. /*  8*/ DWORD   dwCaps2;                // more driver specific capabilites
  563. /*  c*/ DWORD   dwCKeyCaps;             // color key capabilities of the surface
  564. /* 10*/ DWORD   dwFXCaps;               // driver specific stretching and effects capabilites
  565. /* 14*/ DWORD   dwFXAlphaCaps;          // alpha caps
  566. /* 18*/ DWORD   dwPalCaps;              // palette capabilities
  567. /* 1c*/ DWORD   dwSVCaps;               // stereo vision capabilities
  568. /* 20*/ DWORD   dwAlphaBltConstBitDepths;       // DDBD_2,4,8
  569. /* 24*/ DWORD   dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8
  570. /* 28*/ DWORD   dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8
  571. /* 2c*/ DWORD   dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8
  572. /* 30*/ DWORD   dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8
  573. /* 34*/ DWORD   dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8
  574. /* 38*/ DWORD   dwZBufferBitDepths;             // DDBD_8,16,24,32
  575. /* 3c*/ DWORD   dwVidMemTotal;          // total amount of video memory
  576. /* 40*/ DWORD   dwVidMemFree;           // amount of free video memory
  577. /* 44*/ DWORD   dwMaxVisibleOverlays;   // maximum number of visible overlays
  578. /* 48*/ DWORD   dwCurrVisibleOverlays;  // current number of visible overlays
  579. /* 4c*/ DWORD   dwNumFourCCCodes;       // number of four cc codes
  580. /* 50*/ DWORD   dwAlignBoundarySrc;     // source rectangle alignment
  581. /* 54*/ DWORD   dwAlignSizeSrc;         // source rectangle byte size
  582. /* 58*/ DWORD   dwAlignBoundaryDest;    // dest rectangle alignment
  583. /* 5c*/ DWORD   dwAlignSizeDest;        // dest rectangle byte size
  584. /* 60*/ DWORD   dwAlignStrideAlign;     // stride alignment
  585. /* 64*/ DWORD   dwRops[DD_ROP_SPACE];   // ROPS supported
  586. /* 84*/ DDSCAPS ddsOldCaps;             // Was DDSCAPS  ddsCaps. ddsCaps is of type DDSCAPS2 for DX6
  587. /* 88*/ DWORD   dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  588. /* 8c*/ DWORD   dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  589. /* 90*/ DWORD   dwMinLiveVideoStretch;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  590. /* 94*/ DWORD   dwMaxLiveVideoStretch;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  591. /* 98*/ DWORD   dwMinHwCodecStretch;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  592. /* 9c*/ DWORD   dwMaxHwCodecStretch;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  593. /* a0*/ DWORD   dwReserved1;            // reserved
  594. /* a4*/ DWORD   dwReserved2;            // reserved
  595. /* a8*/ DWORD   dwReserved3;            // reserved
  596. /* ac*/ DWORD   dwSVBCaps;              // driver specific capabilities for System->Vmem blts
  597. /* b0*/ DWORD   dwSVBCKeyCaps;          // driver color key capabilities for System->Vmem blts
  598. /* b4*/ DWORD   dwSVBFXCaps;            // driver FX capabilities for System->Vmem blts
  599. /* b8*/ DWORD   dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts
  600. /* d8*/ DWORD   dwVSBCaps;              // driver specific capabilities for Vmem->System blts
  601. /* dc*/ DWORD   dwVSBCKeyCaps;          // driver color key capabilities for Vmem->System blts
  602. /* e0*/ DWORD   dwVSBFXCaps;            // driver FX capabilities for Vmem->System blts
  603. /* e4*/ DWORD   dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts
  604. /*104*/ DWORD   dwSSBCaps;              // driver specific capabilities for System->System blts
  605. /*108*/ DWORD   dwSSBCKeyCaps;          // driver color key capabilities for System->System blts
  606. /*10c*/ DWORD   dwSSBFXCaps;            // driver FX capabilities for System->System blts
  607. /*110*/ DWORD   dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts
  608. /*130*/ DWORD   dwMaxVideoPorts;        // maximum number of usable video ports
  609. /*134*/ DWORD   dwCurrVideoPorts;       // current number of video ports used
  610. /*138*/ DWORD   dwSVBCaps2;             // more driver specific capabilities for System->Vmem blts
  611. /*13c*/ DWORD   dwNLVBCaps;               // driver specific capabilities for non-local->local vidmem blts
  612. /*140*/ DWORD   dwNLVBCaps2;              // more driver specific capabilities non-local->local vidmem blts
  613. /*144*/ DWORD   dwNLVBCKeyCaps;           // driver color key capabilities for non-local->local vidmem blts
  614. /*148*/ DWORD   dwNLVBFXCaps;             // driver FX capabilities for non-local->local blts
  615. /*14c*/ DWORD   dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts
  616. // Members added for DX6 release
  617. /*16c*/ DDSCAPS2 ddsCaps;               // Surface Caps
  618. } DDCAPS_DX6;
  619. typedef DDCAPS_DX6 FAR* LPDDCAPS_DX6;
  620.  
  621. typedef struct _DDCAPS_DX7
  622. {
  623. /*  0*/ DWORD   dwSize;                 // size of the DDDRIVERCAPS structure
  624. /*  4*/ DWORD   dwCaps;                 // driver specific capabilities
  625. /*  8*/ DWORD   dwCaps2;                // more driver specific capabilites
  626. /*  c*/ DWORD   dwCKeyCaps;             // color key capabilities of the surface
  627. /* 10*/ DWORD   dwFXCaps;               // driver specific stretching and effects capabilites
  628. /* 14*/ DWORD   dwFXAlphaCaps;          // alpha driver specific capabilities
  629. /* 18*/ DWORD   dwPalCaps;              // palette capabilities
  630. /* 1c*/ DWORD   dwSVCaps;               // stereo vision capabilities
  631. /* 20*/ DWORD   dwAlphaBltConstBitDepths;       // DDBD_2,4,8
  632. /* 24*/ DWORD   dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8
  633. /* 28*/ DWORD   dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8
  634. /* 2c*/ DWORD   dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8
  635. /* 30*/ DWORD   dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8
  636. /* 34*/ DWORD   dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8
  637. /* 38*/ DWORD   dwZBufferBitDepths;             // DDBD_8,16,24,32
  638. /* 3c*/ DWORD   dwVidMemTotal;          // total amount of video memory
  639. /* 40*/ DWORD   dwVidMemFree;           // amount of free video memory
  640. /* 44*/ DWORD   dwMaxVisibleOverlays;   // maximum number of visible overlays
  641. /* 48*/ DWORD   dwCurrVisibleOverlays;  // current number of visible overlays
  642. /* 4c*/ DWORD   dwNumFourCCCodes;       // number of four cc codes
  643. /* 50*/ DWORD   dwAlignBoundarySrc;     // source rectangle alignment
  644. /* 54*/ DWORD   dwAlignSizeSrc;         // source rectangle byte size
  645. /* 58*/ DWORD   dwAlignBoundaryDest;    // dest rectangle alignment
  646. /* 5c*/ DWORD   dwAlignSizeDest;        // dest rectangle byte size
  647. /* 60*/ DWORD   dwAlignStrideAlign;     // stride alignment
  648. /* 64*/ DWORD   dwRops[DD_ROP_SPACE];   // ROPS supported
  649. /* 84*/ DDSCAPS ddsOldCaps;             // Was DDSCAPS  ddsCaps. ddsCaps is of type DDSCAPS2 for DX6
  650. /* 88*/ DWORD   dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  651. /* 8c*/ DWORD   dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  652. /* 90*/ DWORD   dwMinLiveVideoStretch;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  653. /* 94*/ DWORD   dwMaxLiveVideoStretch;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  654. /* 98*/ DWORD   dwMinHwCodecStretch;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  655. /* 9c*/ DWORD   dwMaxHwCodecStretch;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  656. /* a0*/ DWORD   dwReserved1;            // reserved
  657. /* a4*/ DWORD   dwReserved2;            // reserved
  658. /* a8*/ DWORD   dwReserved3;            // reserved
  659. /* ac*/ DWORD   dwSVBCaps;              // driver specific capabilities for System->Vmem blts
  660. /* b0*/ DWORD   dwSVBCKeyCaps;          // driver color key capabilities for System->Vmem blts
  661. /* b4*/ DWORD   dwSVBFXCaps;            // driver FX capabilities for System->Vmem blts
  662. /* b8*/ DWORD   dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts
  663. /* d8*/ DWORD   dwVSBCaps;              // driver specific capabilities for Vmem->System blts
  664. /* dc*/ DWORD   dwVSBCKeyCaps;          // driver color key capabilities for Vmem->System blts
  665. /* e0*/ DWORD   dwVSBFXCaps;            // driver FX capabilities for Vmem->System blts
  666. /* e4*/ DWORD   dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts
  667. /*104*/ DWORD   dwSSBCaps;              // driver specific capabilities for System->System blts
  668. /*108*/ DWORD   dwSSBCKeyCaps;          // driver color key capabilities for System->System blts
  669. /*10c*/ DWORD   dwSSBFXCaps;            // driver FX capabilities for System->System blts
  670. /*110*/ DWORD   dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts
  671. /*130*/ DWORD   dwMaxVideoPorts;        // maximum number of usable video ports
  672. /*134*/ DWORD   dwCurrVideoPorts;       // current number of video ports used
  673. /*138*/ DWORD   dwSVBCaps2;             // more driver specific capabilities for System->Vmem blts
  674. /*13c*/ DWORD   dwNLVBCaps;               // driver specific capabilities for non-local->local vidmem blts
  675. /*140*/ DWORD   dwNLVBCaps2;              // more driver specific capabilities non-local->local vidmem blts
  676. /*144*/ DWORD   dwNLVBCKeyCaps;           // driver color key capabilities for non-local->local vidmem blts
  677. /*148*/ DWORD   dwNLVBFXCaps;             // driver FX capabilities for non-local->local blts
  678. /*14c*/ DWORD   dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts
  679. // Members added for DX6 release
  680. /*16c*/ DDSCAPS2 ddsCaps;               // Surface Caps
  681. } DDCAPS_DX7;
  682. typedef DDCAPS_DX7 FAR* LPDDCAPS_DX7;
  683.  
  684.  
  685. #if DIRECTDRAW_VERSION <= 0x300
  686.     typedef DDCAPS_DX3 DDCAPS;
  687. #elif DIRECTDRAW_VERSION <= 0x500
  688.     typedef DDCAPS_DX5 DDCAPS;
  689. #elif DIRECTDRAW_VERSION <= 0x600
  690.     typedef DDCAPS_DX6 DDCAPS;
  691. #else
  692.     typedef DDCAPS_DX7 DDCAPS;
  693. #endif
  694.  
  695. typedef DDCAPS FAR* LPDDCAPS;
  696.  
  697.  
  698.  
  699. /*
  700.  * DDPIXELFORMAT
  701.  */
  702. typedef struct _DDPIXELFORMAT
  703. {
  704.     DWORD       dwSize;                 // size of structure
  705.     DWORD       dwFlags;                // pixel format flags
  706.     DWORD       dwFourCC;               // (FOURCC code)
  707.     union
  708.     {
  709.         DWORD   dwRGBBitCount;          // how many bits per pixel
  710.         DWORD   dwYUVBitCount;          // how many bits per pixel
  711.         DWORD   dwZBufferBitDepth;      // how many total bits/pixel in z buffer (including any stencil bits)
  712.         DWORD   dwAlphaBitDepth;        // how many bits for alpha channels
  713.         DWORD   dwLuminanceBitCount;    // how many bits per pixel
  714.         DWORD   dwBumpBitCount;         // how many bits per "buxel", total
  715.         DWORD   dwPrivateFormatBitCount;// Bits per pixel of private driver formats. Only valid in texture
  716.                                         // format list and if DDPF_D3DFORMAT is set
  717.     } DUMMYUNIONNAMEN(1);
  718.     union
  719.     {
  720.         DWORD   dwRBitMask;             // mask for red bit
  721.         DWORD   dwYBitMask;             // mask for Y bits
  722.         DWORD   dwStencilBitDepth;      // how many stencil bits (note: dwZBufferBitDepth-dwStencilBitDepth is total Z-only bits)
  723.         DWORD   dwLuminanceBitMask;     // mask for luminance bits
  724.         DWORD   dwBumpDuBitMask;        // mask for bump map U delta bits
  725.         DWORD   dwOperations;           // DDPF_D3DFORMAT Operations
  726.     } DUMMYUNIONNAMEN(2);
  727.     union
  728.     {
  729.         DWORD   dwGBitMask;             // mask for green bits
  730.         DWORD   dwUBitMask;             // mask for U bits
  731.         DWORD   dwZBitMask;             // mask for Z bits
  732.         DWORD   dwBumpDvBitMask;        // mask for bump map V delta bits
  733.         struct
  734.         {
  735.             WORD    wFlipMSTypes;       // Multisample methods supported via flip for this D3DFORMAT
  736.             WORD    wBltMSTypes;        // Multisample methods supported via blt for this D3DFORMAT
  737.         } MultiSampleCaps;
  738.  
  739.     } DUMMYUNIONNAMEN(3);
  740.     union
  741.     {
  742.         DWORD   dwBBitMask;             // mask for blue bits
  743.         DWORD   dwVBitMask;             // mask for V bits
  744.         DWORD   dwStencilBitMask;       // mask for stencil bits
  745.         DWORD   dwBumpLuminanceBitMask; // mask for luminance in bump map
  746.     } DUMMYUNIONNAMEN(4);
  747.     union
  748.     {
  749.         DWORD   dwRGBAlphaBitMask;      // mask for alpha channel
  750.         DWORD   dwYUVAlphaBitMask;      // mask for alpha channel
  751.         DWORD   dwLuminanceAlphaBitMask;// mask for alpha channel
  752.         DWORD   dwRGBZBitMask;          // mask for Z channel
  753.         DWORD   dwYUVZBitMask;          // mask for Z channel
  754.     } DUMMYUNIONNAMEN(5);
  755. } DDPIXELFORMAT;
  756.  
  757. typedef DDPIXELFORMAT FAR* LPDDPIXELFORMAT;
  758.  
  759. /*
  760.  * DDOVERLAYFX
  761.  */
  762. typedef struct _DDOVERLAYFX
  763. {
  764.     DWORD       dwSize;                         // size of structure
  765.     DWORD       dwAlphaEdgeBlendBitDepth;       // Bit depth used to specify constant for alpha edge blend
  766.     DWORD       dwAlphaEdgeBlend;               // Constant to use as alpha for edge blend
  767.     DWORD       dwReserved;
  768.     DWORD       dwAlphaDestConstBitDepth;       // Bit depth used to specify alpha constant for destination
  769.     union
  770.     {
  771.         DWORD   dwAlphaDestConst;               // Constant to use as alpha channel for dest
  772.         LPDIRECTDRAWSURFACE lpDDSAlphaDest;     // Surface to use as alpha channel for dest
  773.     } DUMMYUNIONNAMEN(1);
  774.     DWORD       dwAlphaSrcConstBitDepth;        // Bit depth used to specify alpha constant for source
  775.     union
  776.     {
  777.         DWORD   dwAlphaSrcConst;                // Constant to use as alpha channel for src
  778.         LPDIRECTDRAWSURFACE lpDDSAlphaSrc;      // Surface to use as alpha channel for src
  779.     } DUMMYUNIONNAMEN(2);
  780.     DDCOLORKEY  dckDestColorkey;                // DestColorkey override
  781.     DDCOLORKEY  dckSrcColorkey;                 // DestColorkey override
  782.     DWORD       dwDDFX;                         // Overlay FX
  783.     DWORD       dwFlags;                        // flags
  784. } DDOVERLAYFX;
  785.  
  786. typedef DDOVERLAYFX FAR *LPDDOVERLAYFX;
  787.  
  788.  
  789. /*
  790.  * DDBLTBATCH: BltBatch entry structure
  791.  */
  792. typedef struct _DDBLTBATCH
  793. {
  794.     LPRECT              lprDest;
  795.     LPDIRECTDRAWSURFACE lpDDSSrc;
  796.     LPRECT              lprSrc;
  797.     DWORD               dwFlags;
  798.     LPDDBLTFX           lpDDBltFx;
  799. } DDBLTBATCH;
  800.  
  801. typedef DDBLTBATCH FAR * LPDDBLTBATCH;
  802.  
  803.  
  804. /*
  805.  * DDGAMMARAMP
  806.  */
  807. typedef struct _DDGAMMARAMP
  808. {
  809.     WORD                red[256];
  810.     WORD                green[256];
  811.     WORD                blue[256];
  812. } DDGAMMARAMP;
  813. typedef DDGAMMARAMP FAR * LPDDGAMMARAMP;
  814.  
  815. /*
  816.  *  This is the structure within which DirectDraw returns data about the current graphics driver and chipset
  817.  */
  818.  
  819. #define MAX_DDDEVICEID_STRING           512
  820.  
  821. typedef struct tagDDDEVICEIDENTIFIER
  822. {
  823.     /*
  824.      * These elements are for presentation to the user only. They should not be used to identify particular
  825.      * drivers, since this is unreliable and many different strings may be associated with the same
  826.      * device, and the same driver from different vendors.
  827.      */
  828.     char    szDriver[MAX_DDDEVICEID_STRING];
  829.     char    szDescription[MAX_DDDEVICEID_STRING];
  830.  
  831.     /*
  832.      * This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons
  833.      * on the whole 64 bits. Caution should be exercised if you use this element to identify problematic
  834.      * drivers. It is recommended that guidDeviceIdentifier is used for this purpose.
  835.      *
  836.      * This version has the form:
  837.      *  wProduct = HIWORD(liDriverVersion.HighPart)
  838.      *  wVersion = LOWORD(liDriverVersion.HighPart)
  839.      *  wSubVersion = HIWORD(liDriverVersion.LowPart)
  840.      *  wBuild = LOWORD(liDriverVersion.LowPart)
  841.      */
  842. #ifdef _WIN32
  843.     LARGE_INTEGER liDriverVersion;      /* Defined for applications and other 32 bit components */
  844. #else
  845.     DWORD   dwDriverVersionLowPart;     /* Defined for 16 bit driver components */
  846.     DWORD   dwDriverVersionHighPart;
  847. #endif
  848.  
  849.  
  850.     /*
  851.      * These elements can be used to identify particular chipsets. Use with extreme caution.
  852.      *   dwVendorId     Identifies the manufacturer. May be zero if unknown.
  853.      *   dwDeviceId     Identifies the type of chipset. May be zero if unknown.
  854.      *   dwSubSysId     Identifies the subsystem, typically this means the particular board. May be zero if unknown.
  855.      *   dwRevision     Identifies the revision level of the chipset. May be zero if unknown.
  856.      */
  857.     DWORD   dwVendorId;
  858.     DWORD   dwDeviceId;
  859.     DWORD   dwSubSysId;
  860.     DWORD   dwRevision;
  861.  
  862.     /*
  863.      * This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the
  864.      * driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to
  865.      * reprofile the graphics subsystem.
  866.      * This element can also be used to identify particular problematic drivers.
  867.      */
  868.     GUID    guidDeviceIdentifier;
  869. } DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER;
  870.  
  871. typedef struct tagDDDEVICEIDENTIFIER2
  872. {
  873.     /*
  874.      * These elements are for presentation to the user only. They should not be used to identify particular
  875.      * drivers, since this is unreliable and many different strings may be associated with the same
  876.      * device, and the same driver from different vendors.
  877.      */
  878.     char    szDriver[MAX_DDDEVICEID_STRING];
  879.     char    szDescription[MAX_DDDEVICEID_STRING];
  880.  
  881.     /*
  882.      * This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons
  883.      * on the whole 64 bits. Caution should be exercised if you use this element to identify problematic
  884.      * drivers. It is recommended that guidDeviceIdentifier is used for this purpose.
  885.      *
  886.      * This version has the form:
  887.      *  wProduct = HIWORD(liDriverVersion.HighPart)
  888.      *  wVersion = LOWORD(liDriverVersion.HighPart)
  889.      *  wSubVersion = HIWORD(liDriverVersion.LowPart)
  890.      *  wBuild = LOWORD(liDriverVersion.LowPart)
  891.      */
  892. #ifdef _WIN32
  893.     LARGE_INTEGER liDriverVersion;      /* Defined for applications and other 32 bit components */
  894. #else
  895.     DWORD   dwDriverVersionLowPart;     /* Defined for 16 bit driver components */
  896.     DWORD   dwDriverVersionHighPart;
  897. #endif
  898.  
  899.  
  900.     /*
  901.      * These elements can be used to identify particular chipsets. Use with extreme caution.
  902.      *   dwVendorId     Identifies the manufacturer. May be zero if unknown.
  903.      *   dwDeviceId     Identifies the type of chipset. May be zero if unknown.
  904.      *   dwSubSysId     Identifies the subsystem, typically this means the particular board. May be zero if unknown.
  905.      *   dwRevision     Identifies the revision level of the chipset. May be zero if unknown.
  906.      */
  907.     DWORD   dwVendorId;
  908.     DWORD   dwDeviceId;
  909.     DWORD   dwSubSysId;
  910.     DWORD   dwRevision;
  911.  
  912.     /*
  913.      * This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the
  914.      * driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to
  915.      * reprofile the graphics subsystem.
  916.      * This element can also be used to identify particular problematic drivers.
  917.      */
  918.     GUID    guidDeviceIdentifier;
  919.  
  920.     /*
  921.      * This element is used to determine the Windows Hardware Quality Lab (WHQL)
  922.      * certification level for this driver/device pair.
  923.      */
  924.     DWORD   dwWHQLLevel;
  925.  
  926. } DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2;
  927.  
  928. /*
  929.  * Flags for the IDirectDraw4::GetDeviceIdentifier method
  930.  */
  931.  
  932. /*
  933.  * This flag causes GetDeviceIdentifier to return information about the host (typically 2D) adapter in a system equipped
  934.  * with a stacked secondary 3D adapter. Such an adapter appears to the application as if it were part of the
  935.  * host adapter, but is typically physcially located on a separate card. The stacked secondary's information is
  936.  * returned when GetDeviceIdentifier's dwFlags field is zero, since this most accurately reflects the qualities
  937.  * of the DirectDraw object involved.
  938.  */
  939. #define DDGDI_GETHOSTIDENTIFIER         0x00000001L
  940.  
  941. /*
  942.  * Macros for interpretting DDEVICEIDENTIFIER2.dwWHQLLevel
  943.  */
  944. #define GET_WHQL_YEAR( dwWHQLLevel ) \
  945.     ( (dwWHQLLevel) / 0x10000 )
  946. #define GET_WHQL_MONTH( dwWHQLLevel ) \
  947.     ( ( (dwWHQLLevel) / 0x100 ) & 0x00ff )
  948. #define GET_WHQL_DAY( dwWHQLLevel ) \
  949.     ( (dwWHQLLevel) & 0xff )
  950.  
  951.  
  952. /*
  953.  * callbacks
  954.  */
  955. typedef DWORD   (FAR PASCAL *LPCLIPPERCALLBACK)(LPDIRECTDRAWCLIPPER lpDDClipper, HWND hWnd, DWORD code, LPVOID lpContext );
  956. #ifdef STREAMING
  957. typedef DWORD   (FAR PASCAL *LPSURFACESTREAMINGCALLBACK)(DWORD);
  958. #endif
  959.  
  960.  
  961. /*
  962.  * INTERACES FOLLOW:
  963.  *      IDirectDraw
  964.  *      IDirectDrawClipper
  965.  *      IDirectDrawPalette
  966.  *      IDirectDrawSurface
  967.  */
  968.  
  969. /*
  970.  * IDirectDraw
  971.  */
  972. #if defined( _WIN32 ) && !defined( _NO_COM )
  973. #undef INTERFACE
  974. #define INTERFACE IDirectDraw
  975. DECLARE_INTERFACE_( IDirectDraw, IUnknown )
  976. {
  977.     /*** IUnknown methods ***/
  978.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  979.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  980.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  981.     /*** IDirectDraw methods ***/
  982.     STDMETHOD(Compact)(THIS) PURE;
  983.     STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;
  984.     STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;
  985.     STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE;
  986.     STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE;
  987.     STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;
  988.     STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;
  989.     STDMETHOD(FlipToGDISurface)(THIS) PURE;
  990.     STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
  991.     STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;
  992.     STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
  993.     STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;
  994.     STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
  995.     STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
  996.     STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
  997.     STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
  998.     STDMETHOD(RestoreDisplayMode)(THIS) PURE;
  999.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
  1000.     STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD) PURE;
  1001.     STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
  1002. };
  1003.  
  1004. #if !defined(__cplusplus) || defined(CINTERFACE)
  1005. #define IDirectDraw_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
  1006. #define IDirectDraw_AddRef(p)                       (p)->lpVtbl->AddRef(p)
  1007. #define IDirectDraw_Release(p)                      (p)->lpVtbl->Release(p)
  1008. #define IDirectDraw_Compact(p)                      (p)->lpVtbl->Compact(p)
  1009. #define IDirectDraw_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)
  1010. #define IDirectDraw_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)
  1011. #define IDirectDraw_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)
  1012. #define IDirectDraw_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)
  1013. #define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)
  1014. #define IDirectDraw_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)
  1015. #define IDirectDraw_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)
  1016. #define IDirectDraw_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)
  1017. #define IDirectDraw_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)
  1018. #define IDirectDraw_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)
  1019. #define IDirectDraw_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)
  1020. #define IDirectDraw_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)
  1021. #define IDirectDraw_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)
  1022. #define IDirectDraw_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)
  1023. #define IDirectDraw_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)
  1024. #define IDirectDraw_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)
  1025. #define IDirectDraw_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)
  1026. #define IDirectDraw_SetDisplayMode(p, a, b, c)      (p)->lpVtbl->SetDisplayMode(p, a, b, c)
  1027. #define IDirectDraw_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)
  1028. #else
  1029. #define IDirectDraw_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)
  1030. #define IDirectDraw_AddRef(p)                       (p)->AddRef()
  1031. #define IDirectDraw_Release(p)                      (p)->Release()
  1032. #define IDirectDraw_Compact(p)                      (p)->Compact()
  1033. #define IDirectDraw_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)
  1034. #define IDirectDraw_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)
  1035. #define IDirectDraw_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)
  1036. #define IDirectDraw_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)
  1037. #define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)
  1038. #define IDirectDraw_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)
  1039. #define IDirectDraw_FlipToGDISurface(p)             (p)->FlipToGDISurface()
  1040. #define IDirectDraw_GetCaps(p, a, b)                (p)->GetCaps(a, b)
  1041. #define IDirectDraw_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)
  1042. #define IDirectDraw_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)
  1043. #define IDirectDraw_GetGDISurface(p, a)             (p)->GetGDISurface(a)
  1044. #define IDirectDraw_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)
  1045. #define IDirectDraw_GetScanLine(p, a)               (p)->GetScanLine(a)
  1046. #define IDirectDraw_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)
  1047. #define IDirectDraw_Initialize(p, a)                (p)->Initialize(a)
  1048. #define IDirectDraw_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()
  1049. #define IDirectDraw_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)
  1050. #define IDirectDraw_SetDisplayMode(p, a, b, c)      (p)->SetDisplayMode(a, b, c)
  1051. #define IDirectDraw_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)
  1052. #endif
  1053.  
  1054. #endif
  1055.  
  1056. #if defined( _WIN32 ) && !defined( _NO_COM )
  1057. #undef INTERFACE
  1058. #define INTERFACE IDirectDraw2
  1059. DECLARE_INTERFACE_( IDirectDraw2, IUnknown )
  1060. {
  1061.     /*** IUnknown methods ***/
  1062.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  1063.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1064.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1065.     /*** IDirectDraw methods ***/
  1066.     STDMETHOD(Compact)(THIS) PURE;
  1067.     STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;
  1068.     STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;
  1069.     STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE;
  1070.     STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE;
  1071.     STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;
  1072.     STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;
  1073.     STDMETHOD(FlipToGDISurface)(THIS) PURE;
  1074.     STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
  1075.     STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;
  1076.     STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
  1077.     STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;
  1078.     STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
  1079.     STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
  1080.     STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
  1081.     STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
  1082.     STDMETHOD(RestoreDisplayMode)(THIS) PURE;
  1083.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
  1084.     STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;
  1085.     STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
  1086.     /*** Added in the v2 interface ***/
  1087.     STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE;
  1088. };
  1089. #if !defined(__cplusplus) || defined(CINTERFACE)
  1090. #define IDirectDraw2_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
  1091. #define IDirectDraw2_AddRef(p)                       (p)->lpVtbl->AddRef(p)
  1092. #define IDirectDraw2_Release(p)                      (p)->lpVtbl->Release(p)
  1093. #define IDirectDraw2_Compact(p)                      (p)->lpVtbl->Compact(p)
  1094. #define IDirectDraw2_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)
  1095. #define IDirectDraw2_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)
  1096. #define IDirectDraw2_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)
  1097. #define IDirectDraw2_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)
  1098. #define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)
  1099. #define IDirectDraw2_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)
  1100. #define IDirectDraw2_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)
  1101. #define IDirectDraw2_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)
  1102. #define IDirectDraw2_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)
  1103. #define IDirectDraw2_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)
  1104. #define IDirectDraw2_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)
  1105. #define IDirectDraw2_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)
  1106. #define IDirectDraw2_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)
  1107. #define IDirectDraw2_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)
  1108. #define IDirectDraw2_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)
  1109. #define IDirectDraw2_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)
  1110. #define IDirectDraw2_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)
  1111. #define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e)
  1112. #define IDirectDraw2_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)
  1113. #define IDirectDraw2_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)
  1114. #else
  1115. #define IDirectDraw2_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)
  1116. #define IDirectDraw2_AddRef(p)                       (p)->AddRef()
  1117. #define IDirectDraw2_Release(p)                      (p)->Release()
  1118. #define IDirectDraw2_Compact(p)                      (p)->Compact()
  1119. #define IDirectDraw2_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)
  1120. #define IDirectDraw2_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)
  1121. #define IDirectDraw2_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)
  1122. #define IDirectDraw2_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)
  1123. #define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)
  1124. #define IDirectDraw2_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)
  1125. #define IDirectDraw2_FlipToGDISurface(p)             (p)->FlipToGDISurface()
  1126. #define IDirectDraw2_GetCaps(p, a, b)                (p)->GetCaps(a, b)
  1127. #define IDirectDraw2_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)
  1128. #define IDirectDraw2_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)
  1129. #define IDirectDraw2_GetGDISurface(p, a)             (p)->GetGDISurface(a)
  1130. #define IDirectDraw2_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)
  1131. #define IDirectDraw2_GetScanLine(p, a)               (p)->GetScanLine(a)
  1132. #define IDirectDraw2_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)
  1133. #define IDirectDraw2_Initialize(p, a)                (p)->Initialize(a)
  1134. #define IDirectDraw2_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()
  1135. #define IDirectDraw2_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)
  1136. #define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e)
  1137. #define IDirectDraw2_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)
  1138. #define IDirectDraw2_GetAvailableVidMem(p, a, b, c)  (p)->GetAvailableVidMem(a, b, c)
  1139. #endif
  1140.  
  1141. #endif
  1142.  
  1143. #if defined( _WIN32 ) && !defined( _NO_COM )
  1144. #undef INTERFACE
  1145. #define INTERFACE IDirectDraw4
  1146. DECLARE_INTERFACE_( IDirectDraw4, IUnknown )
  1147. {
  1148.     /*** IUnknown methods ***/
  1149.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  1150.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1151.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1152.     /*** IDirectDraw methods ***/
  1153.     STDMETHOD(Compact)(THIS) PURE;
  1154.     STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;
  1155.     STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;
  1156.     STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE4 FAR *, IUnknown FAR *) PURE;
  1157.     STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE4, LPDIRECTDRAWSURFACE4 FAR * ) PURE;
  1158.     STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE;
  1159.     STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK2 ) PURE;
  1160.     STDMETHOD(FlipToGDISurface)(THIS) PURE;
  1161.     STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
  1162.     STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE;
  1163.     STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
  1164.     STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE4 FAR *) PURE;
  1165.     STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
  1166.     STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
  1167.     STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
  1168.     STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
  1169.     STDMETHOD(RestoreDisplayMode)(THIS) PURE;
  1170.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
  1171.     STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;
  1172.     STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
  1173.     /*** Added in the v2 interface ***/
  1174.     STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE;
  1175.     /*** Added in the V4 Interface ***/
  1176.     STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE4 *) PURE;
  1177.     STDMETHOD(RestoreAllSurfaces)(THIS) PURE;
  1178.     STDMETHOD(TestCooperativeLevel)(THIS) PURE;
  1179.     STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER, DWORD ) PURE;
  1180. };
  1181. #if !defined(__cplusplus) || defined(CINTERFACE)
  1182. #define IDirectDraw4_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
  1183. #define IDirectDraw4_AddRef(p)                       (p)->lpVtbl->AddRef(p)
  1184. #define IDirectDraw4_Release(p)                      (p)->lpVtbl->Release(p)
  1185. #define IDirectDraw4_Compact(p)                      (p)->lpVtbl->Compact(p)
  1186. #define IDirectDraw4_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)
  1187. #define IDirectDraw4_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)
  1188. #define IDirectDraw4_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)
  1189. #define IDirectDraw4_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)
  1190. #define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)
  1191. #define IDirectDraw4_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)
  1192. #define IDirectDraw4_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)
  1193. #define IDirectDraw4_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)
  1194. #define IDirectDraw4_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)
  1195. #define IDirectDraw4_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)
  1196. #define IDirectDraw4_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)
  1197. #define IDirectDraw4_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)
  1198. #define IDirectDraw4_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)
  1199. #define IDirectDraw4_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)
  1200. #define IDirectDraw4_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)
  1201. #define IDirectDraw4_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)
  1202. #define IDirectDraw4_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)
  1203. #define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e)
  1204. #define IDirectDraw4_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)
  1205. #define IDirectDraw4_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)
  1206. #define IDirectDraw4_GetSurfaceFromDC(p, a, b)       (p)->lpVtbl->GetSurfaceFromDC(p, a, b)
  1207. #define IDirectDraw4_RestoreAllSurfaces(p)           (p)->lpVtbl->RestoreAllSurfaces(p)
  1208. #define IDirectDraw4_TestCooperativeLevel(p)         (p)->lpVtbl->TestCooperativeLevel(p)
  1209. #define IDirectDraw4_GetDeviceIdentifier(p,a,b)      (p)->lpVtbl->GetDeviceIdentifier(p,a,b)
  1210. #else
  1211. #define IDirectDraw4_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)
  1212. #define IDirectDraw4_AddRef(p)                       (p)->AddRef()
  1213. #define IDirectDraw4_Release(p)                      (p)->Release()
  1214. #define IDirectDraw4_Compact(p)                      (p)->Compact()
  1215. #define IDirectDraw4_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)
  1216. #define IDirectDraw4_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)
  1217. #define IDirectDraw4_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)
  1218. #define IDirectDraw4_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)
  1219. #define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)
  1220. #define IDirectDraw4_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)
  1221. #define IDirectDraw4_FlipToGDISurface(p)             (p)->FlipToGDISurface()
  1222. #define IDirectDraw4_GetCaps(p, a, b)                (p)->GetCaps(a, b)
  1223. #define IDirectDraw4_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)
  1224. #define IDirectDraw4_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)
  1225. #define IDirectDraw4_GetGDISurface(p, a)             (p)->GetGDISurface(a)
  1226. #define IDirectDraw4_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)
  1227. #define IDirectDraw4_GetScanLine(p, a)               (p)->GetScanLine(a)
  1228. #define IDirectDraw4_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)
  1229. #define IDirectDraw4_Initialize(p, a)                (p)->Initialize(a)
  1230. #define IDirectDraw4_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()
  1231. #define IDirectDraw4_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)
  1232. #define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e)
  1233. #define IDirectDraw4_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)
  1234. #define IDirectDraw4_GetAvailableVidMem(p, a, b, c)  (p)->GetAvailableVidMem(a, b, c)
  1235. #define IDirectDraw4_GetSurfaceFromDC(p, a, b)       (p)->GetSurfaceFromDC(a, b)
  1236. #define IDirectDraw4_RestoreAllSurfaces(p)           (p)->RestoreAllSurfaces()
  1237. #define IDirectDraw4_TestCooperativeLevel(p)         (p)->TestCooperativeLevel()
  1238. #define IDirectDraw4_GetDeviceIdentifier(p,a,b)      (p)->GetDeviceIdentifier(a,b)
  1239. #endif
  1240.  
  1241. #endif
  1242.  
  1243. #if defined( _WIN32 ) && !defined( _NO_COM )
  1244. #undef INTERFACE
  1245. #define INTERFACE IDirectDraw7
  1246. DECLARE_INTERFACE_( IDirectDraw7, IUnknown )
  1247. {
  1248.     /*** IUnknown methods ***/
  1249.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  1250.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1251.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1252.     /*** IDirectDraw methods ***/
  1253.     STDMETHOD(Compact)(THIS) PURE;
  1254.     STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;
  1255.     STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;
  1256.     STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE7 FAR *, IUnknown FAR *) PURE;
  1257.     STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 FAR * ) PURE;
  1258.     STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE;
  1259.     STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7 ) PURE;
  1260.     STDMETHOD(FlipToGDISurface)(THIS) PURE;
  1261.     STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
  1262.     STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE;
  1263.     STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
  1264.     STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE7 FAR *) PURE;
  1265.     STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
  1266.     STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
  1267.     STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
  1268.     STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
  1269.     STDMETHOD(RestoreDisplayMode)(THIS) PURE;
  1270.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
  1271.     STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;
  1272.     STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
  1273.     /*** Added in the v2 interface ***/
  1274.     STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE;
  1275.     /*** Added in the V4 Interface ***/
  1276.     STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE7 *) PURE;
  1277.     STDMETHOD(RestoreAllSurfaces)(THIS) PURE;
  1278.     STDMETHOD(TestCooperativeLevel)(THIS) PURE;
  1279.     STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER2, DWORD ) PURE;
  1280.     STDMETHOD(StartModeTest)(THIS_ LPSIZE, DWORD, DWORD ) PURE;
  1281.     STDMETHOD(EvaluateMode)(THIS_ DWORD, DWORD * ) PURE;
  1282. };
  1283. #if !defined(__cplusplus) || defined(CINTERFACE)
  1284. #define IDirectDraw7_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
  1285. #define IDirectDraw7_AddRef(p)                       (p)->lpVtbl->AddRef(p)
  1286. #define IDirectDraw7_Release(p)                      (p)->lpVtbl->Release(p)
  1287. #define IDirectDraw7_Compact(p)                      (p)->lpVtbl->Compact(p)
  1288. #define IDirectDraw7_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)
  1289. #define IDirectDraw7_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)
  1290. #define IDirectDraw7_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)
  1291. #define IDirectDraw7_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)
  1292. #define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)
  1293. #define IDirectDraw7_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)
  1294. #define IDirectDraw7_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)
  1295. #define IDirectDraw7_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)
  1296. #define IDirectDraw7_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)
  1297. #define IDirectDraw7_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)
  1298. #define IDirectDraw7_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)
  1299. #define IDirectDraw7_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)
  1300. #define IDirectDraw7_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)
  1301. #define IDirectDraw7_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)
  1302. #define IDirectDraw7_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)
  1303. #define IDirectDraw7_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)
  1304. #define IDirectDraw7_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)
  1305. #define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e)
  1306. #define IDirectDraw7_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)
  1307. #define IDirectDraw7_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)
  1308. #define IDirectDraw7_GetSurfaceFromDC(p, a, b)       (p)->lpVtbl->GetSurfaceFromDC(p, a, b)
  1309. #define IDirectDraw7_RestoreAllSurfaces(p)           (p)->lpVtbl->RestoreAllSurfaces(p)
  1310. #define IDirectDraw7_TestCooperativeLevel(p)         (p)->lpVtbl->TestCooperativeLevel(p)
  1311. #define IDirectDraw7_GetDeviceIdentifier(p,a,b)      (p)->lpVtbl->GetDeviceIdentifier(p,a,b)
  1312. #define IDirectDraw7_StartModeTest(p,a,b,c)        (p)->lpVtbl->StartModeTest(p,a,b,c)
  1313. #define IDirectDraw7_EvaluateMode(p,a,b)           (p)->lpVtbl->EvaluateMode(p,a,b)
  1314. #else
  1315. #define IDirectDraw7_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)
  1316. #define IDirectDraw7_AddRef(p)                       (p)->AddRef()
  1317. #define IDirectDraw7_Release(p)                      (p)->Release()
  1318. #define IDirectDraw7_Compact(p)                      (p)->Compact()
  1319. #define IDirectDraw7_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)
  1320. #define IDirectDraw7_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)
  1321. #define IDirectDraw7_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)
  1322. #define IDirectDraw7_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)
  1323. #define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)
  1324. #define IDirectDraw7_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)
  1325. #define IDirectDraw7_FlipToGDISurface(p)             (p)->FlipToGDISurface()
  1326. #define IDirectDraw7_GetCaps(p, a, b)                (p)->GetCaps(a, b)
  1327. #define IDirectDraw7_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)
  1328. #define IDirectDraw7_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)
  1329. #define IDirectDraw7_GetGDISurface(p, a)             (p)->GetGDISurface(a)
  1330. #define IDirectDraw7_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)
  1331. #define IDirectDraw7_GetScanLine(p, a)               (p)->GetScanLine(a)
  1332. #define IDirectDraw7_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)
  1333. #define IDirectDraw7_Initialize(p, a)                (p)->Initialize(a)
  1334. #define IDirectDraw7_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()
  1335. #define IDirectDraw7_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)
  1336. #define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e)
  1337. #define IDirectDraw7_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)
  1338. #define IDirectDraw7_GetAvailableVidMem(p, a, b, c)  (p)->GetAvailableVidMem(a, b, c)
  1339. #define IDirectDraw7_GetSurfaceFromDC(p, a, b)       (p)->GetSurfaceFromDC(a, b)
  1340. #define IDirectDraw7_RestoreAllSurfaces(p)           (p)->RestoreAllSurfaces()
  1341. #define IDirectDraw7_TestCooperativeLevel(p)         (p)->TestCooperativeLevel()
  1342. #define IDirectDraw7_GetDeviceIdentifier(p,a,b)      (p)->GetDeviceIdentifier(a,b)
  1343. #define IDirectDraw7_StartModeTest(p,a,b,c)        (p)->lpVtbl->StartModeTest(a,b,c)
  1344. #define IDirectDraw7_EvaluateMode(p,a,b)           (p)->lpVtbl->EvaluateMode(a,b)
  1345. #endif
  1346.  
  1347. #endif
  1348.  
  1349.  
  1350. /*
  1351.  * IDirectDrawPalette
  1352.  */
  1353. #if defined( _WIN32 ) && !defined( _NO_COM )
  1354. #undef INTERFACE
  1355. #define INTERFACE IDirectDrawPalette
  1356. DECLARE_INTERFACE_( IDirectDrawPalette, IUnknown )
  1357. {
  1358.     /*** IUnknown methods ***/
  1359.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  1360.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1361.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1362.     /*** IDirectDrawPalette methods ***/
  1363.     STDMETHOD(GetCaps)(THIS_ LPDWORD) PURE;
  1364.     STDMETHOD(GetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE;
  1365.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE;
  1366.     STDMETHOD(SetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE;
  1367. };
  1368.  
  1369. #if !defined(__cplusplus) || defined(CINTERFACE)
  1370. #define IDirectDrawPalette_QueryInterface(p, a, b)      (p)->lpVtbl->QueryInterface(p, a, b)
  1371. #define IDirectDrawPalette_AddRef(p)                    (p)->lpVtbl->AddRef(p)
  1372. #define IDirectDrawPalette_Release(p)                   (p)->lpVtbl->Release(p)
  1373. #define IDirectDrawPalette_GetCaps(p, a)                (p)->lpVtbl->GetCaps(p, a)
  1374. #define IDirectDrawPalette_GetEntries(p, a, b, c, d)    (p)->lpVtbl->GetEntries(p, a, b, c, d)
  1375. #define IDirectDrawPalette_Initialize(p, a, b, c)       (p)->lpVtbl->Initialize(p, a, b, c)
  1376. #define IDirectDrawPalette_SetEntries(p, a, b, c, d)    (p)->lpVtbl->SetEntries(p, a, b, c, d)
  1377. #else
  1378. #define IDirectDrawPalette_QueryInterface(p, a, b)      (p)->QueryInterface(a, b)
  1379. #define IDirectDrawPalette_AddRef(p)                    (p)->AddRef()
  1380. #define IDirectDrawPalette_Release(p)                   (p)->Release()
  1381. #define IDirectDrawPalette_GetCaps(p, a)                (p)->GetCaps(a)
  1382. #define IDirectDrawPalette_GetEntries(p, a, b, c, d)    (p)->GetEntries(a, b, c, d)
  1383. #define IDirectDrawPalette_Initialize(p, a, b, c)       (p)->Initialize(a, b, c)
  1384. #define IDirectDrawPalette_SetEntries(p, a, b, c, d)    (p)->SetEntries(a, b, c, d)
  1385. #endif
  1386.  
  1387. #endif
  1388.  
  1389.  
  1390. /*
  1391.  * IDirectDrawClipper
  1392.  */
  1393. #if defined( _WIN32 ) && !defined( _NO_COM )
  1394. #undef INTERFACE
  1395. #define INTERFACE IDirectDrawClipper
  1396. DECLARE_INTERFACE_( IDirectDrawClipper, IUnknown )
  1397. {
  1398.     /*** IUnknown methods ***/
  1399.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  1400.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1401.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1402.     /*** IDirectDrawClipper methods ***/
  1403.     STDMETHOD(GetClipList)(THIS_ LPRECT, LPRGNDATA, LPDWORD) PURE;
  1404.     STDMETHOD(GetHWnd)(THIS_ HWND FAR *) PURE;
  1405.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD) PURE;
  1406.     STDMETHOD(IsClipListChanged)(THIS_ BOOL FAR *) PURE;
  1407.     STDMETHOD(SetClipList)(THIS_ LPRGNDATA,DWORD) PURE;
  1408.     STDMETHOD(SetHWnd)(THIS_ DWORD, HWND ) PURE;
  1409. };
  1410.  
  1411. #if !defined(__cplusplus) || defined(CINTERFACE)
  1412. #define IDirectDrawClipper_QueryInterface(p, a, b)  (p)->lpVtbl->QueryInterface(p, a, b)
  1413. #define IDirectDrawClipper_AddRef(p)                (p)->lpVtbl->AddRef(p)
  1414. #define IDirectDrawClipper_Release(p)               (p)->lpVtbl->Release(p)
  1415. #define IDirectDrawClipper_GetClipList(p, a, b, c)  (p)->lpVtbl->GetClipList(p, a, b, c)
  1416. #define IDirectDrawClipper_GetHWnd(p, a)            (p)->lpVtbl->GetHWnd(p, a)
  1417. #define IDirectDrawClipper_Initialize(p, a, b)      (p)->lpVtbl->Initialize(p, a, b)
  1418. #define IDirectDrawClipper_IsClipListChanged(p, a)  (p)->lpVtbl->IsClipListChanged(p, a)
  1419. #define IDirectDrawClipper_SetClipList(p, a, b)     (p)->lpVtbl->SetClipList(p, a, b)
  1420. #define IDirectDrawClipper_SetHWnd(p, a, b)         (p)->lpVtbl->SetHWnd(p, a, b)
  1421. #else
  1422. #define IDirectDrawClipper_QueryInterface(p, a, b)  (p)->QueryInterface(a, b)
  1423. #define IDirectDrawClipper_AddRef(p)                (p)->AddRef()
  1424. #define IDirectDrawClipper_Release(p)               (p)->Release()
  1425. #define IDirectDrawClipper_GetClipList(p, a, b, c)  (p)->GetClipList(a, b, c)
  1426. #define IDirectDrawClipper_GetHWnd(p, a)            (p)->GetHWnd(a)
  1427. #define IDirectDrawClipper_Initialize(p, a, b)      (p)->Initialize(a, b)
  1428. #define IDirectDrawClipper_IsClipListChanged(p, a)  (p)->IsClipListChanged(a)
  1429. #define IDirectDrawClipper_SetClipList(p, a, b)     (p)->SetClipList(a, b)
  1430. #define IDirectDrawClipper_SetHWnd(p, a, b)         (p)->SetHWnd(a, b)
  1431. #endif
  1432.  
  1433. #endif
  1434.  
  1435. /*
  1436.  * IDirectDrawSurface and related interfaces
  1437.  */
  1438. #if defined( _WIN32 ) && !defined( _NO_COM )
  1439. #undef INTERFACE
  1440. #define INTERFACE IDirectDrawSurface
  1441. DECLARE_INTERFACE_( IDirectDrawSurface, IUnknown )
  1442. {
  1443.     /*** IUnknown methods ***/
  1444.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  1445.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1446.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1447.     /*** IDirectDrawSurface methods ***/
  1448.     STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE;
  1449.     STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
  1450.     STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX) PURE;
  1451.     STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
  1452.     STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD) PURE;
  1453.     STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE) PURE;
  1454.     STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
  1455.     STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
  1456.     STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE;
  1457.     STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE FAR *) PURE;
  1458.     STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
  1459.     STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
  1460.     STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
  1461.     STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  1462.     STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
  1463.     STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
  1464.     STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
  1465.     STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
  1466.     STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
  1467.     STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
  1468.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
  1469.     STDMETHOD(IsLost)(THIS) PURE;
  1470.     STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
  1471.     STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
  1472.     STDMETHOD(Restore)(THIS) PURE;
  1473.     STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
  1474.     STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  1475.     STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
  1476.     STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
  1477.     STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
  1478.     STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
  1479.     STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
  1480.     STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE) PURE;
  1481. };
  1482.  
  1483. #if !defined(__cplusplus) || defined(CINTERFACE)
  1484. #define IDirectDrawSurface_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
  1485. #define IDirectDrawSurface_AddRef(p)                    (p)->lpVtbl->AddRef(p)
  1486. #define IDirectDrawSurface_Release(p)                   (p)->lpVtbl->Release(p)
  1487. #define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
  1488. #define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
  1489. #define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
  1490. #define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
  1491. #define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
  1492. #define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
  1493. #define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
  1494. #define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
  1495. #define IDirectDrawSurface_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
  1496. #define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
  1497. #define IDirectDrawSurface_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
  1498. #define IDirectDrawSurface_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
  1499. #define IDirectDrawSurface_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
  1500. #define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
  1501. #define IDirectDrawSurface_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
  1502. #define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
  1503. #define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
  1504. #define IDirectDrawSurface_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
  1505. #define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
  1506. #define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
  1507. #define IDirectDrawSurface_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
  1508. #define IDirectDrawSurface_IsLost(p)                    (p)->lpVtbl->IsLost(p)
  1509. #define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
  1510. #define IDirectDrawSurface_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
  1511. #define IDirectDrawSurface_Restore(p)                   (p)->lpVtbl->Restore(p)
  1512. #define IDirectDrawSurface_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
  1513. #define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
  1514. #define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
  1515. #define IDirectDrawSurface_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
  1516. #define IDirectDrawSurface_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
  1517. #define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
  1518. #define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
  1519. #define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
  1520. #else
  1521. #define IDirectDrawSurface_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
  1522. #define IDirectDrawSurface_AddRef(p)                    (p)->AddRef()
  1523. #define IDirectDrawSurface_Release(p)                   (p)->Release()
  1524. #define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
  1525. #define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
  1526. #define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
  1527. #define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
  1528. #define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
  1529. #define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
  1530. #define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
  1531. #define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
  1532. #define IDirectDrawSurface_Flip(p,a,b)                  (p)->Flip(a,b)
  1533. #define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
  1534. #define IDirectDrawSurface_GetBltStatus(p,a)            (p)->GetBltStatus(a)
  1535. #define IDirectDrawSurface_GetCaps(p,b)                 (p)->GetCaps(b)
  1536. #define IDirectDrawSurface_GetClipper(p,a)              (p)->GetClipper(a)
  1537. #define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
  1538. #define IDirectDrawSurface_GetDC(p,a)                   (p)->GetDC(a)
  1539. #define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
  1540. #define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
  1541. #define IDirectDrawSurface_GetPalette(p,a)              (p)->GetPalette(a)
  1542. #define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
  1543. #define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
  1544. #define IDirectDrawSurface_Initialize(p,a,b)            (p)->Initialize(a,b)
  1545. #define IDirectDrawSurface_IsLost(p)                    (p)->IsLost()
  1546. #define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
  1547. #define IDirectDrawSurface_ReleaseDC(p,a)               (p)->ReleaseDC(a)
  1548. #define IDirectDrawSurface_Restore(p)                   (p)->Restore()
  1549. #define IDirectDrawSurface_SetClipper(p,a)              (p)->SetClipper(a)
  1550. #define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
  1551. #define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
  1552. #define IDirectDrawSurface_SetPalette(p,a)              (p)->SetPalette(a)
  1553. #define IDirectDrawSurface_Unlock(p,b)                  (p)->Unlock(b)
  1554. #define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
  1555. #define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
  1556. #define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
  1557. #endif
  1558.  
  1559. /*
  1560.  * IDirectDrawSurface2 and related interfaces
  1561.  */
  1562. #undef INTERFACE
  1563. #define INTERFACE IDirectDrawSurface2
  1564. DECLARE_INTERFACE_( IDirectDrawSurface2, IUnknown )
  1565. {
  1566.     /*** IUnknown methods ***/
  1567.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  1568.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1569.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1570.     /*** IDirectDrawSurface methods ***/
  1571.     STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE2) PURE;
  1572.     STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
  1573.     STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX) PURE;
  1574.     STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
  1575.     STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD) PURE;
  1576.     STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE2) PURE;
  1577.     STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
  1578.     STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
  1579.     STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE2, DWORD) PURE;
  1580.     STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *) PURE;
  1581.     STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
  1582.     STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
  1583.     STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
  1584.     STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  1585.     STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
  1586.     STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
  1587.     STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
  1588.     STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
  1589.     STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
  1590.     STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
  1591.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
  1592.     STDMETHOD(IsLost)(THIS) PURE;
  1593.     STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
  1594.     STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
  1595.     STDMETHOD(Restore)(THIS) PURE;
  1596.     STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
  1597.     STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  1598.     STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
  1599.     STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
  1600.     STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
  1601.     STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
  1602.     STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
  1603.     STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE2) PURE;
  1604.     /*** Added in the v2 interface ***/
  1605.     STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE;
  1606.     STDMETHOD(PageLock)(THIS_ DWORD) PURE;
  1607.     STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;
  1608. };
  1609.  
  1610. #if !defined(__cplusplus) || defined(CINTERFACE)
  1611. #define IDirectDrawSurface2_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
  1612. #define IDirectDrawSurface2_AddRef(p)                    (p)->lpVtbl->AddRef(p)
  1613. #define IDirectDrawSurface2_Release(p)                   (p)->lpVtbl->Release(p)
  1614. #define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
  1615. #define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
  1616. #define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
  1617. #define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
  1618. #define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
  1619. #define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
  1620. #define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
  1621. #define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
  1622. #define IDirectDrawSurface2_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
  1623. #define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
  1624. #define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
  1625. #define IDirectDrawSurface2_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
  1626. #define IDirectDrawSurface2_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
  1627. #define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
  1628. #define IDirectDrawSurface2_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
  1629. #define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
  1630. #define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
  1631. #define IDirectDrawSurface2_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
  1632. #define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
  1633. #define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
  1634. #define IDirectDrawSurface2_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
  1635. #define IDirectDrawSurface2_IsLost(p)                    (p)->lpVtbl->IsLost(p)
  1636. #define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
  1637. #define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
  1638. #define IDirectDrawSurface2_Restore(p)                   (p)->lpVtbl->Restore(p)
  1639. #define IDirectDrawSurface2_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
  1640. #define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
  1641. #define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
  1642. #define IDirectDrawSurface2_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
  1643. #define IDirectDrawSurface2_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
  1644. #define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
  1645. #define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
  1646. #define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
  1647. #define IDirectDrawSurface2_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)
  1648. #define IDirectDrawSurface2_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)
  1649. #define IDirectDrawSurface2_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)
  1650. #else
  1651. #define IDirectDrawSurface2_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
  1652. #define IDirectDrawSurface2_AddRef(p)                    (p)->AddRef()
  1653. #define IDirectDrawSurface2_Release(p)                   (p)->Release()
  1654. #define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
  1655. #define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
  1656. #define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
  1657. #define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
  1658. #define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
  1659. #define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
  1660. #define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
  1661. #define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
  1662. #define IDirectDrawSurface2_Flip(p,a,b)                  (p)->Flip(a,b)
  1663. #define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
  1664. #define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->GetBltStatus(a)
  1665. #define IDirectDrawSurface2_GetCaps(p,b)                 (p)->GetCaps(b)
  1666. #define IDirectDrawSurface2_GetClipper(p,a)              (p)->GetClipper(a)
  1667. #define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
  1668. #define IDirectDrawSurface2_GetDC(p,a)                   (p)->GetDC(a)
  1669. #define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
  1670. #define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
  1671. #define IDirectDrawSurface2_GetPalette(p,a)              (p)->GetPalette(a)
  1672. #define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
  1673. #define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
  1674. #define IDirectDrawSurface2_Initialize(p,a,b)            (p)->Initialize(a,b)
  1675. #define IDirectDrawSurface2_IsLost(p)                    (p)->IsLost()
  1676. #define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
  1677. #define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->ReleaseDC(a)
  1678. #define IDirectDrawSurface2_Restore(p)                   (p)->Restore()
  1679. #define IDirectDrawSurface2_SetClipper(p,a)              (p)->SetClipper(a)
  1680. #define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
  1681. #define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
  1682. #define IDirectDrawSurface2_SetPalette(p,a)              (p)->SetPalette(a)
  1683. #define IDirectDrawSurface2_Unlock(p,b)                  (p)->Unlock(b)
  1684. #define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
  1685. #define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
  1686. #define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
  1687. #define IDirectDrawSurface2_GetDDInterface(p,a)          (p)->GetDDInterface(a)
  1688. #define IDirectDrawSurface2_PageLock(p,a)                (p)->PageLock(a)
  1689. #define IDirectDrawSurface2_PageUnlock(p,a)              (p)->PageUnlock(a)
  1690. #endif
  1691.  
  1692. /*
  1693.  * IDirectDrawSurface3 and related interfaces
  1694.  */
  1695. #undef INTERFACE
  1696. #define INTERFACE IDirectDrawSurface3
  1697. DECLARE_INTERFACE_( IDirectDrawSurface3, IUnknown )
  1698. {
  1699.     /*** IUnknown methods ***/
  1700.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  1701.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1702.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1703.     /*** IDirectDrawSurface methods ***/
  1704.     STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3) PURE;
  1705.     STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
  1706.     STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX) PURE;
  1707.     STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
  1708.     STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD) PURE;
  1709.     STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE3) PURE;
  1710.     STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
  1711.     STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
  1712.     STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE3, DWORD) PURE;
  1713.     STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *) PURE;
  1714.     STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
  1715.     STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
  1716.     STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
  1717.     STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  1718.     STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
  1719.     STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
  1720.     STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
  1721.     STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
  1722.     STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
  1723.     STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
  1724.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
  1725.     STDMETHOD(IsLost)(THIS) PURE;
  1726.     STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
  1727.     STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
  1728.     STDMETHOD(Restore)(THIS) PURE;
  1729.     STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
  1730.     STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  1731.     STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
  1732.     STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
  1733.     STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
  1734.     STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
  1735.     STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
  1736.     STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE3) PURE;
  1737.     /*** Added in the v2 interface ***/
  1738.     STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE;
  1739.     STDMETHOD(PageLock)(THIS_ DWORD) PURE;
  1740.     STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;
  1741.     /*** Added in the V3 interface ***/
  1742.     STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC, DWORD) PURE;
  1743. };
  1744.  
  1745. #if !defined(__cplusplus) || defined(CINTERFACE)
  1746. #define IDirectDrawSurface3_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
  1747. #define IDirectDrawSurface3_AddRef(p)                    (p)->lpVtbl->AddRef(p)
  1748. #define IDirectDrawSurface3_Release(p)                   (p)->lpVtbl->Release(p)
  1749. #define IDirectDrawSurface3_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
  1750. #define IDirectDrawSurface3_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
  1751. #define IDirectDrawSurface3_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
  1752. #define IDirectDrawSurface3_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
  1753. #define IDirectDrawSurface3_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
  1754. #define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
  1755. #define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
  1756. #define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
  1757. #define IDirectDrawSurface3_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
  1758. #define IDirectDrawSurface3_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
  1759. #define IDirectDrawSurface3_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
  1760. #define IDirectDrawSurface3_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
  1761. #define IDirectDrawSurface3_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
  1762. #define IDirectDrawSurface3_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
  1763. #define IDirectDrawSurface3_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
  1764. #define IDirectDrawSurface3_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
  1765. #define IDirectDrawSurface3_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
  1766. #define IDirectDrawSurface3_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
  1767. #define IDirectDrawSurface3_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
  1768. #define IDirectDrawSurface3_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
  1769. #define IDirectDrawSurface3_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
  1770. #define IDirectDrawSurface3_IsLost(p)                    (p)->lpVtbl->IsLost(p)
  1771. #define IDirectDrawSurface3_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
  1772. #define IDirectDrawSurface3_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
  1773. #define IDirectDrawSurface3_Restore(p)                   (p)->lpVtbl->Restore(p)
  1774. #define IDirectDrawSurface3_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
  1775. #define IDirectDrawSurface3_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
  1776. #define IDirectDrawSurface3_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
  1777. #define IDirectDrawSurface3_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
  1778. #define IDirectDrawSurface3_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
  1779. #define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
  1780. #define IDirectDrawSurface3_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
  1781. #define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
  1782. #define IDirectDrawSurface3_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)
  1783. #define IDirectDrawSurface3_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)
  1784. #define IDirectDrawSurface3_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)
  1785. #define IDirectDrawSurface3_SetSurfaceDesc(p,a,b)        (p)->lpVtbl->SetSurfaceDesc(p,a,b)
  1786. #else
  1787. #define IDirectDrawSurface3_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
  1788. #define IDirectDrawSurface3_AddRef(p)                    (p)->AddRef()
  1789. #define IDirectDrawSurface3_Release(p)                   (p)->Release()
  1790. #define IDirectDrawSurface3_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
  1791. #define IDirectDrawSurface3_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
  1792. #define IDirectDrawSurface3_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
  1793. #define IDirectDrawSurface3_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
  1794. #define IDirectDrawSurface3_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
  1795. #define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
  1796. #define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
  1797. #define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
  1798. #define IDirectDrawSurface3_Flip(p,a,b)                  (p)->Flip(a,b)
  1799. #define IDirectDrawSurface3_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
  1800. #define IDirectDrawSurface3_GetBltStatus(p,a)            (p)->GetBltStatus(a)
  1801. #define IDirectDrawSurface3_GetCaps(p,b)                 (p)->GetCaps(b)
  1802. #define IDirectDrawSurface3_GetClipper(p,a)              (p)->GetClipper(a)
  1803. #define IDirectDrawSurface3_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
  1804. #define IDirectDrawSurface3_GetDC(p,a)                   (p)->GetDC(a)
  1805. #define IDirectDrawSurface3_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
  1806. #define IDirectDrawSurface3_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
  1807. #define IDirectDrawSurface3_GetPalette(p,a)              (p)->GetPalette(a)
  1808. #define IDirectDrawSurface3_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
  1809. #define IDirectDrawSurface3_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
  1810. #define IDirectDrawSurface3_Initialize(p,a,b)            (p)->Initialize(a,b)
  1811. #define IDirectDrawSurface3_IsLost(p)                    (p)->IsLost()
  1812. #define IDirectDrawSurface3_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
  1813. #define IDirectDrawSurface3_ReleaseDC(p,a)               (p)->ReleaseDC(a)
  1814. #define IDirectDrawSurface3_Restore(p)                   (p)->Restore()
  1815. #define IDirectDrawSurface3_SetClipper(p,a)              (p)->SetClipper(a)
  1816. #define IDirectDrawSurface3_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
  1817. #define IDirectDrawSurface3_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
  1818. #define IDirectDrawSurface3_SetPalette(p,a)              (p)->SetPalette(a)
  1819. #define IDirectDrawSurface3_Unlock(p,b)                  (p)->Unlock(b)
  1820. #define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
  1821. #define IDirectDrawSurface3_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
  1822. #define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
  1823. #define IDirectDrawSurface3_GetDDInterface(p,a)          (p)->GetDDInterface(a)
  1824. #define IDirectDrawSurface3_PageLock(p,a)                (p)->PageLock(a)
  1825. #define IDirectDrawSurface3_PageUnlock(p,a)              (p)->PageUnlock(a)
  1826. #define IDirectDrawSurface3_SetSurfaceDesc(p,a,b)        (p)->SetSurfaceDesc(a,b)
  1827. #endif
  1828.  
  1829. /*
  1830.  * IDirectDrawSurface4 and related interfaces
  1831.  */
  1832. #undef INTERFACE
  1833. #define INTERFACE IDirectDrawSurface4
  1834. DECLARE_INTERFACE_( IDirectDrawSurface4, IUnknown )
  1835. {
  1836.     /*** IUnknown methods ***/
  1837.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  1838.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1839.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1840.     /*** IDirectDrawSurface methods ***/
  1841.     STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE4) PURE;
  1842.     STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
  1843.     STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX) PURE;
  1844.     STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
  1845.     STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD) PURE;
  1846.     STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE4) PURE;
  1847.     STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK2) PURE;
  1848.     STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2) PURE;
  1849.     STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE4, DWORD) PURE;
  1850.     STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *) PURE;
  1851.     STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
  1852.     STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE;
  1853.     STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
  1854.     STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  1855.     STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
  1856.     STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
  1857.     STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
  1858.     STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
  1859.     STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
  1860.     STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE;
  1861.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE;
  1862.     STDMETHOD(IsLost)(THIS) PURE;
  1863.     STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE;
  1864.     STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
  1865.     STDMETHOD(Restore)(THIS) PURE;
  1866.     STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
  1867.     STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  1868.     STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
  1869.     STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
  1870.     STDMETHOD(Unlock)(THIS_ LPRECT) PURE;
  1871.     STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
  1872.     STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
  1873.     STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE4) PURE;
  1874.     /*** Added in the v2 interface ***/
  1875.     STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE;
  1876.     STDMETHOD(PageLock)(THIS_ DWORD) PURE;
  1877.     STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;
  1878.     /*** Added in the v3 interface ***/
  1879.     STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE;
  1880.     /*** Added in the v4 interface ***/
  1881.     STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE;
  1882.     STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE;
  1883.     STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
  1884.     STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE;
  1885.     STDMETHOD(ChangeUniquenessValue)(THIS) PURE;
  1886. };
  1887.  
  1888. #if !defined(__cplusplus) || defined(CINTERFACE)
  1889. #define IDirectDrawSurface4_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
  1890. #define IDirectDrawSurface4_AddRef(p)                    (p)->lpVtbl->AddRef(p)
  1891. #define IDirectDrawSurface4_Release(p)                   (p)->lpVtbl->Release(p)
  1892. #define IDirectDrawSurface4_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
  1893. #define IDirectDrawSurface4_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
  1894. #define IDirectDrawSurface4_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
  1895. #define IDirectDrawSurface4_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
  1896. #define IDirectDrawSurface4_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
  1897. #define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
  1898. #define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
  1899. #define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
  1900. #define IDirectDrawSurface4_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
  1901. #define IDirectDrawSurface4_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
  1902. #define IDirectDrawSurface4_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
  1903. #define IDirectDrawSurface4_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
  1904. #define IDirectDrawSurface4_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
  1905. #define IDirectDrawSurface4_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
  1906. #define IDirectDrawSurface4_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
  1907. #define IDirectDrawSurface4_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
  1908. #define IDirectDrawSurface4_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
  1909. #define IDirectDrawSurface4_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
  1910. #define IDirectDrawSurface4_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
  1911. #define IDirectDrawSurface4_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
  1912. #define IDirectDrawSurface4_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
  1913. #define IDirectDrawSurface4_IsLost(p)                    (p)->lpVtbl->IsLost(p)
  1914. #define IDirectDrawSurface4_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
  1915. #define IDirectDrawSurface4_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
  1916. #define IDirectDrawSurface4_Restore(p)                   (p)->lpVtbl->Restore(p)
  1917. #define IDirectDrawSurface4_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
  1918. #define IDirectDrawSurface4_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
  1919. #define IDirectDrawSurface4_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
  1920. #define IDirectDrawSurface4_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
  1921. #define IDirectDrawSurface4_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
  1922. #define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
  1923. #define IDirectDrawSurface4_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
  1924. #define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
  1925. #define IDirectDrawSurface4_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)
  1926. #define IDirectDrawSurface4_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)
  1927. #define IDirectDrawSurface4_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)
  1928. #define IDirectDrawSurface4_SetSurfaceDesc(p,a,b)        (p)->lpVtbl->SetSurfaceDesc(p,a,b)
  1929. #define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
  1930. #define IDirectDrawSurface4_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
  1931. #define IDirectDrawSurface4_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
  1932. #define IDirectDrawSurface4_GetUniquenessValue(p, a)     (p)->lpVtbl->GetUniquenessValue(p, a)
  1933. #define IDirectDrawSurface4_ChangeUniquenessValue(p)     (p)->lpVtbl->ChangeUniquenessValue(p)
  1934. #else
  1935. #define IDirectDrawSurface4_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
  1936. #define IDirectDrawSurface4_AddRef(p)                    (p)->AddRef()
  1937. #define IDirectDrawSurface4_Release(p)                   (p)->Release()
  1938. #define IDirectDrawSurface4_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
  1939. #define IDirectDrawSurface4_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
  1940. #define IDirectDrawSurface4_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
  1941. #define IDirectDrawSurface4_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
  1942. #define IDirectDrawSurface4_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
  1943. #define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
  1944. #define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
  1945. #define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
  1946. #define IDirectDrawSurface4_Flip(p,a,b)                  (p)->Flip(a,b)
  1947. #define IDirectDrawSurface4_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
  1948. #define IDirectDrawSurface4_GetBltStatus(p,a)            (p)->GetBltStatus(a)
  1949. #define IDirectDrawSurface4_GetCaps(p,b)                 (p)->GetCaps(b)
  1950. #define IDirectDrawSurface4_GetClipper(p,a)              (p)->GetClipper(a)
  1951. #define IDirectDrawSurface4_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
  1952. #define IDirectDrawSurface4_GetDC(p,a)                   (p)->GetDC(a)
  1953. #define IDirectDrawSurface4_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
  1954. #define IDirectDrawSurface4_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
  1955. #define IDirectDrawSurface4_GetPalette(p,a)              (p)->GetPalette(a)
  1956. #define IDirectDrawSurface4_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
  1957. #define IDirectDrawSurface4_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
  1958. #define IDirectDrawSurface4_Initialize(p,a,b)            (p)->Initialize(a,b)
  1959. #define IDirectDrawSurface4_IsLost(p)                    (p)->IsLost()
  1960. #define IDirectDrawSurface4_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
  1961. #define IDirectDrawSurface4_ReleaseDC(p,a)               (p)->ReleaseDC(a)
  1962. #define IDirectDrawSurface4_Restore(p)                   (p)->Restore()
  1963. #define IDirectDrawSurface4_SetClipper(p,a)              (p)->SetClipper(a)
  1964. #define IDirectDrawSurface4_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
  1965. #define IDirectDrawSurface4_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
  1966. #define IDirectDrawSurface4_SetPalette(p,a)              (p)->SetPalette(a)
  1967. #define IDirectDrawSurface4_Unlock(p,b)                  (p)->Unlock(b)
  1968. #define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
  1969. #define IDirectDrawSurface4_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
  1970. #define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
  1971. #define IDirectDrawSurface4_GetDDInterface(p,a)          (p)->GetDDInterface(a)
  1972. #define IDirectDrawSurface4_PageLock(p,a)                (p)->PageLock(a)
  1973. #define IDirectDrawSurface4_PageUnlock(p,a)              (p)->PageUnlock(a)
  1974. #define IDirectDrawSurface4_SetSurfaceDesc(p,a,b)        (p)->SetSurfaceDesc(a,b)
  1975. #define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
  1976. #define IDirectDrawSurface4_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
  1977. #define IDirectDrawSurface4_FreePrivateData(p,a)         (p)->FreePrivateData(a)
  1978. #define IDirectDrawSurface4_GetUniquenessValue(p, a)     (p)->GetUniquenessValue(a)
  1979. #define IDirectDrawSurface4_ChangeUniquenessValue(p)     (p)->ChangeUniquenessValue()
  1980. #endif
  1981.  
  1982. /*
  1983.  * IDirectDrawSurface7 and related interfaces
  1984.  */
  1985. #undef INTERFACE
  1986. #define INTERFACE IDirectDrawSurface7
  1987. DECLARE_INTERFACE_( IDirectDrawSurface7, IUnknown )
  1988. {
  1989.     /*** IUnknown methods ***/
  1990.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  1991.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1992.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1993.     /*** IDirectDrawSurface methods ***/
  1994.     STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE7) PURE;
  1995.     STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
  1996.     STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE7, LPRECT,DWORD, LPDDBLTFX) PURE;
  1997.     STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
  1998.     STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE7, LPRECT,DWORD) PURE;
  1999.     STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE7) PURE;
  2000.     STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK7) PURE;
  2001.     STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK7) PURE;
  2002.     STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE7, DWORD) PURE;
  2003.     STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE7 FAR *) PURE;
  2004.     STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
  2005.     STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE;
  2006.     STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
  2007.     STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  2008.     STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
  2009.     STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
  2010.     STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
  2011.     STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
  2012.     STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
  2013.     STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE;
  2014.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE;
  2015.     STDMETHOD(IsLost)(THIS) PURE;
  2016.     STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE;
  2017.     STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
  2018.     STDMETHOD(Restore)(THIS) PURE;
  2019.     STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
  2020.     STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  2021.     STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
  2022.     STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
  2023.     STDMETHOD(Unlock)(THIS_ LPRECT) PURE;
  2024.     STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE7,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
  2025.     STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
  2026.     STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE7) PURE;
  2027.     /*** Added in the v2 interface ***/
  2028.     STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE;
  2029.     STDMETHOD(PageLock)(THIS_ DWORD) PURE;
  2030.     STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;
  2031.     /*** Added in the v3 interface ***/
  2032.     STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE;
  2033.     /*** Added in the v4 interface ***/
  2034.     STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE;
  2035.     STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE;
  2036.     STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
  2037.     STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE;
  2038.     STDMETHOD(ChangeUniquenessValue)(THIS) PURE;
  2039.     /*** Moved Texture7 methods here ***/
  2040.     STDMETHOD(SetPriority)(THIS_ DWORD) PURE;
  2041.     STDMETHOD(GetPriority)(THIS_ LPDWORD) PURE;
  2042.     STDMETHOD(SetLOD)(THIS_ DWORD) PURE;
  2043.     STDMETHOD(GetLOD)(THIS_ LPDWORD) PURE;
  2044. };
  2045.  
  2046. #if !defined(__cplusplus) || defined(CINTERFACE)
  2047. #define IDirectDrawSurface7_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
  2048. #define IDirectDrawSurface7_AddRef(p)                    (p)->lpVtbl->AddRef(p)
  2049. #define IDirectDrawSurface7_Release(p)                   (p)->lpVtbl->Release(p)
  2050. #define IDirectDrawSurface7_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
  2051. #define IDirectDrawSurface7_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
  2052. #define IDirectDrawSurface7_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
  2053. #define IDirectDrawSurface7_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
  2054. #define IDirectDrawSurface7_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
  2055. #define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
  2056. #define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
  2057. #define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
  2058. #define IDirectDrawSurface7_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
  2059. #define IDirectDrawSurface7_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
  2060. #define IDirectDrawSurface7_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
  2061. #define IDirectDrawSurface7_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
  2062. #define IDirectDrawSurface7_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
  2063. #define IDirectDrawSurface7_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
  2064. #define IDirectDrawSurface7_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
  2065. #define IDirectDrawSurface7_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
  2066. #define IDirectDrawSurface7_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
  2067. #define IDirectDrawSurface7_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
  2068. #define IDirectDrawSurface7_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
  2069. #define IDirectDrawSurface7_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
  2070. #define IDirectDrawSurface7_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
  2071. #define IDirectDrawSurface7_IsLost(p)                    (p)->lpVtbl->IsLost(p)
  2072. #define IDirectDrawSurface7_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
  2073. #define IDirectDrawSurface7_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
  2074. #define IDirectDrawSurface7_Restore(p)                   (p)->lpVtbl->Restore(p)
  2075. #define IDirectDrawSurface7_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
  2076. #define IDirectDrawSurface7_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
  2077. #define IDirectDrawSurface7_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
  2078. #define IDirectDrawSurface7_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
  2079. #define IDirectDrawSurface7_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
  2080. #define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
  2081. #define IDirectDrawSurface7_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
  2082. #define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
  2083. #define IDirectDrawSurface7_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)
  2084. #define IDirectDrawSurface7_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)
  2085. #define IDirectDrawSurface7_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)
  2086. #define IDirectDrawSurface7_SetSurfaceDesc(p,a,b)        (p)->lpVtbl->SetSurfaceDesc(p,a,b)
  2087. #define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
  2088. #define IDirectDrawSurface7_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
  2089. #define IDirectDrawSurface7_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
  2090. #define IDirectDrawSurface7_GetUniquenessValue(p, a)     (p)->lpVtbl->GetUniquenessValue(p, a)
  2091. #define IDirectDrawSurface7_ChangeUniquenessValue(p)     (p)->lpVtbl->ChangeUniquenessValue(p)
  2092. #define IDirectDrawSurface7_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
  2093. #define IDirectDrawSurface7_GetPriority(p,a)             (p)->lpVtbl->GetPriority(p,a)
  2094. #define IDirectDrawSurface7_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
  2095. #define IDirectDrawSurface7_GetLOD(p,a)                  (p)->lpVtbl->GetLOD(p,a)
  2096. #else
  2097. #define IDirectDrawSurface7_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
  2098. #define IDirectDrawSurface7_AddRef(p)                    (p)->AddRef()
  2099. #define IDirectDrawSurface7_Release(p)                   (p)->Release()
  2100. #define IDirectDrawSurface7_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
  2101. #define IDirectDrawSurface7_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
  2102. #define IDirectDrawSurface7_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
  2103. #define IDirectDrawSurface7_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
  2104. #define IDirectDrawSurface7_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
  2105. #define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
  2106. #define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
  2107. #define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
  2108. #define IDirectDrawSurface7_Flip(p,a,b)                  (p)->Flip(a,b)
  2109. #define IDirectDrawSurface7_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
  2110. #define IDirectDrawSurface7_GetBltStatus(p,a)            (p)->GetBltStatus(a)
  2111. #define IDirectDrawSurface7_GetCaps(p,b)                 (p)->GetCaps(b)
  2112. #define IDirectDrawSurface7_GetClipper(p,a)              (p)->GetClipper(a)
  2113. #define IDirectDrawSurface7_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
  2114. #define IDirectDrawSurface7_GetDC(p,a)                   (p)->GetDC(a)
  2115. #define IDirectDrawSurface7_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
  2116. #define IDirectDrawSurface7_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
  2117. #define IDirectDrawSurface7_GetPalette(p,a)              (p)->GetPalette(a)
  2118. #define IDirectDrawSurface7_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
  2119. #define IDirectDrawSurface7_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
  2120. #define IDirectDrawSurface7_Initialize(p,a,b)            (p)->Initialize(a,b)
  2121. #define IDirectDrawSurface7_IsLost(p)                    (p)->IsLost()
  2122. #define IDirectDrawSurface7_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
  2123. #define IDirectDrawSurface7_ReleaseDC(p,a)               (p)->ReleaseDC(a)
  2124. #define IDirectDrawSurface7_Restore(p)                   (p)->Restore()
  2125. #define IDirectDrawSurface7_SetClipper(p,a)              (p)->SetClipper(a)
  2126. #define IDirectDrawSurface7_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
  2127. #define IDirectDrawSurface7_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
  2128. #define IDirectDrawSurface7_SetPalette(p,a)              (p)->SetPalette(a)
  2129. #define IDirectDrawSurface7_Unlock(p,b)                  (p)->Unlock(b)
  2130. #define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
  2131. #define IDirectDrawSurface7_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
  2132. #define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
  2133. #define IDirectDrawSurface7_GetDDInterface(p,a)          (p)->GetDDInterface(a)
  2134. #define IDirectDrawSurface7_PageLock(p,a)                (p)->PageLock(a)
  2135. #define IDirectDrawSurface7_PageUnlock(p,a)              (p)->PageUnlock(a)
  2136. #define IDirectDrawSurface7_SetSurfaceDesc(p,a,b)        (p)->SetSurfaceDesc(a,b)
  2137. #define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
  2138. #define IDirectDrawSurface7_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
  2139. #define IDirectDrawSurface7_FreePrivateData(p,a)         (p)->FreePrivateData(a)
  2140. #define IDirectDrawSurface7_GetUniquenessValue(p, a)     (p)->GetUniquenessValue(a)
  2141. #define IDirectDrawSurface7_ChangeUniquenessValue(p)     (p)->ChangeUniquenessValue()
  2142. #define IDirectDrawSurface7_SetPriority(p,a)             (p)->SetPriority(a)
  2143. #define IDirectDrawSurface7_GetPriority(p,a)             (p)->GetPriority(a)
  2144. #define IDirectDrawSurface7_SetLOD(p,a)                  (p)->SetLOD(a)
  2145. #define IDirectDrawSurface7_GetLOD(p,a)                  (p)->GetLOD(a)
  2146. #endif
  2147.  
  2148.  
  2149. /*
  2150.  * IDirectDrawColorControl
  2151.  */
  2152. #if defined( _WIN32 ) && !defined( _NO_COM )
  2153. #undef INTERFACE
  2154. #define INTERFACE IDirectDrawColorControl
  2155. DECLARE_INTERFACE_( IDirectDrawColorControl, IUnknown )
  2156. {
  2157.     /*** IUnknown methods ***/
  2158.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  2159.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  2160.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  2161.     /*** IDirectDrawColorControl methods ***/
  2162.     STDMETHOD(GetColorControls)(THIS_ LPDDCOLORCONTROL) PURE;
  2163.     STDMETHOD(SetColorControls)(THIS_ LPDDCOLORCONTROL) PURE;
  2164. };
  2165.  
  2166. #if !defined(__cplusplus) || defined(CINTERFACE)
  2167. #define IDirectDrawColorControl_QueryInterface(p, a, b)  (p)->lpVtbl->QueryInterface(p, a, b)
  2168. #define IDirectDrawColorControl_AddRef(p)                (p)->lpVtbl->AddRef(p)
  2169. #define IDirectDrawColorControl_Release(p)               (p)->lpVtbl->Release(p)
  2170. #define IDirectDrawColorControl_GetColorControls(p, a)   (p)->lpVtbl->GetColorControls(p, a)
  2171. #define IDirectDrawColorControl_SetColorControls(p, a)   (p)->lpVtbl->SetColorControls(p, a)
  2172. #else
  2173. #define IDirectDrawColorControl_QueryInterface(p, a, b)  (p)->QueryInterface(a, b)
  2174. #define IDirectDrawColorControl_AddRef(p)                (p)->AddRef()
  2175. #define IDirectDrawColorControl_Release(p)               (p)->Release()
  2176. #define IDirectDrawColorControl_GetColorControls(p, a)   (p)->GetColorControls(a)
  2177. #define IDirectDrawColorControl_SetColorControls(p, a)   (p)->SetColorControls(a)
  2178. #endif
  2179.  
  2180. #endif
  2181.  
  2182.  
  2183. /*
  2184.  * IDirectDrawGammaControl
  2185.  */
  2186. #if defined( _WIN32 ) && !defined( _NO_COM )
  2187. #undef INTERFACE
  2188. #define INTERFACE IDirectDrawGammaControl
  2189. DECLARE_INTERFACE_( IDirectDrawGammaControl, IUnknown )
  2190. {
  2191.     /*** IUnknown methods ***/
  2192.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  2193.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  2194.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  2195.     /*** IDirectDrawGammaControl methods ***/
  2196.     STDMETHOD(GetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE;
  2197.     STDMETHOD(SetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE;
  2198. };
  2199.  
  2200. #if !defined(__cplusplus) || defined(CINTERFACE)
  2201. #define IDirectDrawGammaControl_QueryInterface(p, a, b)  (p)->lpVtbl->QueryInterface(p, a, b)
  2202. #define IDirectDrawGammaControl_AddRef(p)                (p)->lpVtbl->AddRef(p)
  2203. #define IDirectDrawGammaControl_Release(p)               (p)->lpVtbl->Release(p)
  2204. #define IDirectDrawGammaControl_GetGammaRamp(p, a, b)    (p)->lpVtbl->GetGammaRamp(p, a, b)
  2205. #define IDirectDrawGammaControl_SetGammaRamp(p, a, b)    (p)->lpVtbl->SetGammaRamp(p, a, b)
  2206. #else
  2207. #define IDirectDrawGammaControl_QueryInterface(p, a, b)  (p)->QueryInterface(a, b)
  2208. #define IDirectDrawGammaControl_AddRef(p)                (p)->AddRef()
  2209. #define IDirectDrawGammaControl_Release(p)               (p)->Release()
  2210. #define IDirectDrawGammaControl_GetGammaRamp(p, a, b)    (p)->GetGammaRamp(a, b)
  2211. #define IDirectDrawGammaControl_SetGammaRamp(p, a, b)    (p)->SetGammaRamp(a, b)
  2212. #endif
  2213.  
  2214. #endif
  2215.  
  2216.  
  2217.  
  2218. #endif
  2219.  
  2220.  
  2221. /*
  2222.  * DDSURFACEDESC
  2223.  */
  2224. typedef struct _DDSURFACEDESC
  2225. {
  2226.     DWORD               dwSize;                 // size of the DDSURFACEDESC structure
  2227.     DWORD               dwFlags;                // determines what fields are valid
  2228.     DWORD               dwHeight;               // height of surface to be created
  2229.     DWORD               dwWidth;                // width of input surface
  2230.     union
  2231.     {
  2232.         LONG            lPitch;                 // distance to start of next line (return value only)
  2233.         DWORD           dwLinearSize;           // Formless late-allocated optimized surface size
  2234.     } DUMMYUNIONNAMEN(1);
  2235.     DWORD               dwBackBufferCount;      // number of back buffers requested
  2236.     union
  2237.     {
  2238.         DWORD           dwMipMapCount;          // number of mip-map levels requested
  2239.         DWORD           dwZBufferBitDepth;      // depth of Z buffer requested
  2240.         DWORD           dwRefreshRate;          // refresh rate (used when display mode is described)
  2241.     } DUMMYUNIONNAMEN(2);
  2242.     DWORD               dwAlphaBitDepth;        // depth of alpha buffer requested
  2243.     DWORD               dwReserved;             // reserved
  2244.     LPVOID              lpSurface;              // pointer to the associated surface memory
  2245.     DDCOLORKEY          ddckCKDestOverlay;      // color key for destination overlay use
  2246.     DDCOLORKEY          ddckCKDestBlt;          // color key for destination blt use
  2247.     DDCOLORKEY          ddckCKSrcOverlay;       // color key for source overlay use
  2248.     DDCOLORKEY          ddckCKSrcBlt;           // color key for source blt use
  2249.     DDPIXELFORMAT       ddpfPixelFormat;        // pixel format description of the surface
  2250.     DDSCAPS             ddsCaps;                // direct draw surface capabilities
  2251. } DDSURFACEDESC;
  2252.  
  2253. /*
  2254.  * DDSURFACEDESC2
  2255.  */
  2256. typedef struct _DDSURFACEDESC2
  2257. {
  2258.     DWORD               dwSize;                 // size of the DDSURFACEDESC structure
  2259.     DWORD               dwFlags;                // determines what fields are valid
  2260.     DWORD               dwHeight;               // height of surface to be created
  2261.     DWORD               dwWidth;                // width of input surface
  2262.     union
  2263.     {
  2264.         LONG            lPitch;                 // distance to start of next line (return value only)
  2265.         DWORD           dwLinearSize;           // Formless late-allocated optimized surface size
  2266.     } DUMMYUNIONNAMEN(1);
  2267.     union
  2268.     {
  2269.         DWORD           dwBackBufferCount;      // number of back buffers requested
  2270.         DWORD           dwDepth;                // the depth if this is a volume texture
  2271.     } DUMMYUNIONNAMEN(5);
  2272.     union
  2273.     {
  2274.         DWORD           dwMipMapCount;          // number of mip-map levels requestde
  2275.                                                 // dwZBufferBitDepth removed, use ddpfPixelFormat one instead
  2276.         DWORD           dwRefreshRate;          // refresh rate (used when display mode is described)
  2277.         DWORD           dwSrcVBHandle;          // The source used in VB::Optimize
  2278.     } DUMMYUNIONNAMEN(2);
  2279.     DWORD               dwAlphaBitDepth;        // depth of alpha buffer requested
  2280.     DWORD               dwReserved;             // reserved
  2281.     LPVOID              lpSurface;              // pointer to the associated surface memory
  2282.     union
  2283.     {
  2284.         DDCOLORKEY      ddckCKDestOverlay;      // color key for destination overlay use
  2285.         DWORD           dwEmptyFaceColor;       // Physical color for empty cubemap faces
  2286.     } DUMMYUNIONNAMEN(3);
  2287.     DDCOLORKEY          ddckCKDestBlt;          // color key for destination blt use
  2288.     DDCOLORKEY          ddckCKSrcOverlay;       // color key for source overlay use
  2289.     DDCOLORKEY          ddckCKSrcBlt;           // color key for source blt use
  2290.     union
  2291.     {
  2292.         DDPIXELFORMAT   ddpfPixelFormat;        // pixel format description of the surface
  2293.         DWORD           dwFVF;                  // vertex format description of vertex buffers
  2294.     } DUMMYUNIONNAMEN(4);
  2295.     DDSCAPS2            ddsCaps;                // direct draw surface capabilities
  2296.     DWORD               dwTextureStage;         // stage in multitexture cascade
  2297. } DDSURFACEDESC2;
  2298.  
  2299. /*
  2300.  * ddsCaps field is valid.
  2301.  */
  2302. #define DDSD_CAPS               0x00000001l     // default
  2303.  
  2304. /*
  2305.  * dwHeight field is valid.
  2306.  */
  2307. #define DDSD_HEIGHT             0x00000002l
  2308.  
  2309. /*
  2310.  * dwWidth field is valid.
  2311.  */
  2312. #define DDSD_WIDTH              0x00000004l
  2313.  
  2314. /*
  2315.  * lPitch is valid.
  2316.  */
  2317. #define DDSD_PITCH              0x00000008l
  2318.  
  2319. /*
  2320.  * dwBackBufferCount is valid.
  2321.  */
  2322. #define DDSD_BACKBUFFERCOUNT    0x00000020l
  2323.  
  2324. /*
  2325.  * dwZBufferBitDepth is valid.  (shouldnt be used in DDSURFACEDESC2)
  2326.  */
  2327. #define DDSD_ZBUFFERBITDEPTH    0x00000040l
  2328.  
  2329. /*
  2330.  * dwAlphaBitDepth is valid.
  2331.  */
  2332. #define DDSD_ALPHABITDEPTH      0x00000080l
  2333.  
  2334.  
  2335. /*
  2336.  * lpSurface is valid.
  2337.  */
  2338. #define DDSD_LPSURFACE          0x00000800l
  2339.  
  2340. /*
  2341.  * ddpfPixelFormat is valid.
  2342.  */
  2343. #define DDSD_PIXELFORMAT        0x00001000l
  2344.  
  2345. /*
  2346.  * ddckCKDestOverlay is valid.
  2347.  */
  2348. #define DDSD_CKDESTOVERLAY      0x00002000l
  2349.  
  2350. /*
  2351.  * ddckCKDestBlt is valid.
  2352.  */
  2353. #define DDSD_CKDESTBLT          0x00004000l
  2354.  
  2355. /*
  2356.  * ddckCKSrcOverlay is valid.
  2357.  */
  2358. #define DDSD_CKSRCOVERLAY       0x00008000l
  2359.  
  2360. /*
  2361.  * ddckCKSrcBlt is valid.
  2362.  */
  2363. #define DDSD_CKSRCBLT           0x00010000l
  2364.  
  2365. /*
  2366.  * dwMipMapCount is valid.
  2367.  */
  2368. #define DDSD_MIPMAPCOUNT        0x00020000l
  2369.  
  2370.  /*
  2371.   * dwRefreshRate is valid
  2372.   */
  2373. #define DDSD_REFRESHRATE        0x00040000l
  2374.  
  2375. /*
  2376.  * dwLinearSize is valid
  2377.  */
  2378. #define DDSD_LINEARSIZE         0x00080000l
  2379.  
  2380. /*
  2381.  * dwTextureStage is valid
  2382.  */
  2383. #define DDSD_TEXTURESTAGE       0x00100000l
  2384. /*
  2385.  * dwFVF is valid
  2386.  */
  2387. #define DDSD_FVF                0x00200000l
  2388. /*
  2389.  * dwSrcVBHandle is valid
  2390.  */
  2391. #define DDSD_SRCVBHANDLE        0x00400000l
  2392.  
  2393. /*
  2394.  * dwDepth is valid
  2395.  */
  2396. #define DDSD_DEPTH              0x00800000l
  2397.  
  2398. /*
  2399.  * All input fields are valid.
  2400.  */
  2401. #define DDSD_ALL                0x00fff9eel
  2402.  
  2403. /*
  2404.  * DDOPTSURFACEDESC
  2405.  */
  2406. typedef struct _DDOPTSURFACEDESC
  2407. {
  2408.     DWORD       dwSize;             // size of the DDOPTSURFACEDESC structure
  2409.     DWORD       dwFlags;            // determines what fields are valid
  2410.     DDSCAPS2    ddSCaps;            // Common caps like: Memory type
  2411.     DDOSCAPS    ddOSCaps;           // Common caps like: Memory type
  2412.     GUID        guid;               // Compression technique GUID
  2413.     DWORD       dwCompressionRatio; // Compression ratio
  2414. } DDOPTSURFACEDESC;
  2415.  
  2416. /*
  2417.  * guid field is valid.
  2418.  */
  2419. #define DDOSD_GUID                  0x00000001l
  2420.  
  2421. /*
  2422.  * dwCompressionRatio field is valid.
  2423.  */
  2424. #define DDOSD_COMPRESSION_RATIO     0x00000002l
  2425.  
  2426. /*
  2427.  * ddSCaps field is valid.
  2428.  */
  2429. #define DDOSD_SCAPS                 0x00000004l
  2430.  
  2431. /*
  2432.  * ddOSCaps field is valid.
  2433.  */
  2434. #define DDOSD_OSCAPS                0x00000008l
  2435.  
  2436. /*
  2437.  * All input fields are valid.
  2438.  */
  2439. #define DDOSD_ALL                   0x0000000fl
  2440.  
  2441. /*
  2442.  * The surface's optimized pixelformat is compressed
  2443.  */
  2444. #define DDOSDCAPS_OPTCOMPRESSED                 0x00000001l
  2445.  
  2446. /*
  2447.  * The surface's optimized pixelformat is reordered
  2448.  */
  2449. #define DDOSDCAPS_OPTREORDERED                  0x00000002l
  2450.  
  2451. /*
  2452.  * The opt surface is a monolithic mipmap
  2453.  */
  2454. #define DDOSDCAPS_MONOLITHICMIPMAP              0x00000004l
  2455.  
  2456. /*
  2457.  * The valid Surf caps:
  2458.  * #define DDSCAPS_SYSTEMMEMORY                 0x00000800l
  2459.  * #define DDSCAPS_VIDEOMEMORY          0x00004000l
  2460.  * #define DDSCAPS_LOCALVIDMEM          0x10000000l
  2461.  * #define DDSCAPS_NONLOCALVIDMEM       0x20000000l
  2462.  */
  2463. #define DDOSDCAPS_VALIDSCAPS            0x30004800l
  2464.  
  2465. /*
  2466.  * The valid OptSurf caps
  2467.  */
  2468. #define DDOSDCAPS_VALIDOSCAPS           0x00000007l
  2469.  
  2470.  
  2471. /*
  2472.  * DDCOLORCONTROL
  2473.  */
  2474. typedef struct _DDCOLORCONTROL
  2475. {
  2476.     DWORD               dwSize;
  2477.     DWORD               dwFlags;
  2478.     LONG                lBrightness;
  2479.     LONG                lContrast;
  2480.     LONG                lHue;
  2481.     LONG                lSaturation;
  2482.     LONG                lSharpness;
  2483.     LONG                lGamma;
  2484.     LONG                lColorEnable;
  2485.     DWORD               dwReserved1;
  2486. } DDCOLORCONTROL;
  2487.  
  2488.  
  2489. /*
  2490.  * lBrightness field is valid.
  2491.  */
  2492. #define DDCOLOR_BRIGHTNESS              0x00000001l
  2493.  
  2494. /*
  2495.  * lContrast field is valid.
  2496.  */
  2497. #define DDCOLOR_CONTRAST                0x00000002l
  2498.  
  2499. /*
  2500.  * lHue field is valid.
  2501.  */
  2502. #define DDCOLOR_HUE                     0x00000004l
  2503.  
  2504. /*
  2505.  * lSaturation field is valid.
  2506.  */
  2507. #define DDCOLOR_SATURATION              0x00000008l
  2508.  
  2509. /*
  2510.  * lSharpness field is valid.
  2511.  */
  2512. #define DDCOLOR_SHARPNESS               0x00000010l
  2513.  
  2514. /*
  2515.  * lGamma field is valid.
  2516.  */
  2517. #define DDCOLOR_GAMMA                   0x00000020l
  2518.  
  2519. /*
  2520.  * lColorEnable field is valid.
  2521.  */
  2522. #define DDCOLOR_COLORENABLE             0x00000040l
  2523.  
  2524.  
  2525.  
  2526. /*============================================================================
  2527.  *
  2528.  * Direct Draw Capability Flags
  2529.  *
  2530.  * These flags are used to describe the capabilities of a given Surface.
  2531.  * All flags are bit flags.
  2532.  *
  2533.  *==========================================================================*/
  2534.  
  2535. /****************************************************************************
  2536.  *
  2537.  * DIRECTDRAWSURFACE CAPABILITY FLAGS
  2538.  *
  2539.  ****************************************************************************/
  2540.  
  2541. /*
  2542.  * This bit is reserved. It should not be specified.
  2543.  */
  2544. #define DDSCAPS_RESERVED1                       0x00000001l
  2545.  
  2546. /*
  2547.  * Indicates that this surface contains alpha-only information.
  2548.  * (To determine if a surface is RGBA/YUVA, the pixel format must be
  2549.  * interrogated.)
  2550.  */
  2551. #define DDSCAPS_ALPHA                           0x00000002l
  2552.  
  2553. /*
  2554.  * Indicates that this surface is a backbuffer.  It is generally
  2555.  * set by CreateSurface when the DDSCAPS_FLIP capability bit is set.
  2556.  * It indicates that this surface is THE back buffer of a surface
  2557.  * flipping structure.  DirectDraw supports N surfaces in a
  2558.  * surface flipping structure.  Only the surface that immediately
  2559.  * precedeces the DDSCAPS_FRONTBUFFER has this capability bit set.
  2560.  * The other surfaces are identified as back buffers by the presence
  2561.  * of the DDSCAPS_FLIP capability, their attachment order, and the
  2562.  * absence of the DDSCAPS_FRONTBUFFER and DDSCAPS_BACKBUFFER
  2563.  * capabilities.  The bit is sent to CreateSurface when a standalone
  2564.  * back buffer is being created.  This surface could be attached to
  2565.  * a front buffer and/or back buffers to form a flipping surface
  2566.  * structure after the CreateSurface call.  See AddAttachments for
  2567.  * a detailed description of the behaviors in this case.
  2568.  */
  2569. #define DDSCAPS_BACKBUFFER                      0x00000004l
  2570.  
  2571. /*
  2572.  * Indicates a complex surface structure is being described.  A
  2573.  * complex surface structure results in the creation of more than
  2574.  * one surface.  The additional surfaces are attached to the root
  2575.  * surface.  The complex structure can only be destroyed by
  2576.  * destroying the root.
  2577.  */
  2578. #define DDSCAPS_COMPLEX                         0x00000008l
  2579.  
  2580. /*
  2581.  * Indicates that this surface is a part of a surface flipping structure.
  2582.  * When it is passed to CreateSurface the DDSCAPS_FRONTBUFFER and
  2583.  * DDSCAP_BACKBUFFER bits are not set.  They are set by CreateSurface
  2584.  * on the resulting creations.  The dwBackBufferCount field in the
  2585.  * DDSURFACEDESC structure must be set to at least 1 in order for
  2586.  * the CreateSurface call to succeed.  The DDSCAPS_COMPLEX capability
  2587.  * must always be set with creating multiple surfaces through CreateSurface.
  2588.  */
  2589. #define DDSCAPS_FLIP                            0x00000010l
  2590.  
  2591. /*
  2592.  * Indicates that this surface is THE front buffer of a surface flipping
  2593.  * structure.  It is generally set by CreateSurface when the DDSCAPS_FLIP
  2594.  * capability bit is set.
  2595.  * If this capability is sent to CreateSurface then a standalonw front buffer
  2596.  * is created.  This surface will not have the DDSCAPS_FLIP capability.
  2597.  * It can be attached to other back buffers to form a flipping structure.
  2598.  * See AddAttachments for a detailed description of the behaviors in this
  2599.  * case.
  2600.  */
  2601. #define DDSCAPS_FRONTBUFFER                     0x00000020l
  2602.  
  2603. /*
  2604.  * Indicates that this surface is any offscreen surface that is not an overlay,
  2605.  * texture, zbuffer, front buffer, back buffer, or alpha surface.  It is used
  2606.  * to identify plain vanilla surfaces.
  2607.  */
  2608. #define DDSCAPS_OFFSCREENPLAIN                  0x00000040l
  2609.  
  2610. /*
  2611.  * Indicates that this surface is an overlay.  It may or may not be directly visible
  2612.  * depending on whether or not it is currently being overlayed onto the primary
  2613.  * surface.  DDSCAPS_VISIBLE can be used to determine whether or not it is being
  2614.  * overlayed at the moment.
  2615.  */
  2616. #define DDSCAPS_OVERLAY                         0x00000080l
  2617.  
  2618. /*
  2619.  * Indicates that unique DirectDrawPalette objects can be created and
  2620.  * attached to this surface.
  2621.  */
  2622. #define DDSCAPS_PALETTE                         0x00000100l
  2623.  
  2624. /*
  2625.  * Indicates that this surface is the primary surface.  The primary
  2626.  * surface represents what the user is seeing at the moment.
  2627.  */
  2628. #define DDSCAPS_PRIMARYSURFACE                  0x00000200l
  2629.  
  2630.  
  2631. /*
  2632.  * This flag used to be DDSCAPS_PRIMARYSURFACELEFT, which is now
  2633.  * obsolete.
  2634.  */
  2635. #define DDSCAPS_RESERVED3               0x00000400l
  2636. #define DDSCAPS_PRIMARYSURFACELEFT              0x00000000l
  2637.  
  2638. /*
  2639.  * Indicates that this surface memory was allocated in system memory
  2640.  */
  2641. #define DDSCAPS_SYSTEMMEMORY                    0x00000800l
  2642.  
  2643. /*
  2644.  * Indicates that this surface can be used as a 3D texture.  It does not
  2645.  * indicate whether or not the surface is being used for that purpose.
  2646.  */
  2647. #define DDSCAPS_TEXTURE                         0x00001000l
  2648.  
  2649. /*
  2650.  * Indicates that a surface may be a destination for 3D rendering.  This
  2651.  * bit must be set in order to query for a Direct3D Device Interface
  2652.  * from this surface.
  2653.  */
  2654. #define DDSCAPS_3DDEVICE                        0x00002000l
  2655.  
  2656. /*
  2657.  * Indicates that this surface exists in video memory.
  2658.  */
  2659. #define DDSCAPS_VIDEOMEMORY                     0x00004000l
  2660.  
  2661. /*
  2662.  * Indicates that changes made to this surface are immediately visible.
  2663.  * It is always set for the primary surface and is set for overlays while
  2664.  * they are being overlayed and texture maps while they are being textured.
  2665.  */
  2666. #define DDSCAPS_VISIBLE                         0x00008000l
  2667.  
  2668. /*
  2669.  * Indicates that only writes are permitted to the surface.  Read accesses
  2670.  * from the surface may or may not generate a protection fault, but the
  2671.  * results of a read from this surface will not be meaningful.  READ ONLY.
  2672.  */
  2673. #define DDSCAPS_WRITEONLY                       0x00010000l
  2674.  
  2675. /*
  2676.  * Indicates that this surface is a z buffer. A z buffer does not contain
  2677.  * displayable information.  Instead it contains bit depth information that is
  2678.  * used to determine which pixels are visible and which are obscured.
  2679.  */
  2680. #define DDSCAPS_ZBUFFER                         0x00020000l
  2681.  
  2682. /*
  2683.  * Indicates surface will have a DC associated long term
  2684.  */
  2685. #define DDSCAPS_OWNDC                           0x00040000l
  2686.  
  2687. /*
  2688.  * Indicates surface should be able to receive live video
  2689.  */
  2690. #define DDSCAPS_LIVEVIDEO                       0x00080000l
  2691.  
  2692. /*
  2693.  * Indicates surface should be able to have a stream decompressed
  2694.  * to it by the hardware.
  2695.  */
  2696. #define DDSCAPS_HWCODEC                         0x00100000l
  2697.  
  2698. /*
  2699.  * Surface is a ModeX surface.
  2700.  *
  2701.  */
  2702. #define DDSCAPS_MODEX                           0x00200000l
  2703.  
  2704. /*
  2705.  * Indicates surface is one level of a mip-map. This surface will
  2706.  * be attached to other DDSCAPS_MIPMAP surfaces to form the mip-map.
  2707.  * This can be done explicitly, by creating a number of surfaces and
  2708.  * attaching them with AddAttachedSurface or by implicitly by CreateSurface.
  2709.  * If this bit is set then DDSCAPS_TEXTURE must also be set.
  2710.  */
  2711. #define DDSCAPS_MIPMAP                          0x00400000l
  2712.  
  2713. /*
  2714.  * This bit is reserved. It should not be specified.
  2715.  */
  2716. #define DDSCAPS_RESERVED2                       0x00800000l
  2717.  
  2718.  
  2719. /*
  2720.  * Indicates that memory for the surface is not allocated until the surface
  2721.  * is loaded (via the Direct3D texture Load() function).
  2722.  */
  2723. #define DDSCAPS_ALLOCONLOAD                     0x04000000l
  2724.  
  2725. /*
  2726.  * Indicates that the surface will recieve data from a video port.
  2727.  */
  2728. #define DDSCAPS_VIDEOPORT                       0x08000000l
  2729.  
  2730. /*
  2731.  * Indicates that a video memory surface is resident in true, local video
  2732.  * memory rather than non-local video memory. If this flag is specified then
  2733.  * so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with
  2734.  * DDSCAPS_NONLOCALVIDMEM.
  2735.  */
  2736. #define DDSCAPS_LOCALVIDMEM                     0x10000000l
  2737.  
  2738. /*
  2739.  * Indicates that a video memory surface is resident in non-local video
  2740.  * memory rather than true, local video memory. If this flag is specified
  2741.  * then so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with
  2742.  * DDSCAPS_LOCALVIDMEM.
  2743.  */
  2744. #define DDSCAPS_NONLOCALVIDMEM                  0x20000000l
  2745.  
  2746. /*
  2747.  * Indicates that this surface is a standard VGA mode surface, and not a
  2748.  * ModeX surface. (This flag will never be set in combination with the
  2749.  * DDSCAPS_MODEX flag).
  2750.  */
  2751. #define DDSCAPS_STANDARDVGAMODE                 0x40000000l
  2752.  
  2753. /*
  2754.  * Indicates that this surface will be an optimized surface. This flag is
  2755.  * currently only valid in conjunction with the DDSCAPS_TEXTURE flag. The surface
  2756.  * will be created without any underlying video memory until loaded.
  2757.  */
  2758. #define DDSCAPS_OPTIMIZED                       0x80000000l
  2759.  
  2760.  
  2761.  
  2762. /*
  2763.  * This bit is reserved
  2764.  */
  2765. #define DDSCAPS2_RESERVED4                      0x00000002L
  2766. #define DDSCAPS2_HARDWAREDEINTERLACE            0x00000000L
  2767.  
  2768. /*
  2769.  * Indicates to the driver that this surface will be locked very frequently
  2770.  * (for procedural textures, dynamic lightmaps, etc). Surfaces with this cap
  2771.  * set must also have DDSCAPS_TEXTURE. This cap cannot be used with
  2772.  * DDSCAPS2_HINTSTATIC and DDSCAPS2_OPAQUE.
  2773.  */
  2774. #define DDSCAPS2_HINTDYNAMIC                    0x00000004L
  2775.  
  2776. /*
  2777.  * Indicates to the driver that this surface can be re-ordered/retiled on
  2778.  * load. This operation will not change the size of the texture. It is
  2779.  * relatively fast and symmetrical, since the application may lock these
  2780.  * bits (although it will take a performance hit when doing so). Surfaces
  2781.  * with this cap set must also have DDSCAPS_TEXTURE. This cap cannot be
  2782.  * used with DDSCAPS2_HINTDYNAMIC and DDSCAPS2_OPAQUE.
  2783.  */
  2784. #define DDSCAPS2_HINTSTATIC                     0x00000008L
  2785.  
  2786. /*
  2787.  * Indicates that the client would like this texture surface to be managed by the
  2788.  * DirectDraw/Direct3D runtime. Surfaces with this cap set must also have
  2789.  * DDSCAPS_TEXTURE set.
  2790.  */
  2791. #define DDSCAPS2_TEXTUREMANAGE                  0x00000010L
  2792.  
  2793. /*
  2794.  * These bits are reserved for internal use */
  2795. #define DDSCAPS2_RESERVED1                      0x00000020L
  2796. #define DDSCAPS2_RESERVED2                      0x00000040L
  2797.  
  2798. /*
  2799.  * Indicates to the driver that this surface will never be locked again.
  2800.  * The driver is free to optimize this surface via retiling and actual compression.
  2801.  * All calls to Lock() or Blts from this surface will fail. Surfaces with this
  2802.  * cap set must also have DDSCAPS_TEXTURE. This cap cannot be used with
  2803.  * DDSCAPS2_HINTDYNAMIC and DDSCAPS2_HINTSTATIC.
  2804.  */
  2805. #define DDSCAPS2_OPAQUE                         0x00000080L
  2806.  
  2807. /*
  2808.  * Applications should set this bit at CreateSurface time to indicate that they
  2809.  * intend to use antialiasing. Only valid if DDSCAPS_3DDEVICE is also set.
  2810.  */
  2811. #define DDSCAPS2_HINTANTIALIASING               0x00000100L
  2812.  
  2813.  
  2814. /*
  2815.  * This flag is used at CreateSurface time to indicate that this set of
  2816.  * surfaces is a cubic environment map
  2817.  */
  2818. #define DDSCAPS2_CUBEMAP                        0x00000200L
  2819.  
  2820. /*
  2821.  * These flags preform two functions:
  2822.  * - At CreateSurface time, they define which of the six cube faces are
  2823.  *   required by the application.
  2824.  * - After creation, each face in the cubemap will have exactly one of these
  2825.  *   bits set.
  2826.  */
  2827. #define DDSCAPS2_CUBEMAP_POSITIVEX              0x00000400L
  2828. #define DDSCAPS2_CUBEMAP_NEGATIVEX              0x00000800L
  2829. #define DDSCAPS2_CUBEMAP_POSITIVEY              0x00001000L
  2830. #define DDSCAPS2_CUBEMAP_NEGATIVEY              0x00002000L
  2831. #define DDSCAPS2_CUBEMAP_POSITIVEZ              0x00004000L
  2832. #define DDSCAPS2_CUBEMAP_NEGATIVEZ              0x00008000L
  2833.  
  2834. /*
  2835.  * This macro may be used to specify all faces of a cube map at CreateSurface time
  2836.  */
  2837. #define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\
  2838.                                     DDSCAPS2_CUBEMAP_NEGATIVEX |\
  2839.                                     DDSCAPS2_CUBEMAP_POSITIVEY |\
  2840.                                     DDSCAPS2_CUBEMAP_NEGATIVEY |\
  2841.                                     DDSCAPS2_CUBEMAP_POSITIVEZ |\
  2842.                                     DDSCAPS2_CUBEMAP_NEGATIVEZ )
  2843.  
  2844.  
  2845. /*
  2846.  * This flag is an additional flag which is present on mipmap sublevels from DX7 onwards
  2847.  * It enables easier use of GetAttachedSurface rather than EnumAttachedSurfaces for surface
  2848.  * constructs such as Cube Maps, wherein there are more than one mipmap surface attached
  2849.  * to the root surface.
  2850.  * This caps bit is ignored by CreateSurface
  2851.  */
  2852. #define DDSCAPS2_MIPMAPSUBLEVEL                 0x00010000L
  2853.  
  2854. /* This flag indicates that the texture should be managed by D3D only */
  2855. #define DDSCAPS2_D3DTEXTUREMANAGE               0x00020000L
  2856.  
  2857. /* This flag indicates that the managed surface can be safely lost */
  2858. #define DDSCAPS2_DONOTPERSIST                   0x00040000L
  2859.  
  2860. /* indicates that this surface is part of a stereo flipping chain */
  2861. #define DDSCAPS2_STEREOSURFACELEFT              0x00080000L
  2862.  
  2863.  
  2864. /*
  2865.  * Indicates that the surface is a volume.
  2866.  * Can be combined with DDSCAPS_MIPMAP to indicate a multi-level volume
  2867.  */
  2868. #define DDSCAPS2_VOLUME                         0x00200000L
  2869.  
  2870. /*
  2871.  * Indicates that the surface may be locked multiple times by the application.
  2872.  * This cap cannot be used with DDSCAPS2_OPAQUE.
  2873.  */
  2874. #define DDSCAPS2_NOTUSERLOCKABLE                0x00400000L
  2875.  
  2876. /*
  2877.  * Indicates that the vertex buffer data can be used to render points and
  2878.  * point sprites.
  2879.  */
  2880. #define DDSCAPS2_POINTS                         0x00800000L
  2881.  
  2882. /*
  2883.  * Indicates that the vertex buffer data can be used to render rt pactches.
  2884.  */
  2885. #define DDSCAPS2_RTPATCHES                      0x01000000L
  2886.  
  2887. /*
  2888.  * Indicates that the vertex buffer data can be used to render n patches.
  2889.  */
  2890. #define DDSCAPS2_NPATCHES                       0x02000000L
  2891.  
  2892. /*
  2893.  * This bit is reserved for internal use
  2894.  */
  2895. #define DDSCAPS2_RESERVED3                      0x04000000L
  2896.  
  2897.  
  2898. /*
  2899.  * Indicates that the contents of the backbuffer do not have to be preserved
  2900.  * the contents of the backbuffer after they are presented.
  2901.  */
  2902. #define DDSCAPS2_DISCARDBACKBUFFER              0x10000000L
  2903.  
  2904. /*
  2905.  * Indicates that all surfaces in this creation chain should be given an alpha channel.
  2906.  * This flag will be set on primary surface chains that may have no explicit pixel format
  2907.  * (and thus take on the format of the current display mode).
  2908.  * The driver should infer that all these surfaces have a format having an alpha channel.
  2909.  * (e.g. assume D3DFMT_A8R8G8B8 if the display mode is x888.)
  2910.  */
  2911. #define DDSCAPS2_ENABLEALPHACHANNEL             0x20000000L
  2912.  
  2913. /*
  2914.  * Indicates that all surfaces in this creation chain is extended primary surface format.
  2915.  * This flag will be set on extended primary surface chains that always have explicit pixel
  2916.  * format and the pixel format is typically GDI (Graphics Device Interface) couldn't handle,
  2917.  * thus only used with fullscreen application. (e.g. D3DFMT_A2R10G10B10 format)
  2918.  */
  2919. #define DDSCAPS2_EXTENDEDFORMATPRIMARY          0x40000000L
  2920.  
  2921. /*
  2922.  * Indicates that all surfaces in this creation chain is additional primary surface.
  2923.  * This flag will be set on primary surface chains which must present on the adapter
  2924.  * id provided on dwCaps4. Typically this will be used to create secondary primary surface
  2925.  * on DualView display adapter.
  2926.  */
  2927. #define DDSCAPS2_ADDITIONALPRIMARY              0x80000000L
  2928.  
  2929. /*
  2930.  * This is a mask that indicates the set of bits that may be set
  2931.  * at createsurface time to indicate number of samples per pixel
  2932.  * when multisampling
  2933.  */
  2934. #define DDSCAPS3_MULTISAMPLE_MASK               0x0000001FL
  2935.  
  2936. /*
  2937.  * This is a mask that indicates the set of bits that may be set
  2938.  * at createsurface time to indicate the quality level of rendering
  2939.  * for the current number of samples per pixel
  2940.  */
  2941. #define DDSCAPS3_MULTISAMPLE_QUALITY_MASK       0x000000E0L
  2942. #define DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT      5
  2943.  
  2944. /*
  2945.  * This bit is reserved for internal use
  2946.  */
  2947. #define DDSCAPS3_RESERVED1                      0x00000100L
  2948.  
  2949. /*
  2950.  * This bit is reserved for internal use
  2951.  */
  2952. #define DDSCAPS3_RESERVED2                      0x00000200L
  2953.  
  2954. /*
  2955.  * This indicates whether this surface has light-weight miplevels
  2956.  */
  2957. #define DDSCAPS3_LIGHTWEIGHTMIPMAP              0x00000400L
  2958.  
  2959. /*
  2960.  * This indicates that the mipsublevels for this surface are auto-generated
  2961.  */
  2962. #define DDSCAPS3_AUTOGENMIPMAP                  0x00000800L
  2963.  
  2964. /*
  2965.  * This indicates that the mipsublevels for this surface are auto-generated
  2966.  */
  2967. #define DDSCAPS3_DMAP                           0x00001000L
  2968.  
  2969. /* D3D9Ex only -- */
  2970. #if !defined(D3D_DISABLE_9EX)
  2971.  
  2972. /*
  2973.  * This indicates that this surface is to be shared by processes
  2974.  */
  2975. #define DDSCAPS3_CREATESHAREDRESOURCE           0x00002000L
  2976.  
  2977. /*
  2978.  * This indicates that this surface need to be initialized before being
  2979.  * shared, this bit implies that this surface is read only after initialization
  2980.  * absence of this bit implies that this surface allows both read and write
  2981.  */
  2982. #define DDSCAPS3_READONLYRESOURCE               0x00004000L
  2983.  
  2984. /*
  2985.  * This indicates that this surface is to share an existing video memory with
  2986.  * another surface created with DDSCAPS3_CREATESHAREDRESOURCE, This bit is never
  2987.  * used with DDSCAPS3_CREATESHAREDRESOURCE
  2988.  */
  2989. #define DDSCAPS3_OPENSHAREDRESOURCE             0x00008000L
  2990.  
  2991. #endif // !D3D_DISABLE_9EX
  2992. /* -- D3D9Ex only */
  2993.  
  2994.  
  2995.  /****************************************************************************
  2996.  *
  2997.  * DIRECTDRAW DRIVER CAPABILITY FLAGS
  2998.  *
  2999.  ****************************************************************************/
  3000.  
  3001. /*
  3002.  * Display hardware has 3D acceleration.
  3003.  */
  3004. #define DDCAPS_3D                       0x00000001l
  3005.  
  3006. /*
  3007.  * Indicates that DirectDraw will support only dest rectangles that are aligned
  3008.  * on DIRECTDRAWCAPS.dwAlignBoundaryDest boundaries of the surface, respectively.
  3009.  * READ ONLY.
  3010.  */
  3011. #define DDCAPS_ALIGNBOUNDARYDEST        0x00000002l
  3012.  
  3013. /*
  3014.  * Indicates that DirectDraw will support only source rectangles  whose sizes in
  3015.  * BYTEs are DIRECTDRAWCAPS.dwAlignSizeDest multiples, respectively.  READ ONLY.
  3016.  */
  3017. #define DDCAPS_ALIGNSIZEDEST            0x00000004l
  3018. /*
  3019.  * Indicates that DirectDraw will support only source rectangles that are aligned
  3020.  * on DIRECTDRAWCAPS.dwAlignBoundarySrc boundaries of the surface, respectively.
  3021.  * READ ONLY.
  3022.  */
  3023. #define DDCAPS_ALIGNBOUNDARYSRC         0x00000008l
  3024.  
  3025. /*
  3026.  * Indicates that DirectDraw will support only source rectangles  whose sizes in
  3027.  * BYTEs are DIRECTDRAWCAPS.dwAlignSizeSrc multiples, respectively.  READ ONLY.
  3028.  */
  3029. #define DDCAPS_ALIGNSIZESRC             0x00000010l
  3030.  
  3031. /*
  3032.  * Indicates that DirectDraw will create video memory surfaces that have a stride
  3033.  * alignment equal to DIRECTDRAWCAPS.dwAlignStride.  READ ONLY.
  3034.  */
  3035. #define DDCAPS_ALIGNSTRIDE              0x00000020l
  3036.  
  3037. /*
  3038.  * Display hardware is capable of blt operations.
  3039.  */
  3040. #define DDCAPS_BLT                      0x00000040l
  3041.  
  3042. /*
  3043.  * Display hardware is capable of asynchronous blt operations.
  3044.  */
  3045. #define DDCAPS_BLTQUEUE                 0x00000080l
  3046.  
  3047. /*
  3048.  * Display hardware is capable of color space conversions during the blt operation.
  3049.  */
  3050. #define DDCAPS_BLTFOURCC                0x00000100l
  3051.  
  3052. /*
  3053.  * Display hardware is capable of stretching during blt operations.
  3054.  */
  3055. #define DDCAPS_BLTSTRETCH               0x00000200l
  3056.  
  3057. /*
  3058.  * Display hardware is shared with GDI.
  3059.  */
  3060. #define DDCAPS_GDI                      0x00000400l
  3061.  
  3062. /*
  3063.  * Display hardware can overlay.
  3064.  */
  3065. #define DDCAPS_OVERLAY                  0x00000800l
  3066.  
  3067. /*
  3068.  * Set if display hardware supports overlays but can not clip them.
  3069.  */
  3070. #define DDCAPS_OVERLAYCANTCLIP          0x00001000l
  3071.  
  3072. /*
  3073.  * Indicates that overlay hardware is capable of color space conversions during
  3074.  * the overlay operation.
  3075.  */
  3076. #define DDCAPS_OVERLAYFOURCC            0x00002000l
  3077.  
  3078. /*
  3079.  * Indicates that stretching can be done by the overlay hardware.
  3080.  */
  3081. #define DDCAPS_OVERLAYSTRETCH           0x00004000l
  3082.  
  3083. /*
  3084.  * Indicates that unique DirectDrawPalettes can be created for DirectDrawSurfaces
  3085.  * other than the primary surface.
  3086.  */
  3087. #define DDCAPS_PALETTE                  0x00008000l
  3088.  
  3089. /*
  3090.  * Indicates that palette changes can be syncd with the veritcal refresh.
  3091.  */
  3092. #define DDCAPS_PALETTEVSYNC             0x00010000l
  3093.  
  3094. /*
  3095.  * Display hardware can return the current scan line.
  3096.  */
  3097. #define DDCAPS_READSCANLINE             0x00020000l
  3098.  
  3099.  
  3100. /*
  3101.  * This flag used to bo DDCAPS_STEREOVIEW, which is now obsolete
  3102.  */
  3103. #define DDCAPS_RESERVED1                0x00040000l
  3104.  
  3105. /*
  3106.  * Display hardware is capable of generating a vertical blank interrupt.
  3107.  */
  3108. #define DDCAPS_VBI                      0x00080000l
  3109.  
  3110. /*
  3111.  * Supports the use of z buffers with blt operations.
  3112.  */
  3113. #define DDCAPS_ZBLTS                    0x00100000l
  3114.  
  3115. /*
  3116.  * Supports Z Ordering of overlays.
  3117.  */
  3118. #define DDCAPS_ZOVERLAYS                0x00200000l
  3119.  
  3120. /*
  3121.  * Supports color key
  3122.  */
  3123. #define DDCAPS_COLORKEY                 0x00400000l
  3124.  
  3125. /*
  3126.  * Supports alpha surfaces
  3127.  */
  3128. #define DDCAPS_ALPHA                    0x00800000l
  3129.  
  3130. /*
  3131.  * colorkey is hardware assisted(DDCAPS_COLORKEY will also be set)
  3132.  */
  3133. #define DDCAPS_COLORKEYHWASSIST         0x01000000l
  3134.  
  3135. /*
  3136.  * no hardware support at all
  3137.  */
  3138. #define DDCAPS_NOHARDWARE               0x02000000l
  3139.  
  3140. /*
  3141.  * Display hardware is capable of color fill with bltter
  3142.  */
  3143. #define DDCAPS_BLTCOLORFILL             0x04000000l
  3144.  
  3145. /*
  3146.  * Display hardware is bank switched, and potentially very slow at
  3147.  * random access to VRAM.
  3148.  */
  3149. #define DDCAPS_BANKSWITCHED             0x08000000l
  3150.  
  3151. /*
  3152.  * Display hardware is capable of depth filling Z-buffers with bltter
  3153.  */
  3154. #define DDCAPS_BLTDEPTHFILL             0x10000000l
  3155.  
  3156. /*
  3157.  * Display hardware is capable of clipping while bltting.
  3158.  */
  3159. #define DDCAPS_CANCLIP                  0x20000000l
  3160.  
  3161. /*
  3162.  * Display hardware is capable of clipping while stretch bltting.
  3163.  */
  3164. #define DDCAPS_CANCLIPSTRETCHED         0x40000000l
  3165.  
  3166. /*
  3167.  * Display hardware is capable of bltting to or from system memory
  3168.  */
  3169. #define DDCAPS_CANBLTSYSMEM             0x80000000l
  3170.  
  3171.  
  3172.  /****************************************************************************
  3173.  *
  3174.  * MORE DIRECTDRAW DRIVER CAPABILITY FLAGS (dwCaps2)
  3175.  *
  3176.  ****************************************************************************/
  3177.  
  3178. /*
  3179.  * Display hardware is certified
  3180.  */
  3181. #define DDCAPS2_CERTIFIED              0x00000001l
  3182.  
  3183. /*
  3184.  * Driver cannot interleave 2D operations (lock and blt) to surfaces with
  3185.  * Direct3D rendering operations between calls to BeginScene() and EndScene()
  3186.  */
  3187. #define DDCAPS2_NO2DDURING3DSCENE       0x00000002l
  3188.  
  3189. /*
  3190.  * Display hardware contains a video port
  3191.  */
  3192. #define DDCAPS2_VIDEOPORT               0x00000004l
  3193.  
  3194. /*
  3195.  * The overlay can be automatically flipped according to the video port
  3196.  * VSYNCs, providing automatic doubled buffered display of video port
  3197.  * data using an overlay
  3198.  */
  3199. #define DDCAPS2_AUTOFLIPOVERLAY         0x00000008l
  3200.  
  3201. /*
  3202.  * Overlay can display each field of interlaced data individually while
  3203.  * it is interleaved in memory without causing jittery artifacts.
  3204.  */
  3205. #define DDCAPS2_CANBOBINTERLEAVED       0x00000010l
  3206.  
  3207. /*
  3208.  * Overlay can display each field of interlaced data individually while
  3209.  * it is not interleaved in memory without causing jittery artifacts.
  3210.  */
  3211. #define DDCAPS2_CANBOBNONINTERLEAVED    0x00000020l
  3212.  
  3213. /*
  3214.  * The overlay surface contains color controls (brightness, sharpness, etc.)
  3215.  */
  3216. #define DDCAPS2_COLORCONTROLOVERLAY     0x00000040l
  3217.  
  3218. /*
  3219.  * The primary surface contains color controls (gamma, etc.)
  3220.  */
  3221. #define DDCAPS2_COLORCONTROLPRIMARY     0x00000080l
  3222.  
  3223. /*
  3224.  * RGBZ -> RGB supported for 16:16 RGB:Z
  3225.  */
  3226. #define DDCAPS2_CANDROPZ16BIT           0x00000100l
  3227.  
  3228. /*
  3229.  * Driver supports non-local video memory.
  3230.  */
  3231. #define DDCAPS2_NONLOCALVIDMEM          0x00000200l
  3232.  
  3233. /*
  3234.  * Dirver supports non-local video memory but has different capabilities for
  3235.  * non-local video memory surfaces. If this bit is set then so must
  3236.  * DDCAPS2_NONLOCALVIDMEM.
  3237.  */
  3238. #define DDCAPS2_NONLOCALVIDMEMCAPS      0x00000400l
  3239.  
  3240. /*
  3241.  * Driver neither requires nor prefers surfaces to be pagelocked when performing
  3242.  * blts involving system memory surfaces
  3243.  */
  3244. #define DDCAPS2_NOPAGELOCKREQUIRED      0x00000800l
  3245.  
  3246. /*
  3247.  * Driver can create surfaces which are wider than the primary surface
  3248.  */
  3249. #define DDCAPS2_WIDESURFACES            0x00001000l
  3250.  
  3251. /*
  3252.  * Driver supports bob without using a video port by handling the
  3253.  * DDFLIP_ODD and DDFLIP_EVEN flags specified in Flip.
  3254.  */
  3255. #define DDCAPS2_CANFLIPODDEVEN          0x00002000l
  3256.  
  3257. /*
  3258.  * Driver supports bob using hardware
  3259.  */
  3260. #define DDCAPS2_CANBOBHARDWARE          0x00004000l
  3261.  
  3262. /*
  3263.  * Driver supports bltting any FOURCC surface to another surface of the same FOURCC
  3264.  */
  3265. #define DDCAPS2_COPYFOURCC              0x00008000l
  3266.  
  3267.  
  3268. /*
  3269.  * Driver supports loadable gamma ramps for the primary surface
  3270.  */
  3271. #define DDCAPS2_PRIMARYGAMMA            0x00020000l
  3272.  
  3273. /*
  3274.  * Driver can render in windowed mode.
  3275.  */
  3276. #define DDCAPS2_CANRENDERWINDOWED       0x00080000l
  3277.  
  3278. /*
  3279.  * A calibrator is available to adjust the gamma ramp according to the
  3280.  * physical display properties so that the result will be identical on
  3281.  * all calibrated systems.
  3282.  */
  3283. #define DDCAPS2_CANCALIBRATEGAMMA       0x00100000l
  3284.  
  3285. /*
  3286.  * Indicates that the driver will respond to DDFLIP_INTERVALn flags
  3287.  */
  3288. #define DDCAPS2_FLIPINTERVAL            0x00200000l
  3289.  
  3290. /*
  3291.  * Indicates that the driver will respond to DDFLIP_NOVSYNC
  3292.  */
  3293. #define DDCAPS2_FLIPNOVSYNC             0x00400000l
  3294.  
  3295. /*
  3296.  * Driver supports management of video memory, if this flag is ON,
  3297.  * driver manages the texture if requested with DDSCAPS2_TEXTUREMANAGE on
  3298.  * DirectX manages the texture if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on
  3299.  */
  3300. #define DDCAPS2_CANMANAGETEXTURE        0x00800000l
  3301.  
  3302. /*
  3303.  * The Direct3D texture manager uses this cap to decide whether to put managed
  3304.  * surfaces in non-local video memory. If the cap is set, the texture manager will
  3305.  * put managed surfaces in non-local vidmem. Drivers that cannot texture from
  3306.  * local vidmem SHOULD NOT set this cap.
  3307.  */
  3308. #define DDCAPS2_TEXMANINNONLOCALVIDMEM  0x01000000l
  3309.  
  3310. /*
  3311.  * Indicates that the driver supports DX7 type of stereo in at least one mode (which may
  3312.  * not necessarily be the current mode). Applications should use IDirectDraw7 (or higher)
  3313.  * ::EnumDisplayModes and check the DDSURFACEDESC.ddsCaps.dwCaps2 field for the presence of
  3314.  * DDSCAPS2_STEREOSURFACELEFT to check if a particular mode supports stereo. The application
  3315.  * can also use IDirectDraw7(or higher)::GetDisplayMode to check the current mode.
  3316.  */
  3317. #define DDCAPS2_STEREO                  0x02000000L
  3318.  
  3319. /*
  3320.  * This caps bit is intended for internal DirectDraw use.
  3321.  * -It is only valid if DDCAPS2_NONLOCALVIDMEMCAPS is set.
  3322.  * -If this bit is set, then DDCAPS_CANBLTSYSMEM MUST be set by the driver (and
  3323.  *  all the assoicated system memory blt caps must be correct).
  3324.  * -It implies that the system->video blt caps in DDCAPS also apply to system to
  3325.  *  nonlocal blts. I.e. the dwSVBCaps, dwSVBCKeyCaps, dwSVBFXCaps and dwSVBRops
  3326.  *  members of DDCAPS (DDCORECAPS) are filled in correctly.
  3327.  * -Any blt from system to nonlocal memory that matches these caps bits will
  3328.  *  be passed to the driver.
  3329.  *
  3330.  * NOTE: This is intended to enable the driver itself to do efficient reordering
  3331.  * of textures. This is NOT meant to imply that hardware can write into AGP memory.
  3332.  * This operation is not currently supported.
  3333.  */
  3334. #define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL   0x04000000L
  3335.  
  3336. /*
  3337.  * was DDCAPS2_PUREHAL
  3338.  */
  3339. #define DDCAPS2_RESERVED1                     0x08000000L
  3340.  
  3341. /*
  3342.  * Driver supports management of video memory, if this flag is ON,
  3343.  * driver manages the resource if requested with DDSCAPS2_TEXTUREMANAGE on
  3344.  * DirectX manages the resource if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on
  3345.  */
  3346. #define DDCAPS2_CANMANAGERESOURCE             0x10000000L
  3347.  
  3348. /*
  3349.  * Driver supports dynamic textures. This will allow the application to set
  3350.  * D3DUSAGE_DYNAMIC (DDSCAPS2_HINTDYNAMIC for drivers) at texture create time.
  3351.  * Video memory dynamic textures WILL be lockable by applications. It is
  3352.  * expected that these locks will be very efficient (which implies that the
  3353.  * driver should always maintain a linear copy, a pointer to which can be
  3354.  * quickly handed out to the application).
  3355.  */
  3356. #define DDCAPS2_DYNAMICTEXTURES               0x20000000L
  3357.  
  3358. /*
  3359.  * Driver supports auto-generation of mipmaps.
  3360.  */
  3361. #define DDCAPS2_CANAUTOGENMIPMAP              0x40000000L
  3362.  
  3363. /* D3D9Ex only -- */
  3364. #if !defined(D3D_DISABLE_9EX)
  3365.  
  3366. /*
  3367.  * Driver supports sharing of cross process resouces
  3368.  */
  3369. #define DDCAPS2_CANSHARERESOURCE              0x80000000L
  3370.  
  3371. #endif // !D3D_DISABLE_9EX
  3372. /* -- D3D9Ex only */
  3373.  
  3374.  
  3375. /****************************************************************************
  3376.  *
  3377.  * DIRECTDRAW FX ALPHA CAPABILITY FLAGS
  3378.  *
  3379.  ****************************************************************************/
  3380.  
  3381. /*
  3382.  * Supports alpha blending around the edge of a source color keyed surface.
  3383.  * For Blt.
  3384.  */
  3385. #define DDFXALPHACAPS_BLTALPHAEDGEBLEND         0x00000001l
  3386.  
  3387. /*
  3388.  * Supports alpha information in the pixel format.  The bit depth of alpha
  3389.  * information in the pixel format can be 1,2,4, or 8.  The alpha value becomes
  3390.  * more opaque as the alpha value increases.  (0 is transparent.)
  3391.  * For Blt.
  3392.  */
  3393. #define DDFXALPHACAPS_BLTALPHAPIXELS            0x00000002l
  3394.  
  3395. /*
  3396.  * Supports alpha information in the pixel format.  The bit depth of alpha
  3397.  * information in the pixel format can be 1,2,4, or 8.  The alpha value
  3398.  * becomes more transparent as the alpha value increases.  (0 is opaque.)
  3399.  * This flag can only be set if DDCAPS_ALPHA is set.
  3400.  * For Blt.
  3401.  */
  3402. #define DDFXALPHACAPS_BLTALPHAPIXELSNEG         0x00000004l
  3403.  
  3404. /*
  3405.  * Supports alpha only surfaces.  The bit depth of an alpha only surface can be
  3406.  * 1,2,4, or 8.  The alpha value becomes more opaque as the alpha value increases.
  3407.  * (0 is transparent.)
  3408.  * For Blt.
  3409.  */
  3410. #define DDFXALPHACAPS_BLTALPHASURFACES          0x00000008l
  3411.  
  3412. /*
  3413.  * The depth of the alpha channel data can range can be 1,2,4, or 8.
  3414.  * The NEG suffix indicates that this alpha channel becomes more transparent
  3415.  * as the alpha value increases. (0 is opaque.)  This flag can only be set if
  3416.  * DDCAPS_ALPHA is set.
  3417.  * For Blt.
  3418.  */
  3419. #define DDFXALPHACAPS_BLTALPHASURFACESNEG       0x00000010l
  3420.  
  3421. /*
  3422.  * Supports alpha blending around the edge of a source color keyed surface.
  3423.  * For Overlays.
  3424.  */
  3425. #define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND     0x00000020l
  3426.  
  3427. /*
  3428.  * Supports alpha information in the pixel format.  The bit depth of alpha
  3429.  * information in the pixel format can be 1,2,4, or 8.  The alpha value becomes
  3430.  * more opaque as the alpha value increases.  (0 is transparent.)
  3431.  * For Overlays.
  3432.  */
  3433. #define DDFXALPHACAPS_OVERLAYALPHAPIXELS        0x00000040l
  3434.  
  3435. /*
  3436.  * Supports alpha information in the pixel format.  The bit depth of alpha
  3437.  * information in the pixel format can be 1,2,4, or 8.  The alpha value
  3438.  * becomes more transparent as the alpha value increases.  (0 is opaque.)
  3439.  * This flag can only be set if DDCAPS_ALPHA is set.
  3440.  * For Overlays.
  3441.  */
  3442. #define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG     0x00000080l
  3443.  
  3444. /*
  3445.  * Supports alpha only surfaces.  The bit depth of an alpha only surface can be
  3446.  * 1,2,4, or 8.  The alpha value becomes more opaque as the alpha value increases.
  3447.  * (0 is transparent.)
  3448.  * For Overlays.
  3449.  */
  3450. #define DDFXALPHACAPS_OVERLAYALPHASURFACES      0x00000100l
  3451.  
  3452. /*
  3453.  * The depth of the alpha channel data can range can be 1,2,4, or 8.
  3454.  * The NEG suffix indicates that this alpha channel becomes more transparent
  3455.  * as the alpha value increases. (0 is opaque.)  This flag can only be set if
  3456.  * DDCAPS_ALPHA is set.
  3457.  * For Overlays.
  3458.  */
  3459. #define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG   0x00000200l
  3460.  
  3461. #if DIRECTDRAW_VERSION < 0x0600
  3462. #endif  //DIRECTDRAW_VERSION
  3463.  
  3464.  
  3465. /****************************************************************************
  3466.  *
  3467.  * DIRECTDRAW FX CAPABILITY FLAGS
  3468.  *
  3469.  ****************************************************************************/
  3470.  
  3471. /*
  3472.  * Uses arithmetic operations to stretch and shrink surfaces during blt
  3473.  * rather than pixel doubling techniques.  Along the Y axis.
  3474.  */
  3475. #define DDFXCAPS_BLTARITHSTRETCHY       0x00000020l
  3476.  
  3477. /*
  3478.  * Uses arithmetic operations to stretch during blt
  3479.  * rather than pixel doubling techniques.  Along the Y axis. Only
  3480.  * works for x1, x2, etc.
  3481.  */
  3482. #define DDFXCAPS_BLTARITHSTRETCHYN      0x00000010l
  3483.  
  3484. /*
  3485.  * Supports mirroring left to right in blt.
  3486.  */
  3487. #define DDFXCAPS_BLTMIRRORLEFTRIGHT     0x00000040l
  3488.  
  3489. /*
  3490.  * Supports mirroring top to bottom in blt.
  3491.  */
  3492. #define DDFXCAPS_BLTMIRRORUPDOWN        0x00000080l
  3493.  
  3494. /*
  3495.  * Supports arbitrary rotation for blts.
  3496.  */
  3497. #define DDFXCAPS_BLTROTATION            0x00000100l
  3498.  
  3499. /*
  3500.  * Supports 90 degree rotations for blts.
  3501.  */
  3502. #define DDFXCAPS_BLTROTATION90          0x00000200l
  3503.  
  3504. /*
  3505.  * DirectDraw supports arbitrary shrinking of a surface along the
  3506.  * x axis (horizontal direction) for blts.
  3507.  */
  3508. #define DDFXCAPS_BLTSHRINKX             0x00000400l
  3509.  
  3510. /*
  3511.  * DirectDraw supports integer shrinking (1x,2x,) of a surface
  3512.  * along the x axis (horizontal direction) for blts.
  3513.  */
  3514. #define DDFXCAPS_BLTSHRINKXN            0x00000800l
  3515.  
  3516. /*
  3517.  * DirectDraw supports arbitrary shrinking of a surface along the
  3518.  * y axis (horizontal direction) for blts.
  3519.  */
  3520. #define DDFXCAPS_BLTSHRINKY             0x00001000l
  3521.  
  3522. /*
  3523.  * DirectDraw supports integer shrinking (1x,2x,) of a surface
  3524.  * along the y axis (vertical direction) for blts.
  3525.  */
  3526. #define DDFXCAPS_BLTSHRINKYN            0x00002000l
  3527.  
  3528. /*
  3529.  * DirectDraw supports arbitrary stretching of a surface along the
  3530.  * x axis (horizontal direction) for blts.
  3531.  */
  3532. #define DDFXCAPS_BLTSTRETCHX            0x00004000l
  3533.  
  3534. /*
  3535.  * DirectDraw supports integer stretching (1x,2x,) of a surface
  3536.  * along the x axis (horizontal direction) for blts.
  3537.  */
  3538. #define DDFXCAPS_BLTSTRETCHXN           0x00008000l
  3539.  
  3540. /*
  3541.  * DirectDraw supports arbitrary stretching of a surface along the
  3542.  * y axis (horizontal direction) for blts.
  3543.  */
  3544. #define DDFXCAPS_BLTSTRETCHY            0x00010000l
  3545.  
  3546. /*
  3547.  * DirectDraw supports integer stretching (1x,2x,) of a surface
  3548.  * along the y axis (vertical direction) for blts.
  3549.  */
  3550. #define DDFXCAPS_BLTSTRETCHYN           0x00020000l
  3551.  
  3552. /*
  3553.  * Uses arithmetic operations to stretch and shrink surfaces during
  3554.  * overlay rather than pixel doubling techniques.  Along the Y axis
  3555.  * for overlays.
  3556.  */
  3557. #define DDFXCAPS_OVERLAYARITHSTRETCHY   0x00040000l
  3558.  
  3559. /*
  3560.  * Uses arithmetic operations to stretch surfaces during
  3561.  * overlay rather than pixel doubling techniques.  Along the Y axis
  3562.  * for overlays. Only works for x1, x2, etc.
  3563.  */
  3564. #define DDFXCAPS_OVERLAYARITHSTRETCHYN  0x00000008l
  3565.  
  3566. /*
  3567.  * DirectDraw supports arbitrary shrinking of a surface along the
  3568.  * x axis (horizontal direction) for overlays.
  3569.  */
  3570. #define DDFXCAPS_OVERLAYSHRINKX         0x00080000l
  3571.  
  3572. /*
  3573.  * DirectDraw supports integer shrinking (1x,2x,) of a surface
  3574.  * along the x axis (horizontal direction) for overlays.
  3575.  */
  3576. #define DDFXCAPS_OVERLAYSHRINKXN        0x00100000l
  3577.  
  3578. /*
  3579.  * DirectDraw supports arbitrary shrinking of a surface along the
  3580.  * y axis (horizontal direction) for overlays.
  3581.  */
  3582. #define DDFXCAPS_OVERLAYSHRINKY         0x00200000l
  3583.  
  3584. /*
  3585.  * DirectDraw supports integer shrinking (1x,2x,) of a surface
  3586.  * along the y axis (vertical direction) for overlays.
  3587.  */
  3588. #define DDFXCAPS_OVERLAYSHRINKYN        0x00400000l
  3589.  
  3590. /*
  3591.  * DirectDraw supports arbitrary stretching of a surface along the
  3592.  * x axis (horizontal direction) for overlays.
  3593.  */
  3594. #define DDFXCAPS_OVERLAYSTRETCHX        0x00800000l
  3595.  
  3596. /*
  3597.  * DirectDraw supports integer stretching (1x,2x,) of a surface
  3598.  * along the x axis (horizontal direction) for overlays.
  3599.  */
  3600. #define DDFXCAPS_OVERLAYSTRETCHXN       0x01000000l
  3601.  
  3602. /*
  3603.  * DirectDraw supports arbitrary stretching of a surface along the
  3604.  * y axis (horizontal direction) for overlays.
  3605.  */
  3606. #define DDFXCAPS_OVERLAYSTRETCHY        0x02000000l
  3607.  
  3608. /*
  3609.  * DirectDraw supports integer stretching (1x,2x,) of a surface
  3610.  * along the y axis (vertical direction) for overlays.
  3611.  */
  3612. #define DDFXCAPS_OVERLAYSTRETCHYN       0x04000000l
  3613.  
  3614. /*
  3615.  * DirectDraw supports mirroring of overlays across the vertical axis
  3616.  */
  3617. #define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT 0x08000000l
  3618.  
  3619. /*
  3620.  * DirectDraw supports mirroring of overlays across the horizontal axis
  3621.  */
  3622. #define DDFXCAPS_OVERLAYMIRRORUPDOWN    0x10000000l
  3623.  
  3624. /*
  3625.  * DirectDraw supports deinterlacing of overlay surfaces
  3626.  */
  3627. #define DDFXCAPS_OVERLAYDEINTERLACE             0x20000000l
  3628.  
  3629. /*
  3630.  * Driver can do alpha blending for blits.
  3631.  */
  3632. #define DDFXCAPS_BLTALPHA               0x00000001l
  3633.  
  3634.  
  3635. /*
  3636.  * Driver can do surface-reconstruction filtering for warped blits.
  3637.  */
  3638. #define DDFXCAPS_BLTFILTER              DDFXCAPS_BLTARITHSTRETCHY
  3639.  
  3640. /*
  3641.  * Driver can do alpha blending for overlays.
  3642.  */
  3643. #define DDFXCAPS_OVERLAYALPHA           0x00000004l
  3644.  
  3645.  
  3646. /*
  3647.  * Driver can do surface-reconstruction filtering for warped overlays.
  3648.  */
  3649. #define DDFXCAPS_OVERLAYFILTER          DDFXCAPS_OVERLAYARITHSTRETCHY
  3650.  
  3651. /****************************************************************************
  3652.  *
  3653.  * DIRECTDRAW STEREO VIEW CAPABILITIES
  3654.  *
  3655.  ****************************************************************************/
  3656.  
  3657. /*
  3658.  * This flag used to be DDSVCAPS_ENIGMA, which is now obsolete
  3659.  */
  3660.  
  3661. #define DDSVCAPS_RESERVED1              0x00000001l
  3662.  
  3663. /*
  3664.  * This flag used to be DDSVCAPS_FLICKER, which is now obsolete
  3665.  */
  3666. #define DDSVCAPS_RESERVED2              0x00000002l
  3667.  
  3668. /*
  3669.  * This flag used to be DDSVCAPS_REDBLUE, which is now obsolete
  3670.  */
  3671. #define DDSVCAPS_RESERVED3              0x00000004l
  3672.  
  3673. /*
  3674.  * This flag used to be DDSVCAPS_SPLIT, which is now obsolete
  3675.  */
  3676. #define DDSVCAPS_RESERVED4              0x00000008l
  3677.  
  3678. /*
  3679.  * The stereo view is accomplished with switching technology
  3680.  */
  3681.  
  3682. #define DDSVCAPS_STEREOSEQUENTIAL       0x00000010L
  3683.  
  3684.  
  3685.  
  3686. /****************************************************************************
  3687.  *
  3688.  * DIRECTDRAWPALETTE CAPABILITIES
  3689.  *
  3690.  ****************************************************************************/
  3691.  
  3692. /*
  3693.  * Index is 4 bits.  There are sixteen color entries in the palette table.
  3694.  */
  3695. #define DDPCAPS_4BIT                    0x00000001l
  3696.  
  3697. /*
  3698.  * Index is onto a 8 bit color index.  This field is only valid with the
  3699.  * DDPCAPS_1BIT, DDPCAPS_2BIT or DDPCAPS_4BIT capability and the target
  3700.  * surface is in 8bpp. Each color entry is one byte long and is an index
  3701.  * into destination surface's 8bpp palette.
  3702.  */
  3703. #define DDPCAPS_8BITENTRIES             0x00000002l
  3704.  
  3705. /*
  3706.  * Index is 8 bits.  There are 256 color entries in the palette table.
  3707.  */
  3708. #define DDPCAPS_8BIT                    0x00000004l
  3709.  
  3710. /*
  3711.  * Indicates that this DIRECTDRAWPALETTE should use the palette color array
  3712.  * passed into the lpDDColorArray parameter to initialize the DIRECTDRAWPALETTE
  3713.  * object.
  3714.  * This flag is obsolete. DirectDraw always initializes the color array from
  3715.  * the lpDDColorArray parameter. The definition remains for source-level
  3716.  * compatibility.
  3717.  */
  3718. #define DDPCAPS_INITIALIZE              0x00000000l
  3719.  
  3720. /*
  3721.  * This palette is the one attached to the primary surface.  Changing this
  3722.  * table has immediate effect on the display unless DDPSETPAL_VSYNC is specified
  3723.  * and supported.
  3724.  */
  3725. #define DDPCAPS_PRIMARYSURFACE          0x00000010l
  3726.  
  3727. /*
  3728.  * This palette is the one attached to the primary surface left.  Changing
  3729.  * this table has immediate effect on the display for the left eye unless
  3730.  * DDPSETPAL_VSYNC is specified and supported.
  3731.  */
  3732. #define DDPCAPS_PRIMARYSURFACELEFT      0x00000020l
  3733.  
  3734. /*
  3735.  * This palette can have all 256 entries defined
  3736.  */
  3737. #define DDPCAPS_ALLOW256                0x00000040l
  3738.  
  3739. /*
  3740.  * This palette can have modifications to it synced with the monitors
  3741.  * refresh rate.
  3742.  */
  3743. #define DDPCAPS_VSYNC                   0x00000080l
  3744.  
  3745. /*
  3746.  * Index is 1 bit.  There are two color entries in the palette table.
  3747.  */
  3748. #define DDPCAPS_1BIT                    0x00000100l
  3749.  
  3750. /*
  3751.  * Index is 2 bit.  There are four color entries in the palette table.
  3752.  */
  3753. #define DDPCAPS_2BIT                    0x00000200l
  3754.  
  3755. /*
  3756.  * The peFlags member of PALETTEENTRY denotes an 8 bit alpha value
  3757.  */
  3758. #define DDPCAPS_ALPHA                   0x00000400l
  3759.  
  3760.  
  3761. /****************************************************************************
  3762.  *
  3763.  * DIRECTDRAWPALETTE SETENTRY CONSTANTS
  3764.  *
  3765.  ****************************************************************************/
  3766.  
  3767.  
  3768. /****************************************************************************
  3769.  *
  3770.  * DIRECTDRAWPALETTE GETENTRY CONSTANTS
  3771.  *
  3772.  ****************************************************************************/
  3773.  
  3774. /* 0 is the only legal value */
  3775.  
  3776. /****************************************************************************
  3777.  *
  3778.  * DIRECTDRAWSURFACE SETPRIVATEDATA CONSTANTS
  3779.  *
  3780.  ****************************************************************************/
  3781.  
  3782. /*
  3783.  * The passed pointer is an IUnknown ptr. The cbData argument to SetPrivateData
  3784.  * must be set to sizeof(IUnknown*). DirectDraw will call AddRef through this
  3785.  * pointer and Release when the private data is destroyed. This includes when
  3786.  * the surface or palette is destroyed before such priovate data is destroyed.
  3787.  */
  3788. #define DDSPD_IUNKNOWNPOINTER           0x00000001L
  3789.  
  3790. /*
  3791.  * Private data is only valid for the current state of the object,
  3792.  * as determined by the uniqueness value.
  3793.  */
  3794. #define DDSPD_VOLATILE                  0x00000002L
  3795.  
  3796.  
  3797. /****************************************************************************
  3798.  *
  3799.  * DIRECTDRAWSURFACE SETPALETTE CONSTANTS
  3800.  *
  3801.  ****************************************************************************/
  3802.  
  3803.  
  3804. /****************************************************************************
  3805.  *
  3806.  * DIRECTDRAW BITDEPTH CONSTANTS
  3807.  *
  3808.  * NOTE:  These are only used to indicate supported bit depths.   These
  3809.  * are flags only, they are not to be used as an actual bit depth.   The
  3810.  * absolute numbers 1, 2, 4, 8, 16, 24 and 32 are used to indicate actual
  3811.  * bit depths in a surface or for changing the display mode.
  3812.  *
  3813.  ****************************************************************************/
  3814.  
  3815. /*
  3816.  * 1 bit per pixel.
  3817.  */
  3818. #define DDBD_1                  0x00004000l
  3819.  
  3820. /*
  3821.  * 2 bits per pixel.
  3822.  */
  3823. #define DDBD_2                  0x00002000l
  3824.  
  3825. /*
  3826.  * 4 bits per pixel.
  3827.  */
  3828. #define DDBD_4                  0x00001000l
  3829.  
  3830. /*
  3831.  * 8 bits per pixel.
  3832.  */
  3833. #define DDBD_8                  0x00000800l
  3834.  
  3835. /*
  3836.  * 16 bits per pixel.
  3837.  */
  3838. #define DDBD_16                 0x00000400l
  3839.  
  3840. /*
  3841.  * 24 bits per pixel.
  3842.  */
  3843. #define DDBD_24                 0X00000200l
  3844.  
  3845. /*
  3846.  * 32 bits per pixel.
  3847.  */
  3848. #define DDBD_32                 0x00000100l
  3849.  
  3850. /****************************************************************************
  3851.  *
  3852.  * DIRECTDRAWSURFACE SET/GET COLOR KEY FLAGS
  3853.  *
  3854.  ****************************************************************************/
  3855.  
  3856. /*
  3857.  * Set if the structure contains a color space.  Not set if the structure
  3858.  * contains a single color key.
  3859.  */
  3860. #define DDCKEY_COLORSPACE       0x00000001l
  3861.  
  3862. /*
  3863.  * Set if the structure specifies a color key or color space which is to be
  3864.  * used as a destination color key for blt operations.
  3865.  */
  3866. #define DDCKEY_DESTBLT          0x00000002l
  3867.  
  3868. /*
  3869.  * Set if the structure specifies a color key or color space which is to be
  3870.  * used as a destination color key for overlay operations.
  3871.  */
  3872. #define DDCKEY_DESTOVERLAY      0x00000004l
  3873.  
  3874. /*
  3875.  * Set if the structure specifies a color key or color space which is to be
  3876.  * used as a source color key for blt operations.
  3877.  */
  3878. #define DDCKEY_SRCBLT           0x00000008l
  3879.  
  3880. /*
  3881.  * Set if the structure specifies a color key or color space which is to be
  3882.  * used as a source color key for overlay operations.
  3883.  */
  3884. #define DDCKEY_SRCOVERLAY       0x00000010l
  3885.  
  3886.  
  3887. /****************************************************************************
  3888.  *
  3889.  * DIRECTDRAW COLOR KEY CAPABILITY FLAGS
  3890.  *
  3891.  ****************************************************************************/
  3892.  
  3893. /*
  3894.  * Supports transparent blting using a color key to identify the replaceable
  3895.  * bits of the destination surface for RGB colors.
  3896.  */
  3897. #define DDCKEYCAPS_DESTBLT                      0x00000001l
  3898.  
  3899. /*
  3900.  * Supports transparent blting using a color space to identify the replaceable
  3901.  * bits of the destination surface for RGB colors.
  3902.  */
  3903. #define DDCKEYCAPS_DESTBLTCLRSPACE              0x00000002l
  3904.  
  3905. /*
  3906.  * Supports transparent blting using a color space to identify the replaceable
  3907.  * bits of the destination surface for YUV colors.
  3908.  */
  3909. #define DDCKEYCAPS_DESTBLTCLRSPACEYUV           0x00000004l
  3910.  
  3911. /*
  3912.  * Supports transparent blting using a color key to identify the replaceable
  3913.  * bits of the destination surface for YUV colors.
  3914.  */
  3915. #define DDCKEYCAPS_DESTBLTYUV                   0x00000008l
  3916.  
  3917. /*
  3918.  * Supports overlaying using colorkeying of the replaceable bits of the surface
  3919.  * being overlayed for RGB colors.
  3920.  */
  3921. #define DDCKEYCAPS_DESTOVERLAY                  0x00000010l
  3922.  
  3923. /*
  3924.  * Supports a color space as the color key for the destination for RGB colors.
  3925.  */
  3926. #define DDCKEYCAPS_DESTOVERLAYCLRSPACE          0x00000020l
  3927.  
  3928. /*
  3929.  * Supports a color space as the color key for the destination for YUV colors.
  3930.  */
  3931. #define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV       0x00000040l
  3932.  
  3933. /*
  3934.  * Supports only one active destination color key value for visible overlay
  3935.  * surfaces.
  3936.  */
  3937. #define DDCKEYCAPS_DESTOVERLAYONEACTIVE         0x00000080l
  3938.  
  3939. /*
  3940.  * Supports overlaying using colorkeying of the replaceable bits of the
  3941.  * surface being overlayed for YUV colors.
  3942.  */
  3943. #define DDCKEYCAPS_DESTOVERLAYYUV               0x00000100l
  3944.  
  3945. /*
  3946.  * Supports transparent blting using the color key for the source with
  3947.  * this surface for RGB colors.
  3948.  */
  3949. #define DDCKEYCAPS_SRCBLT                       0x00000200l
  3950.  
  3951. /*
  3952.  * Supports transparent blting using a color space for the source with
  3953.  * this surface for RGB colors.
  3954.  */
  3955. #define DDCKEYCAPS_SRCBLTCLRSPACE               0x00000400l
  3956.  
  3957. /*
  3958.  * Supports transparent blting using a color space for the source with
  3959.  * this surface for YUV colors.
  3960.  */
  3961. #define DDCKEYCAPS_SRCBLTCLRSPACEYUV            0x00000800l
  3962.  
  3963. /*
  3964.  * Supports transparent blting using the color key for the source with
  3965.  * this surface for YUV colors.
  3966.  */
  3967. #define DDCKEYCAPS_SRCBLTYUV                    0x00001000l
  3968.  
  3969. /*
  3970.  * Supports overlays using the color key for the source with this
  3971.  * overlay surface for RGB colors.
  3972.  */
  3973. #define DDCKEYCAPS_SRCOVERLAY                   0x00002000l
  3974.  
  3975. /*
  3976.  * Supports overlays using a color space as the source color key for
  3977.  * the overlay surface for RGB colors.
  3978.  */
  3979. #define DDCKEYCAPS_SRCOVERLAYCLRSPACE           0x00004000l
  3980.  
  3981. /*
  3982.  * Supports overlays using a color space as the source color key for
  3983.  * the overlay surface for YUV colors.
  3984.  */
  3985. #define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV        0x00008000l
  3986.  
  3987. /*
  3988.  * Supports only one active source color key value for visible
  3989.  * overlay surfaces.
  3990.  */
  3991. #define DDCKEYCAPS_SRCOVERLAYONEACTIVE          0x00010000l
  3992.  
  3993. /*
  3994.  * Supports overlays using the color key for the source with this
  3995.  * overlay surface for YUV colors.
  3996.  */
  3997. #define DDCKEYCAPS_SRCOVERLAYYUV                0x00020000l
  3998.  
  3999. /*
  4000.  * there are no bandwidth trade-offs for using colorkey with an overlay
  4001.  */
  4002. #define DDCKEYCAPS_NOCOSTOVERLAY                0x00040000l
  4003.  
  4004.  
  4005. /****************************************************************************
  4006.  *
  4007.  * DIRECTDRAW PIXELFORMAT FLAGS
  4008.  *
  4009.  ****************************************************************************/
  4010.  
  4011. /*
  4012.  * The surface has alpha channel information in the pixel format.
  4013.  */
  4014. #define DDPF_ALPHAPIXELS                        0x00000001l
  4015.  
  4016. /*
  4017.  * The pixel format contains alpha only information
  4018.  */
  4019. #define DDPF_ALPHA                              0x00000002l
  4020.  
  4021. /*
  4022.  * The FourCC code is valid.
  4023.  */
  4024. #define DDPF_FOURCC                             0x00000004l
  4025.  
  4026. /*
  4027.  * The surface is 4-bit color indexed.
  4028.  */
  4029. #define DDPF_PALETTEINDEXED4                    0x00000008l
  4030.  
  4031. /*
  4032.  * The surface is indexed into a palette which stores indices
  4033.  * into the destination surface's 8-bit palette.
  4034.  */
  4035. #define DDPF_PALETTEINDEXEDTO8                  0x00000010l
  4036.  
  4037. /*
  4038.  * The surface is 8-bit color indexed.
  4039.  */
  4040. #define DDPF_PALETTEINDEXED8                    0x00000020l
  4041.  
  4042. /*
  4043.  * The RGB data in the pixel format structure is valid.
  4044.  */
  4045. #define DDPF_RGB                                0x00000040l
  4046.  
  4047. /*
  4048.  * The surface will accept pixel data in the format specified
  4049.  * and compress it during the write.
  4050.  */
  4051. #define DDPF_COMPRESSED                         0x00000080l
  4052.  
  4053. /*
  4054.  * The surface will accept RGB data and translate it during
  4055.  * the write to YUV data.  The format of the data to be written
  4056.  * will be contained in the pixel format structure.  The DDPF_RGB
  4057.  * flag will be set.
  4058.  */
  4059. #define DDPF_RGBTOYUV                           0x00000100l
  4060.  
  4061. /*
  4062.  * pixel format is YUV - YUV data in pixel format struct is valid
  4063.  */
  4064. #define DDPF_YUV                                0x00000200l
  4065.  
  4066. /*
  4067.  * pixel format is a z buffer only surface
  4068.  */
  4069. #define DDPF_ZBUFFER                            0x00000400l
  4070.  
  4071. /*
  4072.  * The surface is 1-bit color indexed.
  4073.  */
  4074. #define DDPF_PALETTEINDEXED1                    0x00000800l
  4075.  
  4076. /*
  4077.  * The surface is 2-bit color indexed.
  4078.  */
  4079. #define DDPF_PALETTEINDEXED2                    0x00001000l
  4080.  
  4081. /*
  4082.  * The surface contains Z information in the pixels
  4083.  */
  4084. #define DDPF_ZPIXELS                            0x00002000l
  4085.  
  4086. /*
  4087.  * The surface contains stencil information along with Z
  4088.  */
  4089. #define DDPF_STENCILBUFFER                      0x00004000l
  4090.  
  4091. /*
  4092.  * Premultiplied alpha format -- the color components have been
  4093.  * premultiplied by the alpha component.
  4094.  */
  4095. #define DDPF_ALPHAPREMULT                       0x00008000l
  4096.  
  4097.  
  4098. /*
  4099.  * Luminance data in the pixel format is valid.
  4100.  * Use this flag for luminance-only or luminance+alpha surfaces,
  4101.  * the bit depth is then ddpf.dwLuminanceBitCount.
  4102.  */
  4103. #define DDPF_LUMINANCE                          0x00020000l
  4104.  
  4105. /*
  4106.  * Luminance data in the pixel format is valid.
  4107.  * Use this flag when hanging luminance off bumpmap surfaces,
  4108.  * the bit mask for the luminance portion of the pixel is then
  4109.  * ddpf.dwBumpLuminanceBitMask
  4110.  */
  4111. #define DDPF_BUMPLUMINANCE                      0x00040000l
  4112.  
  4113. /*
  4114.  * Bump map dUdV data in the pixel format is valid.
  4115.  */
  4116. #define DDPF_BUMPDUDV                           0x00080000l
  4117.  
  4118.  
  4119. /*===========================================================================
  4120.  *
  4121.  *
  4122.  * DIRECTDRAW CALLBACK FLAGS
  4123.  *
  4124.  *
  4125.  *==========================================================================*/
  4126.  
  4127. /****************************************************************************
  4128.  *
  4129.  * DIRECTDRAW ENUMSURFACES FLAGS
  4130.  *
  4131.  ****************************************************************************/
  4132.  
  4133. /*
  4134.  * Enumerate all of the surfaces that meet the search criterion.
  4135.  */
  4136. #define DDENUMSURFACES_ALL                      0x00000001l
  4137.  
  4138. /*
  4139.  * A search hit is a surface that matches the surface description.
  4140.  */
  4141. #define DDENUMSURFACES_MATCH                    0x00000002l
  4142.  
  4143. /*
  4144.  * A search hit is a surface that does not match the surface description.
  4145.  */
  4146. #define DDENUMSURFACES_NOMATCH                  0x00000004l
  4147.  
  4148. /*
  4149.  * Enumerate the first surface that can be created which meets the search criterion.
  4150.  */
  4151. #define DDENUMSURFACES_CANBECREATED             0x00000008l
  4152.  
  4153. /*
  4154.  * Enumerate the surfaces that already exist that meet the search criterion.
  4155.  */
  4156. #define DDENUMSURFACES_DOESEXIST                0x00000010l
  4157.  
  4158.  
  4159. /****************************************************************************
  4160.  *
  4161.  * DIRECTDRAW SETDISPLAYMODE FLAGS
  4162.  *
  4163.  ****************************************************************************/
  4164.  
  4165. /*
  4166.  * The desired mode is a standard VGA mode
  4167.  */
  4168. #define DDSDM_STANDARDVGAMODE                   0x00000001l
  4169.  
  4170.  
  4171. /****************************************************************************
  4172.  *
  4173.  * DIRECTDRAW ENUMDISPLAYMODES FLAGS
  4174.  *
  4175.  ****************************************************************************/
  4176.  
  4177. /*
  4178.  * Enumerate Modes with different refresh rates.  EnumDisplayModes guarantees
  4179.  * that a particular mode will be enumerated only once.  This flag specifies whether
  4180.  * the refresh rate is taken into account when determining if a mode is unique.
  4181.  */
  4182. #define DDEDM_REFRESHRATES                      0x00000001l
  4183.  
  4184. /*
  4185.  * Enumerate VGA modes. Specify this flag if you wish to enumerate supported VGA
  4186.  * modes such as mode 0x13 in addition to the usual ModeX modes (which are always
  4187.  * enumerated if the application has previously called SetCooperativeLevel with the
  4188.  * DDSCL_ALLOWMODEX flag set).
  4189.  */
  4190. #define DDEDM_STANDARDVGAMODES                  0x00000002L
  4191.  
  4192.  
  4193. /****************************************************************************
  4194.  *
  4195.  * DIRECTDRAW SETCOOPERATIVELEVEL FLAGS
  4196.  *
  4197.  ****************************************************************************/
  4198.  
  4199. /*
  4200.  * Exclusive mode owner will be responsible for the entire primary surface.
  4201.  * GDI can be ignored. used with DD
  4202.  */
  4203. #define DDSCL_FULLSCREEN                        0x00000001l
  4204.  
  4205. /*
  4206.  * allow CTRL_ALT_DEL to work while in fullscreen exclusive mode
  4207.  */
  4208. #define DDSCL_ALLOWREBOOT                       0x00000002l
  4209.  
  4210. /*
  4211.  * prevents DDRAW from modifying the application window.
  4212.  * prevents DDRAW from minimize/restore the application window on activation.
  4213.  */
  4214. #define DDSCL_NOWINDOWCHANGES                   0x00000004l
  4215.  
  4216. /*
  4217.  * app wants to work as a regular Windows application
  4218.  */
  4219. #define DDSCL_NORMAL                            0x00000008l
  4220.  
  4221. /*
  4222.  * app wants exclusive access
  4223.  */
  4224. #define DDSCL_EXCLUSIVE                         0x00000010l
  4225.  
  4226.  
  4227. /*
  4228.  * app can deal with non-windows display modes
  4229.  */
  4230. #define DDSCL_ALLOWMODEX                        0x00000040l
  4231.  
  4232. /*
  4233.  * this window will receive the focus messages
  4234.  */
  4235. #define DDSCL_SETFOCUSWINDOW                    0x00000080l
  4236.  
  4237. /*
  4238.  * this window is associated with the DDRAW object and will
  4239.  * cover the screen in fullscreen mode
  4240.  */
  4241. #define DDSCL_SETDEVICEWINDOW                   0x00000100l
  4242.  
  4243. /*
  4244.  * app wants DDRAW to create a window to be associated with the
  4245.  * DDRAW object
  4246.  */
  4247. #define DDSCL_CREATEDEVICEWINDOW                0x00000200l
  4248.  
  4249. /*
  4250.  * App explicitly asks DDRAW/D3D to be multithread safe. This makes D3D
  4251.  * take the global crtisec more frequently.
  4252.  */
  4253. #define DDSCL_MULTITHREADED                     0x00000400l
  4254.  
  4255. /*
  4256.  * App specifies that it would like to keep the FPU set up for optimal Direct3D
  4257.  * performance (single precision and exceptions disabled) so Direct3D
  4258.  * does not need to explicitly set the FPU each time. This is assumed by
  4259.  * default in DirectX 7. See also DDSCL_FPUPRESERVE
  4260.  */
  4261. #define DDSCL_FPUSETUP                          0x00000800l
  4262.  
  4263. /*
  4264.  * App specifies that it needs either double precision FPU or FPU exceptions
  4265.  * enabled. This makes Direct3D explicitly set the FPU state eah time it is
  4266.  * called. Setting the flag will reduce Direct3D performance. The flag is
  4267.  * assumed by default in DirectX 6 and earlier. See also DDSCL_FPUSETUP
  4268.  */
  4269. #define DDSCL_FPUPRESERVE                          0x00001000l
  4270.  
  4271.  
  4272. /****************************************************************************
  4273.  *
  4274.  * DIRECTDRAW BLT FLAGS
  4275.  *
  4276.  ****************************************************************************/
  4277.  
  4278. /*
  4279.  * Use the alpha information in the pixel format or the alpha channel surface
  4280.  * attached to the destination surface as the alpha channel for this blt.
  4281.  */
  4282. #define DDBLT_ALPHADEST                         0x00000001l
  4283.  
  4284. /*
  4285.  * Use the dwConstAlphaDest field in the DDBLTFX structure as the alpha channel
  4286.  * for the destination surface for this blt.
  4287.  */
  4288. #define DDBLT_ALPHADESTCONSTOVERRIDE            0x00000002l
  4289.  
  4290. /*
  4291.  * The NEG suffix indicates that the destination surface becomes more
  4292.  * transparent as the alpha value increases. (0 is opaque)
  4293.  */
  4294. #define DDBLT_ALPHADESTNEG                      0x00000004l
  4295.  
  4296. /*
  4297.  * Use the lpDDSAlphaDest field in the DDBLTFX structure as the alpha
  4298.  * channel for the destination for this blt.
  4299.  */
  4300. #define DDBLT_ALPHADESTSURFACEOVERRIDE          0x00000008l
  4301.  
  4302. /*
  4303.  * Use the dwAlphaEdgeBlend field in the DDBLTFX structure as the alpha channel
  4304.  * for the edges of the image that border the color key colors.
  4305.  */
  4306. #define DDBLT_ALPHAEDGEBLEND                    0x00000010l
  4307.  
  4308. /*
  4309.  * Use the alpha information in the pixel format or the alpha channel surface
  4310.  * attached to the source surface as the alpha channel for this blt.
  4311.  */
  4312. #define DDBLT_ALPHASRC                          0x00000020l
  4313.  
  4314. /*
  4315.  * Use the dwConstAlphaSrc field in the DDBLTFX structure as the alpha channel
  4316.  * for the source for this blt.
  4317.  */
  4318. #define DDBLT_ALPHASRCCONSTOVERRIDE             0x00000040l
  4319.  
  4320. /*
  4321.  * The NEG suffix indicates that the source surface becomes more transparent
  4322.  * as the alpha value increases. (0 is opaque)
  4323.  */
  4324. #define DDBLT_ALPHASRCNEG                       0x00000080l
  4325.  
  4326. /*
  4327.  * Use the lpDDSAlphaSrc field in the DDBLTFX structure as the alpha channel
  4328.  * for the source for this blt.
  4329.  */
  4330. #define DDBLT_ALPHASRCSURFACEOVERRIDE           0x00000100l
  4331.  
  4332. /*
  4333.  * Do this blt asynchronously through the FIFO in the order received.  If
  4334.  * there is no room in the hardware FIFO fail the call.
  4335.  */
  4336. #define DDBLT_ASYNC                             0x00000200l
  4337.  
  4338. /*
  4339.  * Uses the dwFillColor field in the DDBLTFX structure as the RGB color
  4340.  * to fill the destination rectangle on the destination surface with.
  4341.  */
  4342. #define DDBLT_COLORFILL                         0x00000400l
  4343.  
  4344. /*
  4345.  * Uses the dwDDFX field in the DDBLTFX structure to specify the effects
  4346.  * to use for the blt.
  4347.  */
  4348. #define DDBLT_DDFX                              0x00000800l
  4349.  
  4350. /*
  4351.  * Uses the dwDDROPS field in the DDBLTFX structure to specify the ROPS
  4352.  * that are not part of the Win32 API.
  4353.  */
  4354. #define DDBLT_DDROPS                            0x00001000l
  4355.  
  4356. /*
  4357.  * Use the color key associated with the destination surface.
  4358.  */
  4359. #define DDBLT_KEYDEST                           0x00002000l
  4360.  
  4361. /*
  4362.  * Use the dckDestColorkey field in the DDBLTFX structure as the color key
  4363.  * for the destination surface.
  4364.  */
  4365. #define DDBLT_KEYDESTOVERRIDE                   0x00004000l
  4366.  
  4367. /*
  4368.  * Use the color key associated with the source surface.
  4369.  */
  4370. #define DDBLT_KEYSRC                            0x00008000l
  4371.  
  4372. /*
  4373.  * Use the dckSrcColorkey field in the DDBLTFX structure as the color key
  4374.  * for the source surface.
  4375.  */
  4376. #define DDBLT_KEYSRCOVERRIDE                    0x00010000l
  4377.  
  4378. /*
  4379.  * Use the dwROP field in the DDBLTFX structure for the raster operation
  4380.  * for this blt.  These ROPs are the same as the ones defined in the Win32 API.
  4381.  */
  4382. #define DDBLT_ROP                               0x00020000l
  4383.  
  4384. /*
  4385.  * Use the dwRotationAngle field in the DDBLTFX structure as the angle
  4386.  * (specified in 1/100th of a degree) to rotate the surface.
  4387.  */
  4388. #define DDBLT_ROTATIONANGLE                     0x00040000l
  4389.  
  4390. /*
  4391.  * Z-buffered blt using the z-buffers attached to the source and destination
  4392.  * surfaces and the dwZBufferOpCode field in the DDBLTFX structure as the
  4393.  * z-buffer opcode.
  4394.  */
  4395. #define DDBLT_ZBUFFER                           0x00080000l
  4396.  
  4397. /*
  4398.  * Z-buffered blt using the dwConstDest Zfield and the dwZBufferOpCode field
  4399.  * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively
  4400.  * for the destination.
  4401.  */
  4402. #define DDBLT_ZBUFFERDESTCONSTOVERRIDE          0x00100000l
  4403.  
  4404. /*
  4405.  * Z-buffered blt using the lpDDSDestZBuffer field and the dwZBufferOpCode
  4406.  * field in the DDBLTFX structure as the z-buffer and z-buffer opcode
  4407.  * respectively for the destination.
  4408.  */
  4409. #define DDBLT_ZBUFFERDESTOVERRIDE               0x00200000l
  4410.  
  4411. /*
  4412.  * Z-buffered blt using the dwConstSrcZ field and the dwZBufferOpCode field
  4413.  * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively
  4414.  * for the source.
  4415.  */
  4416. #define DDBLT_ZBUFFERSRCCONSTOVERRIDE           0x00400000l
  4417.  
  4418. /*
  4419.  * Z-buffered blt using the lpDDSSrcZBuffer field and the dwZBufferOpCode
  4420.  * field in the DDBLTFX structure as the z-buffer and z-buffer opcode
  4421.  * respectively for the source.
  4422.  */
  4423. #define DDBLT_ZBUFFERSRCOVERRIDE                0x00800000l
  4424.  
  4425. /*
  4426.  * wait until the device is ready to handle the blt
  4427.  * this will cause blt to not return DDERR_WASSTILLDRAWING
  4428.  */
  4429. #define DDBLT_WAIT                              0x01000000l
  4430.  
  4431. /*
  4432.  * Uses the dwFillDepth field in the DDBLTFX structure as the depth value
  4433.  * to fill the destination rectangle on the destination Z-buffer surface
  4434.  * with.
  4435.  */
  4436. #define DDBLT_DEPTHFILL                         0x02000000l
  4437.  
  4438.  
  4439. /*
  4440.  * Return immediately (with DDERR_WASSTILLDRAWING) if the device is not
  4441.  * ready to schedule the blt at the time Blt() is called.
  4442.  */
  4443. #define DDBLT_DONOTWAIT                         0x08000000l
  4444.  
  4445. /*
  4446.  * These flags indicate a presentation blt (i.e. a blt
  4447.  * that moves surface contents from an offscreen back buffer to the primary
  4448.  * surface). The driver is not allowed to "queue"  more than three such blts.
  4449.  * The "end" of the presentation blt is indicated, since the
  4450.  * blt may be clipped, in which case the runtime will call the driver with
  4451.  * several blts. All blts (even if not clipped) are tagged with DDBLT_PRESENTATION
  4452.  * and the last (even if not clipped) additionally with DDBLT_LAST_PRESENTATION.
  4453.  * Thus the true rule is that the driver must not schedule a DDBLT_PRESENTATION
  4454.  * blt if there are 3 or more DDBLT_PRESENTLAST blts in the hardware pipe.
  4455.  * If there are such blts in the pipe, the driver should return DDERR_WASSTILLDRAWING
  4456.  * until the oldest queued DDBLT_LAST_PRESENTATION blts has been retired (i.e. the
  4457.  * pixels have been actually written to the primary surface). Once the oldest blt
  4458.  * has been retired, the driver is free to schedule the current blt.
  4459.  * The goal is to provide a mechanism whereby the device's hardware queue never
  4460.  * gets more than 3 frames ahead of the frames being generated by the application.
  4461.  * When excessive queueing occurs, applications become unusable because the application
  4462.  * visibly lags user input, and such problems make windowed interactive applications impossible.
  4463.  * Some drivers may not have sufficient knowledge of their hardware's FIFO to know
  4464.  * when a certain blt has been retired. Such drivers should code cautiously, and
  4465.  * simply not allow any frames to be queued at all. DDBLT_LAST_PRESENTATION should cause
  4466.  * such drivers to return DDERR_WASSTILLDRAWING until the accelerator is completely
  4467.  * finished- exactly as if the application had called Lock on the source surface
  4468.  * before calling Blt.
  4469.  * In other words, the driver is allowed and encouraged to
  4470.  * generate as much latency as it can, but never more than 3 frames worth.
  4471.  * Implementation detail: Drivers should count blts against the SOURCE surface, not
  4472.  * against the primary surface. This enables multiple parallel windowed application
  4473.  * to function more optimally.
  4474.  * This flag is passed only to DX8 or higher drivers.
  4475.  *
  4476.  * APPLICATIONS DO NOT SET THESE FLAGS. THEY ARE SET BY THE DIRECTDRAW RUNTIME.
  4477.  *
  4478.  */
  4479. #define DDBLT_PRESENTATION                      0x10000000l
  4480. #define DDBLT_LAST_PRESENTATION                 0x20000000l
  4481.  
  4482. /*
  4483.  * If DDBLT_EXTENDED_FLAGS is set, then the driver should re-interpret
  4484.  * other flags according to the definitions that follow.
  4485.  * For example, bit 0 (0x00000001L) means DDBLT_ALPHADEST, unless
  4486.  * DDBLT_EXTENDED_FLAGS is also set, in which case bit 0 means
  4487.  * DDBLT_EXTENDED_LINEAR_CONTENT.
  4488.  * Only DirectX9 and higher drivers will be given extended blt flags.
  4489.  * Only flags explicitly mentioned here should be re-interpreted.
  4490.  * All other flags retain their original meanings.
  4491.  *
  4492.  * List of re-interpreted flags:
  4493.  *
  4494.  * Bit Hex value   New meaning                                  old meaning
  4495.  * ---------------------------------------------------------------
  4496.  *  2  0x00000004  DDBLT_EXTENDED_LINEAR_CONTENT                DDBLT_ALPHADESTNEG
  4497.  *  4  0x00000010  DDBLT_EXTENDED_PRESENTATION_STRETCHFACTOR    DDBLT_ALPHAEDGEBLEND
  4498.  *
  4499.  *
  4500.  * NOTE: APPLICATIONS SHOULD NOT SET THIS FLAG. THIS FLAG IS INTENDED
  4501.  * FOR USE BY THE DIRECT3D RUNTIME.
  4502.  */
  4503. #define DDBLT_EXTENDED_FLAGS                    0x40000000l
  4504.  
  4505. /*
  4506.  * EXTENDED FLAG. SEE DEFINITION OF DDBLT_EXTENDED_FLAGS.
  4507.  * This flag indidcates that the source surface contains content in a
  4508.  * linear color space. The driver may perform gamma correction to the
  4509.  * desktop color space (i.e. sRGB, gamma 2.2) as part of this blt.
  4510.  * If the device can perform such a conversion as part of the copy,
  4511.  * the driver should also set D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION
  4512.  *
  4513.  * NOTE: APPLICATIONS SHOULD NOT SET THIS FLAG. THIS FLAG IS INTENDED
  4514.  * FOR USE BY THE DIRECT3D RUNTIME. Use IDirect3DSwapChain9::Present
  4515.  * and specify D3DPRESENT_LINEAR_CONTENT in order to use this functionality.
  4516.  */
  4517. #define DDBLT_EXTENDED_LINEAR_CONTENT           0x00000004l
  4518.  
  4519.  
  4520. /****************************************************************************
  4521.  *
  4522.  * BLTFAST FLAGS
  4523.  *
  4524.  ****************************************************************************/
  4525.  
  4526. #define DDBLTFAST_NOCOLORKEY                    0x00000000
  4527. #define DDBLTFAST_SRCCOLORKEY                   0x00000001
  4528. #define DDBLTFAST_DESTCOLORKEY                  0x00000002
  4529. #define DDBLTFAST_WAIT                          0x00000010
  4530. #define DDBLTFAST_DONOTWAIT                     0x00000020
  4531.  
  4532. /****************************************************************************
  4533.  *
  4534.  * FLIP FLAGS
  4535.  *
  4536.  ****************************************************************************/
  4537.  
  4538. #define DDFLIP_WAIT                          0x00000001L
  4539.  
  4540. /*
  4541.  * Indicates that the target surface contains the even field of video data.
  4542.  * This flag is only valid with an overlay surface.
  4543.  */
  4544. #define DDFLIP_EVEN                          0x00000002L
  4545.  
  4546. /*
  4547.  * Indicates that the target surface contains the odd field of video data.
  4548.  * This flag is only valid with an overlay surface.
  4549.  */
  4550. #define DDFLIP_ODD                           0x00000004L
  4551.  
  4552. /*
  4553.  * Causes DirectDraw to perform the physical flip immediately and return
  4554.  * to the application. Typically, what was the front buffer but is now the back
  4555.  * buffer will still be visible (depending on timing) until the next vertical
  4556.  * retrace. Subsequent operations involving the two flipped surfaces will
  4557.  * not check to see if the physical flip has finished (i.e. will not return
  4558.  * DDERR_WASSTILLDRAWING for that reason (but may for other reasons)).
  4559.  * This allows an application to perform Flips at a higher frequency than the
  4560.  * monitor refresh rate, but may introduce visible artifacts.
  4561.  * Only effective if DDCAPS2_FLIPNOVSYNC is set. If that bit is not set,
  4562.  * DDFLIP_NOVSYNC has no effect.
  4563.  */
  4564. #define DDFLIP_NOVSYNC                       0x00000008L
  4565.  
  4566.  
  4567. /*
  4568.  * Flip Interval Flags. These flags indicate how many vertical retraces to wait between
  4569.  * each flip. The default is one. DirectDraw will return DDERR_WASSTILLDRAWING for each
  4570.  * surface involved in the flip until the specified number of vertical retraces has
  4571.  * ocurred. Only effective if DDCAPS2_FLIPINTERVAL is set. If that bit is not set,
  4572.  * DDFLIP_INTERVALn has no effect.
  4573.  */
  4574.  
  4575. /*
  4576.  * DirectDraw will flip on every other vertical sync
  4577.  */
  4578. #define DDFLIP_INTERVAL2                     0x02000000L
  4579.  
  4580.  
  4581. /*
  4582.  * DirectDraw will flip on every third vertical sync
  4583.  */
  4584. #define DDFLIP_INTERVAL3                     0x03000000L
  4585.  
  4586.  
  4587. /*
  4588.  * DirectDraw will flip on every fourth vertical sync
  4589.  */
  4590. #define DDFLIP_INTERVAL4                     0x04000000L
  4591.  
  4592. /*
  4593.  * DirectDraw will flip and display a main stereo surface
  4594.  */
  4595. #define DDFLIP_STEREO                        0x00000010L
  4596.  
  4597. /*
  4598.  * On IDirectDrawSurface7 and higher interfaces, the default is DDFLIP_WAIT. If you wish
  4599.  * to override the default and use time when the accelerator is busy (as denoted by
  4600.  * the DDERR_WASSTILLDRAWING return code) then use DDFLIP_DONOTWAIT.
  4601.  */
  4602. #define DDFLIP_DONOTWAIT                     0x00000020L
  4603.  
  4604.  
  4605. /****************************************************************************
  4606.  *
  4607.  * DIRECTDRAW SURFACE OVERLAY FLAGS
  4608.  *
  4609.  ****************************************************************************/
  4610.  
  4611. /*
  4612.  * Use the alpha information in the pixel format or the alpha channel surface
  4613.  * attached to the destination surface as the alpha channel for the
  4614.  * destination overlay.
  4615.  */
  4616. #define DDOVER_ALPHADEST                        0x00000001l
  4617.  
  4618. /*
  4619.  * Use the dwConstAlphaDest field in the DDOVERLAYFX structure as the
  4620.  * destination alpha channel for this overlay.
  4621.  */
  4622. #define DDOVER_ALPHADESTCONSTOVERRIDE           0x00000002l
  4623.  
  4624. /*
  4625.  * The NEG suffix indicates that the destination surface becomes more
  4626.  * transparent as the alpha value increases.
  4627.  */
  4628. #define DDOVER_ALPHADESTNEG                     0x00000004l
  4629.  
  4630. /*
  4631.  * Use the lpDDSAlphaDest field in the DDOVERLAYFX structure as the alpha
  4632.  * channel destination for this overlay.
  4633.  */
  4634. #define DDOVER_ALPHADESTSURFACEOVERRIDE         0x00000008l
  4635.  
  4636. /*
  4637.  * Use the dwAlphaEdgeBlend field in the DDOVERLAYFX structure as the alpha
  4638.  * channel for the edges of the image that border the color key colors.
  4639.  */
  4640. #define DDOVER_ALPHAEDGEBLEND                   0x00000010l
  4641.  
  4642. /*
  4643.  * Use the alpha information in the pixel format or the alpha channel surface
  4644.  * attached to the source surface as the source alpha channel for this overlay.
  4645.  */
  4646. #define DDOVER_ALPHASRC                         0x00000020l
  4647.  
  4648. /*
  4649.  * Use the dwConstAlphaSrc field in the DDOVERLAYFX structure as the source
  4650.  * alpha channel for this overlay.
  4651.  */
  4652. #define DDOVER_ALPHASRCCONSTOVERRIDE            0x00000040l
  4653.  
  4654. /*
  4655.  * The NEG suffix indicates that the source surface becomes more transparent
  4656.  * as the alpha value increases.
  4657.  */
  4658. #define DDOVER_ALPHASRCNEG                      0x00000080l
  4659.  
  4660. /*
  4661.  * Use the lpDDSAlphaSrc field in the DDOVERLAYFX structure as the alpha channel
  4662.  * source for this overlay.
  4663.  */
  4664. #define DDOVER_ALPHASRCSURFACEOVERRIDE          0x00000100l
  4665.  
  4666. /*
  4667.  * Turn this overlay off.
  4668.  */
  4669. #define DDOVER_HIDE                             0x00000200l
  4670.  
  4671. /*
  4672.  * Use the color key associated with the destination surface.
  4673.  */
  4674. #define DDOVER_KEYDEST                          0x00000400l
  4675.  
  4676. /*
  4677.  * Use the dckDestColorkey field in the DDOVERLAYFX structure as the color key
  4678.  * for the destination surface
  4679.  */
  4680. #define DDOVER_KEYDESTOVERRIDE                  0x00000800l
  4681.  
  4682. /*
  4683.  * Use the color key associated with the source surface.
  4684.  */
  4685. #define DDOVER_KEYSRC                           0x00001000l
  4686.  
  4687. /*
  4688.  * Use the dckSrcColorkey field in the DDOVERLAYFX structure as the color key
  4689.  * for the source surface.
  4690.  */
  4691. #define DDOVER_KEYSRCOVERRIDE                   0x00002000l
  4692.  
  4693. /*
  4694.  * Turn this overlay on.
  4695.  */
  4696. #define DDOVER_SHOW                             0x00004000l
  4697.  
  4698. /*
  4699.  * Add a dirty rect to an emulated overlayed surface.
  4700.  */
  4701. #define DDOVER_ADDDIRTYRECT                     0x00008000l
  4702.  
  4703. /*
  4704.  * Redraw all dirty rects on an emulated overlayed surface.
  4705.  */
  4706. #define DDOVER_REFRESHDIRTYRECTS                0x00010000l
  4707.  
  4708. /*
  4709.  * Redraw the entire surface on an emulated overlayed surface.
  4710.  */
  4711. #define DDOVER_REFRESHALL                      0x00020000l
  4712.  
  4713.  
  4714. /*
  4715.  * Use the overlay FX flags to define special overlay FX
  4716.  */
  4717. #define DDOVER_DDFX                             0x00080000l
  4718.  
  4719. /*
  4720.  * Autoflip the overlay when ever the video port autoflips
  4721.  */
  4722. #define DDOVER_AUTOFLIP                         0x00100000l
  4723.  
  4724. /*
  4725.  * Display each field of video port data individually without
  4726.  * causing any jittery artifacts
  4727.  */
  4728. #define DDOVER_BOB                              0x00200000l
  4729.  
  4730. /*
  4731.  * Indicates that bob/weave decisions should not be overridden by other
  4732.  * interfaces.
  4733.  */
  4734. #define DDOVER_OVERRIDEBOBWEAVE                 0x00400000l
  4735.  
  4736. /*
  4737.  * Indicates that the surface memory is composed of interleaved fields.
  4738.  */
  4739. #define DDOVER_INTERLEAVED                      0x00800000l
  4740.  
  4741. /*
  4742.  * Indicates that bob will be performed using hardware rather than
  4743.  * software or emulated.
  4744.  */
  4745. #define DDOVER_BOBHARDWARE                      0x01000000l
  4746.  
  4747. /*
  4748.  * Indicates that overlay FX structure contains valid ARGB scaling factors.
  4749.  */
  4750. #define DDOVER_ARGBSCALEFACTORS                 0x02000000l
  4751.  
  4752. /*
  4753.  * Indicates that ARGB scaling factors can be degraded to fit driver capabilities.
  4754.  */
  4755. #define DDOVER_DEGRADEARGBSCALING               0x04000000l
  4756.  
  4757.  
  4758. #ifdef  COMBOX_SANDBOX
  4759. #define DX_LONGHORN_PRESERVEDC
  4760. #endif
  4761.  
  4762. #ifdef DX_LONGHORN_PRESERVEDC
  4763.  
  4764. /****************************************************************************
  4765.  *
  4766.  * DIRECTDRAWSURFACE SETSURFACEDESC FLAGS
  4767.  *
  4768.  ****************************************************************************/
  4769.  
  4770. /*
  4771.  * The default.  The GDI DC will be tore down.
  4772.  */
  4773. #define DDSETSURFACEDESC_RECREATEDC             0x00000000L     // default
  4774.  
  4775. /*
  4776.  * The default.  The GDI DC will be kept.
  4777.  */
  4778. #define DDSETSURFACEDESC_PRESERVEDC             0x00000001L
  4779.  
  4780.  
  4781. #endif // DX_LONGHORN_PRESERVEDC
  4782.  
  4783. /****************************************************************************
  4784.  *
  4785.  * DIRECTDRAWSURFACE LOCK FLAGS
  4786.  *
  4787.  ****************************************************************************/
  4788.  
  4789. /*
  4790.  * The default.  Set to indicate that Lock should return a valid memory pointer
  4791.  * to the top of the specified rectangle.  If no rectangle is specified then a
  4792.  * pointer to the top of the surface is returned.
  4793.  */
  4794. #define DDLOCK_SURFACEMEMORYPTR                 0x00000000L     // default
  4795.  
  4796. /*
  4797.  * Set to indicate that Lock should wait until it can obtain a valid memory
  4798.  * pointer before returning.  If this bit is set, Lock will never return
  4799.  * DDERR_WASSTILLDRAWING.
  4800.  */
  4801. #define DDLOCK_WAIT                             0x00000001L
  4802.  
  4803. /*
  4804.  * Set if an event handle is being passed to Lock.  Lock will trigger the event
  4805.  * when it can return the surface memory pointer requested.
  4806.  */
  4807. #define DDLOCK_EVENT                            0x00000002L
  4808.  
  4809. /*
  4810.  * Indicates that the surface being locked will only be read from.
  4811.  */
  4812. #define DDLOCK_READONLY                         0x00000010L
  4813.  
  4814. /*
  4815.  * Indicates that the surface being locked will only be written to
  4816.  */
  4817. #define DDLOCK_WRITEONLY                        0x00000020L
  4818.  
  4819.  
  4820. /*
  4821.  * Indicates that a system wide lock should not be taken when this surface
  4822.  * is locked. This has several advantages (cursor responsiveness, ability
  4823.  * to call more Windows functions, easier debugging) when locking video
  4824.  * memory surfaces. However, an application specifying this flag must
  4825.  * comply with a number of conditions documented in the help file.
  4826.  * Furthermore, this flag cannot be specified when locking the primary.
  4827.  */
  4828. #define DDLOCK_NOSYSLOCK                        0x00000800L
  4829.  
  4830. /*
  4831.  * Used only with Direct3D Vertex Buffer Locks. Indicates that no vertices
  4832.  * that were referred to in Draw*PrimtiveVB calls since the start of the
  4833.  * frame (or the last lock without this flag) will be modified during the
  4834.  * lock. This can be useful when one is only appending data to the vertex
  4835.  * buffer
  4836.  */
  4837. #define DDLOCK_NOOVERWRITE                      0x00001000L
  4838.  
  4839. /*
  4840.  * Indicates that no assumptions will be made about the contents of the
  4841.  * surface or vertex buffer during this lock.
  4842.  * This enables two things:
  4843.  * -    Direct3D or the driver may provide an alternative memory
  4844.  *      area as the vertex buffer. This is useful when one plans to clear the
  4845.  *      contents of the vertex buffer and fill in new data.
  4846.  * -    Drivers sometimes store surface data in a re-ordered format.
  4847.  *      When the application locks the surface, the driver is forced to un-re-order
  4848.  *      the surface data before allowing the application to see the surface contents.
  4849.  *      This flag is a hint to the driver that it can skip the un-re-ordering process
  4850.  *      since the application plans to overwrite every single pixel in the surface
  4851.  *      or locked rectangle (and so erase any un-re-ordered pixels anyway).
  4852.  *      Applications should always set this flag when they intend to overwrite the entire
  4853.  *      surface or locked rectangle.
  4854.  */
  4855. #define DDLOCK_DISCARDCONTENTS                  0x00002000L
  4856.  /*
  4857.   * DDLOCK_OKTOSWAP is an older, less informative name for DDLOCK_DISCARDCONTENTS
  4858.   */
  4859. #define DDLOCK_OKTOSWAP                         0x00002000L
  4860.  
  4861. /*
  4862.  * On IDirectDrawSurface7 and higher interfaces, the default is DDLOCK_WAIT. If you wish
  4863.  * to override the default and use time when the accelerator is busy (as denoted by
  4864.  * the DDERR_WASSTILLDRAWING return code) then use DDLOCK_DONOTWAIT.
  4865.  */
  4866. #define DDLOCK_DONOTWAIT                        0x00004000L
  4867.  
  4868. /*
  4869.  * This indicates volume texture lock with front and back specified.
  4870.  */
  4871. #define DDLOCK_HASVOLUMETEXTUREBOXRECT          0x00008000L
  4872.  
  4873. /*
  4874.  * This indicates that the driver should not update dirty rect information for this lock.
  4875.  */
  4876. #define DDLOCK_NODIRTYUPDATE                    0x00010000L
  4877.  
  4878.  
  4879. /****************************************************************************
  4880.  *
  4881.  * DIRECTDRAWSURFACE PAGELOCK FLAGS
  4882.  *
  4883.  ****************************************************************************/
  4884.  
  4885. /*
  4886.  * No flags defined at present
  4887.  */
  4888.  
  4889.  
  4890. /****************************************************************************
  4891.  *
  4892.  * DIRECTDRAWSURFACE PAGEUNLOCK FLAGS
  4893.  *
  4894.  ****************************************************************************/
  4895.  
  4896. /*
  4897.  * No flags defined at present
  4898.  */
  4899.  
  4900.  
  4901. /****************************************************************************
  4902.  *
  4903.  * DIRECTDRAWSURFACE BLT FX FLAGS
  4904.  *
  4905.  ****************************************************************************/
  4906.  
  4907. /*
  4908.  * If stretching, use arithmetic stretching along the Y axis for this blt.
  4909.  */
  4910. #define DDBLTFX_ARITHSTRETCHY                   0x00000001l
  4911.  
  4912. /*
  4913.  * Do this blt mirroring the surface left to right.  Spin the
  4914.  * surface around its y-axis.
  4915.  */
  4916. #define DDBLTFX_MIRRORLEFTRIGHT                 0x00000002l
  4917.  
  4918. /*
  4919.  * Do this blt mirroring the surface up and down.  Spin the surface
  4920.  * around its x-axis.
  4921.  */
  4922. #define DDBLTFX_MIRRORUPDOWN                    0x00000004l
  4923.  
  4924. /*
  4925.  * Schedule this blt to avoid tearing.
  4926.  */
  4927. #define DDBLTFX_NOTEARING                       0x00000008l
  4928.  
  4929. /*
  4930.  * Do this blt rotating the surface one hundred and eighty degrees.
  4931.  */
  4932. #define DDBLTFX_ROTATE180                       0x00000010l
  4933.  
  4934. /*
  4935.  * Do this blt rotating the surface two hundred and seventy degrees.
  4936.  */
  4937. #define DDBLTFX_ROTATE270                       0x00000020l
  4938.  
  4939. /*
  4940.  * Do this blt rotating the surface ninety degrees.
  4941.  */
  4942. #define DDBLTFX_ROTATE90                        0x00000040l
  4943.  
  4944. /*
  4945.  * Do this z blt using dwZBufferLow and dwZBufferHigh as  range values
  4946.  * specified to limit the bits copied from the source surface.
  4947.  */
  4948. #define DDBLTFX_ZBUFFERRANGE                    0x00000080l
  4949.  
  4950. /*
  4951.  * Do this z blt adding the dwZBufferBaseDest to each of the sources z values
  4952.  * before comparing it with the desting z values.
  4953.  */
  4954. #define DDBLTFX_ZBUFFERBASEDEST                 0x00000100l
  4955.  
  4956. /****************************************************************************
  4957.  *
  4958.  * DIRECTDRAWSURFACE OVERLAY FX FLAGS
  4959.  *
  4960.  ****************************************************************************/
  4961.  
  4962. /*
  4963.  * If stretching, use arithmetic stretching along the Y axis for this overlay.
  4964.  */
  4965. #define DDOVERFX_ARITHSTRETCHY                  0x00000001l
  4966.  
  4967. /*
  4968.  * Mirror the overlay across the vertical axis
  4969.  */
  4970. #define DDOVERFX_MIRRORLEFTRIGHT                0x00000002l
  4971.  
  4972. /*
  4973.  * Mirror the overlay across the horizontal axis
  4974.  */
  4975. #define DDOVERFX_MIRRORUPDOWN                   0x00000004l
  4976.  
  4977. /*
  4978.  * Deinterlace the overlay, if possible
  4979.  */
  4980. #define DDOVERFX_DEINTERLACE                    0x00000008l
  4981.  
  4982.  
  4983. /****************************************************************************
  4984.  *
  4985.  * DIRECTDRAW WAITFORVERTICALBLANK FLAGS
  4986.  *
  4987.  ****************************************************************************/
  4988.  
  4989. /*
  4990.  * return when the vertical blank interval begins
  4991.  */
  4992. #define DDWAITVB_BLOCKBEGIN                     0x00000001l
  4993.  
  4994. /*
  4995.  * set up an event to trigger when the vertical blank begins
  4996.  */
  4997. #define DDWAITVB_BLOCKBEGINEVENT                0x00000002l
  4998.  
  4999. /*
  5000.  * return when the vertical blank interval ends and display begins
  5001.  */
  5002. #define DDWAITVB_BLOCKEND                       0x00000004l
  5003.  
  5004. /****************************************************************************
  5005.  *
  5006.  * DIRECTDRAW GETFLIPSTATUS FLAGS
  5007.  *
  5008.  ****************************************************************************/
  5009.  
  5010. /*
  5011.  * is it OK to flip now?
  5012.  */
  5013. #define DDGFS_CANFLIP                   0x00000001l
  5014.  
  5015. /*
  5016.  * is the last flip finished?
  5017.  */
  5018. #define DDGFS_ISFLIPDONE                0x00000002l
  5019.  
  5020. /****************************************************************************
  5021.  *
  5022.  * DIRECTDRAW GETBLTSTATUS FLAGS
  5023.  *
  5024.  ****************************************************************************/
  5025.  
  5026. /*
  5027.  * is it OK to blt now?
  5028.  */
  5029. #define DDGBS_CANBLT                    0x00000001l
  5030.  
  5031. /*
  5032.  * is the blt to the surface finished?
  5033.  */
  5034. #define DDGBS_ISBLTDONE                 0x00000002l
  5035.  
  5036.  
  5037. /****************************************************************************
  5038.  *
  5039.  * DIRECTDRAW ENUMOVERLAYZORDER FLAGS
  5040.  *
  5041.  ****************************************************************************/
  5042.  
  5043. /*
  5044.  * Enumerate overlays back to front.
  5045.  */
  5046. #define DDENUMOVERLAYZ_BACKTOFRONT      0x00000000l
  5047.  
  5048. /*
  5049.  * Enumerate overlays front to back
  5050.  */
  5051. #define DDENUMOVERLAYZ_FRONTTOBACK      0x00000001l
  5052.  
  5053. /****************************************************************************
  5054.  *
  5055.  * DIRECTDRAW UPDATEOVERLAYZORDER FLAGS
  5056.  *
  5057.  ****************************************************************************/
  5058.  
  5059. /*
  5060.  * Send overlay to front
  5061.  */
  5062. #define DDOVERZ_SENDTOFRONT             0x00000000l
  5063.  
  5064. /*
  5065.  * Send overlay to back
  5066.  */
  5067. #define DDOVERZ_SENDTOBACK              0x00000001l
  5068.  
  5069. /*
  5070.  * Move Overlay forward
  5071.  */
  5072. #define DDOVERZ_MOVEFORWARD             0x00000002l
  5073.  
  5074. /*
  5075.  * Move Overlay backward
  5076.  */
  5077. #define DDOVERZ_MOVEBACKWARD            0x00000003l
  5078.  
  5079. /*
  5080.  * Move Overlay in front of relative surface
  5081.  */
  5082. #define DDOVERZ_INSERTINFRONTOF         0x00000004l
  5083.  
  5084. /*
  5085.  * Move Overlay in back of relative surface
  5086.  */
  5087. #define DDOVERZ_INSERTINBACKOF          0x00000005l
  5088.  
  5089.  
  5090. /****************************************************************************
  5091.  *
  5092.  * DIRECTDRAW SETGAMMARAMP FLAGS
  5093.  *
  5094.  ****************************************************************************/
  5095.  
  5096. /*
  5097.  * Request calibrator to adjust the gamma ramp according to the physical
  5098.  * properties of the display so that the result should appear identical
  5099.  * on all systems.
  5100.  */
  5101. #define DDSGR_CALIBRATE                        0x00000001L
  5102.  
  5103.  
  5104. /****************************************************************************
  5105.  *
  5106.  * DIRECTDRAW STARTMODETEST FLAGS
  5107.  *
  5108.  ****************************************************************************/
  5109.  
  5110. /*
  5111.  * Indicates that the mode being tested has passed
  5112.  */
  5113. #define DDSMT_ISTESTREQUIRED                   0x00000001L
  5114.  
  5115.  
  5116. /****************************************************************************
  5117.  *
  5118.  * DIRECTDRAW EVALUATEMODE FLAGS
  5119.  *
  5120.  ****************************************************************************/
  5121.  
  5122. /*
  5123.  * Indicates that the mode being tested has passed
  5124.  */
  5125. #define DDEM_MODEPASSED                        0x00000001L
  5126.  
  5127. /*
  5128.  * Indicates that the mode being tested has failed
  5129.  */
  5130. #define DDEM_MODEFAILED                        0x00000002L
  5131.  
  5132.  
  5133. /*===========================================================================
  5134.  *
  5135.  *
  5136.  * DIRECTDRAW RETURN CODES
  5137.  *
  5138.  * The return values from DirectDraw Commands and Surface that return an HRESULT
  5139.  * are codes from DirectDraw concerning the results of the action
  5140.  * requested by DirectDraw.
  5141.  *
  5142.  *==========================================================================*/
  5143.  
  5144. /*
  5145.  * Status is OK
  5146.  *
  5147.  * Issued by: DirectDraw Commands and all callbacks
  5148.  */
  5149. #define DD_OK                                   S_OK
  5150. #define DD_FALSE                                S_FALSE
  5151.  
  5152. /****************************************************************************
  5153.  *
  5154.  * DIRECTDRAW ENUMCALLBACK RETURN VALUES
  5155.  *
  5156.  * EnumCallback returns are used to control the flow of the DIRECTDRAW and
  5157.  * DIRECTDRAWSURFACE object enumerations.   They can only be returned by
  5158.  * enumeration callback routines.
  5159.  *
  5160.  ****************************************************************************/
  5161.  
  5162. /*
  5163.  * stop the enumeration
  5164.  */
  5165. #define DDENUMRET_CANCEL                        0
  5166.  
  5167. /*
  5168.  * continue the enumeration
  5169.  */
  5170. #define DDENUMRET_OK                            1
  5171.  
  5172. /****************************************************************************
  5173.  *
  5174.  * DIRECTDRAW ERRORS
  5175.  *
  5176.  * Errors are represented by negative values and cannot be combined.
  5177.  *
  5178.  ****************************************************************************/
  5179.  
  5180. /*
  5181.  * This object is already initialized
  5182.  */
  5183. #define DDERR_ALREADYINITIALIZED                MAKE_DDHRESULT( 5 )
  5184.  
  5185. /*
  5186.  * This surface can not be attached to the requested surface.
  5187.  */
  5188. #define DDERR_CANNOTATTACHSURFACE               MAKE_DDHRESULT( 10 )
  5189.  
  5190. /*
  5191.  * This surface can not be detached from the requested surface.
  5192.  */
  5193. #define DDERR_CANNOTDETACHSURFACE               MAKE_DDHRESULT( 20 )
  5194.  
  5195. /*
  5196.  * Support is currently not available.
  5197.  */
  5198. #define DDERR_CURRENTLYNOTAVAIL                 MAKE_DDHRESULT( 40 )
  5199.  
  5200. /*
  5201.  * An exception was encountered while performing the requested operation
  5202.  */
  5203. #define DDERR_EXCEPTION                         MAKE_DDHRESULT( 55 )
  5204.  
  5205. /*
  5206.  * Generic failure.
  5207.  */
  5208. #define DDERR_GENERIC                           E_FAIL
  5209.  
  5210. /*
  5211.  * Height of rectangle provided is not a multiple of reqd alignment
  5212.  */
  5213. #define DDERR_HEIGHTALIGN                       MAKE_DDHRESULT( 90 )
  5214.  
  5215. /*
  5216.  * Unable to match primary surface creation request with existing
  5217.  * primary surface.
  5218.  */
  5219. #define DDERR_INCOMPATIBLEPRIMARY               MAKE_DDHRESULT( 95 )
  5220.  
  5221. /*
  5222.  * One or more of the caps bits passed to the callback are incorrect.
  5223.  */
  5224. #define DDERR_INVALIDCAPS                       MAKE_DDHRESULT( 100 )
  5225.  
  5226. /*
  5227.  * DirectDraw does not support provided Cliplist.
  5228.  */
  5229. #define DDERR_INVALIDCLIPLIST                   MAKE_DDHRESULT( 110 )
  5230.  
  5231. /*
  5232.  * DirectDraw does not support the requested mode
  5233.  */
  5234. #define DDERR_INVALIDMODE                       MAKE_DDHRESULT( 120 )
  5235.  
  5236. /*
  5237.  * DirectDraw received a pointer that was an invalid DIRECTDRAW object.
  5238.  */
  5239. #define DDERR_INVALIDOBJECT                     MAKE_DDHRESULT( 130 )
  5240.  
  5241. /*
  5242.  * One or more of the parameters passed to the callback function are
  5243.  * incorrect.
  5244.  */
  5245. #define DDERR_INVALIDPARAMS                     E_INVALIDARG
  5246.  
  5247. /*
  5248.  * pixel format was invalid as specified
  5249.  */
  5250. #define DDERR_INVALIDPIXELFORMAT                MAKE_DDHRESULT( 145 )
  5251.  
  5252. /*
  5253.  * Rectangle provided was invalid.
  5254.  */
  5255. #define DDERR_INVALIDRECT                       MAKE_DDHRESULT( 150 )
  5256.  
  5257. /*
  5258.  * Operation could not be carried out because one or more surfaces are locked
  5259.  */
  5260. #define DDERR_LOCKEDSURFACES                    MAKE_DDHRESULT( 160 )
  5261.  
  5262. /*
  5263.  * There is no 3D present.
  5264.  */
  5265. #define DDERR_NO3D                              MAKE_DDHRESULT( 170 )
  5266.  
  5267. /*
  5268.  * Operation could not be carried out because there is no alpha accleration
  5269.  * hardware present or available.
  5270.  */
  5271. #define DDERR_NOALPHAHW                         MAKE_DDHRESULT( 180 )
  5272.  
  5273. /*
  5274.  * Operation could not be carried out because there is no stereo
  5275.  * hardware present or available.
  5276.  */
  5277. #define DDERR_NOSTEREOHARDWARE          MAKE_DDHRESULT( 181 )
  5278.  
  5279. /*
  5280.  * Operation could not be carried out because there is no hardware
  5281.  * present which supports stereo surfaces
  5282.  */
  5283. #define DDERR_NOSURFACELEFT                             MAKE_DDHRESULT( 182 )
  5284.  
  5285.  
  5286.  
  5287. /*
  5288.  * no clip list available
  5289.  */
  5290. #define DDERR_NOCLIPLIST                        MAKE_DDHRESULT( 205 )
  5291.  
  5292. /*
  5293.  * Operation could not be carried out because there is no color conversion
  5294.  * hardware present or available.
  5295.  */
  5296. #define DDERR_NOCOLORCONVHW                     MAKE_DDHRESULT( 210 )
  5297.  
  5298. /*
  5299.  * Create function called without DirectDraw object method SetCooperativeLevel
  5300.  * being called.
  5301.  */
  5302. #define DDERR_NOCOOPERATIVELEVELSET             MAKE_DDHRESULT( 212 )
  5303.  
  5304. /*
  5305.  * Surface doesn't currently have a color key
  5306.  */
  5307. #define DDERR_NOCOLORKEY                        MAKE_DDHRESULT( 215 )
  5308.  
  5309. /*
  5310.  * Operation could not be carried out because there is no hardware support
  5311.  * of the dest color key.
  5312.  */
  5313. #define DDERR_NOCOLORKEYHW                      MAKE_DDHRESULT( 220 )
  5314.  
  5315. /*
  5316.  * No DirectDraw support possible with current display driver
  5317.  */
  5318. #define DDERR_NODIRECTDRAWSUPPORT               MAKE_DDHRESULT( 222 )
  5319.  
  5320. /*
  5321.  * Operation requires the application to have exclusive mode but the
  5322.  * application does not have exclusive mode.
  5323.  */
  5324. #define DDERR_NOEXCLUSIVEMODE                   MAKE_DDHRESULT( 225 )
  5325.  
  5326. /*
  5327.  * Flipping visible surfaces is not supported.
  5328.  */
  5329. #define DDERR_NOFLIPHW                          MAKE_DDHRESULT( 230 )
  5330.  
  5331. /*
  5332.  * There is no GDI present.
  5333.  */
  5334. #define DDERR_NOGDI                             MAKE_DDHRESULT( 240 )
  5335.  
  5336. /*
  5337.  * Operation could not be carried out because there is no hardware present
  5338.  * or available.
  5339.  */
  5340. #define DDERR_NOMIRRORHW                        MAKE_DDHRESULT( 250 )
  5341.  
  5342. /*
  5343.  * Requested item was not found
  5344.  */
  5345. #define DDERR_NOTFOUND                          MAKE_DDHRESULT( 255 )
  5346.  
  5347. /*
  5348.  * Operation could not be carried out because there is no overlay hardware
  5349.  * present or available.
  5350.  */
  5351. #define DDERR_NOOVERLAYHW                       MAKE_DDHRESULT( 260 )
  5352.  
  5353. /*
  5354.  * Operation could not be carried out because the source and destination
  5355.  * rectangles are on the same surface and overlap each other.
  5356.  */
  5357. #define DDERR_OVERLAPPINGRECTS                  MAKE_DDHRESULT( 270 )
  5358.  
  5359. /*
  5360.  * Operation could not be carried out because there is no appropriate raster
  5361.  * op hardware present or available.
  5362.  */
  5363. #define DDERR_NORASTEROPHW                      MAKE_DDHRESULT( 280 )
  5364.  
  5365. /*
  5366.  * Operation could not be carried out because there is no rotation hardware
  5367.  * present or available.
  5368.  */
  5369. #define DDERR_NOROTATIONHW                      MAKE_DDHRESULT( 290 )
  5370.  
  5371. /*
  5372.  * Operation could not be carried out because there is no hardware support
  5373.  * for stretching
  5374.  */
  5375. #define DDERR_NOSTRETCHHW                       MAKE_DDHRESULT( 310 )
  5376.  
  5377. /*
  5378.  * DirectDrawSurface is not in 4 bit color palette and the requested operation
  5379.  * requires 4 bit color palette.
  5380.  */
  5381. #define DDERR_NOT4BITCOLOR                      MAKE_DDHRESULT( 316 )
  5382.  
  5383. /*
  5384.  * DirectDrawSurface is not in 4 bit color index palette and the requested
  5385.  * operation requires 4 bit color index palette.
  5386.  */
  5387. #define DDERR_NOT4BITCOLORINDEX                 MAKE_DDHRESULT( 317 )
  5388.  
  5389. /*
  5390.  * DirectDraw Surface is not in 8 bit color mode and the requested operation
  5391.  * requires 8 bit color.
  5392.  */
  5393. #define DDERR_NOT8BITCOLOR                      MAKE_DDHRESULT( 320 )
  5394.  
  5395. /*
  5396.  * Operation could not be carried out because there is no texture mapping
  5397.  * hardware present or available.
  5398.  */
  5399. #define DDERR_NOTEXTUREHW                       MAKE_DDHRESULT( 330 )
  5400.  
  5401. /*
  5402.  * Operation could not be carried out because there is no hardware support
  5403.  * for vertical blank synchronized operations.
  5404.  */
  5405. #define DDERR_NOVSYNCHW                         MAKE_DDHRESULT( 335 )
  5406.  
  5407. /*
  5408.  * Operation could not be carried out because there is no hardware support
  5409.  * for zbuffer blting.
  5410.  */
  5411. #define DDERR_NOZBUFFERHW                       MAKE_DDHRESULT( 340 )
  5412.  
  5413. /*
  5414.  * Overlay surfaces could not be z layered based on their BltOrder because
  5415.  * the hardware does not support z layering of overlays.
  5416.  */
  5417. #define DDERR_NOZOVERLAYHW                      MAKE_DDHRESULT( 350 )
  5418.  
  5419. /*
  5420.  * The hardware needed for the requested operation has already been
  5421.  * allocated.
  5422.  */
  5423. #define DDERR_OUTOFCAPS                         MAKE_DDHRESULT( 360 )
  5424.  
  5425. /*
  5426.  * DirectDraw does not have enough memory to perform the operation.
  5427.  */
  5428. #define DDERR_OUTOFMEMORY                       E_OUTOFMEMORY
  5429.  
  5430. /*
  5431.  * DirectDraw does not have enough memory to perform the operation.
  5432.  */
  5433. #define DDERR_OUTOFVIDEOMEMORY                  MAKE_DDHRESULT( 380 )
  5434.  
  5435. /*
  5436.  * hardware does not support clipped overlays
  5437.  */
  5438. #define DDERR_OVERLAYCANTCLIP                   MAKE_DDHRESULT( 382 )
  5439.  
  5440. /*
  5441.  * Can only have ony color key active at one time for overlays
  5442.  */
  5443. #define DDERR_OVERLAYCOLORKEYONLYONEACTIVE      MAKE_DDHRESULT( 384 )
  5444.  
  5445. /*
  5446.  * Access to this palette is being refused because the palette is already
  5447.  * locked by another thread.
  5448.  */
  5449. #define DDERR_PALETTEBUSY                       MAKE_DDHRESULT( 387 )
  5450.  
  5451. /*
  5452.  * No src color key specified for this operation.
  5453.  */
  5454. #define DDERR_COLORKEYNOTSET                    MAKE_DDHRESULT( 400 )
  5455.  
  5456. /*
  5457.  * This surface is already attached to the surface it is being attached to.
  5458.  */
  5459. #define DDERR_SURFACEALREADYATTACHED            MAKE_DDHRESULT( 410 )
  5460.  
  5461. /*
  5462.  * This surface is already a dependency of the surface it is being made a
  5463.  * dependency of.
  5464.  */
  5465. #define DDERR_SURFACEALREADYDEPENDENT           MAKE_DDHRESULT( 420 )
  5466.  
  5467. /*
  5468.  * Access to this surface is being refused because the surface is already
  5469.  * locked by another thread.
  5470.  */
  5471. #define DDERR_SURFACEBUSY                       MAKE_DDHRESULT( 430 )
  5472.  
  5473. /*
  5474.  * Access to this surface is being refused because no driver exists
  5475.  * which can supply a pointer to the surface.
  5476.  * This is most likely to happen when attempting to lock the primary
  5477.  * surface when no DCI provider is present.
  5478.  * Will also happen on attempts to lock an optimized surface.
  5479.  */
  5480. #define DDERR_CANTLOCKSURFACE                   MAKE_DDHRESULT( 435 )
  5481.  
  5482. /*
  5483.  * Access to Surface refused because Surface is obscured.
  5484.  */
  5485. #define DDERR_SURFACEISOBSCURED                 MAKE_DDHRESULT( 440 )
  5486.  
  5487. /*
  5488.  * Access to this surface is being refused because the surface is gone.
  5489.  * The DIRECTDRAWSURFACE object representing this surface should
  5490.  * have Restore called on it.
  5491.  */
  5492. #define DDERR_SURFACELOST                       MAKE_DDHRESULT( 450 )
  5493.  
  5494. /*
  5495.  * The requested surface is not attached.
  5496.  */
  5497. #define DDERR_SURFACENOTATTACHED                MAKE_DDHRESULT( 460 )
  5498.  
  5499. /*
  5500.  * Height requested by DirectDraw is too large.
  5501.  */
  5502. #define DDERR_TOOBIGHEIGHT                      MAKE_DDHRESULT( 470 )
  5503.  
  5504. /*
  5505.  * Size requested by DirectDraw is too large --  The individual height and
  5506.  * width are OK.
  5507.  */
  5508. #define DDERR_TOOBIGSIZE                        MAKE_DDHRESULT( 480 )
  5509.  
  5510. /*
  5511.  * Width requested by DirectDraw is too large.
  5512.  */
  5513. #define DDERR_TOOBIGWIDTH                       MAKE_DDHRESULT( 490 )
  5514.  
  5515. /*
  5516.  * Action not supported.
  5517.  */
  5518. #define DDERR_UNSUPPORTED                       E_NOTIMPL
  5519.  
  5520. /*
  5521.  * Pixel format requested is unsupported by DirectDraw
  5522.  */
  5523. #define DDERR_UNSUPPORTEDFORMAT                 MAKE_DDHRESULT( 510 )
  5524.  
  5525. /*
  5526.  * Bitmask in the pixel format requested is unsupported by DirectDraw
  5527.  */
  5528. #define DDERR_UNSUPPORTEDMASK                   MAKE_DDHRESULT( 520 )
  5529.  
  5530. /*
  5531.  * The specified stream contains invalid data
  5532.  */
  5533. #define DDERR_INVALIDSTREAM                     MAKE_DDHRESULT( 521 )
  5534.  
  5535. /*
  5536.  * vertical blank is in progress
  5537.  */
  5538. #define DDERR_VERTICALBLANKINPROGRESS           MAKE_DDHRESULT( 537 )
  5539.  
  5540. /*
  5541.  * Informs DirectDraw that the previous Blt which is transfering information
  5542.  * to or from this Surface is incomplete.
  5543.  */
  5544. #define DDERR_WASSTILLDRAWING                   MAKE_DDHRESULT( 540 )
  5545.  
  5546.  
  5547. /*
  5548.  * The specified surface type requires specification of the COMPLEX flag
  5549.  */
  5550. #define DDERR_DDSCAPSCOMPLEXREQUIRED            MAKE_DDHRESULT( 542 )
  5551.  
  5552.  
  5553. /*
  5554.  * Rectangle provided was not horizontally aligned on reqd. boundary
  5555.  */
  5556. #define DDERR_XALIGN                            MAKE_DDHRESULT( 560 )
  5557.  
  5558. /*
  5559.  * The GUID passed to DirectDrawCreate is not a valid DirectDraw driver
  5560.  * identifier.
  5561.  */
  5562. #define DDERR_INVALIDDIRECTDRAWGUID             MAKE_DDHRESULT( 561 )
  5563.  
  5564. /*
  5565.  * A DirectDraw object representing this driver has already been created
  5566.  * for this process.
  5567.  */
  5568. #define DDERR_DIRECTDRAWALREADYCREATED          MAKE_DDHRESULT( 562 )
  5569.  
  5570. /*
  5571.  * A hardware only DirectDraw object creation was attempted but the driver
  5572.  * did not support any hardware.
  5573.  */
  5574. #define DDERR_NODIRECTDRAWHW                    MAKE_DDHRESULT( 563 )
  5575.  
  5576. /*
  5577.  * this process already has created a primary surface
  5578.  */
  5579. #define DDERR_PRIMARYSURFACEALREADYEXISTS       MAKE_DDHRESULT( 564 )
  5580.  
  5581. /*
  5582.  * software emulation not available.
  5583.  */
  5584. #define DDERR_NOEMULATION                       MAKE_DDHRESULT( 565 )
  5585.  
  5586. /*
  5587.  * region passed to Clipper::GetClipList is too small.
  5588.  */
  5589. #define DDERR_REGIONTOOSMALL                    MAKE_DDHRESULT( 566 )
  5590.  
  5591. /*
  5592.  * an attempt was made to set a clip list for a clipper objec that
  5593.  * is already monitoring an hwnd.
  5594.  */
  5595. #define DDERR_CLIPPERISUSINGHWND                MAKE_DDHRESULT( 567 )
  5596.  
  5597. /*
  5598.  * No clipper object attached to surface object
  5599.  */
  5600. #define DDERR_NOCLIPPERATTACHED                 MAKE_DDHRESULT( 568 )
  5601.  
  5602. /*
  5603.  * Clipper notification requires an HWND or
  5604.  * no HWND has previously been set as the CooperativeLevel HWND.
  5605.  */
  5606. #define DDERR_NOHWND                            MAKE_DDHRESULT( 569 )
  5607.  
  5608. /*
  5609.  * HWND used by DirectDraw CooperativeLevel has been subclassed,
  5610.  * this prevents DirectDraw from restoring state.
  5611.  */
  5612. #define DDERR_HWNDSUBCLASSED                    MAKE_DDHRESULT( 570 )
  5613.  
  5614. /*
  5615.  * The CooperativeLevel HWND has already been set.
  5616.  * It can not be reset while the process has surfaces or palettes created.
  5617.  */
  5618. #define DDERR_HWNDALREADYSET                    MAKE_DDHRESULT( 571 )
  5619.  
  5620. /*
  5621.  * No palette object attached to this surface.
  5622.  */
  5623. #define DDERR_NOPALETTEATTACHED                 MAKE_DDHRESULT( 572 )
  5624.  
  5625. /*
  5626.  * No hardware support for 16 or 256 color palettes.
  5627.  */
  5628. #define DDERR_NOPALETTEHW                       MAKE_DDHRESULT( 573 )
  5629.  
  5630. /*
  5631.  * If a clipper object is attached to the source surface passed into a
  5632.  * BltFast call.
  5633.  */
  5634. #define DDERR_BLTFASTCANTCLIP                   MAKE_DDHRESULT( 574 )
  5635.  
  5636. /*
  5637.  * No blter.
  5638.  */
  5639. #define DDERR_NOBLTHW                           MAKE_DDHRESULT( 575 )
  5640.  
  5641. /*
  5642.  * No DirectDraw ROP hardware.
  5643.  */
  5644. #define DDERR_NODDROPSHW                        MAKE_DDHRESULT( 576 )
  5645.  
  5646. /*
  5647.  * returned when GetOverlayPosition is called on a hidden overlay
  5648.  */
  5649. #define DDERR_OVERLAYNOTVISIBLE                 MAKE_DDHRESULT( 577 )
  5650.  
  5651. /*
  5652.  * returned when GetOverlayPosition is called on a overlay that UpdateOverlay
  5653.  * has never been called on to establish a destionation.
  5654.  */
  5655. #define DDERR_NOOVERLAYDEST                     MAKE_DDHRESULT( 578 )
  5656.  
  5657. /*
  5658.  * returned when the position of the overlay on the destionation is no longer
  5659.  * legal for that destionation.
  5660.  */
  5661. #define DDERR_INVALIDPOSITION                   MAKE_DDHRESULT( 579 )
  5662.  
  5663. /*
  5664.  * returned when an overlay member is called for a non-overlay surface
  5665.  */
  5666. #define DDERR_NOTAOVERLAYSURFACE                MAKE_DDHRESULT( 580 )
  5667.  
  5668. /*
  5669.  * An attempt was made to set the cooperative level when it was already
  5670.  * set to exclusive.
  5671.  */
  5672. #define DDERR_EXCLUSIVEMODEALREADYSET           MAKE_DDHRESULT( 581 )
  5673.  
  5674. /*
  5675.  * An attempt has been made to flip a surface that is not flippable.
  5676.  */
  5677. #define DDERR_NOTFLIPPABLE                      MAKE_DDHRESULT( 582 )
  5678.  
  5679. /*
  5680.  * Can't duplicate primary & 3D surfaces, or surfaces that are implicitly
  5681.  * created.
  5682.  */
  5683. #define DDERR_CANTDUPLICATE                     MAKE_DDHRESULT( 583 )
  5684.  
  5685. /*
  5686.  * Surface was not locked.  An attempt to unlock a surface that was not
  5687.  * locked at all, or by this process, has been attempted.
  5688.  */
  5689. #define DDERR_NOTLOCKED                         MAKE_DDHRESULT( 584 )
  5690.  
  5691. /*
  5692.  * Windows can not create any more DCs, or a DC was requested for a paltte-indexed
  5693.  * surface when the surface had no palette AND the display mode was not palette-indexed
  5694.  * (in this case DirectDraw cannot select a proper palette into the DC)
  5695.  */
  5696. #define DDERR_CANTCREATEDC                      MAKE_DDHRESULT( 585 )
  5697.  
  5698. /*
  5699.  * No DC was ever created for this surface.
  5700.  */
  5701. #define DDERR_NODC                              MAKE_DDHRESULT( 586 )
  5702.  
  5703. /*
  5704.  * This surface can not be restored because it was created in a different
  5705.  * mode.
  5706.  */
  5707. #define DDERR_WRONGMODE                         MAKE_DDHRESULT( 587 )
  5708.  
  5709. /*
  5710.  * This surface can not be restored because it is an implicitly created
  5711.  * surface.
  5712.  */
  5713. #define DDERR_IMPLICITLYCREATED                 MAKE_DDHRESULT( 588 )
  5714.  
  5715. /*
  5716.  * The surface being used is not a palette-based surface
  5717.  */
  5718. #define DDERR_NOTPALETTIZED                     MAKE_DDHRESULT( 589 )
  5719.  
  5720.  
  5721. /*
  5722.  * The display is currently in an unsupported mode
  5723.  */
  5724. #define DDERR_UNSUPPORTEDMODE                   MAKE_DDHRESULT( 590 )
  5725.  
  5726. /*
  5727.  * Operation could not be carried out because there is no mip-map
  5728.  * texture mapping hardware present or available.
  5729.  */
  5730. #define DDERR_NOMIPMAPHW                        MAKE_DDHRESULT( 591 )
  5731.  
  5732. /*
  5733.  * The requested action could not be performed because the surface was of
  5734.  * the wrong type.
  5735.  */
  5736. #define DDERR_INVALIDSURFACETYPE                MAKE_DDHRESULT( 592 )
  5737.  
  5738.  
  5739. /*
  5740.  * Device does not support optimized surfaces, therefore no video memory optimized surfaces
  5741.  */
  5742. #define DDERR_NOOPTIMIZEHW                      MAKE_DDHRESULT( 600 )
  5743.  
  5744. /*
  5745.  * Surface is an optimized surface, but has not yet been allocated any memory
  5746.  */
  5747. #define DDERR_NOTLOADED                         MAKE_DDHRESULT( 601 )
  5748.  
  5749. /*
  5750.  * Attempt was made to create or set a device window without first setting
  5751.  * the focus window
  5752.  */
  5753. #define DDERR_NOFOCUSWINDOW                     MAKE_DDHRESULT( 602 )
  5754.  
  5755. /*
  5756.  * Attempt was made to set a palette on a mipmap sublevel
  5757.  */
  5758. #define DDERR_NOTONMIPMAPSUBLEVEL               MAKE_DDHRESULT( 603 )
  5759.  
  5760. /*
  5761.  * A DC has already been returned for this surface. Only one DC can be
  5762.  * retrieved per surface.
  5763.  */
  5764. #define DDERR_DCALREADYCREATED                  MAKE_DDHRESULT( 620 )
  5765.  
  5766. /*
  5767.  * An attempt was made to allocate non-local video memory from a device
  5768.  * that does not support non-local video memory.
  5769.  */
  5770. #define DDERR_NONONLOCALVIDMEM                  MAKE_DDHRESULT( 630 )
  5771.  
  5772. /*
  5773.  * The attempt to page lock a surface failed.
  5774.  */
  5775. #define DDERR_CANTPAGELOCK                      MAKE_DDHRESULT( 640 )
  5776.  
  5777.  
  5778. /*
  5779.  * The attempt to page unlock a surface failed.
  5780.  */
  5781. #define DDERR_CANTPAGEUNLOCK                    MAKE_DDHRESULT( 660 )
  5782.  
  5783. /*
  5784.  * An attempt was made to page unlock a surface with no outstanding page locks.
  5785.  */
  5786. #define DDERR_NOTPAGELOCKED                     MAKE_DDHRESULT( 680 )
  5787.  
  5788. /*
  5789.  * There is more data available than the specified buffer size could hold
  5790.  */
  5791. #define DDERR_MOREDATA                          MAKE_DDHRESULT( 690 )
  5792.  
  5793. /*
  5794.  * The data has expired and is therefore no longer valid.
  5795.  */
  5796. #define DDERR_EXPIRED                           MAKE_DDHRESULT( 691 )
  5797.  
  5798. /*
  5799.  * The mode test has finished executing.
  5800.  */
  5801. #define DDERR_TESTFINISHED                      MAKE_DDHRESULT( 692 )
  5802.  
  5803. /*
  5804.  * The mode test has switched to a new mode.
  5805.  */
  5806. #define DDERR_NEWMODE                           MAKE_DDHRESULT( 693 )
  5807.  
  5808. /*
  5809.  * D3D has not yet been initialized.
  5810.  */
  5811. #define DDERR_D3DNOTINITIALIZED                 MAKE_DDHRESULT( 694 )
  5812.  
  5813. /*
  5814.  * The video port is not active
  5815.  */
  5816. #define DDERR_VIDEONOTACTIVE                    MAKE_DDHRESULT( 695 )
  5817.  
  5818. /*
  5819.  * The monitor does not have EDID data.
  5820.  */
  5821. #define DDERR_NOMONITORINFORMATION              MAKE_DDHRESULT( 696 )
  5822.  
  5823. /*
  5824.  * The driver does not enumerate display mode refresh rates.
  5825.  */
  5826. #define DDERR_NODRIVERSUPPORT                   MAKE_DDHRESULT( 697 )
  5827.  
  5828. /*
  5829.  * Surfaces created by one direct draw device cannot be used directly by
  5830.  * another direct draw device.
  5831.  */
  5832. #define DDERR_DEVICEDOESNTOWNSURFACE            MAKE_DDHRESULT( 699 )
  5833.  
  5834.  
  5835.  
  5836. /*
  5837.  * An attempt was made to invoke an interface member of a DirectDraw object
  5838.  * created by CoCreateInstance() before it was initialized.
  5839.  */
  5840. #define DDERR_NOTINITIALIZED                    CO_E_NOTINITIALIZED
  5841.  
  5842.  
  5843. /* Alpha bit depth constants */
  5844.  
  5845.  
  5846. #ifdef __cplusplus
  5847. };
  5848. #endif
  5849.  
  5850. #ifdef ENABLE_NAMELESS_UNION_PRAGMA
  5851. #pragma warning(default:4201)
  5852. #endif
  5853.  
  5854. #endif //__DDRAW_INCLUDED__
  5855.  
  5856.  
  5857.