home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 May / VPR9705A.ISO / VPR_DATA / PROGRAM / CBTRIAL / SETUP / DATA.Z / DDRAW.H < prev    next >
C/C++ Source or Header  |  1997-02-14  |  102KB  |  3,111 lines

  1. /*==========================================================================;
  2.  *
  3.  *  Copyright (C) 1994-1996 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. #pragma option -b
  13.  
  14. #if defined( _WIN32 )  && !defined( _NO_COM )
  15. #define COM_NO_WINDOWS_H
  16. #pragma option -b.
  17. #include <objbase.h>
  18. #pragma option -b
  19. #else
  20. #define IUnknown        void
  21. #ifndef WINNT
  22.     #define CO_E_NOTINITIALIZED 0x800401F0L
  23. #endif
  24. #endif
  25.  
  26. #define _FACDD    0x876
  27. #define MAKE_DDHRESULT( code )    MAKE_HRESULT( 1, _FACDD, code )
  28.  
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32.  
  33. /*
  34.  * GUIDS used by DirectDraw objects
  35.  */
  36. #if defined( _WIN32 ) && !defined( _NO_COM )
  37. DEFINE_GUID( CLSID_DirectDraw,            0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 );
  38. DEFINE_GUID( CLSID_DirectDrawClipper,           0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 );
  39. DEFINE_GUID( IID_IDirectDraw,            0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  40. DEFINE_GUID( IID_IDirectDraw2,                  0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 );
  41. DEFINE_GUID( IID_IDirectDrawSurface,        0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  42. DEFINE_GUID( IID_IDirectDrawSurface2,        0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 );
  43.  
  44. DEFINE_GUID( IID_IDirectDrawPalette,        0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  45. DEFINE_GUID( IID_IDirectDrawClipper,        0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  46.                  
  47. #endif
  48.  
  49. /*============================================================================
  50.  *
  51.  * DirectDraw Structures
  52.  *
  53.  * Various structures used to invoke DirectDraw.
  54.  *
  55.  *==========================================================================*/
  56.  
  57. struct IDirectDraw;
  58. struct IDirectDrawSurface;
  59. struct IDirectDrawPalette;
  60. struct IDirectDrawClipper;
  61.  
  62. typedef struct IDirectDraw            FAR *LPDIRECTDRAW;
  63. typedef struct IDirectDraw2            FAR *LPDIRECTDRAW2;
  64. typedef struct IDirectDrawSurface        FAR *LPDIRECTDRAWSURFACE;
  65. typedef struct IDirectDrawSurface2        FAR *LPDIRECTDRAWSURFACE2;
  66.  
  67. typedef struct IDirectDrawPalette        FAR *LPDIRECTDRAWPALETTE;
  68. typedef struct IDirectDrawClipper        FAR *LPDIRECTDRAWCLIPPER;
  69.  
  70. typedef struct _DDFXROP            FAR *LPDDFXROP;
  71. typedef struct _DDSURFACEDESC        FAR *LPDDSURFACEDESC;
  72.  
  73. /*
  74.  * API's
  75.  */
  76. #if (defined (WIN32) || defined( _WIN32 ) ) && !defined( _NO_COM )
  77. //#if defined( _WIN32 ) && !defined( _NO_ENUM )
  78.     typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKA)(GUID FAR *, LPSTR, LPSTR, LPVOID);
  79.     typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID);
  80.     extern HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext );
  81.     extern HRESULT WINAPI DirectDrawEnumerateA( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext );
  82.     #ifdef UNICODE
  83.     typedef LPDDENUMCALLBACKW     LPDDENUMCALLBACK;
  84.     #define DirectDrawEnumerate    DirectDrawEnumerateW
  85.     #else
  86.     typedef LPDDENUMCALLBACKA     LPDDENUMCALLBACK;
  87.     #define DirectDrawEnumerate    DirectDrawEnumerateA
  88.     #endif
  89.     extern HRESULT WINAPI DirectDrawCreate( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter );
  90.     extern HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR *lplpDDClipper, IUnknown FAR *pUnkOuter );
  91.     #ifdef WINNT
  92.     //This is the user-mode entry stub to the kernel mode procedure.
  93.     extern HRESULT NtDirectDrawCreate( GUID FAR *lpGUID, HANDLE *lplpDD, IUnknown FAR *pUnkOuter );
  94.     #endif
  95. #endif
  96.  
  97. #define REGSTR_KEY_DDHW_DESCRIPTION    "Description"
  98. #define REGSTR_KEY_DDHW_DRIVERNAME    "DriverName"
  99. #define REGSTR_PATH_DDHW        "Hardware\\DirectDrawDrivers"
  100.  
  101. #define DDCREATE_HARDWAREONLY        0x00000001l
  102. #define DDCREATE_EMULATIONONLY        0x00000002l
  103.  
  104. #ifdef WINNT
  105. typedef long HRESULT;
  106. #endif
  107.  
  108. //#ifndef WINNT
  109. typedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID);
  110. typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID);
  111. //#endif
  112. /*
  113.  * DDCOLORKEY
  114.  */
  115. typedef struct _DDCOLORKEY
  116. {
  117.     DWORD    dwColorSpaceLowValue;    // low boundary of color space that is to 
  118.                     // be treated as Color Key, inclusive
  119.     DWORD    dwColorSpaceHighValue;    // high boundary of color space that is 
  120.                     // to be treated as Color Key, inclusive
  121. } DDCOLORKEY;
  122.  
  123. typedef DDCOLORKEY FAR* LPDDCOLORKEY;
  124.  
  125. /*
  126.  * DDBLTFX
  127.  * Used to pass override information to the DIRECTDRAWSURFACE callback Blt.
  128.  */
  129. typedef struct _DDBLTFX
  130. {
  131.     DWORD    dwSize;                // size of structure
  132.     DWORD    dwDDFX;                // FX operations
  133.     DWORD    dwROP;                // Win32 raster operations
  134.     DWORD    dwDDROP;            // Raster operations new for DirectDraw
  135.     DWORD    dwRotationAngle;        // Rotation angle for blt
  136.     DWORD    dwZBufferOpCode;        // ZBuffer compares
  137.     DWORD    dwZBufferLow;            // Low limit of Z buffer
  138.     DWORD    dwZBufferHigh;            // High limit of Z buffer
  139.     DWORD    dwZBufferBaseDest;        // Destination base value
  140.     DWORD    dwZDestConstBitDepth;        // Bit depth used to specify Z constant for destination
  141.     union
  142.     {
  143.     DWORD    dwZDestConst;            // Constant to use as Z buffer for dest
  144.     LPDIRECTDRAWSURFACE lpDDSZBufferDest;    // Surface to use as Z buffer for dest
  145.     };
  146.     DWORD    dwZSrcConstBitDepth;        // Bit depth used to specify Z constant for source
  147.     union
  148.     {
  149.     DWORD    dwZSrcConst;            // Constant to use as Z buffer for src
  150.     LPDIRECTDRAWSURFACE lpDDSZBufferSrc;    // Surface to use as Z buffer for src
  151.     };
  152.     DWORD    dwAlphaEdgeBlendBitDepth;    // Bit depth used to specify constant for alpha edge blend
  153.     DWORD    dwAlphaEdgeBlend;        // Alpha for edge blending
  154.     DWORD    dwReserved;
  155.     DWORD    dwAlphaDestConstBitDepth;    // Bit depth used to specify alpha constant for destination
  156.     union
  157.     {
  158.     DWORD    dwAlphaDestConst;        // Constant to use as Alpha Channel
  159.     LPDIRECTDRAWSURFACE lpDDSAlphaDest;    // Surface to use as Alpha Channel
  160.     };
  161.     DWORD    dwAlphaSrcConstBitDepth;    // Bit depth used to specify alpha constant for source
  162.     union
  163.     {
  164.     DWORD    dwAlphaSrcConst;        // Constant to use as Alpha Channel
  165.     LPDIRECTDRAWSURFACE lpDDSAlphaSrc;    // Surface to use as Alpha Channel
  166.     };
  167.     union
  168.     {
  169.     DWORD    dwFillColor;            // color in RGB or Palettized
  170.     DWORD   dwFillDepth;                    // depth value for z-buffer
  171.     LPDIRECTDRAWSURFACE lpDDSPattern;    // Surface to use as pattern
  172.     };
  173.     DDCOLORKEY    ddckDestColorkey;        // DestColorkey override
  174.     DDCOLORKEY    ddckSrcColorkey;        // SrcColorkey override
  175. } DDBLTFX;
  176.  
  177. typedef DDBLTFX FAR* LPDDBLTFX;
  178.  
  179.  
  180. /*
  181.  * DDSCAPS
  182.  */
  183. typedef struct _DDSCAPS
  184. {
  185.     DWORD    dwCaps;        // capabilities of surface wanted
  186. } DDSCAPS;
  187.  
  188. typedef DDSCAPS FAR* LPDDSCAPS; 
  189.  
  190. /*
  191.  * DDCAPS
  192.  */
  193. #define DD_ROP_SPACE        (256/32)    // space required to store ROP array
  194.  
  195. typedef struct _DDCAPS
  196. {
  197.     DWORD    dwSize;            // size of the DDDRIVERCAPS structure
  198.     DWORD    dwCaps;            // driver specific capabilities
  199.     DWORD    dwCaps2;        // more driver specific capabilites
  200.     DWORD    dwCKeyCaps;        // color key capabilities of the surface
  201.     DWORD    dwFXCaps;        // driver specific stretching and effects capabilites
  202.     DWORD    dwFXAlphaCaps;        // alpha driver specific capabilities
  203.     DWORD    dwPalCaps;        // palette capabilities
  204.     DWORD    dwSVCaps;        // stereo vision capabilities
  205.     DWORD    dwAlphaBltConstBitDepths;    // DDBD_2,4,8
  206.     DWORD    dwAlphaBltPixelBitDepths;    // DDBD_1,2,4,8
  207.     DWORD    dwAlphaBltSurfaceBitDepths;    // DDBD_1,2,4,8
  208.     DWORD    dwAlphaOverlayConstBitDepths;    // DDBD_2,4,8
  209.     DWORD    dwAlphaOverlayPixelBitDepths;    // DDBD_1,2,4,8
  210.     DWORD    dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8
  211.     DWORD    dwZBufferBitDepths;        // DDBD_8,16,24,32
  212.     DWORD    dwVidMemTotal;        // total amount of video memory
  213.     DWORD    dwVidMemFree;        // amount of free video memory
  214.     DWORD    dwMaxVisibleOverlays;    // maximum number of visible overlays
  215.     DWORD    dwCurrVisibleOverlays;    // current number of visible overlays
  216.     DWORD    dwNumFourCCCodes;    // number of four cc codes
  217.     DWORD    dwAlignBoundarySrc;    // source rectangle alignment
  218.     DWORD    dwAlignSizeSrc;        // source rectangle byte size
  219.     DWORD    dwAlignBoundaryDest;    // dest rectangle alignment
  220.     DWORD    dwAlignSizeDest;    // dest rectangle byte size
  221.     DWORD    dwAlignStrideAlign;    // stride alignment
  222.     DWORD    dwRops[DD_ROP_SPACE];    // ROPS supported
  223.     DDSCAPS    ddsCaps;        // DDSCAPS structure has all the general capabilities
  224.     DWORD    dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  225.     DWORD    dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  226.     DWORD    dwMinLiveVideoStretch;    // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  227.     DWORD    dwMaxLiveVideoStretch;    // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  228.     DWORD    dwMinHwCodecStretch;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  229.     DWORD    dwMaxHwCodecStretch;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  230.     DWORD    dwReserved1;        // reserved
  231.     DWORD    dwReserved2;        // reserved
  232.     DWORD    dwReserved3;        // reserved
  233.     DWORD    dwSVBCaps;        // driver specific capabilities for System->Vmem blts
  234.     DWORD    dwSVBCKeyCaps;        // driver color key capabilities for System->Vmem blts
  235.     DWORD    dwSVBFXCaps;        // driver FX capabilities for System->Vmem blts
  236.     DWORD    dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts
  237.     DWORD    dwVSBCaps;        // driver specific capabilities for Vmem->System blts
  238.     DWORD    dwVSBCKeyCaps;        // driver color key capabilities for Vmem->System blts
  239.     DWORD    dwVSBFXCaps;        // driver FX capabilities for Vmem->System blts
  240.     DWORD    dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts
  241.     DWORD    dwSSBCaps;        // driver specific capabilities for System->System blts
  242.     DWORD    dwSSBCKeyCaps;        // driver color key capabilities for System->System blts
  243.     DWORD    dwSSBFXCaps;        // driver FX capabilities for System->System blts
  244.     DWORD    dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts
  245.     DWORD    dwReserved4;        // reserved
  246.     DWORD    dwReserved5;        // reserved
  247.     DWORD    dwReserved6;        // reserved
  248. } DDCAPS;
  249.  
  250. typedef DDCAPS FAR* LPDDCAPS;
  251.  
  252.  
  253.  
  254. /*
  255.  * DDPIXELFORMAT
  256.  */
  257. typedef struct _DDPIXELFORMAT
  258. {
  259.     DWORD    dwSize;            // size of structure
  260.     DWORD    dwFlags;        // pixel format flags
  261.     DWORD    dwFourCC;        // (FOURCC code)
  262.     union
  263.     {
  264.     DWORD    dwRGBBitCount;        // how many bits per pixel (BD_4,8,16,24,32)
  265.     DWORD    dwYUVBitCount;        // how many bits per pixel (BD_4,8,16,24,32)
  266.     DWORD    dwZBufferBitDepth;    // how many bits for z buffers (BD_8,16,24,32)
  267.     DWORD    dwAlphaBitDepth;    // how many bits for alpha channels (BD_1,2,4,8)
  268.     };
  269.     union
  270.     {
  271.     DWORD    dwRBitMask;        // mask for red bit
  272.     DWORD    dwYBitMask;        // mask for Y bits
  273.     };
  274.     union
  275.     {
  276.     DWORD    dwGBitMask;        // mask for green bits
  277.     DWORD    dwUBitMask;        // mask for U bits
  278.     };
  279.     union
  280.     {
  281.     DWORD    dwBBitMask;        // mask for blue bits
  282.     DWORD    dwVBitMask;        // mask for V bits
  283.     };
  284.     union
  285.     {
  286.     DWORD    dwRGBAlphaBitMask;    // mask for alpha channel
  287.     DWORD    dwYUVAlphaBitMask;    // mask for alpha channel
  288.     };
  289. } DDPIXELFORMAT;
  290.  
  291. typedef DDPIXELFORMAT FAR* LPDDPIXELFORMAT;
  292.  
  293. /*
  294.  * DDOVERLAYFX
  295.  */
  296. typedef struct _DDOVERLAYFX
  297. {
  298.     DWORD    dwSize;                // size of structure
  299.     DWORD    dwAlphaEdgeBlendBitDepth;    // Bit depth used to specify constant for alpha edge blend
  300.     DWORD    dwAlphaEdgeBlend;        // Constant to use as alpha for edge blend
  301.     DWORD    dwReserved;
  302.     DWORD    dwAlphaDestConstBitDepth;    // Bit depth used to specify alpha constant for destination
  303.     union
  304.     {
  305.     DWORD    dwAlphaDestConst;        // Constant to use as alpha channel for dest
  306.     LPDIRECTDRAWSURFACE lpDDSAlphaDest;    // Surface to use as alpha channel for dest
  307.     };
  308.     DWORD    dwAlphaSrcConstBitDepth;    // Bit depth used to specify alpha constant for source
  309.     union
  310.     {
  311.     DWORD    dwAlphaSrcConst;        // Constant to use as alpha channel for src
  312.     LPDIRECTDRAWSURFACE lpDDSAlphaSrc;    // Surface to use as alpha channel for src
  313.     };
  314.     DDCOLORKEY    dckDestColorkey;        // DestColorkey override
  315.     DDCOLORKEY    dckSrcColorkey;            // DestColorkey override
  316.     DWORD       dwDDFX;                         // Overlay FX
  317.     DWORD    dwFlags;            // flags
  318. } DDOVERLAYFX;
  319.  
  320. typedef DDOVERLAYFX FAR *LPDDOVERLAYFX;
  321.  
  322. /*
  323.  * DDBLTBATCH: BltBatch entry structure
  324.  */
  325. typedef struct _DDBLTBATCH
  326. {
  327.     LPRECT        lprDest;
  328.     LPDIRECTDRAWSURFACE    lpDDSSrc;
  329.     LPRECT        lprSrc;
  330.     DWORD        dwFlags;
  331.     LPDDBLTFX        lpDDBltFx;
  332. } DDBLTBATCH;
  333.  
  334. typedef DDBLTBATCH FAR * LPDDBLTBATCH;
  335.  
  336. /*
  337.  * callbacks
  338.  */
  339. typedef DWORD    (FAR PASCAL *LPCLIPPERCALLBACK)(LPDIRECTDRAWCLIPPER lpDDClipper, HWND hWnd, DWORD code, LPVOID lpContext );
  340. #ifdef STREAMING
  341. typedef DWORD    (FAR PASCAL *LPSURFACESTREAMINGCALLBACK)(DWORD);
  342. #endif
  343.  
  344.  
  345. /*
  346.  * INTERACES FOLLOW:
  347.  *    IDirectDraw
  348.  *    IDirectDrawClipper
  349.  *    IDirectDrawPalette
  350.  *    IDirectDrawSurface
  351.  */
  352.  
  353. /*
  354.  * IDirectDraw 
  355.  */
  356. #if defined( _WIN32 ) && !defined( _NO_COM )
  357. #undef INTERFACE
  358. #define INTERFACE IDirectDraw
  359. DECLARE_INTERFACE_( IDirectDraw, IUnknown )
  360. {
  361.     /*** IUnknown methods ***/
  362.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  363.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  364.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  365.     /*** IDirectDraw methods ***/
  366.     STDMETHOD(Compact)(THIS) PURE;
  367.     STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;
  368.     STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;
  369.     STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE;
  370.     STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE;
  371.     STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;
  372.     STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;
  373.     STDMETHOD(FlipToGDISurface)(THIS) PURE;
  374.     STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
  375.     STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;
  376.     STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
  377.     STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;
  378.     STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
  379.     STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
  380.     STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
  381.     STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
  382.     STDMETHOD(RestoreDisplayMode)(THIS) PURE;
  383.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
  384.     STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD) PURE;
  385.     STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
  386. };
  387.  
  388. #if !defined(__cplusplus) || defined(CINTERFACE)
  389. #define IDirectDraw_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
  390. #define IDirectDraw_AddRef(p)                       (p)->lpVtbl->AddRef(p)
  391. #define IDirectDraw_Release(p)                      (p)->lpVtbl->Release(p)
  392. #define IDirectDraw_Compact(p)                      (p)->lpVtbl->Compact(p)
  393. #define IDirectDraw_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)
  394. #define IDirectDraw_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)
  395. #define IDirectDraw_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)
  396. #define IDirectDraw_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)
  397. #define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)
  398. #define IDirectDraw_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)
  399. #define IDirectDraw_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)
  400. #define IDirectDraw_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)
  401. #define IDirectDraw_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)
  402. #define IDirectDraw_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)
  403. #define IDirectDraw_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)
  404. #define IDirectDraw_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)
  405. #define IDirectDraw_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)
  406. #define IDirectDraw_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)
  407. #define IDirectDraw_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)
  408. #define IDirectDraw_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)
  409. #define IDirectDraw_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)
  410. #define IDirectDraw_SetDisplayMode(p, a, b, c)      (p)->lpVtbl->SetDisplayMode(p, a, b, c)
  411. #define IDirectDraw_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)
  412. #endif
  413.  
  414. #endif
  415.  
  416. #if defined( _WIN32 ) && !defined( _NO_COM )
  417. #undef INTERFACE
  418. #define INTERFACE IDirectDraw2
  419. DECLARE_INTERFACE_( IDirectDraw2, IUnknown )
  420. {
  421.     /*** IUnknown methods ***/
  422.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  423.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  424.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  425.     /*** IDirectDraw methods ***/
  426.     STDMETHOD(Compact)(THIS) PURE;
  427.     STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;
  428.     STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;
  429.     STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE;
  430.     STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE;
  431.     STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;
  432.     STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;
  433.     STDMETHOD(FlipToGDISurface)(THIS) PURE;
  434.     STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
  435.     STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;
  436.     STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
  437.     STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;
  438.     STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
  439.     STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
  440.     STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
  441.     STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
  442.     STDMETHOD(RestoreDisplayMode)(THIS) PURE;
  443.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
  444.     STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;
  445.     STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
  446.     /*** Added in the v2 interface ***/
  447.     STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE;
  448. };
  449. #if !defined(__cplusplus) || defined(CINTERFACE)
  450. #define IDirectDraw2_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
  451. #define IDirectDraw2_AddRef(p)                       (p)->lpVtbl->AddRef(p)
  452. #define IDirectDraw2_Release(p)                      (p)->lpVtbl->Release(p)
  453. #define IDirectDraw2_Compact(p)                      (p)->lpVtbl->Compact(p)
  454. #define IDirectDraw2_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)
  455. #define IDirectDraw2_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)
  456. #define IDirectDraw2_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)
  457. #define IDirectDraw2_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)
  458. #define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)
  459. #define IDirectDraw2_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)
  460. #define IDirectDraw2_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)
  461. #define IDirectDraw2_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)
  462. #define IDirectDraw2_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)
  463. #define IDirectDraw2_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)
  464. #define IDirectDraw2_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)
  465. #define IDirectDraw2_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)
  466. #define IDirectDraw2_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)
  467. #define IDirectDraw2_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)
  468. #define IDirectDraw2_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)
  469. #define IDirectDraw2_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)
  470. #define IDirectDraw2_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)
  471. #define IDirectDraw2_SetDisplayMode(p, a, b, c, d)   (p)->lpVtbl->SetDisplayMode(p, a, b, c, d)
  472. #define IDirectDraw2_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)
  473. #define IDirectDraw2_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)
  474. #endif
  475.  
  476. #endif
  477.  
  478. /*
  479.  * IDirectDrawPalette
  480.  */
  481. #if defined( _WIN32 ) && !defined( _NO_COM )
  482. #undef INTERFACE
  483. #define INTERFACE IDirectDrawPalette
  484. DECLARE_INTERFACE_( IDirectDrawPalette, IUnknown )
  485. {
  486.     /*** IUnknown methods ***/
  487.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  488.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  489.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  490.     /*** IDirectDrawPalette methods ***/
  491.     STDMETHOD(GetCaps)(THIS_ LPDWORD) PURE;
  492.     STDMETHOD(GetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE;
  493.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE;
  494.     STDMETHOD(SetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE;
  495. };
  496.  
  497. #if !defined(__cplusplus) || defined(CINTERFACE)
  498. #define IDirectDrawPalette_QueryInterface(p, a, b)      (p)->lpVtbl->QueryInterface(p, a, b)
  499. #define IDirectDrawPalette_AddRef(p)                    (p)->lpVtbl->AddRef(p)
  500. #define IDirectDrawPalette_Release(p)                   (p)->lpVtbl->Release(p)
  501. #define IDirectDrawPalette_GetCaps(p, a)                (p)->lpVtbl->GetCaps(p, a)
  502. #define IDirectDrawPalette_GetEntries(p, a, b, c, d)    (p)->lpVtbl->GetEntries(p, a, b, c, d)
  503. #define IDirectDrawPalette_Initialize(p, a, b, c)       (p)->lpVtbl->Initialize(p, a, b, c)
  504. #define IDirectDrawPalette_SetEntries(p, a, b, c, d)    (p)->lpVtbl->SetEntries(p, a, b, c, d)
  505. #endif
  506.  
  507. #endif
  508.  
  509. /*
  510.  * IDirectDrawClipper
  511.  */
  512. #if defined( _WIN32 ) && !defined( _NO_COM )
  513. #undef INTERFACE
  514. #define INTERFACE IDirectDrawClipper
  515. DECLARE_INTERFACE_( IDirectDrawClipper, IUnknown )
  516. {
  517.     /*** IUnknown methods ***/
  518.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  519.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  520.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  521.     /*** IDirectDrawClipper methods ***/
  522.     STDMETHOD(GetClipList)(THIS_ LPRECT, LPRGNDATA, LPDWORD) PURE;
  523.     STDMETHOD(GetHWnd)(THIS_ HWND FAR *) PURE;
  524.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD) PURE;
  525.     STDMETHOD(IsClipListChanged)(THIS_ BOOL FAR *) PURE;
  526.     STDMETHOD(SetClipList)(THIS_ LPRGNDATA,DWORD) PURE;
  527.     STDMETHOD(SetHWnd)(THIS_ DWORD, HWND ) PURE;
  528. };
  529.  
  530. #if !defined(__cplusplus) || defined(CINTERFACE)
  531. #define IDirectDrawClipper_QueryInterface(p, a, b)  (p)->lpVtbl->QueryInterface(p, a, b)
  532. #define IDirectDrawClipper_AddRef(p)                (p)->lpVtbl->AddRef(p)
  533. #define IDirectDrawClipper_Release(p)               (p)->lpVtbl->Release(p)
  534. #define IDirectDrawClipper_GetClipList(p, a, b, c)  (p)->lpVtbl->GetClipList(p, a, b, c)
  535. #define IDirectDrawClipper_GetHWnd(p, a)            (p)->lpVtbl->GetHWnd(p, a)
  536. #define IDirectDrawClipper_Initialize(p, a, b)      (p)->lpVtbl->Initialize(p, a, b)
  537. #define IDirectDrawClipper_IsClipListChanged(p, a)  (p)->lpVtbl->IsClipListChanged(p, a)
  538. #define IDirectDrawClipper_SetClipList(p, a, b)     (p)->lpVtbl->SetClipList(p, a, b)
  539. #define IDirectDrawClipper_SetHWnd(p, a, b)         (p)->lpVtbl->SetHWnd(p, a, b)
  540. #endif
  541.  
  542. #endif
  543.  
  544. /*
  545.  * IDirectDrawSurface and related interfaces
  546.  */
  547. #if defined( _WIN32 ) && !defined( _NO_COM )
  548. #undef INTERFACE
  549. #define INTERFACE IDirectDrawSurface
  550. DECLARE_INTERFACE_( IDirectDrawSurface, IUnknown )
  551. {
  552.     /*** IUnknown methods ***/
  553.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  554.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  555.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  556.     /*** IDirectDrawSurface methods ***/
  557.     STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE;
  558.     STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
  559.     STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX) PURE;
  560.     STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
  561.     STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD) PURE;
  562.     STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE) PURE;
  563.     STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
  564.     STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
  565.     STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE;
  566.     STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE FAR *) PURE;
  567.     STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
  568.     STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
  569.     STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
  570.     STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  571.     STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
  572.     STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
  573.     STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
  574.     STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
  575.     STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
  576.     STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
  577.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
  578.     STDMETHOD(IsLost)(THIS) PURE;
  579.     STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
  580.     STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
  581.     STDMETHOD(Restore)(THIS) PURE;
  582.     STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
  583.     STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  584.     STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
  585.     STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
  586.     STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
  587.     STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
  588.     STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
  589.     STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE) PURE;
  590. };
  591.  
  592. #if !defined(__cplusplus) || defined(CINTERFACE)
  593. #define IDirectDrawSurface_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
  594. #define IDirectDrawSurface_AddRef(p)                    (p)->lpVtbl->AddRef(p)
  595. #define IDirectDrawSurface_Release(p)                   (p)->lpVtbl->Release(p)
  596. #define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
  597. #define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
  598. #define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
  599. #define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
  600. #define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
  601. #define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
  602. #define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
  603. #define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
  604. #define IDirectDrawSurface_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
  605. #define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
  606. #define IDirectDrawSurface_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
  607. #define IDirectDrawSurface_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
  608. #define IDirectDrawSurface_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
  609. #define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
  610. #define IDirectDrawSurface_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
  611. #define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
  612. #define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
  613. #define IDirectDrawSurface_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
  614. #define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
  615. #define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
  616. #define IDirectDrawSurface_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
  617. #define IDirectDrawSurface_IsLost(p)                    (p)->lpVtbl->IsLost(p)
  618. #define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
  619. #define IDirectDrawSurface_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
  620. #define IDirectDrawSurface_Restore(p)                   (p)->lpVtbl->Restore(p)
  621. #define IDirectDrawSurface_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
  622. #define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
  623. #define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
  624. #define IDirectDrawSurface_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
  625. #define IDirectDrawSurface_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
  626. #define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
  627. #define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
  628. #define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
  629. #endif
  630.  
  631. /*
  632.  * IDirectDrawSurface2 and related interfaces
  633.  */
  634. #undef INTERFACE
  635. #define INTERFACE IDirectDrawSurface2
  636. DECLARE_INTERFACE_( IDirectDrawSurface2, IUnknown )
  637. {
  638.     /*** IUnknown methods ***/
  639.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
  640.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  641.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  642.     /*** IDirectDrawSurface methods ***/
  643.     STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE2) PURE;
  644.     STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
  645.     STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX) PURE;
  646.     STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
  647.     STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD) PURE;
  648.     STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE2) PURE;
  649.     STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
  650.     STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
  651.     STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE2, DWORD) PURE;
  652.     STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *) PURE;
  653.     STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
  654.     STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
  655.     STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;
  656.     STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  657.     STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;
  658.     STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
  659.     STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
  660.     STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;
  661.     STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
  662.     STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
  663.     STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
  664.     STDMETHOD(IsLost)(THIS) PURE;
  665.     STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
  666.     STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
  667.     STDMETHOD(Restore)(THIS) PURE;
  668.     STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
  669.     STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
  670.     STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
  671.     STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
  672.     STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
  673.     STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
  674.     STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
  675.     STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE2) PURE;
  676.     /*** Added in the v2 interface ***/
  677.     STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE;
  678.     STDMETHOD(PageLock)(THIS_ DWORD) PURE;
  679.     STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;
  680. };
  681.  
  682. #if !defined(__cplusplus) || defined(CINTERFACE)
  683. #define IDirectDrawSurface2_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
  684. #define IDirectDrawSurface2_AddRef(p)                    (p)->lpVtbl->AddRef(p)
  685. #define IDirectDrawSurface2_Release(p)                   (p)->lpVtbl->Release(p)
  686. #define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
  687. #define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
  688. #define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
  689. #define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
  690. #define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
  691. #define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
  692. #define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
  693. #define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
  694. #define IDirectDrawSurface2_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
  695. #define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
  696. #define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
  697. #define IDirectDrawSurface2_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
  698. #define IDirectDrawSurface2_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
  699. #define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
  700. #define IDirectDrawSurface2_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
  701. #define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
  702. #define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
  703. #define IDirectDrawSurface2_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
  704. #define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
  705. #define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
  706. #define IDirectDrawSurface2_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
  707. #define IDirectDrawSurface2_IsLost(p)                    (p)->lpVtbl->IsLost(p)
  708. #define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
  709. #define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
  710. #define IDirectDrawSurface2_Restore(p)                   (p)->lpVtbl->Restore(p)
  711. #define IDirectDrawSurface2_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
  712. #define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
  713. #define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
  714. #define IDirectDrawSurface2_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
  715. #define IDirectDrawSurface2_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
  716. #define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
  717. #define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
  718. #define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
  719. #define IDirectDrawSurface2_GetDDInterface(p,a)         (p)->lpVtbl->GetDDInterface(p,a)
  720. #define IDirectDrawSurface2_PageLock(p,a)         (p)->lpVtbl->PageLock(p,a)
  721. #define IDirectDrawSurface2_PageUnlock(p,a)         (p)->lpVtbl->PageUnlock(p,a)
  722. #endif
  723.  
  724.  
  725. #endif
  726.  
  727.  
  728. /*
  729.  * DDSURFACEDESC
  730.  */
  731. typedef struct _DDSURFACEDESC
  732. {
  733.     DWORD        dwSize;            // size of the DDSURFACEDESC structure
  734.     DWORD        dwFlags;        // determines what fields are valid
  735.     DWORD        dwHeight;        // height of surface to be created
  736.     DWORD        dwWidth;        // width of input surface
  737.     LONG        lPitch;            // distance to start of next line (return value only)
  738.     DWORD        dwBackBufferCount;    // number of back buffers requested
  739.     union
  740.     {
  741.         DWORD           dwMipMapCount;          // number of mip-map levels requested
  742.     DWORD        dwZBufferBitDepth;    // depth of Z buffer requested
  743.     DWORD        dwRefreshRate;        // refresh rate (used when display mode is described)
  744.     };
  745.     DWORD        dwAlphaBitDepth;    // depth of alpha buffer requested
  746.     DWORD        dwReserved;        // reserved
  747.     LPVOID        lpSurface;        // pointer to the associated surface memory
  748.     DDCOLORKEY        ddckCKDestOverlay;    // color key for destination overlay use
  749.     DDCOLORKEY        ddckCKDestBlt;        // color key for destination blt use
  750.     DDCOLORKEY        ddckCKSrcOverlay;    // color key for source overlay use
  751.     DDCOLORKEY        ddckCKSrcBlt;        // color key for source blt use
  752.     DDPIXELFORMAT    ddpfPixelFormat;    // pixel format description of the surface
  753.     DDSCAPS        ddsCaps;        // direct draw surface capabilities
  754. } DDSURFACEDESC;
  755.  
  756. /*
  757.  * ddsCaps field is valid.
  758.  */
  759. #define DDSD_CAPS        0x00000001l    // default
  760.  
  761. /*
  762.  * dwHeight field is valid.
  763.  */
  764. #define DDSD_HEIGHT        0x00000002l
  765.  
  766. /*
  767.  * dwWidth field is valid.
  768.  */
  769. #define DDSD_WIDTH        0x00000004l
  770.  
  771. /*
  772.  * lPitch is valid.
  773.  */
  774. #define DDSD_PITCH        0x00000008l
  775.  
  776. /*
  777.  * dwBackBufferCount is valid.
  778.  */
  779. #define DDSD_BACKBUFFERCOUNT    0x00000020l
  780.  
  781. /*
  782.  * dwZBufferBitDepth is valid.
  783.  */
  784. #define DDSD_ZBUFFERBITDEPTH    0x00000040l
  785.  
  786. /*
  787.  * dwAlphaBitDepth is valid.
  788.  */
  789. #define DDSD_ALPHABITDEPTH    0x00000080l
  790.  
  791.  
  792.  
  793. /*
  794.  * ddpfPixelFormat is valid.
  795.  */
  796. #define DDSD_PIXELFORMAT    0x00001000l
  797.  
  798. /*
  799.  * ddckCKDestOverlay is valid.
  800.  */
  801. #define DDSD_CKDESTOVERLAY    0x00002000l
  802.  
  803. /*
  804.  * ddckCKDestBlt is valid.
  805.  */
  806. #define DDSD_CKDESTBLT        0x00004000l
  807.  
  808. /*
  809.  * ddckCKSrcOverlay is valid.
  810.  */
  811. #define DDSD_CKSRCOVERLAY    0x00008000l
  812.  
  813. /*
  814.  * ddckCKSrcBlt is valid.
  815.  */
  816. #define DDSD_CKSRCBLT        0x00010000l
  817.  
  818. /*
  819.  * dwMipMapCount is valid.
  820.  */
  821. #define DDSD_MIPMAPCOUNT        0x00020000l
  822.  
  823.  /*
  824.   * dwRefreshRate is valid
  825.   */
  826. #define DDSD_REFRESHRATE    0x00040000l
  827.  
  828.  
  829. /*
  830.  * All input fields are valid. 
  831.  */
  832. #define DDSD_ALL        0x0007f9eel
  833.  
  834.  
  835. /*============================================================================
  836.  *
  837.  * Direct Draw Capability Flags
  838.  *
  839.  * These flags are used to describe the capabilities of a given Surface.
  840.  * All flags are bit flags. 
  841.  *
  842.  *==========================================================================*/
  843.  
  844. /****************************************************************************
  845.  *
  846.  * DIRECTDRAWSURFACE CAPABILITY FLAGS
  847.  *
  848.  ****************************************************************************/
  849. /*
  850.  * This bit currently has no meaning.
  851.  */
  852. #define DDSCAPS_3D                0x00000001l
  853.  
  854. /*
  855.  * Indicates that this surface contains alpha information.  The pixel
  856.  * format must be interrogated to determine whether this surface
  857.  * contains only alpha information or alpha information interlaced
  858.  * with pixel color data (e.g. RGBA or YUVA).
  859.  */
  860. #define DDSCAPS_ALPHA                0x00000002l
  861.  
  862. /*
  863.  * Indicates that this surface is a backbuffer.     It is generally
  864.  * set by CreateSurface when the DDSCAPS_FLIP capability bit is set.
  865.  * It indicates that this surface is THE back buffer of a surface
  866.  * flipping structure.    DirectDraw supports N surfaces in a
  867.  * surface flipping structure.    Only the surface that immediately
  868.  * precedeces the DDSCAPS_FRONTBUFFER has this capability bit set.
  869.  * The other surfaces are identified as back buffers by the presence
  870.  * of the DDSCAPS_FLIP capability, their attachment order, and the
  871.  * absence of the DDSCAPS_FRONTBUFFER and DDSCAPS_BACKBUFFER
  872.  * capabilities.  The bit is sent to CreateSurface when a standalone
  873.  * back buffer is being created.  This surface could be attached to
  874.  * a front buffer and/or back buffers to form a flipping surface
  875.  * structure after the CreateSurface call.  See AddAttachments for
  876.  * a detailed description of the behaviors in this case.
  877.  */
  878. #define DDSCAPS_BACKBUFFER            0x00000004l
  879.  
  880. /*
  881.  * Indicates a complex surface structure is being described.  A
  882.  * complex surface structure results in the creation of more than
  883.  * one surface.     The additional surfaces are attached to the root
  884.  * surface.  The complex structure can only be destroyed by
  885.  * destroying the root.
  886.  */
  887. #define DDSCAPS_COMPLEX                0x00000008l
  888.  
  889. /*
  890.  * Indicates that this surface is a part of a surface flipping structure.
  891.  * When it is passed to CreateSurface the DDSCAPS_FRONTBUFFER and
  892.  * DDSCAP_BACKBUFFER bits are not set.    They are set by CreateSurface
  893.  * on the resulting creations.    The dwBackBufferCount field in the
  894.  * DDSURFACEDESC structure must be set to at least 1 in order for
  895.  * the CreateSurface call to succeed.  The DDSCAPS_COMPLEX capability
  896.  * must always be set with creating multiple surfaces through CreateSurface.
  897.  */
  898. #define DDSCAPS_FLIP                0x00000010l
  899.  
  900. /*
  901.  * Indicates that this surface is THE front buffer of a surface flipping
  902.  * structure.  It is generally set by CreateSurface when the DDSCAPS_FLIP
  903.  * capability bit is set.
  904.  * If this capability is sent to CreateSurface then a standalonw front buffer
  905.  * is created.    This surface will not have the DDSCAPS_FLIP capability.
  906.  * It can be attached to other back buffers to form a flipping structure.
  907.  * See AddAttachments for a detailed description of the behaviors in this
  908.  * case.
  909.  */
  910. #define DDSCAPS_FRONTBUFFER            0x00000020l
  911.  
  912. /*
  913.  * Indicates that this surface is any offscreen surface that is not an overlay,
  914.  * texture, zbuffer, front buffer, back buffer, or alpha surface.  It is used
  915.  * to identify plain vanilla surfaces.
  916.  */
  917. #define DDSCAPS_OFFSCREENPLAIN            0x00000040l
  918.  
  919. /*
  920.  * Indicates that this surface is an overlay.  It may or may not be directly visible
  921.  * depending on whether or not it is currently being overlayed onto the primary 
  922.  * surface.  DDSCAPS_VISIBLE can be used to determine whether or not it is being 
  923.  * overlayed at the moment. 
  924.  */
  925. #define DDSCAPS_OVERLAY                0x00000080l
  926.  
  927. /*
  928.  * Indicates that unique DirectDrawPalette objects can be created and
  929.  * attached to this surface.
  930.  */
  931. #define DDSCAPS_PALETTE                0x00000100l
  932.  
  933. /*
  934.  * Indicates that this surface is the primary surface.    The primary
  935.  * surface represents what the user is seeing at the moment.
  936.  */
  937. #define DDSCAPS_PRIMARYSURFACE            0x00000200l
  938.  
  939. /*
  940.  * Indicates that this surface is the primary surface for the left eye.
  941.  * The primary surface for the left eye represents what the user is seeing
  942.  * at the moment with the users left eye.  When this surface is created the
  943.  * DDSCAPS_PRIMARYSURFACE represents what the user is seeing with the users
  944.  * right eye.
  945.  */
  946. #define DDSCAPS_PRIMARYSURFACELEFT        0x00000400l
  947.  
  948. /*
  949.  * Indicates that this surface memory was allocated in system memory
  950.  */
  951. #define DDSCAPS_SYSTEMMEMORY            0x00000800l
  952.  
  953. /*
  954.  * Indicates that this surface can be used as a 3D texture.  It does not
  955.  * indicate whether or not the surface is being used for that purpose.
  956.  */
  957. #define DDSCAPS_TEXTURE                    0x00001000l
  958.  
  959. /*
  960.  * Indicates that a surface may be a destination for 3D rendering.  This
  961.  * bit must be set in order to query for a Direct3D Device Interface 
  962.  * from this surface.
  963.  */
  964. #define DDSCAPS_3DDEVICE                        0x00002000l
  965.  
  966. /*
  967.  * Indicates that this surface exists in video memory.
  968.  */
  969. #define DDSCAPS_VIDEOMEMORY            0x00004000l
  970.  
  971. /*
  972.  * Indicates that changes made to this surface are immediately visible.     
  973.  * It is always set for the primary surface and is set for overlays while
  974.  * they are being overlayed and texture maps while they are being textured.
  975.  */
  976. #define DDSCAPS_VISIBLE                0x00008000l
  977.  
  978. /*
  979.  * Indicates that only writes are permitted to the surface.  Read accesses 
  980.  * from the surface may or may not generate a protection fault, but the 
  981.  * results of a read from this surface will not be meaningful.    READ ONLY.
  982.  */
  983. #define DDSCAPS_WRITEONLY            0x00010000l
  984.  
  985. /*
  986.  * Indicates that this surface is a z buffer. A z buffer does not contain
  987.  * displayable information.  Instead it contains bit depth information that is
  988.  * used to determine which pixels are visible and which are obscured. 
  989.  */
  990. #define DDSCAPS_ZBUFFER                0x00020000l
  991.  
  992. /*
  993.  * Indicates surface will have a DC associated long term
  994.  */
  995. #define DDSCAPS_OWNDC                0x00040000l
  996.  
  997. /*
  998.  * Indicates surface should be able to receive live video
  999.  */
  1000. #define DDSCAPS_LIVEVIDEO            0x00080000l
  1001.  
  1002. /*
  1003.  * Indicates surface should be able to have a stream decompressed
  1004.  * to it by the hardware.
  1005.  */
  1006. #define DDSCAPS_HWCODEC                0x00100000l
  1007.  
  1008. /*
  1009.  * Surface is a 320x200 or 320x240 ModeX surface
  1010.  */
  1011. #define DDSCAPS_MODEX                0x00200000l
  1012.  
  1013. /*
  1014.  * Indicates surface is one level of a mip-map. This surface will
  1015.  * be attached to other DDSCAPS_MIPMAP surfaces to form the mip-map.
  1016.  * This can be done explicitly, by creating a number of surfaces and
  1017.  * attaching them with AddAttachedSurface or by implicitly by CreateSurface.
  1018.  * If this bit is set then DDSCAPS_TEXTURE must also be set.
  1019.  */
  1020. #define DDSCAPS_MIPMAP                          0x00400000l
  1021.  
  1022.  
  1023.  
  1024. /*
  1025.  * Indicates that memory for the surface is not allocated until the surface
  1026.  * is loaded (via the Direct3D texture Load() function).
  1027.  */
  1028. #define DDSCAPS_ALLOCONLOAD                     0x04000000l
  1029.  
  1030.  
  1031.  
  1032.  /****************************************************************************
  1033.  *
  1034.  * DIRECTDRAW DRIVER CAPABILITY FLAGS
  1035.  *
  1036.  ****************************************************************************/
  1037.  
  1038. /*
  1039.  * Display hardware has 3D acceleration.
  1040.  */
  1041. #define DDCAPS_3D            0x00000001l
  1042.  
  1043. /*
  1044.  * Indicates that DirectDraw will support only dest rectangles that are aligned
  1045.  * on DIRECTDRAWCAPS.dwAlignBoundaryDest boundaries of the surface, respectively.
  1046.  * READ ONLY.
  1047.  */
  1048. #define DDCAPS_ALIGNBOUNDARYDEST    0x00000002l
  1049.  
  1050. /*
  1051.  * Indicates that DirectDraw will support only source rectangles  whose sizes in 
  1052.  * BYTEs are DIRECTDRAWCAPS.dwAlignSizeDest multiples, respectively.  READ ONLY.
  1053.  */
  1054. #define DDCAPS_ALIGNSIZEDEST        0x00000004l
  1055. /*
  1056.  * Indicates that DirectDraw will support only source rectangles that are aligned
  1057.  * on DIRECTDRAWCAPS.dwAlignBoundarySrc boundaries of the surface, respectively.
  1058.  * READ ONLY.
  1059.  */
  1060. #define DDCAPS_ALIGNBOUNDARYSRC        0x00000008l
  1061.  
  1062. /*
  1063.  * Indicates that DirectDraw will support only source rectangles  whose sizes in 
  1064.  * BYTEs are DIRECTDRAWCAPS.dwAlignSizeSrc multiples, respectively.  READ ONLY.
  1065.  */
  1066. #define DDCAPS_ALIGNSIZESRC        0x00000010l
  1067.  
  1068. /*
  1069.  * Indicates that DirectDraw will create video memory surfaces that have a stride 
  1070.  * alignment equal to DIRECTDRAWCAPS.dwAlignStride.  READ ONLY.
  1071.  */
  1072. #define DDCAPS_ALIGNSTRIDE        0x00000020l
  1073.  
  1074. /*
  1075.  * Display hardware is capable of blt operations.
  1076.  */
  1077. #define DDCAPS_BLT            0x00000040l
  1078.  
  1079. /*
  1080.  * Display hardware is capable of asynchronous blt operations.
  1081.  */
  1082. #define DDCAPS_BLTQUEUE            0x00000080l
  1083.  
  1084. /*
  1085.  * Display hardware is capable of color space conversions during the blt operation.
  1086.  */
  1087. #define DDCAPS_BLTFOURCC        0x00000100l
  1088.  
  1089. /*
  1090.  * Display hardware is capable of stretching during blt operations.
  1091.  */
  1092. #define DDCAPS_BLTSTRETCH        0x00000200l
  1093.  
  1094. /*
  1095.  * Display hardware is shared with GDI.
  1096.  */
  1097. #define DDCAPS_GDI            0x00000400l
  1098.  
  1099. /*
  1100.  * Display hardware can overlay.
  1101.  */
  1102. #define DDCAPS_OVERLAY            0x00000800l
  1103.  
  1104. /*
  1105.  * Set if display hardware supports overlays but can not clip them.
  1106.  */
  1107. #define DDCAPS_OVERLAYCANTCLIP        0x00001000l
  1108.  
  1109. /*
  1110.  * Indicates that overlay hardware is capable of color space conversions during
  1111.  * the overlay operation.
  1112.  */
  1113. #define DDCAPS_OVERLAYFOURCC        0x00002000l
  1114.  
  1115. /*
  1116.  * Indicates that stretching can be done by the overlay hardware.
  1117.  */
  1118. #define DDCAPS_OVERLAYSTRETCH        0x00004000l
  1119.  
  1120. /*
  1121.  * Indicates that unique DirectDrawPalettes can be created for DirectDrawSurfaces
  1122.  * other than the primary surface.
  1123.  */
  1124. #define DDCAPS_PALETTE            0x00008000l
  1125.  
  1126. /*
  1127.  * Indicates that palette changes can be syncd with the veritcal refresh.
  1128.  */
  1129. #define DDCAPS_PALETTEVSYNC        0x00010000l
  1130.  
  1131. /*
  1132.  * Display hardware can return the current scan line.
  1133.  */
  1134. #define DDCAPS_READSCANLINE        0x00020000l
  1135.  
  1136. /*
  1137.  * Display hardware has stereo vision capabilities.  DDSCAPS_PRIMARYSURFACELEFT 
  1138.  * can be created.
  1139.  */
  1140. #define DDCAPS_STEREOVIEW        0x00040000l
  1141.  
  1142. /*
  1143.  * Display hardware is capable of generating a vertical blank interrupt.
  1144.  */
  1145. #define DDCAPS_VBI            0x00080000l
  1146.  
  1147. /*
  1148.  * Supports the use of z buffers with blt operations.
  1149.  */
  1150. #define DDCAPS_ZBLTS            0x00100000l
  1151.  
  1152. /*
  1153.  * Supports Z Ordering of overlays.
  1154.  */
  1155. #define DDCAPS_ZOVERLAYS        0x00200000l
  1156.  
  1157. /*
  1158.  * Supports color key
  1159.  */
  1160. #define DDCAPS_COLORKEY            0x00400000l
  1161.  
  1162. /*
  1163.  * Supports alpha surfaces
  1164.  */
  1165. #define DDCAPS_ALPHA            0x00800000l
  1166.  
  1167. /*
  1168.  * colorkey is hardware assisted(DDCAPS_COLORKEY will also be set)
  1169.  */
  1170. #define DDCAPS_COLORKEYHWASSIST        0x01000000l
  1171.  
  1172. /*
  1173.  * no hardware support at all
  1174.  */
  1175. #define DDCAPS_NOHARDWARE        0x02000000l
  1176.  
  1177. /*
  1178.  * Display hardware is capable of color fill with bltter
  1179.  */
  1180. #define DDCAPS_BLTCOLORFILL        0x04000000l
  1181.  
  1182. /*
  1183.  * Display hardware is bank switched, and potentially very slow at
  1184.  * random access to VRAM.
  1185.  */
  1186. #define DDCAPS_BANKSWITCHED        0x08000000l
  1187.  
  1188. /*
  1189.  * Display hardware is capable of depth filling Z-buffers with bltter
  1190.  */
  1191. #define DDCAPS_BLTDEPTHFILL        0x10000000l
  1192.  
  1193. /*
  1194.  * Display hardware is capable of clipping while bltting.
  1195.  */
  1196. #define DDCAPS_CANCLIP            0x20000000l
  1197.  
  1198. /*
  1199.  * Display hardware is capable of clipping while stretch bltting.
  1200.  */
  1201. #define DDCAPS_CANCLIPSTRETCHED        0x40000000l
  1202.  
  1203. /*
  1204.  * Display hardware is capable of bltting to or from system memory
  1205.  */
  1206. #define DDCAPS_CANBLTSYSMEM        0x80000000l
  1207.  
  1208.  
  1209.  /****************************************************************************
  1210.  *
  1211.  * MORE DIRECTDRAW DRIVER CAPABILITY FLAGS (dwCaps2)
  1212.  *
  1213.  ****************************************************************************/
  1214.  
  1215. /*
  1216.  * Display hardware is certified
  1217.  */
  1218. #define DDCAPS2_CERTIFIED        0x00000001l
  1219.  
  1220. /*
  1221.  * Driver cannot interleave 2D operations (lock and blt) to surfaces with
  1222.  * Direct3D rendering operations between calls to BeginScene() and EndScene()
  1223.  */
  1224. #define DDCAPS2_NO2DDURING3DSCENE       0x00000002l
  1225.  
  1226. /****************************************************************************
  1227.  *
  1228.  * DIRECTDRAW FX ALPHA CAPABILITY FLAGS
  1229.  *
  1230.  ****************************************************************************/
  1231.  
  1232. /*
  1233.  * Supports alpha blending around the edge of a source color keyed surface.
  1234.  * For Blt.
  1235.  */
  1236. #define DDFXALPHACAPS_BLTALPHAEDGEBLEND        0x00000001l
  1237.  
  1238. /*
  1239.  * Supports alpha information in the pixel format.  The bit depth of alpha 
  1240.  * information in the pixel format can be 1,2,4, or 8.    The alpha value becomes
  1241.  * more opaque as the alpha value increases.  (0 is transparent.)
  1242.  * For Blt.
  1243.  */
  1244. #define DDFXALPHACAPS_BLTALPHAPIXELS        0x00000002l
  1245.  
  1246. /*
  1247.  * Supports alpha information in the pixel format.  The bit depth of alpha 
  1248.  * information in the pixel format can be 1,2,4, or 8.    The alpha value 
  1249.  * becomes more transparent as the alpha value increases.  (0 is opaque.) 
  1250.  * This flag can only be set if DDCAPS_ALPHA is set.
  1251.  * For Blt.
  1252.  */
  1253. #define DDFXALPHACAPS_BLTALPHAPIXELSNEG        0x00000004l
  1254.  
  1255. /*
  1256.  * Supports alpha only surfaces.  The bit depth of an alpha only surface can be
  1257.  * 1,2,4, or 8.     The alpha value becomes more opaque as the alpha value increases.
  1258.  * (0 is transparent.)
  1259.  * For Blt.
  1260.  */
  1261. #define DDFXALPHACAPS_BLTALPHASURFACES        0x00000008l
  1262.  
  1263. /*
  1264.  * The depth of the alpha channel data can range can be 1,2,4, or 8.  
  1265.  * The NEG suffix indicates that this alpha channel becomes more transparent
  1266.  * as the alpha value increases. (0 is opaque.)     This flag can only be set if
  1267.  * DDCAPS_ALPHA is set.
  1268.  * For Blt.
  1269.  */
  1270. #define DDFXALPHACAPS_BLTALPHASURFACESNEG    0x00000010l
  1271.  
  1272. /*
  1273.  * Supports alpha blending around the edge of a source color keyed surface.
  1274.  * For Overlays.
  1275.  */
  1276. #define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND    0x00000020l
  1277.  
  1278. /*
  1279.  * Supports alpha information in the pixel format.  The bit depth of alpha 
  1280.  * information in the pixel format can be 1,2,4, or 8.    The alpha value becomes
  1281.  * more opaque as the alpha value increases.  (0 is transparent.)
  1282.  * For Overlays.
  1283.  */
  1284. #define DDFXALPHACAPS_OVERLAYALPHAPIXELS    0x00000040l
  1285.  
  1286. /*
  1287.  * Supports alpha information in the pixel format.  The bit depth of alpha 
  1288.  * information in the pixel format can be 1,2,4, or 8.    The alpha value 
  1289.  * becomes more transparent as the alpha value increases.  (0 is opaque.) 
  1290.  * This flag can only be set if DDCAPS_ALPHA is set.
  1291.  * For Overlays.
  1292.  */
  1293. #define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG    0x00000080l
  1294.  
  1295. /*
  1296.  * Supports alpha only surfaces.  The bit depth of an alpha only surface can be
  1297.  * 1,2,4, or 8.     The alpha value becomes more opaque as the alpha value increases.
  1298.  * (0 is transparent.)
  1299.  * For Overlays.
  1300.  */
  1301. #define DDFXALPHACAPS_OVERLAYALPHASURFACES    0x00000100l
  1302.  
  1303. /*
  1304.  * The depth of the alpha channel data can range can be 1,2,4, or 8.  
  1305.  * The NEG suffix indicates that this alpha channel becomes more transparent
  1306.  * as the alpha value increases. (0 is opaque.)     This flag can only be set if
  1307.  * DDCAPS_ALPHA is set.
  1308.  * For Overlays.
  1309.  */
  1310. #define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG    0x00000200l
  1311.  
  1312. /****************************************************************************
  1313.  *
  1314.  * DIRECTDRAW FX CAPABILITY FLAGS
  1315.  *
  1316.  ****************************************************************************/
  1317.  
  1318. /*
  1319.  * Uses arithmetic operations to stretch and shrink surfaces during blt
  1320.  * rather than pixel doubling techniques.  Along the Y axis.
  1321.  */
  1322. #define DDFXCAPS_BLTARITHSTRETCHY    0x00000020l
  1323.  
  1324. /*
  1325.  * Uses arithmetic operations to stretch during blt
  1326.  * rather than pixel doubling techniques.  Along the Y axis. Only
  1327.  * works for x1, x2, etc.
  1328.  */
  1329. #define DDFXCAPS_BLTARITHSTRETCHYN    0x00000010l
  1330.  
  1331. /*
  1332.  * Supports mirroring left to right in blt.
  1333.  */
  1334. #define DDFXCAPS_BLTMIRRORLEFTRIGHT    0x00000040l
  1335.  
  1336. /*
  1337.  * Supports mirroring top to bottom in blt.
  1338.  */
  1339. #define DDFXCAPS_BLTMIRRORUPDOWN    0x00000080l
  1340.  
  1341. /*
  1342.  * Supports arbitrary rotation for blts.
  1343.  */
  1344. #define DDFXCAPS_BLTROTATION        0x00000100l
  1345.  
  1346. /*
  1347.  * Supports 90 degree rotations for blts.
  1348.  */
  1349. #define DDFXCAPS_BLTROTATION90        0x00000200l
  1350.  
  1351. /*
  1352.  * DirectDraw supports arbitrary shrinking of a surface along the
  1353.  * x axis (horizontal direction) for blts.
  1354.  */
  1355. #define DDFXCAPS_BLTSHRINKX        0x00000400l
  1356.  
  1357. /*
  1358.  * DirectDraw supports integer shrinking (1x,2x,) of a surface
  1359.  * along the x axis (horizontal direction) for blts.
  1360.  */
  1361. #define DDFXCAPS_BLTSHRINKXN        0x00000800l
  1362.  
  1363. /*
  1364.  * DirectDraw supports arbitrary shrinking of a surface along the
  1365.  * y axis (horizontal direction) for blts.  
  1366.  */
  1367. #define DDFXCAPS_BLTSHRINKY        0x00001000l
  1368.  
  1369. /*
  1370.  * DirectDraw supports integer shrinking (1x,2x,) of a surface
  1371.  * along the y axis (vertical direction) for blts.  
  1372.  */
  1373. #define DDFXCAPS_BLTSHRINKYN        0x00002000l
  1374.  
  1375. /*
  1376.  * DirectDraw supports arbitrary stretching of a surface along the
  1377.  * x axis (horizontal direction) for blts.
  1378.  */
  1379. #define DDFXCAPS_BLTSTRETCHX        0x00004000l
  1380.  
  1381. /*
  1382.  * DirectDraw supports integer stretching (1x,2x,) of a surface
  1383.  * along the x axis (horizontal direction) for blts.
  1384.  */
  1385. #define DDFXCAPS_BLTSTRETCHXN        0x00008000l
  1386.  
  1387. /*
  1388.  * DirectDraw supports arbitrary stretching of a surface along the
  1389.  * y axis (horizontal direction) for blts.  
  1390.  */
  1391. #define DDFXCAPS_BLTSTRETCHY        0x00010000l
  1392.  
  1393. /*
  1394.  * DirectDraw supports integer stretching (1x,2x,) of a surface
  1395.  * along the y axis (vertical direction) for blts.  
  1396.  */
  1397. #define DDFXCAPS_BLTSTRETCHYN        0x00020000l
  1398.  
  1399. /*
  1400.  * Uses arithmetic operations to stretch and shrink surfaces during 
  1401.  * overlay rather than pixel doubling techniques.  Along the Y axis 
  1402.  * for overlays.
  1403.  */
  1404. #define DDFXCAPS_OVERLAYARITHSTRETCHY    0x00040000l
  1405.  
  1406. /*
  1407.  * Uses arithmetic operations to stretch surfaces during 
  1408.  * overlay rather than pixel doubling techniques.  Along the Y axis 
  1409.  * for overlays. Only works for x1, x2, etc.
  1410.  */
  1411. #define DDFXCAPS_OVERLAYARITHSTRETCHYN    0x00000008l
  1412.  
  1413. /*
  1414.  * DirectDraw supports arbitrary shrinking of a surface along the
  1415.  * x axis (horizontal direction) for overlays.
  1416.  */
  1417. #define DDFXCAPS_OVERLAYSHRINKX        0x00080000l
  1418.  
  1419. /*
  1420.  * DirectDraw supports integer shrinking (1x,2x,) of a surface
  1421.  * along the x axis (horizontal direction) for overlays.
  1422.  */
  1423. #define DDFXCAPS_OVERLAYSHRINKXN    0x00100000l
  1424.  
  1425. /*
  1426.  * DirectDraw supports arbitrary shrinking of a surface along the
  1427.  * y axis (horizontal direction) for overlays.    
  1428.  */
  1429. #define DDFXCAPS_OVERLAYSHRINKY        0x00200000l
  1430.  
  1431. /*
  1432.  * DirectDraw supports integer shrinking (1x,2x,) of a surface
  1433.  * along the y axis (vertical direction) for overlays.    
  1434.  */
  1435. #define DDFXCAPS_OVERLAYSHRINKYN    0x00400000l
  1436.  
  1437. /*
  1438.  * DirectDraw supports arbitrary stretching of a surface along the
  1439.  * x axis (horizontal direction) for overlays.
  1440.  */
  1441. #define DDFXCAPS_OVERLAYSTRETCHX    0x00800000l
  1442.  
  1443. /*
  1444.  * DirectDraw supports integer stretching (1x,2x,) of a surface
  1445.  * along the x axis (horizontal direction) for overlays.
  1446.  */
  1447. #define DDFXCAPS_OVERLAYSTRETCHXN    0x01000000l
  1448.  
  1449. /*
  1450.  * DirectDraw supports arbitrary stretching of a surface along the
  1451.  * y axis (horizontal direction) for overlays.    
  1452.  */
  1453. #define DDFXCAPS_OVERLAYSTRETCHY    0x02000000l
  1454.  
  1455. /*
  1456.  * DirectDraw supports integer stretching (1x,2x,) of a surface
  1457.  * along the y axis (vertical direction) for overlays.    
  1458.  */
  1459. #define DDFXCAPS_OVERLAYSTRETCHYN    0x04000000l
  1460.  
  1461. /*
  1462.  * DirectDraw supports mirroring of overlays across the vertical axis
  1463.  */
  1464. #define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT    0x08000000l
  1465.  
  1466. /*
  1467.  * DirectDraw supports mirroring of overlays across the horizontal axis
  1468.  */
  1469. #define DDFXCAPS_OVERLAYMIRRORUPDOWN    0x10000000l
  1470.  
  1471. /****************************************************************************
  1472.  *
  1473.  * DIRECTDRAW STEREO VIEW CAPABILITIES
  1474.  *
  1475.  ****************************************************************************/
  1476.  
  1477. /*
  1478.  * The stereo view is accomplished via enigma encoding.
  1479.  */
  1480. #define DDSVCAPS_ENIGMA            0x00000001l
  1481.  
  1482. /*
  1483.  * The stereo view is accomplished via high frequency flickering.
  1484.  */
  1485. #define DDSVCAPS_FLICKER        0x00000002l
  1486.  
  1487. /*
  1488.  * The stereo view is accomplished via red and blue filters applied
  1489.  * to the left and right eyes.    All images must adapt their colorspaces
  1490.  * for this process.
  1491.  */
  1492. #define DDSVCAPS_REDBLUE        0x00000004l
  1493.  
  1494. /*
  1495.  * The stereo view is accomplished with split screen technology.
  1496.  */
  1497. #define DDSVCAPS_SPLIT            0x00000008l
  1498.  
  1499. /****************************************************************************
  1500.  *
  1501.  * DIRECTDRAWPALETTE CAPABILITIES
  1502.  *
  1503.  ****************************************************************************/
  1504.  
  1505. /*
  1506.  * Index is 4 bits.  There are sixteen color entries in the palette table.
  1507.  */
  1508. #define DDPCAPS_4BIT            0x00000001l
  1509.  
  1510. /*
  1511.  * Index is onto a 8 bit color index.  This field is only valid with the
  1512.  * DDPCAPS_1BIT, DDPCAPS_2BIT or DDPCAPS_4BIT capability and the target
  1513.  * surface is in 8bpp. Each color entry is one byte long and is an index
  1514.  * into destination surface's 8bpp palette.
  1515.  */
  1516. #define DDPCAPS_8BITENTRIES        0x00000002l
  1517.  
  1518. /*
  1519.  * Index is 8 bits.  There are 256 color entries in the palette table.
  1520.  */
  1521. #define DDPCAPS_8BIT            0x00000004l
  1522.  
  1523. /*
  1524.  * Indicates that this DIRECTDRAWPALETTE should use the palette color array
  1525.  * passed into the lpDDColorArray parameter to initialize the DIRECTDRAWPALETTE
  1526.  * object.
  1527.  */
  1528. #define DDPCAPS_INITIALIZE        0x00000008l
  1529.  
  1530. /*
  1531.  * This palette is the one attached to the primary surface.  Changing this
  1532.  * table has immediate effect on the display unless DDPSETPAL_VSYNC is specified
  1533.  * and supported.
  1534.  */
  1535. #define DDPCAPS_PRIMARYSURFACE        0x00000010l
  1536.  
  1537. /*
  1538.  * This palette is the one attached to the primary surface left.  Changing
  1539.  * this table has immediate effect on the display for the left eye unless
  1540.  * DDPSETPAL_VSYNC is specified and supported.
  1541.  */
  1542. #define DDPCAPS_PRIMARYSURFACELEFT    0x00000020l
  1543.  
  1544. /*
  1545.  * This palette can have all 256 entries defined
  1546.  */
  1547. #define DDPCAPS_ALLOW256        0x00000040l
  1548.  
  1549. /*
  1550.  * This palette can have modifications to it synced with the monitors
  1551.  * refresh rate.
  1552.  */
  1553. #define DDPCAPS_VSYNC            0x00000080l
  1554.  
  1555. /*
  1556.  * Index is 1 bit.  There are two color entries in the palette table.
  1557.  */
  1558. #define DDPCAPS_1BIT            0x00000100l
  1559.  
  1560. /*
  1561.  * Index is 2 bit.  There are four color entries in the palette table.
  1562.  */
  1563. #define DDPCAPS_2BIT            0x00000200l
  1564.  
  1565.  
  1566. /****************************************************************************
  1567.  *
  1568.  * DIRECTDRAWPALETTE SETENTRY CONSTANTS
  1569.  *
  1570.  ****************************************************************************/
  1571.  
  1572.  
  1573. /****************************************************************************
  1574.  *
  1575.  * DIRECTDRAWPALETTE GETENTRY CONSTANTS
  1576.  *
  1577.  ****************************************************************************/
  1578.  
  1579. /* 0 is the only legal value */
  1580.  
  1581. /****************************************************************************
  1582.  *
  1583.  * DIRECTDRAWSURFACE SETPALETTE CONSTANTS
  1584.  *
  1585.  ****************************************************************************/
  1586.  
  1587.  
  1588. /****************************************************************************
  1589.  *
  1590.  * DIRECTDRAW BITDEPTH CONSTANTS
  1591.  *
  1592.  * NOTE:  These are only used to indicate supported bit depths.   These
  1593.  * are flags only, they are not to be used as an actual bit depth.   The
  1594.  * absolute numbers 1, 2, 4, 8, 16, 24 and 32 are used to indicate actual
  1595.  * bit depths in a surface or for changing the display mode.
  1596.  *
  1597.  ****************************************************************************/
  1598.  
  1599. /*
  1600.  * 1 bit per pixel.
  1601.  */
  1602. #define DDBD_1            0x00004000l
  1603.  
  1604. /*
  1605.  * 2 bits per pixel.
  1606.  */
  1607. #define DDBD_2            0x00002000l
  1608.  
  1609. /*
  1610.  * 4 bits per pixel.
  1611.  */
  1612. #define DDBD_4            0x00001000l
  1613.  
  1614. /*
  1615.  * 8 bits per pixel.
  1616.  */
  1617. #define DDBD_8            0x00000800l
  1618.  
  1619. /*
  1620.  * 16 bits per pixel.
  1621.  */
  1622. #define DDBD_16            0x00000400l
  1623.  
  1624. /*
  1625.  * 24 bits per pixel.
  1626.  */
  1627. #define DDBD_24            0X00000200l
  1628.  
  1629. /*
  1630.  * 32 bits per pixel.
  1631.  */
  1632. #define DDBD_32            0x00000100l
  1633.  
  1634. /****************************************************************************
  1635.  *
  1636.  * DIRECTDRAWSURFACE SET/GET COLOR KEY FLAGS
  1637.  *
  1638.  ****************************************************************************/
  1639.  
  1640. /*
  1641.  * Set if the structure contains a color space.     Not set if the structure
  1642.  * contains a single color key.
  1643.  */
  1644. #define DDCKEY_COLORSPACE    0x00000001l
  1645.  
  1646. /*
  1647.  * Set if the structure specifies a color key or color space which is to be
  1648.  * used as a destination color key for blt operations.
  1649.  */
  1650. #define DDCKEY_DESTBLT        0x00000002l
  1651.  
  1652. /*
  1653.  * Set if the structure specifies a color key or color space which is to be
  1654.  * used as a destination color key for overlay operations.
  1655.  */
  1656. #define DDCKEY_DESTOVERLAY    0x00000004l
  1657.  
  1658. /*
  1659.  * Set if the structure specifies a color key or color space which is to be
  1660.  * used as a source color key for blt operations.
  1661.  */
  1662. #define DDCKEY_SRCBLT        0x00000008l
  1663.  
  1664. /*
  1665.  * Set if the structure specifies a color key or color space which is to be
  1666.  * used as a source color key for overlay operations.
  1667.  */
  1668. #define DDCKEY_SRCOVERLAY    0x00000010l
  1669.  
  1670.  
  1671. /****************************************************************************
  1672.  *
  1673.  * DIRECTDRAW COLOR KEY CAPABILITY FLAGS
  1674.  *
  1675.  ****************************************************************************/
  1676.  
  1677. /*
  1678.  * Supports transparent blting using a color key to identify the replaceable 
  1679.  * bits of the destination surface for RGB colors.
  1680.  */
  1681. #define DDCKEYCAPS_DESTBLT            0x00000001l
  1682.  
  1683. /*
  1684.  * Supports transparent blting using a color space to identify the replaceable
  1685.  * bits of the destination surface for RGB colors.
  1686.  */
  1687. #define DDCKEYCAPS_DESTBLTCLRSPACE        0x00000002l
  1688.  
  1689. /*
  1690.  * Supports transparent blting using a color space to identify the replaceable
  1691.  * bits of the destination surface for YUV colors.
  1692.  */
  1693. #define DDCKEYCAPS_DESTBLTCLRSPACEYUV        0x00000004l
  1694.  
  1695. /*
  1696.  * Supports transparent blting using a color key to identify the replaceable 
  1697.  * bits of the destination surface for YUV colors.
  1698.  */
  1699. #define DDCKEYCAPS_DESTBLTYUV            0x00000008l
  1700.  
  1701. /*
  1702.  * Supports overlaying using colorkeying of the replaceable bits of the surface
  1703.  * being overlayed for RGB colors.
  1704.  */
  1705. #define DDCKEYCAPS_DESTOVERLAY            0x00000010l
  1706.  
  1707. /*
  1708.  * Supports a color space as the color key for the destination for RGB colors.
  1709.  */
  1710. #define DDCKEYCAPS_DESTOVERLAYCLRSPACE        0x00000020l
  1711.  
  1712. /*
  1713.  * Supports a color space as the color key for the destination for YUV colors.
  1714.  */
  1715. #define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV    0x00000040l
  1716.  
  1717. /*
  1718.  * Supports only one active destination color key value for visible overlay
  1719.  * surfaces.
  1720.  */
  1721. #define DDCKEYCAPS_DESTOVERLAYONEACTIVE        0x00000080l
  1722.  
  1723. /*
  1724.  * Supports overlaying using colorkeying of the replaceable bits of the 
  1725.  * surface being overlayed for YUV colors.
  1726.  */
  1727. #define DDCKEYCAPS_DESTOVERLAYYUV        0x00000100l
  1728.  
  1729. /*
  1730.  * Supports transparent blting using the color key for the source with
  1731.  * this surface for RGB colors.
  1732.  */
  1733. #define DDCKEYCAPS_SRCBLT            0x00000200l
  1734.  
  1735. /*
  1736.  * Supports transparent blting using a color space for the source with
  1737.  * this surface for RGB colors.
  1738.  */
  1739. #define DDCKEYCAPS_SRCBLTCLRSPACE        0x00000400l
  1740.  
  1741. /*
  1742.  * Supports transparent blting using a color space for the source with
  1743.  * this surface for YUV colors.
  1744.  */
  1745. #define DDCKEYCAPS_SRCBLTCLRSPACEYUV        0x00000800l
  1746.  
  1747. /*
  1748.  * Supports transparent blting using the color key for the source with
  1749.  * this surface for YUV colors.
  1750.  */
  1751. #define DDCKEYCAPS_SRCBLTYUV            0x00001000l
  1752.  
  1753. /*
  1754.  * Supports overlays using the color key for the source with this
  1755.  * overlay surface for RGB colors.
  1756.  */
  1757. #define DDCKEYCAPS_SRCOVERLAY            0x00002000l
  1758.  
  1759. /*
  1760.  * Supports overlays using a color space as the source color key for
  1761.  * the overlay surface for RGB colors.
  1762.  */
  1763. #define DDCKEYCAPS_SRCOVERLAYCLRSPACE        0x00004000l
  1764.  
  1765. /*
  1766.  * Supports overlays using a color space as the source color key for
  1767.  * the overlay surface for YUV colors.
  1768.  */
  1769. #define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV    0x00008000l
  1770.  
  1771. /*
  1772.  * Supports only one active source color key value for visible
  1773.  * overlay surfaces.
  1774.  */
  1775. #define DDCKEYCAPS_SRCOVERLAYONEACTIVE        0x00010000l
  1776.  
  1777. /*
  1778.  * Supports overlays using the color key for the source with this
  1779.  * overlay surface for YUV colors.
  1780.  */
  1781. #define DDCKEYCAPS_SRCOVERLAYYUV        0x00020000l
  1782.  
  1783. /*
  1784.  * there are no bandwidth trade-offs for using colorkey with an overlay
  1785.  */
  1786. #define DDCKEYCAPS_NOCOSTOVERLAY        0x00040000l
  1787.  
  1788.  
  1789. /****************************************************************************
  1790.  *
  1791.  * DIRECTDRAW PIXELFORMAT FLAGS
  1792.  *
  1793.  ****************************************************************************/
  1794.  
  1795. /*
  1796.  * The surface has alpha channel information in the pixel format.
  1797.  */
  1798. #define DDPF_ALPHAPIXELS            0x00000001l
  1799.  
  1800. /*
  1801.  * The pixel format contains alpha only information
  1802.  */
  1803. #define DDPF_ALPHA                0x00000002l
  1804.  
  1805. /*
  1806.  * The FourCC code is valid.
  1807.  */
  1808. #define DDPF_FOURCC                0x00000004l
  1809.  
  1810. /*
  1811.  * The surface is 4-bit color indexed.
  1812.  */
  1813. #define DDPF_PALETTEINDEXED4            0x00000008l
  1814.  
  1815. /*
  1816.  * The surface is indexed into a palette which stores indices
  1817.  * into the destination surface's 8-bit palette.
  1818.  */
  1819. #define DDPF_PALETTEINDEXEDTO8            0x00000010l
  1820.  
  1821. /*
  1822.  * The surface is 8-bit color indexed.
  1823.  */
  1824. #define DDPF_PALETTEINDEXED8            0x00000020l
  1825.  
  1826. /*
  1827.  * The RGB data in the pixel format structure is valid.
  1828.  */
  1829. #define DDPF_RGB                0x00000040l
  1830.  
  1831. /*
  1832.  * The surface will accept pixel data in the format specified
  1833.  * and compress it during the write.
  1834.  */
  1835. #define DDPF_COMPRESSED                0x00000080l
  1836.  
  1837. /*
  1838.  * The surface will accept RGB data and translate it during
  1839.  * the write to YUV data.  The format of the data to be written
  1840.  * will be contained in the pixel format structure.  The DDPF_RGB
  1841.  * flag will be set. 
  1842.  */
  1843. #define DDPF_RGBTOYUV                0x00000100l
  1844.  
  1845. /*
  1846.  * pixel format is YUV - YUV data in pixel format struct is valid
  1847.  */
  1848. #define DDPF_YUV                0x00000200l
  1849.  
  1850. /*
  1851.  * pixel format is a z buffer only surface
  1852.  */
  1853. #define DDPF_ZBUFFER                0x00000400l
  1854.  
  1855. /*
  1856.  * The surface is 1-bit color indexed.
  1857.  */
  1858. #define DDPF_PALETTEINDEXED1            0x00000800l
  1859.  
  1860. /*
  1861.  * The surface is 2-bit color indexed.
  1862.  */
  1863. #define DDPF_PALETTEINDEXED2            0x00001000l
  1864.  
  1865. /*===========================================================================
  1866.  *
  1867.  *
  1868.  * DIRECTDRAW CALLBACK FLAGS
  1869.  *
  1870.  *
  1871.  *==========================================================================*/
  1872.  
  1873. /****************************************************************************
  1874.  *
  1875.  * DIRECTDRAW ENUMSURFACES FLAGS
  1876.  *
  1877.  ****************************************************************************/
  1878.  
  1879. /*
  1880.  * Enumerate all of the surfaces that meet the search criterion.
  1881.  */
  1882. #define DDENUMSURFACES_ALL            0x00000001l
  1883.  
  1884. /*
  1885.  * A search hit is a surface that matches the surface description.
  1886.  */
  1887. #define DDENUMSURFACES_MATCH            0x00000002l
  1888.  
  1889. /*
  1890.  * A search hit is a surface that does not match the surface description.
  1891.  */
  1892. #define DDENUMSURFACES_NOMATCH            0x00000004l
  1893.  
  1894. /*
  1895.  * Enumerate the first surface that can be created which meets the search criterion.
  1896.  */
  1897. #define DDENUMSURFACES_CANBECREATED        0x00000008l
  1898.  
  1899. /*
  1900.  * Enumerate the surfaces that already exist that meet the search criterion.
  1901.  */
  1902. #define DDENUMSURFACES_DOESEXIST        0x00000010l
  1903.  
  1904.  
  1905. /****************************************************************************
  1906.  *
  1907.  * DIRECTDRAW ENUMDISPLAYMODES FLAGS
  1908.  *
  1909.  ****************************************************************************/
  1910.  
  1911. /*
  1912.  * Enumerate Modes with different refresh rates.  EnumDisplayModes guarantees
  1913.  * that a particular mode will be enumerated only once.  This flag specifies whether
  1914.  * the refresh rate is taken into account when determining if a mode is unique.
  1915.  */
  1916. #define DDEDM_REFRESHRATES            0x00000001l
  1917.  
  1918.  
  1919. /****************************************************************************
  1920.  *
  1921.  * DIRECTDRAW SETCOOPERATIVELEVEL FLAGS
  1922.  *
  1923.  ****************************************************************************/
  1924.  
  1925. /*
  1926.  * Exclusive mode owner will be responsible for the entire primary surface.
  1927.  * GDI can be ignored. used with DD
  1928.  */
  1929. #define DDSCL_FULLSCREEN            0x00000001l
  1930.  
  1931. /*
  1932.  * allow CTRL_ALT_DEL to work while in fullscreen exclusive mode 
  1933.  */
  1934. #define DDSCL_ALLOWREBOOT            0x00000002l
  1935.  
  1936. /*
  1937.  * prevents DDRAW from modifying the application window.
  1938.  * prevents DDRAW from minimize/restore the application window on activation.
  1939.  */
  1940. #define DDSCL_NOWINDOWCHANGES            0x00000004l
  1941.  
  1942. /*
  1943.  * app wants to work as a regular Windows application
  1944.  */
  1945. #define DDSCL_NORMAL                0x00000008l
  1946.  
  1947. /*
  1948.  * app wants exclusive access
  1949.  */
  1950. #define DDSCL_EXCLUSIVE                         0x00000010l
  1951.  
  1952.  
  1953. /*
  1954.  * app can deal with non-windows display modes
  1955.  */
  1956. #define DDSCL_ALLOWMODEX                        0x00000040l
  1957.  
  1958.  
  1959. /****************************************************************************
  1960.  *
  1961.  * DIRECTDRAW BLT FLAGS
  1962.  *
  1963.  ****************************************************************************/
  1964.  
  1965. /*
  1966.  * Use the alpha information in the pixel format or the alpha channel surface
  1967.  * attached to the destination surface as the alpha channel for this blt.
  1968.  */
  1969. #define DDBLT_ALPHADEST                0x00000001l
  1970.  
  1971. /*
  1972.  * Use the dwConstAlphaDest field in the DDBLTFX structure as the alpha channel
  1973.  * for the destination surface for this blt.
  1974.  */
  1975. #define DDBLT_ALPHADESTCONSTOVERRIDE        0x00000002l
  1976.  
  1977. /*
  1978.  * The NEG suffix indicates that the destination surface becomes more
  1979.  * transparent as the alpha value increases. (0 is opaque)
  1980.  */
  1981. #define DDBLT_ALPHADESTNEG            0x00000004l
  1982.  
  1983. /*
  1984.  * Use the lpDDSAlphaDest field in the DDBLTFX structure as the alpha
  1985.  * channel for the destination for this blt.
  1986.  */
  1987. #define DDBLT_ALPHADESTSURFACEOVERRIDE        0x00000008l
  1988.  
  1989. /*
  1990.  * Use the dwAlphaEdgeBlend field in the DDBLTFX structure as the alpha channel
  1991.  * for the edges of the image that border the color key colors.
  1992.  */
  1993. #define DDBLT_ALPHAEDGEBLEND            0x00000010l
  1994.  
  1995. /*
  1996.  * Use the alpha information in the pixel format or the alpha channel surface
  1997.  * attached to the source surface as the alpha channel for this blt.
  1998.  */
  1999. #define DDBLT_ALPHASRC                0x00000020l
  2000.  
  2001. /*
  2002.  * Use the dwConstAlphaSrc field in the DDBLTFX structure as the alpha channel
  2003.  * for the source for this blt.
  2004.  */
  2005. #define DDBLT_ALPHASRCCONSTOVERRIDE        0x00000040l
  2006.  
  2007. /*
  2008.  * The NEG suffix indicates that the source surface becomes more transparent
  2009.  * as the alpha value increases. (0 is opaque)
  2010.  */
  2011. #define DDBLT_ALPHASRCNEG            0x00000080l
  2012.  
  2013. /*
  2014.  * Use the lpDDSAlphaSrc field in the DDBLTFX structure as the alpha channel
  2015.  * for the source for this blt. 
  2016.  */
  2017. #define DDBLT_ALPHASRCSURFACEOVERRIDE        0x00000100l
  2018.  
  2019. /*
  2020.  * Do this blt asynchronously through the FIFO in the order received.  If
  2021.  * there is no room in the hardware FIFO fail the call.
  2022.  */
  2023. #define DDBLT_ASYNC                0x00000200l
  2024.  
  2025. /*
  2026.  * Uses the dwFillColor field in the DDBLTFX structure as the RGB color
  2027.  * to fill the destination rectangle on the destination surface with.
  2028.  */
  2029. #define DDBLT_COLORFILL                0x00000400l
  2030.  
  2031. /*
  2032.  * Uses the dwDDFX field in the DDBLTFX structure to specify the effects
  2033.  * to use for the blt.
  2034.  */
  2035. #define DDBLT_DDFX                0x00000800l
  2036.  
  2037. /*
  2038.  * Uses the dwDDROPS field in the DDBLTFX structure to specify the ROPS
  2039.  * that are not part of the Win32 API.
  2040.  */
  2041. #define DDBLT_DDROPS                0x00001000l
  2042.  
  2043. /*
  2044.  * Use the color key associated with the destination surface.
  2045.  */
  2046. #define DDBLT_KEYDEST                0x00002000l
  2047.  
  2048. /*
  2049.  * Use the dckDestColorkey field in the DDBLTFX structure as the color key
  2050.  * for the destination surface.
  2051.  */
  2052. #define DDBLT_KEYDESTOVERRIDE            0x00004000l
  2053.  
  2054. /*
  2055.  * Use the color key associated with the source surface.
  2056.  */
  2057. #define DDBLT_KEYSRC                0x00008000l
  2058.  
  2059. /*
  2060.  * Use the dckSrcColorkey field in the DDBLTFX structure as the color key
  2061.  * for the source surface.
  2062.  */
  2063. #define DDBLT_KEYSRCOVERRIDE            0x00010000l
  2064.  
  2065. /*
  2066.  * Use the dwROP field in the DDBLTFX structure for the raster operation
  2067.  * for this blt.  These ROPs are the same as the ones defined in the Win32 API.
  2068.  */
  2069. #define DDBLT_ROP                0x00020000l
  2070.  
  2071. /*
  2072.  * Use the dwRotationAngle field in the DDBLTFX structure as the angle
  2073.  * (specified in 1/100th of a degree) to rotate the surface.
  2074.  */
  2075. #define DDBLT_ROTATIONANGLE            0x00040000l
  2076.  
  2077. /*
  2078.  * Z-buffered blt using the z-buffers attached to the source and destination
  2079.  * surfaces and the dwZBufferOpCode field in the DDBLTFX structure as the
  2080.  * z-buffer opcode.
  2081.  */
  2082. #define DDBLT_ZBUFFER                0x00080000l
  2083.  
  2084. /*
  2085.  * Z-buffered blt using the dwConstDest Zfield and the dwZBufferOpCode field
  2086.  * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively
  2087.  * for the destination.
  2088.  */
  2089. #define DDBLT_ZBUFFERDESTCONSTOVERRIDE        0x00100000l
  2090.  
  2091. /*
  2092.  * Z-buffered blt using the lpDDSDestZBuffer field and the dwZBufferOpCode
  2093.  * field in the DDBLTFX structure as the z-buffer and z-buffer opcode
  2094.  * respectively for the destination.
  2095.  */
  2096. #define DDBLT_ZBUFFERDESTOVERRIDE        0x00200000l
  2097.  
  2098. /*
  2099.  * Z-buffered blt using the dwConstSrcZ field and the dwZBufferOpCode field
  2100.  * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively
  2101.  * for the source.
  2102.  */
  2103. #define DDBLT_ZBUFFERSRCCONSTOVERRIDE        0x00400000l
  2104.  
  2105. /*
  2106.  * Z-buffered blt using the lpDDSSrcZBuffer field and the dwZBufferOpCode
  2107.  * field in the DDBLTFX structure as the z-buffer and z-buffer opcode
  2108.  * respectively for the source.
  2109.  */
  2110. #define DDBLT_ZBUFFERSRCOVERRIDE                0x00800000l
  2111.  
  2112. /*
  2113.  * wait until the device is ready to handle the blt
  2114.  * this will cause blt to not return DDERR_WASSTILLDRAWING
  2115.  */
  2116. #define DDBLT_WAIT                              0x01000000l
  2117.  
  2118. /*
  2119.  * Uses the dwFillDepth field in the DDBLTFX structure as the depth value
  2120.  * to fill the destination rectangle on the destination Z-buffer surface
  2121.  * with.
  2122.  */
  2123. #define DDBLT_DEPTHFILL                0x02000000l
  2124.  
  2125.  
  2126. /****************************************************************************
  2127.  *
  2128.  * BLTFAST FLAGS
  2129.  *
  2130.  ****************************************************************************/
  2131.  
  2132. #define DDBLTFAST_NOCOLORKEY                    0x00000000
  2133. #define DDBLTFAST_SRCCOLORKEY                   0x00000001
  2134. #define DDBLTFAST_DESTCOLORKEY                  0x00000002
  2135. #define DDBLTFAST_WAIT                          0x00000010
  2136.  
  2137. /****************************************************************************
  2138.  *
  2139.  * FLIP FLAGS
  2140.  *
  2141.  ****************************************************************************/
  2142.  
  2143. #define DDFLIP_WAIT                          0x00000001l
  2144.  
  2145.  
  2146. /****************************************************************************
  2147.  *
  2148.  * DIRECTDRAW SURFACE OVERLAY FLAGS
  2149.  *
  2150.  ****************************************************************************/
  2151.  
  2152. /*
  2153.  * Use the alpha information in the pixel format or the alpha channel surface
  2154.  * attached to the destination surface as the alpha channel for the
  2155.  * destination overlay.
  2156.  */
  2157. #define DDOVER_ALPHADEST            0x00000001l
  2158.  
  2159. /*
  2160.  * Use the dwConstAlphaDest field in the DDOVERLAYFX structure as the
  2161.  * destination alpha channel for this overlay.
  2162.  */
  2163. #define DDOVER_ALPHADESTCONSTOVERRIDE        0x00000002l
  2164.  
  2165. /*
  2166.  * The NEG suffix indicates that the destination surface becomes more
  2167.  * transparent as the alpha value increases. 
  2168.  */
  2169. #define DDOVER_ALPHADESTNEG            0x00000004l
  2170.  
  2171. /*
  2172.  * Use the lpDDSAlphaDest field in the DDOVERLAYFX structure as the alpha
  2173.  * channel destination for this overlay.
  2174.  */
  2175. #define DDOVER_ALPHADESTSURFACEOVERRIDE        0x00000008l
  2176.  
  2177. /*
  2178.  * Use the dwAlphaEdgeBlend field in the DDOVERLAYFX structure as the alpha
  2179.  * channel for the edges of the image that border the color key colors.
  2180.  */
  2181. #define DDOVER_ALPHAEDGEBLEND            0x00000010l
  2182.  
  2183. /*
  2184.  * Use the alpha information in the pixel format or the alpha channel surface
  2185.  * attached to the source surface as the source alpha channel for this overlay.
  2186.  */
  2187. #define DDOVER_ALPHASRC                0x00000020l
  2188.  
  2189. /*
  2190.  * Use the dwConstAlphaSrc field in the DDOVERLAYFX structure as the source
  2191.  * alpha channel for this overlay.
  2192.  */
  2193. #define DDOVER_ALPHASRCCONSTOVERRIDE        0x00000040l
  2194.  
  2195. /*
  2196.  * The NEG suffix indicates that the source surface becomes more transparent
  2197.  * as the alpha value increases.
  2198.  */
  2199. #define DDOVER_ALPHASRCNEG            0x00000080l
  2200.  
  2201. /*
  2202.  * Use the lpDDSAlphaSrc field in the DDOVERLAYFX structure as the alpha channel
  2203.  * source for this overlay.
  2204.  */
  2205. #define DDOVER_ALPHASRCSURFACEOVERRIDE        0x00000100l
  2206.  
  2207. /*
  2208.  * Turn this overlay off.
  2209.  */
  2210. #define DDOVER_HIDE                0x00000200l
  2211.  
  2212. /*
  2213.  * Use the color key associated with the destination surface.
  2214.  */
  2215. #define DDOVER_KEYDEST                0x00000400l
  2216.  
  2217. /*
  2218.  * Use the dckDestColorkey field in the DDOVERLAYFX structure as the color key
  2219.  * for the destination surface
  2220.  */
  2221. #define DDOVER_KEYDESTOVERRIDE            0x00000800l
  2222.  
  2223. /*
  2224.  * Use the color key associated with the source surface.
  2225.  */
  2226. #define DDOVER_KEYSRC                0x00001000l
  2227.  
  2228. /*
  2229.  * Use the dckSrcColorkey field in the DDOVERLAYFX structure as the color key
  2230.  * for the source surface.
  2231.  */
  2232. #define DDOVER_KEYSRCOVERRIDE            0x00002000l
  2233.  
  2234. /*
  2235.  * Turn this overlay on.
  2236.  */
  2237. #define DDOVER_SHOW                0x00004000l
  2238.  
  2239. /*
  2240.  * Add a dirty rect to an emulated overlayed surface.
  2241.  */
  2242. #define DDOVER_ADDDIRTYRECT                     0x00008000l
  2243.  
  2244. /*
  2245.  * Redraw all dirty rects on an emulated overlayed surface.
  2246.  */
  2247. #define DDOVER_REFRESHDIRTYRECTS        0x00010000l
  2248.  
  2249. /*
  2250.  * Redraw the entire surface on an emulated overlayed surface.
  2251.  */
  2252. #define DDOVER_REFRESHALL                      0x00020000l
  2253.  
  2254.  
  2255. /*
  2256.  * Use the overlay FX flags to define special overlay FX
  2257.  */
  2258. #define DDOVER_DDFX                           0x00080000l
  2259.  
  2260.  
  2261. /****************************************************************************
  2262.  *
  2263.  * DIRECTDRAWSURFACE LOCK FLAGS
  2264.  *
  2265.  ****************************************************************************/
  2266.  
  2267. /*
  2268.  * The default.     Set to indicate that Lock should return a valid memory pointer
  2269.  * to the top of the specified rectangle.  If no rectangle is specified then a
  2270.  * pointer to the top of the surface is returned.
  2271.  */
  2272. #define DDLOCK_SURFACEMEMORYPTR            0x00000000L    // default
  2273.  
  2274. /*
  2275.  * Set to indicate that Lock should wait until it can obtain a valid memory
  2276.  * pointer before returning.  If this bit is set, Lock will never return 
  2277.  * DDERR_WASSTILLDRAWING.
  2278.  */
  2279. #define DDLOCK_WAIT                0x00000001L
  2280.  
  2281. /*
  2282.  * Set if an event handle is being passed to Lock.  Lock will trigger the event
  2283.  * when it can return the surface memory pointer requested.
  2284.  */
  2285. #define DDLOCK_EVENT                0x00000002L
  2286.  
  2287. /*
  2288.  * Indicates that the surface being locked will only be read from.
  2289.  */
  2290. #define DDLOCK_READONLY                0x00000010L
  2291.  
  2292. /*
  2293.  * Indicates that the surface being locked will only be written to
  2294.  */
  2295. #define DDLOCK_WRITEONLY            0x00000020L
  2296.  
  2297.  
  2298. /****************************************************************************
  2299.  *
  2300.  * DIRECTDRAWSURFACE PAGELOCK FLAGS
  2301.  *
  2302.  ****************************************************************************/
  2303.  
  2304. /*
  2305.  * No flags defined at present
  2306.  */
  2307.  
  2308.  
  2309. /****************************************************************************
  2310.  *
  2311.  * DIRECTDRAWSURFACE PAGEUNLOCK FLAGS
  2312.  *
  2313.  ****************************************************************************/
  2314.  
  2315. /*
  2316.  * No flags defined at present
  2317.  */
  2318.  
  2319.  
  2320. /****************************************************************************
  2321.  *
  2322.  * DIRECTDRAWSURFACE BLT FX FLAGS
  2323.  *
  2324.  ****************************************************************************/
  2325.  
  2326. /*
  2327.  * If stretching, use arithmetic stretching along the Y axis for this blt.
  2328.  */
  2329. #define DDBLTFX_ARITHSTRETCHY            0x00000001l
  2330.  
  2331. /*
  2332.  * Do this blt mirroring the surface left to right.  Spin the
  2333.  * surface around its y-axis.
  2334.  */
  2335. #define DDBLTFX_MIRRORLEFTRIGHT            0x00000002l
  2336.  
  2337. /*
  2338.  * Do this blt mirroring the surface up and down.  Spin the surface
  2339.  * around its x-axis.
  2340.  */
  2341. #define DDBLTFX_MIRRORUPDOWN            0x00000004l
  2342.  
  2343. /*
  2344.  * Schedule this blt to avoid tearing.
  2345.  */
  2346. #define DDBLTFX_NOTEARING            0x00000008l
  2347.  
  2348. /*
  2349.  * Do this blt rotating the surface one hundred and eighty degrees.
  2350.  */
  2351. #define DDBLTFX_ROTATE180            0x00000010l
  2352.  
  2353. /*
  2354.  * Do this blt rotating the surface two hundred and seventy degrees.
  2355.  */
  2356. #define DDBLTFX_ROTATE270            0x00000020l
  2357.  
  2358. /*
  2359.  * Do this blt rotating the surface ninety degrees.
  2360.  */
  2361. #define DDBLTFX_ROTATE90            0x00000040l
  2362.  
  2363. /*
  2364.  * Do this z blt using dwZBufferLow and dwZBufferHigh as  range values
  2365.  * specified to limit the bits copied from the source surface.
  2366.  */
  2367. #define DDBLTFX_ZBUFFERRANGE            0x00000080l
  2368.  
  2369. /*
  2370.  * Do this z blt adding the dwZBufferBaseDest to each of the sources z values
  2371.  * before comparing it with the desting z values.
  2372.  */
  2373. #define DDBLTFX_ZBUFFERBASEDEST            0x00000100l
  2374.  
  2375. /****************************************************************************
  2376.  *
  2377.  * DIRECTDRAWSURFACE OVERLAY FX FLAGS
  2378.  *
  2379.  ****************************************************************************/
  2380.  
  2381. /*
  2382.  * If stretching, use arithmetic stretching along the Y axis for this overlay.
  2383.  */
  2384. #define DDOVERFX_ARITHSTRETCHY            0x00000001l
  2385.  
  2386. /*
  2387.  * Mirror the overlay across the vertical axis
  2388.  */
  2389. #define DDOVERFX_MIRRORLEFTRIGHT        0x00000002l
  2390.  
  2391. /*
  2392.  * Mirror the overlay across the horizontal axis
  2393.  */
  2394. #define DDOVERFX_MIRRORUPDOWN            0x00000004l
  2395.  
  2396. /****************************************************************************
  2397.  *
  2398.  * DIRECTDRAW WAITFORVERTICALBLANK FLAGS
  2399.  *
  2400.  ****************************************************************************/
  2401.  
  2402. /*
  2403.  * return when the vertical blank interval begins
  2404.  */
  2405. #define DDWAITVB_BLOCKBEGIN            0x00000001l
  2406.  
  2407. /*
  2408.  * set up an event to trigger when the vertical blank begins
  2409.  */
  2410. #define DDWAITVB_BLOCKBEGINEVENT        0x00000002l
  2411.  
  2412. /*
  2413.  * return when the vertical blank interval ends and display begins
  2414.  */
  2415. #define DDWAITVB_BLOCKEND            0x00000004l
  2416.  
  2417. /****************************************************************************
  2418.  *
  2419.  * DIRECTDRAW GETFLIPSTATUS FLAGS
  2420.  *
  2421.  ****************************************************************************/
  2422.  
  2423. /*
  2424.  * is it OK to flip now?
  2425.  */
  2426. #define DDGFS_CANFLIP            0x00000001l
  2427.  
  2428. /*
  2429.  * is the last flip finished?
  2430.  */
  2431. #define DDGFS_ISFLIPDONE        0x00000002l
  2432.  
  2433. /****************************************************************************
  2434.  *
  2435.  * DIRECTDRAW GETBLTSTATUS FLAGS
  2436.  *
  2437.  ****************************************************************************/
  2438.  
  2439. /*
  2440.  * is it OK to blt now?
  2441.  */
  2442. #define DDGBS_CANBLT            0x00000001l
  2443.  
  2444. /*
  2445.  * is the blt to the surface finished?
  2446.  */
  2447. #define DDGBS_ISBLTDONE            0x00000002l
  2448.  
  2449.  
  2450. /****************************************************************************
  2451.  *
  2452.  * DIRECTDRAW ENUMOVERLAYZORDER FLAGS
  2453.  *
  2454.  ****************************************************************************/
  2455.  
  2456. /*
  2457.  * Enumerate overlays back to front.
  2458.  */
  2459. #define DDENUMOVERLAYZ_BACKTOFRONT    0x00000000l
  2460.  
  2461. /*
  2462.  * Enumerate overlays front to back
  2463.  */
  2464. #define DDENUMOVERLAYZ_FRONTTOBACK    0x00000001l
  2465.  
  2466. /****************************************************************************
  2467.  *
  2468.  * DIRECTDRAW UPDATEOVERLAYZORDER FLAGS
  2469.  *
  2470.  ****************************************************************************/
  2471.  
  2472. /*
  2473.  * Send overlay to front
  2474.  */
  2475. #define DDOVERZ_SENDTOFRONT        0x00000000l
  2476.  
  2477. /*
  2478.  * Send overlay to back
  2479.  */
  2480. #define DDOVERZ_SENDTOBACK        0x00000001l
  2481.  
  2482. /*
  2483.  * Move Overlay forward
  2484.  */
  2485. #define DDOVERZ_MOVEFORWARD        0x00000002l
  2486.  
  2487. /*
  2488.  * Move Overlay backward
  2489.  */
  2490. #define DDOVERZ_MOVEBACKWARD        0x00000003l
  2491.  
  2492. /*
  2493.  * Move Overlay in front of relative surface
  2494.  */
  2495. #define DDOVERZ_INSERTINFRONTOF        0x00000004l
  2496.  
  2497. /*
  2498.  * Move Overlay in back of relative surface
  2499.  */
  2500. #define DDOVERZ_INSERTINBACKOF        0x00000005l
  2501.  
  2502. /*===========================================================================
  2503.  *
  2504.  *
  2505.  * DIRECTDRAW RETURN CODES
  2506.  *
  2507.  * The return values from DirectDraw Commands and Surface that return an HRESULT
  2508.  * are codes from DirectDraw concerning the results of the action
  2509.  * requested by DirectDraw.
  2510.  *
  2511.  *==========================================================================*/
  2512.  
  2513. /*
  2514.  * Status is OK
  2515.  *
  2516.  * Issued by: DirectDraw Commands and all callbacks
  2517.  */
  2518. #define DD_OK                    0
  2519.  
  2520. /****************************************************************************
  2521.  *
  2522.  * DIRECTDRAW ENUMCALLBACK RETURN VALUES
  2523.  *
  2524.  * EnumCallback returns are used to control the flow of the DIRECTDRAW and
  2525.  * DIRECTDRAWSURFACE object enumerations.   They can only be returned by
  2526.  * enumeration callback routines.
  2527.  *
  2528.  ****************************************************************************/
  2529.  
  2530. /*
  2531.  * stop the enumeration
  2532.  */
  2533. #define DDENUMRET_CANCEL            0
  2534.  
  2535. /*
  2536.  * continue the enumeration
  2537.  */
  2538. #define DDENUMRET_OK                1
  2539.  
  2540. /****************************************************************************
  2541.  *
  2542.  * DIRECTDRAW ERRORS
  2543.  *
  2544.  * Errors are represented by negative values and cannot be combined.
  2545.  *
  2546.  ****************************************************************************/
  2547.  
  2548. /*
  2549.  * This object is already initialized
  2550.  */
  2551. #define DDERR_ALREADYINITIALIZED        MAKE_DDHRESULT( 5 )
  2552.  
  2553. /*
  2554.  * This surface can not be attached to the requested surface.
  2555.  */
  2556. #define DDERR_CANNOTATTACHSURFACE        MAKE_DDHRESULT( 10 )
  2557.  
  2558. /*
  2559.  * This surface can not be detached from the requested surface.
  2560.  */
  2561. #define DDERR_CANNOTDETACHSURFACE        MAKE_DDHRESULT( 20 )
  2562.  
  2563. /*
  2564.  * Support is currently not available.
  2565.  */
  2566. #define DDERR_CURRENTLYNOTAVAIL            MAKE_DDHRESULT( 40 )
  2567.  
  2568. /*
  2569.  * An exception was encountered while performing the requested operation
  2570.  */
  2571. #define DDERR_EXCEPTION                MAKE_DDHRESULT( 55 )
  2572.  
  2573. /*
  2574.  * Generic failure.
  2575.  */
  2576. #define DDERR_GENERIC                E_FAIL
  2577.  
  2578. /*
  2579.  * Height of rectangle provided is not a multiple of reqd alignment
  2580.  */
  2581. #define DDERR_HEIGHTALIGN            MAKE_DDHRESULT( 90 )
  2582.  
  2583. /*
  2584.  * Unable to match primary surface creation request with existing 
  2585.  * primary surface.
  2586.  */
  2587. #define DDERR_INCOMPATIBLEPRIMARY        MAKE_DDHRESULT( 95 )
  2588.  
  2589. /*
  2590.  * One or more of the caps bits passed to the callback are incorrect.
  2591.  */
  2592. #define DDERR_INVALIDCAPS            MAKE_DDHRESULT( 100 )
  2593.  
  2594. /*
  2595.  * DirectDraw does not support provided Cliplist.
  2596.  */
  2597. #define DDERR_INVALIDCLIPLIST            MAKE_DDHRESULT( 110 )
  2598.  
  2599. /*
  2600.  * DirectDraw does not support the requested mode
  2601.  */
  2602. #define DDERR_INVALIDMODE            MAKE_DDHRESULT( 120 )
  2603.  
  2604. /*
  2605.  * DirectDraw received a pointer that was an invalid DIRECTDRAW object.
  2606.  */
  2607. #define DDERR_INVALIDOBJECT            MAKE_DDHRESULT( 130 )
  2608.  
  2609. /*
  2610.  * One or more of the parameters passed to the callback function are
  2611.  * incorrect.
  2612.  */
  2613. #define DDERR_INVALIDPARAMS            E_INVALIDARG
  2614.  
  2615. /*
  2616.  * pixel format was invalid as specified
  2617.  */
  2618. #define DDERR_INVALIDPIXELFORMAT        MAKE_DDHRESULT( 145 )
  2619.  
  2620. /*
  2621.  * Rectangle provided was invalid.
  2622.  */
  2623. #define DDERR_INVALIDRECT            MAKE_DDHRESULT( 150 )
  2624.  
  2625. /*
  2626.  * Operation could not be carried out because one or more surfaces are locked
  2627.  */
  2628. #define DDERR_LOCKEDSURFACES            MAKE_DDHRESULT( 160 )
  2629.  
  2630. /*
  2631.  * There is no 3D present.
  2632.  */
  2633. #define DDERR_NO3D                MAKE_DDHRESULT( 170 )
  2634.  
  2635. /*
  2636.  * Operation could not be carried out because there is no alpha accleration
  2637.  * hardware present or available.
  2638.  */
  2639. #define DDERR_NOALPHAHW                MAKE_DDHRESULT( 180 )
  2640.  
  2641.  
  2642. /*
  2643.  * no clip list available
  2644.  */
  2645. #define DDERR_NOCLIPLIST            MAKE_DDHRESULT( 205 )
  2646.  
  2647. /*
  2648.  * Operation could not be carried out because there is no color conversion
  2649.  * hardware present or available.
  2650.  */
  2651. #define DDERR_NOCOLORCONVHW            MAKE_DDHRESULT( 210 )
  2652.  
  2653. /*
  2654.  * Create function called without DirectDraw object method SetCooperativeLevel
  2655.  * being called.
  2656.  */
  2657. #define DDERR_NOCOOPERATIVELEVELSET        MAKE_DDHRESULT( 212 )
  2658.  
  2659. /*
  2660.  * Surface doesn't currently have a color key
  2661.  */
  2662. #define DDERR_NOCOLORKEY            MAKE_DDHRESULT( 215 )
  2663.  
  2664. /*
  2665.  * Operation could not be carried out because there is no hardware support
  2666.  * of the dest color key.
  2667.  */
  2668. #define DDERR_NOCOLORKEYHW            MAKE_DDHRESULT( 220 )
  2669.  
  2670. /*
  2671.  * No DirectDraw support possible with current display driver
  2672.  */
  2673. #define DDERR_NODIRECTDRAWSUPPORT        MAKE_DDHRESULT( 222 )
  2674.  
  2675. /*
  2676.  * Operation requires the application to have exclusive mode but the
  2677.  * application does not have exclusive mode.
  2678.  */
  2679. #define DDERR_NOEXCLUSIVEMODE            MAKE_DDHRESULT( 225 )
  2680.  
  2681. /*
  2682.  * Flipping visible surfaces is not supported.
  2683.  */
  2684. #define DDERR_NOFLIPHW                MAKE_DDHRESULT( 230 )
  2685.  
  2686. /*
  2687.  * There is no GDI present.
  2688.  */
  2689. #define DDERR_NOGDI                MAKE_DDHRESULT( 240 )
  2690.  
  2691. /*
  2692.  * Operation could not be carried out because there is no hardware present
  2693.  * or available.
  2694.  */
  2695. #define DDERR_NOMIRRORHW            MAKE_DDHRESULT( 250 )
  2696.  
  2697. /*
  2698.  * Requested item was not found
  2699.  */
  2700. #define DDERR_NOTFOUND                MAKE_DDHRESULT( 255 )
  2701.  
  2702. /*
  2703.  * Operation could not be carried out because there is no overlay hardware
  2704.  * present or available.
  2705.  */
  2706. #define DDERR_NOOVERLAYHW            MAKE_DDHRESULT( 260 )
  2707.  
  2708. /*
  2709.  * Operation could not be carried out because there is no appropriate raster
  2710.  * op hardware present or available.
  2711.  */
  2712. #define DDERR_NORASTEROPHW            MAKE_DDHRESULT( 280 )
  2713.  
  2714. /*
  2715.  * Operation could not be carried out because there is no rotation hardware
  2716.  * present or available.
  2717.  */
  2718. #define DDERR_NOROTATIONHW            MAKE_DDHRESULT( 290 )
  2719.  
  2720. /*
  2721.  * Operation could not be carried out because there is no hardware support
  2722.  * for stretching
  2723.  */
  2724. #define DDERR_NOSTRETCHHW            MAKE_DDHRESULT( 310 )
  2725.  
  2726. /*
  2727.  * DirectDrawSurface is not in 4 bit color palette and the requested operation
  2728.  * requires 4 bit color palette.
  2729.  */
  2730. #define DDERR_NOT4BITCOLOR            MAKE_DDHRESULT( 316 )
  2731.  
  2732. /*
  2733.  * DirectDrawSurface is not in 4 bit color index palette and the requested
  2734.  * operation requires 4 bit color index palette.
  2735.  */
  2736. #define DDERR_NOT4BITCOLORINDEX            MAKE_DDHRESULT( 317 )
  2737.  
  2738. /*
  2739.  * DirectDraw Surface is not in 8 bit color mode and the requested operation
  2740.  * requires 8 bit color.
  2741.  */
  2742. #define DDERR_NOT8BITCOLOR            MAKE_DDHRESULT( 320 )
  2743.  
  2744. /*
  2745.  * Operation could not be carried out because there is no texture mapping
  2746.  * hardware present or available.
  2747.  */
  2748. #define DDERR_NOTEXTUREHW            MAKE_DDHRESULT( 330 )
  2749.  
  2750. /*
  2751.  * Operation could not be carried out because there is no hardware support
  2752.  * for vertical blank synchronized operations.
  2753.  */
  2754. #define DDERR_NOVSYNCHW                MAKE_DDHRESULT( 335 )
  2755.  
  2756. /*
  2757.  * Operation could not be carried out because there is no hardware support
  2758.  * for zbuffer blting.
  2759.  */
  2760. #define DDERR_NOZBUFFERHW            MAKE_DDHRESULT( 340 )
  2761.  
  2762. /*
  2763.  * Overlay surfaces could not be z layered based on their BltOrder because
  2764.  * the hardware does not support z layering of overlays.
  2765.  */
  2766. #define DDERR_NOZOVERLAYHW            MAKE_DDHRESULT( 350 )
  2767.  
  2768. /*
  2769.  * The hardware needed for the requested operation has already been
  2770.  * allocated.
  2771.  */
  2772. #define DDERR_OUTOFCAPS                MAKE_DDHRESULT( 360 )
  2773.  
  2774. /*
  2775.  * DirectDraw does not have enough memory to perform the operation.
  2776.  */
  2777. #define DDERR_OUTOFMEMORY            E_OUTOFMEMORY
  2778.  
  2779. /*
  2780.  * DirectDraw does not have enough memory to perform the operation.
  2781.  */
  2782. #define DDERR_OUTOFVIDEOMEMORY            MAKE_DDHRESULT( 380 )
  2783.  
  2784. /*
  2785.  * hardware does not support clipped overlays
  2786.  */
  2787. #define DDERR_OVERLAYCANTCLIP            MAKE_DDHRESULT( 382 )
  2788.  
  2789. /*
  2790.  * Can only have ony color key active at one time for overlays
  2791.  */
  2792. #define DDERR_OVERLAYCOLORKEYONLYONEACTIVE    MAKE_DDHRESULT( 384 )
  2793.  
  2794. /*
  2795.  * Access to this palette is being refused because the palette is already
  2796.  * locked by another thread.
  2797.  */
  2798. #define DDERR_PALETTEBUSY            MAKE_DDHRESULT( 387 )
  2799.  
  2800. /*
  2801.  * No src color key specified for this operation.
  2802.  */
  2803. #define DDERR_COLORKEYNOTSET            MAKE_DDHRESULT( 400 )
  2804.  
  2805. /*
  2806.  * This surface is already attached to the surface it is being attached to.
  2807.  */
  2808. #define DDERR_SURFACEALREADYATTACHED        MAKE_DDHRESULT( 410 )
  2809.  
  2810. /*
  2811.  * This surface is already a dependency of the surface it is being made a
  2812.  * dependency of.
  2813.  */
  2814. #define DDERR_SURFACEALREADYDEPENDENT        MAKE_DDHRESULT( 420 )
  2815.  
  2816. /*
  2817.  * Access to this surface is being refused because the surface is already
  2818.  * locked by another thread.
  2819.  */
  2820. #define DDERR_SURFACEBUSY            MAKE_DDHRESULT( 430 )
  2821.  
  2822. /*
  2823.  * Access to this surface is being refused because no driver exists
  2824.  * which can supply a pointer to the surface.
  2825.  * This is most likely to happen when attempting to lock the primary
  2826.  * surface when no DCI provider is present.
  2827.  */
  2828. #define DDERR_CANTLOCKSURFACE                   MAKE_DDHRESULT( 435 )
  2829.  
  2830. /*
  2831.  * Access to Surface refused because Surface is obscured.
  2832.  */
  2833. #define DDERR_SURFACEISOBSCURED            MAKE_DDHRESULT( 440 )
  2834.  
  2835. /*
  2836.  * Access to this surface is being refused because the surface is gone.
  2837.  * The DIRECTDRAWSURFACE object representing this surface should 
  2838.  * have Restore called on it.
  2839.  */
  2840. #define DDERR_SURFACELOST            MAKE_DDHRESULT( 450 )
  2841.  
  2842. /*
  2843.  * The requested surface is not attached.
  2844.  */
  2845. #define DDERR_SURFACENOTATTACHED        MAKE_DDHRESULT( 460 )
  2846.  
  2847. /*
  2848.  * Height requested by DirectDraw is too large.
  2849.  */
  2850. #define DDERR_TOOBIGHEIGHT            MAKE_DDHRESULT( 470 )
  2851.  
  2852. /*
  2853.  * Size requested by DirectDraw is too large --     The individual height and
  2854.  * width are OK.
  2855.  */
  2856. #define DDERR_TOOBIGSIZE            MAKE_DDHRESULT( 480 )
  2857.  
  2858. /*
  2859.  * Width requested by DirectDraw is too large.
  2860.  */
  2861. #define DDERR_TOOBIGWIDTH            MAKE_DDHRESULT( 490 )
  2862.  
  2863. /*
  2864.  * Action not supported.
  2865.  */
  2866. #define DDERR_UNSUPPORTED            E_NOTIMPL
  2867.  
  2868. /*
  2869.  * FOURCC format requested is unsupported by DirectDraw
  2870.  */
  2871. #define DDERR_UNSUPPORTEDFORMAT            MAKE_DDHRESULT( 510 )
  2872.  
  2873. /*
  2874.  * Bitmask in the pixel format requested is unsupported by DirectDraw
  2875.  */
  2876. #define DDERR_UNSUPPORTEDMASK            MAKE_DDHRESULT( 520 )
  2877.  
  2878. /*
  2879.  * vertical blank is in progress
  2880.  */
  2881. #define DDERR_VERTICALBLANKINPROGRESS        MAKE_DDHRESULT( 537 )
  2882.  
  2883. /*
  2884.  * Informs DirectDraw that the previous Blt which is transfering information
  2885.  * to or from this Surface is incomplete.
  2886.  */
  2887. #define DDERR_WASSTILLDRAWING            MAKE_DDHRESULT( 540 )
  2888.  
  2889.  
  2890. /*
  2891.  * Rectangle provided was not horizontally aligned on reqd. boundary
  2892.  */
  2893. #define DDERR_XALIGN                MAKE_DDHRESULT( 560 )
  2894.  
  2895. /*
  2896.  * The GUID passed to DirectDrawCreate is not a valid DirectDraw driver
  2897.  * identifier.
  2898.  */
  2899. #define DDERR_INVALIDDIRECTDRAWGUID        MAKE_DDHRESULT( 561 )
  2900.  
  2901. /*
  2902.  * A DirectDraw object representing this driver has already been created
  2903.  * for this process.
  2904.  */
  2905. #define DDERR_DIRECTDRAWALREADYCREATED        MAKE_DDHRESULT( 562 )
  2906.  
  2907. /*
  2908.  * A hardware only DirectDraw object creation was attempted but the driver
  2909.  * did not support any hardware.
  2910.  */
  2911. #define DDERR_NODIRECTDRAWHW            MAKE_DDHRESULT( 563 )
  2912.  
  2913. /*
  2914.  * this process already has created a primary surface
  2915.  */
  2916. #define DDERR_PRIMARYSURFACEALREADYEXISTS    MAKE_DDHRESULT( 564 )
  2917.  
  2918. /*
  2919.  * software emulation not available.
  2920.  */
  2921. #define DDERR_NOEMULATION            MAKE_DDHRESULT( 565 )
  2922.  
  2923. /*
  2924.  * region passed to Clipper::GetClipList is too small.
  2925.  */
  2926. #define DDERR_REGIONTOOSMALL            MAKE_DDHRESULT( 566 )
  2927.  
  2928. /*
  2929.  * an attempt was made to set a clip list for a clipper objec that
  2930.  * is already monitoring an hwnd.
  2931.  */
  2932. #define DDERR_CLIPPERISUSINGHWND        MAKE_DDHRESULT( 567 )
  2933.  
  2934. /*
  2935.  * No clipper object attached to surface object
  2936.  */
  2937. #define DDERR_NOCLIPPERATTACHED            MAKE_DDHRESULT( 568 )
  2938.  
  2939. /*
  2940.  * Clipper notification requires an HWND or
  2941.  * no HWND has previously been set as the CooperativeLevel HWND.
  2942.  */
  2943. #define DDERR_NOHWND                MAKE_DDHRESULT( 569 )
  2944.  
  2945. /*
  2946.  * HWND used by DirectDraw CooperativeLevel has been subclassed,
  2947.  * this prevents DirectDraw from restoring state.
  2948.  */
  2949. #define DDERR_HWNDSUBCLASSED            MAKE_DDHRESULT( 570 )
  2950.  
  2951. /*
  2952.  * The CooperativeLevel HWND has already been set.
  2953.  * It can not be reset while the process has surfaces or palettes created.
  2954.  */
  2955. #define DDERR_HWNDALREADYSET            MAKE_DDHRESULT( 571 )
  2956.  
  2957. /*
  2958.  * No palette object attached to this surface.
  2959.  */
  2960. #define DDERR_NOPALETTEATTACHED            MAKE_DDHRESULT( 572 )
  2961.  
  2962. /*
  2963.  * No hardware support for 16 or 256 color palettes.
  2964.  */
  2965. #define DDERR_NOPALETTEHW            MAKE_DDHRESULT( 573 )
  2966.  
  2967. /*
  2968.  * If a clipper object is attached to the source surface passed into a
  2969.  * BltFast call.
  2970.  */
  2971. #define DDERR_BLTFASTCANTCLIP            MAKE_DDHRESULT( 574 )
  2972.  
  2973. /*
  2974.  * No blter.
  2975.  */
  2976. #define DDERR_NOBLTHW                MAKE_DDHRESULT( 575 )
  2977.  
  2978. /*
  2979.  * No DirectDraw ROP hardware.
  2980.  */
  2981. #define DDERR_NODDROPSHW            MAKE_DDHRESULT( 576 )
  2982.  
  2983. /*
  2984.  * returned when GetOverlayPosition is called on a hidden overlay
  2985.  */
  2986. #define DDERR_OVERLAYNOTVISIBLE            MAKE_DDHRESULT( 577 )
  2987.  
  2988. /*
  2989.  * returned when GetOverlayPosition is called on a overlay that UpdateOverlay
  2990.  * has never been called on to establish a destionation.
  2991.  */
  2992. #define DDERR_NOOVERLAYDEST            MAKE_DDHRESULT( 578 )
  2993.  
  2994. /*
  2995.  * returned when the position of the overlay on the destionation is no longer
  2996.  * legal for that destionation.
  2997.  */
  2998. #define DDERR_INVALIDPOSITION            MAKE_DDHRESULT( 579 )
  2999.  
  3000. /*
  3001.  * returned when an overlay member is called for a non-overlay surface
  3002.  */
  3003. #define DDERR_NOTAOVERLAYSURFACE        MAKE_DDHRESULT( 580 )
  3004.  
  3005. /*
  3006.  * An attempt was made to set the cooperative level when it was already
  3007.  * set to exclusive.
  3008.  */
  3009. #define DDERR_EXCLUSIVEMODEALREADYSET        MAKE_DDHRESULT( 581 )
  3010.  
  3011. /*
  3012.  * An attempt has been made to flip a surface that is not flippable.
  3013.  */
  3014. #define DDERR_NOTFLIPPABLE            MAKE_DDHRESULT( 582 )
  3015.  
  3016. /*
  3017.  * Can't duplicate primary & 3D surfaces, or surfaces that are implicitly
  3018.  * created.
  3019.  */
  3020. #define DDERR_CANTDUPLICATE            MAKE_DDHRESULT( 583 )
  3021.  
  3022. /*
  3023.  * Surface was not locked.  An attempt to unlock a surface that was not
  3024.  * locked at all, or by this process, has been attempted.
  3025.  */
  3026. #define DDERR_NOTLOCKED                MAKE_DDHRESULT( 584 )
  3027.  
  3028. /*
  3029.  * Windows can not create any more DCs
  3030.  */
  3031. #define DDERR_CANTCREATEDC            MAKE_DDHRESULT( 585 )
  3032.  
  3033. /*
  3034.  * No DC was ever created for this surface.
  3035.  */
  3036. #define DDERR_NODC                MAKE_DDHRESULT( 586 )
  3037.  
  3038. /*
  3039.  * This surface can not be restored because it was created in a different
  3040.  * mode.
  3041.  */
  3042. #define DDERR_WRONGMODE                MAKE_DDHRESULT( 587 )
  3043.  
  3044. /*
  3045.  * This surface can not be restored because it is an implicitly created
  3046.  * surface.
  3047.  */
  3048. #define DDERR_IMPLICITLYCREATED            MAKE_DDHRESULT( 588 )
  3049.  
  3050. /*
  3051.  * The surface being used is not a palette-based surface
  3052.  */
  3053. #define DDERR_NOTPALETTIZED            MAKE_DDHRESULT( 589 )
  3054.  
  3055.  
  3056. /*
  3057.  * The display is currently in an unsupported mode
  3058.  */
  3059. #define DDERR_UNSUPPORTEDMODE            MAKE_DDHRESULT( 590 )
  3060.  
  3061. /*
  3062.  * Operation could not be carried out because there is no mip-map
  3063.  * texture mapping hardware present or available.
  3064.  */
  3065. #define DDERR_NOMIPMAPHW            MAKE_DDHRESULT( 591 )
  3066.  
  3067. /*
  3068.  * The requested action could not be performed because the surface was of
  3069.  * the wrong type.
  3070.  */
  3071. #define DDERR_INVALIDSURFACETYPE                MAKE_DDHRESULT( 592 )
  3072.  
  3073.  
  3074.  
  3075. /*
  3076.  * A DC has already been returned for this surface. Only one DC can be 
  3077.  * retrieved per surface.
  3078.  */
  3079. #define DDERR_DCALREADYCREATED            MAKE_DDHRESULT( 620 )
  3080.  
  3081. /*
  3082.  * The attempt to page lock a surface failed.
  3083.  */
  3084. #define DDERR_CANTPAGELOCK            MAKE_DDHRESULT( 640 )
  3085.  
  3086. /*
  3087.  * The attempt to page unlock a surface failed.
  3088.  */
  3089. #define DDERR_CANTPAGEUNLOCK            MAKE_DDHRESULT( 660 )
  3090.  
  3091. /*
  3092.  * An attempt was made to page unlock a surface with no outstanding page locks.
  3093.  */
  3094. #define DDERR_NOTPAGELOCKED            MAKE_DDHRESULT( 680 )
  3095.  
  3096. /*
  3097.  * An attempt was made to invoke an interface member of a DirectDraw object
  3098.  * created by CoCreateInstance() before it was initialized.
  3099.  */
  3100. #define DDERR_NOTINITIALIZED                    CO_E_NOTINITIALIZED
  3101.  
  3102. /* Alpha bit depth constants */
  3103.  
  3104.  
  3105. #ifdef __cplusplus
  3106. };
  3107. #endif
  3108.  
  3109. #pragma option -b.
  3110. #endif
  3111.