MMDDraw.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:103k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {========================================================================}
  2. {=                (c) 1995-98 SwiftSoft Ronald Dittrich                 =}
  3. {========================================================================}
  4. {=                          All Rights Reserved                         =}
  5. {========================================================================}
  6. {=  D 01099 Dresden             = Tel.: +0351-8012255                   =}
  7. {=  Loewenstr.7a                = info@swiftsoft.de                     =}
  8. {========================================================================}
  9. {=  Actual versions on http://www.swiftsoft.de/mmtools.html             =}
  10. {========================================================================}
  11. {=  This code is for reference purposes only and may not be copied or   =}
  12. {=  distributed in any format electronic or otherwise except one copy   =}
  13. {=  for backup purposes.                                                =}
  14. {=                                                                      =}
  15. {=  No Delphi Component Kit or Component individually or in a collection=}
  16. {=  subclassed or otherwise from the code in this unit, or associated   =}
  17. {=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
  18. {=  without express permission from SwiftSoft.                          =}
  19. {=                                                                      =}
  20. {=  For more licence informations please refer to the associated        =}
  21. {=  HelpFile.                                                           =}
  22. {========================================================================}
  23. {=  $Date: 20.01.1998 - 18:00:00 $                                      =}
  24. {========================================================================}
  25. {=  Aufgabe: DirectDraw Unit                                            =}
  26. {========================================================================}
  27. {=  This code is for reference purposes only and may not be copied or   =}
  28. {=  distributed in any format electronic or otherwise except one copy   =}
  29. {=  for backup purposes.                                                =}
  30. {=                                                                      =}
  31. {=  No Delphi Component Kit or Component individually or in a collection=}
  32. {=  subclassed or otherwise from the code in this unit, or associated   =}
  33. {=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
  34. {=  without express permission from SwiftSoft.                          =}
  35. {=                                                                      =}
  36. {=  For more licence informations please refer to the associated        =}
  37. {=  HelpFile.                                                           =}
  38. {========================================================================}
  39. unit MMDDraw;
  40. {$I COMPILER.INC}
  41. interface
  42. uses
  43.     Windows,
  44.     MMOle2;
  45. type
  46.     PVOID       = Pointer;
  47.     LONG        = LongInt;
  48.     PLONG       = ^LONG;
  49.     PUnknown    = ^IUnknown;
  50.     PHWND       = ^HWND;
  51.     PHDC        = ^HDC;
  52. {== GUIDs used by DirectDraw objects =========================================}
  53. const
  54.     CLSID_DirectDraw            : TGUID =
  55.         (D1:$D7B70EE0;D2:$4340;D3:$11CF;D4:($B0,$63,$00,$20,$AF,$C2,$CD,$35));
  56.     CLSID_DirectDrawClipper     : TGUID =
  57.         (D1:$593817A0;D2:$7DB3;D3:$11CF;D4:($A2,$DE,$00,$AA,$00,$B9,$33,$56));
  58.     IID_IDirectDraw             : TGUID =
  59.         (D1:$6C14DB80;D2:$A733;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));
  60.     IID_IDirectDraw2            : TGUID =
  61.         (D1:$B3A6F3E0;D2:$2B43;D3:$11CF;D4:($A2,$DE,$00,$AA,$00,$B9,$33,$56));
  62.     IID_IDirectDrawSurface      : TGUID =
  63.         (D1:$6C14DB81;D2:$A733;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));
  64.     IID_IDirectDrawSurface2     : TGUID =
  65.         (D1:$57805885;D2:$6EEC;D3:$11CF;D4:($94,$41,$A8,$23,$03,$C1,$0E,$27));
  66.     IID_IDirectDrawPalette      : TGUID =
  67.         (D1:$6C14DB84;D2:$A733;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));
  68.     IID_IDirectDrawClipper      : TGUID =
  69.         (D1:$6C14DB85;D2:$A733;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));
  70. {== Various structures used to invoke DirectDraw =============================}
  71. const
  72.     REGSTR_KEY_DDHW_DESCRIPTION     = 'Description';
  73.     REGSTR_KEY_DDHW_DRIVERNAME      = 'DriverName';
  74.     REGSTR_PATH_DDHW                = 'HardwareDirectDrawDrivers';
  75.     DDCREATE_HARDWAREONLY           = $00000001;
  76.     DDCREATE_EMULATIONONLY          = $00000002;
  77. {== Interfaces follow ========================================================}
  78. const
  79.     DD_ROP_SPACE                    = (256 div 32); // space required to store ROP array
  80. type
  81.     PDirectDrawSurface              = ^IDirectDrawSurface;
  82.     IDirectDrawSurface              = class;
  83.     PDirectDrawClipper              = ^IDirectDrawClipper;
  84.     IDirectDrawClipper              = class;
  85.     PDirectDrawPalette              = ^IDirectDrawPalette;
  86.     IDirectDrawPalette              = class;
  87. {-- TDDCOLORKEY --------------------------------------------------------------}
  88.     PDDCOLORKEY                     = ^TDDCOLORKEY;
  89.     TDDCOLORKEY                     = record
  90.         dwColorSpaceLowValue    : DWORD;            // low boundary of color space that is to
  91.                                                     // be treated as Color Key, inclusive
  92.         dwColorSpaceHighValue   : DWORD;            // high boundary of color space that is
  93.                                                     // to be treated as Color Key, inclusive
  94.     end;
  95. {-- TDDBLTFX - used to pass override information to the surface callback Blt -}
  96.     TDWDDSurface                    = record
  97.         case Byte of
  98.             0: (dw: DWORD);                         // Constant to use as Z buffer
  99.             1: (lpDDS: PDIRECTDRAWSURFACE);        // Surface to use as Z buffer
  100.     end;
  101.     TDDFillStyle                    = record
  102.         case Byte of
  103.             0: (dwFillColor: DWORD);                // color in RGB or Palettized
  104.             1: (dwFillDepth: DWORD);                // depth value for z-buffer
  105.             2: (lpDDSPattern: PDIRECTDRAWSURFACE);  // Surface to use as pattern
  106.     end;
  107.     PDDBLTFX                        = ^TDDBLTFX;
  108.     TDDBLTFX                        = record
  109.         dwSize                      : DWORD;        // size of structure
  110.         dwDDFX                      : DWORD;        // FX operations
  111.         dwROP                       : DWORD;        // Win32 raster operations
  112.         dwDDROP                     : DWORD;        // Raster operations new for DirectDraw
  113.         dwRotationAngle             : DWORD;        // Rotation angle for blt
  114.         dwZBufferOpCode             : DWORD;        // ZBuffer compares
  115.         dwZBufferLow                : DWORD;        // Low limit of Z buffer
  116.         dwZBufferHigh               : DWORD;        // High limit of Z buffer
  117.         dwZBufferBaseDest           : DWORD;        // Destination base value
  118.         dwZDestConstBitDepth        : DWORD;        // Bit depth used to specify Z constant for destination
  119.         ZDest                       : TDWDDSurface;
  120.         dwZSrcConstBitDepth         : DWORD;        // Bit depth used to specify Z constant for source
  121.         ZSrc                        : TDWDDSurface;
  122.         dwAlphaEdgeBlendBitDepth    : DWORD;        // Bit depth used to specify constant for alpha edge blend
  123.         dwAlphaEdgeBlend            : DWORD;        // Alpha for edge blending
  124.         dwReserved                  : DWORD;
  125.         dwAlphaDestConstBitDepth    : DWORD;        // Bit depth used to specify alpha constant for destination
  126.         AlphaDest                   : TDWDDSurface;
  127.         dwAlphaSrcConstBitDepth     : DWORD;        // Bit depth used to specify alpha constant for source
  128.         AlphaSrc                    : TDWDDSurface;
  129.         Fill                        : TDDFillStyle;
  130.         ddckDestColorkey            : TDDCOLORKEY;  // DestColorkey override
  131.         ddckSrcColorkey             : TDDCOLORKEY;  // SrcColorkey override
  132.     end;
  133. {-- TDDSCAPS -----------------------------------------------------------------}
  134.     PDDSCAPS                        = ^TDDSCAPS;
  135.     TDDSCAPS                        = record
  136.         dwCaps                      : DWORD;        // capabilities of surface wanted
  137.     end;
  138. {-- TDDCAPS ------------------------------------------------------------------}
  139.     PDDCAPS                         = ^TDDCAPS;
  140.     TDDCAPS                         = record
  141.         dwSize                          : DWORD;    // size of the DDDRIVERCAPS structure
  142.         dwCaps                          : DWORD;    // driver specific capabilities
  143.         dwCaps2                         : DWORD;    // more driver specific capabilites
  144.         dwCKeyCaps                      : DWORD;    // color key capabilities of the surface
  145.         dwFXCaps                        : DWORD;    // driver specific stretching and effects capabilites
  146.         dwFXAlphaCaps                   : DWORD;    // alpha driver specific capabilities
  147.         dwPalCaps                       : DWORD;    // palette capabilities
  148.         dwSVCaps                        : DWORD;    // stereo vision capabilities
  149.         dwAlphaBltConstBitDepths        : DWORD;    // DDBD_2,4,8
  150.         dwAlphaBltPixelBitDepths        : DWORD;    // DDBD_1,2,4,8
  151.         dwAlphaBltSurfaceBitDepths      : DWORD;    // DDBD_1,2,4,8
  152.         dwAlphaOverlayConstBitDepths    : DWORD;    // DDBD_2,4,8
  153.         dwAlphaOverlayPixelBitDepths    : DWORD;    // DDBD_1,2,4,8
  154.         dwAlphaOverlaySurfaceBitDepths  : DWORD;    // DDBD_1,2,4,8
  155.         dwZBufferBitDepths              : DWORD;    // DDBD_8,16,24,32
  156.         dwVidMemTotal                   : DWORD;    // total amount of video memory
  157.         dwVidMemFree                    : DWORD;    // amount of free video memory
  158.         dwMaxVisibleOverlays            : DWORD;    // maximum number of visible overlays
  159.         dwCurrVisibleOverlays           : DWORD;    // current number of visible overlays
  160.         dwNumFourCCCodes                : DWORD;    // number of four cc codes
  161.         dwAlignBoundarySrc              : DWORD;    // source rectangle alignment
  162.         dwAlignSizeSrc                  : DWORD;    // source rectangle byte size
  163.         dwAlignBoundaryDest             : DWORD;    // dest rectangle alignment
  164.         dwAlignSizeDest                 : DWORD;    // dest rectangle byte size
  165.         dwAlignStrideAlign              : DWORD;    // stride alignment
  166.         dwRops                          : array[0..DD_ROP_SPACE-1] of DWORD;
  167.                                                     // ROPS supported
  168.         ddsCaps                         : TDDSCAPS; // DDSCAPS structure has all the general capabilities
  169.         dwMinOverlayStretch             : DWORD;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  170.         dwMaxOverlayStretch             : DWORD;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  171.         dwMinLiveVideoStretch           : DWORD;    // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  172.         dwMaxLiveVideoStretch           : DWORD;    // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  173.         dwMinHwCodecStretch             : DWORD;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  174.         dwMaxHwCodecStretch             : DWORD;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  175.         dwReserved1                     : DWORD;    // reserved
  176.         dwReserved2                     : DWORD;    // reserved
  177.         dwReserved3                     : DWORD;    // reserved
  178.         dwSVBCaps                       : DWORD;    // driver specific capabilities for System->Vmem blts
  179.         dwSVBCKeyCaps                   : DWORD;    // driver color key capabilities for System->Vmem blts
  180.         dwSVBFXCaps                     : DWORD;    // driver FX capabilities for System->Vmem blts
  181.         dwSVBRops                       : array[0..DD_ROP_SPACE-1] of DWORD;
  182.                                                     // ROPS supported for System->Vmem blts
  183.         dwVSBCaps                       : DWORD;    // driver specific capabilities for Vmem->System blts
  184.         dwVSBCKeyCaps                   : DWORD;    // driver color key capabilities for Vmem->System blts
  185.         dwVSBFXCaps                     : DWORD;    // driver FX capabilities for Vmem->System blts
  186.         dwVSBRops                       : array[0..DD_ROP_SPACE-1] of DWORD;
  187.                                                     // ROPS supported for Vmem->System blts
  188.         dwSSBCaps                       : DWORD;    // driver specific capabilities for System->System blts
  189.         dwSSBCKeyCaps                   : DWORD;    // driver color key capabilities for System->System blts
  190.         dwSSBFXCaps                     : DWORD;    // driver FX capabilities for System->System blts
  191.         dwSSBRops                       : array[0..DD_ROP_SPACE-1] of DWORD;
  192.                                                     // ROPS supported for System->System blts
  193.         dwReserved4                     : DWORD;    // reserved
  194.         dwReserved5                     : DWORD;    // reserved
  195.         dwReserved6                     : DWORD;    // reserved
  196.     end;
  197. {-- TDDPIXELFORMAT -----------------------------------------------------------}
  198.     PDDPIXELFORMAT                      = ^TDDPIXELFORMAT;
  199.     TDDPIXELFORMAT                      = record
  200.         dwSize                          : DWORD;    // size of structure
  201.         dwFlags                         : DWORD;    // pixel format flags
  202.         dwFourCC                        : DWORD;    // (FOURCC code)
  203.         case Byte of
  204.             0:(dwRGBBitCount: DWORD; dwRBitMask: DWORD; dwGBitMask: DWORD; dwBBitMask: DWORD; dwRGBAlphaBitMask: DWORD);
  205.             1:(dwYUVBitCount: DWORD; dwYBitMask: DWORD; dwUBitMask: DWORD; dwVBitMask: DWORD; dwYUVAlphaBitMask: DWORD);
  206.               // how many bits for z buffers
  207.             2:(dwZBufferBitDepth: DWORD);
  208.               // how many bits for alpha channels
  209.             3:(dwAlphaBitDepth: DWORD);
  210.     end;
  211. {-- TDDOVERLAYFX -------------------------------------------------------------}
  212.     PDDOVERLAYFX                        = ^TDDOVERLAYFX;
  213.     TDDOVERLAYFX                        = record
  214.         dwSize                          : DWORD;        // size of structure
  215.         dwAlphaEdgeBlendBitDepth        : DWORD;        // Bit depth used to specify constant for alpha edge blend
  216.         dwAlphaEdgeBlend                : DWORD;        // Constant to use as alpha for edge blend
  217.         dwReserved                      : DWORD;
  218.         dwAlphaDestConstBitDepth        : DWORD;        // Bit depth used to specify alpha constant for destination
  219.         AlphaDest                       : TDWDDSurface;
  220.         dwAlphaSrcConstBitDepth         : DWORD;        // Bit depth used to specify alpha constant for source
  221.         AlphaSrc                        : TDWDDSurface;
  222.         dckDestColorkey                 : TDDCOLORKEY;  // DestColorkey override
  223.         dckSrcColorkey                  : TDDCOLORKEY;
  224.         dwDDFX                          : DWORD;        // Overlay FX
  225.         dwFlags                         : DWORD;        // flags
  226.     end;
  227. {-- TDDBLTBATCH --------------------------------------------------------------}
  228.     PDDBLTBATCH                         = ^TDDBLTBATCH;
  229.     TDDBLTBATCH                         = record
  230.         lprDest                         : PRECT;
  231.         lpDDSSrc                        : PDIRECTDRAWSURFACE;
  232.         lprSrc                          : PRECT;
  233.         dwFlags                         : DWORD;
  234.         lpDDBltFx                       : PDDBLTFX;
  235.     end;
  236. {-- Callbacks ----------------------------------------------------------------}
  237.     PCLIPPERCALLBACK                    = function(lpDDClipper: PDIRECTDRAWCLIPPER; hWnd: HWND; code: DWORD; lpContext: PVOID): DWORD; pascal;
  238. // #ifdef STREAMING
  239. // typedef DWORD   (FAR PASCAL *LPSURFACESTREAMINGCALLBACK)(DWORD);
  240. // #endif
  241. {-- TDDSURFACEDESC -----------------------------------------------------------}
  242.     TDDSurfaceValue                     = record
  243.         case Byte of
  244.             0: (dwMipMapCount: DWORD);      // number of mip-map levels requested
  245.             1: (dwZBufferBitDepth: DWORD);  // depth of Z buffer requested
  246.             2: (dwRefreshRate: DWORD);      // refresh rate (used when display mode is described)
  247.     end;
  248.     PDDSURFACEDESC                      = ^TDDSURFACEDESC;
  249.     TDDSURFACEDESC                      = record
  250.         dwSize                          : DWORD;            // size of the DDSURFACEDESC structure
  251.         dwFlags                         : DWORD;            // determines what fields are valid
  252.         dwHeight                        : DWORD;            // height of surface to be created
  253.         dwWidth                         : DWORD;            // width of input surface
  254.         lPitch                          : LONG;             // distance to start of next line (return value only)
  255.         dwBackBufferCount               : DWORD;            // number of back buffers requested
  256.         Value                           : TDDSurfaceValue;
  257.         dwAlphaBitDepth                 : DWORD;            // depth of alpha buffer requested
  258.         dwReserved                      : DWORD;            // reserved
  259.         lpSurface                       : PVOID;            // pointer to the associated surface memory
  260.         ddckCKDestOverlay               : TDDCOLORKEY;      // color key for destination overlay use
  261.         ddckCKDestBlt                   : TDDCOLORKEY;      // color key for destination blt use
  262.         ddckCKSrcOverlay                : TDDCOLORKEY;      // color key for source overlay use
  263.         ddckCKSrcBlt                    : TDDCOLORKEY;      // color key for source blt use
  264.         ddpfPixelFormat                 : TDDPIXELFORMAT;   // pixel format description of the surface
  265.         ddsCaps                         : TDDSCAPS;         // direct draw surface capabilities
  266.     end;
  267.     PDDENUMCALLBACKA                = function(pGUID: PGUID; lpDriverDescription, lpDriverName: LPSTR; lpContext: PVOID): BOOL; pascal;
  268.     PDDENUMCALLBACKW                = function(pGUID: PGUID; lpDriverDescription, lpDriverName: LPWSTR; lpContext: PVOID): BOOL; pascal;
  269.     PDDENUMCALLBACK                 = PDDENUMCALLBACKA;
  270.     
  271.     PDDENUMMODESCALLBACK            = function(lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID): HRESULT; pascal;
  272.     PDDENUMSURFACESCALLBACK         = function(lpDDSurface: PDIRECTDRAWSURFACE; lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID): HRESULT; pascal;
  273. {-- IDirectDraw --------------------------------------------------------------}
  274.     PDirectDraw                     = ^IDirectDraw;
  275.     IDirectDraw                     = class(IUnknown)
  276.     public
  277.         function    Compact: HRESULT; virtual; stdcall; abstract;
  278.         function    CreateClipper(dwFlags: DWORD; var lplpDDClipper: PDIRECTDRAWCLIPPER; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
  279.         function    CreatePalette(dwFlags: DWORD; lpColorTable: PPALETTEENTRY; var lplpDDPalette: PDIRECTDRAWPALETTE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
  280.         function    CreateSurface(lpDDSurfaceDesc: PDDSURFACEDESC; var lplpDDSurface: PDIRECTDRAWSURFACE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
  281.         function    DuplicateSurface(lpDDSurface: PDIRECTDRAWSURFACE; var lplpDupDDSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
  282.         function    EnumDisplayModes(dwFlags: DWORD; lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID; lpEnumModesCallback: PDDENUMMODESCALLBACK): HRESULT; virtual; stdcall; abstract;
  283.         function    EnumSurfaces(dwFlags: DWORD; lpDDSD: PDDSURFACEDESC; lpContext: PVOID; lpEnumCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
  284.         function    FlipToGDISurface: HRESULT; virtual; stdcall; abstract;
  285.         function    GetCaps(lpDDDriverCaps: PDDCAPS; lpDDHELCaps: PDDCAPS): HRESULT; virtual; stdcall; abstract;
  286.         function    GetDisplayMode(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
  287.         function    GetFourCCCodes(lpNumCodes: PDWORD; lpCodes: PDWORD ): HRESULT; virtual; stdcall; abstract;
  288.         function    GetGDISurface(var lplpGDIDDSSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
  289.         function    GetMonitorFrequency(lpdwFrequency: PDWORD): HRESULT; virtual; stdcall; abstract;
  290.         function    GetScanLine(lpdwScanLine: PDWORD): HRESULT; virtual; stdcall; abstract;
  291.         function    GetVerticalBlankStatus(lpblsInVB: PBOOL): HRESULT; virtual; stdcall; abstract;
  292.         function    Initialize(lpGUID: PGUID): HRESULT; virtual; stdcall; abstract;
  293.         function    RestoreDisplayMode: HRESULT; virtual; stdcall; abstract;
  294.         function    SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  295.         function    SetDisplayMode(dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD): HRESULT; virtual; stdcall; abstract;
  296.         function    WaitForVerticalBlank(dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
  297.     end;
  298. {-- IDirectDraw2 -------------------------------------------------------------}
  299.     PDirectDraw2                    = ^IDirectDraw2;
  300.     IDirectDraw2                    = class(IUnknown)
  301.     public
  302.         function    Compact: HRESULT; virtual; stdcall; abstract;
  303.         function    CreateClipper(dwFlags: DWORD; var lplpDDClipper: PDIRECTDRAWCLIPPER; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
  304.         function    CreatePalette(dwFlags: DWORD; lpColorTable: PPALETTEENTRY; var lplpDDPalette: PDIRECTDRAWPALETTE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
  305.         function    CreateSurface(lpDDSurfaceDesc: PDDSURFACEDESC; var lplpDDSurface: PDIRECTDRAWSURFACE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
  306.         function    DuplicateSurface(lpDDSurface: PDIRECTDRAWSURFACE; var lplpDupDDSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
  307.         function    EnumDisplayModes(dwFlags: DWORD; lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID; lpEnumModesCallback: PDDENUMMODESCALLBACK): HRESULT; virtual; stdcall; abstract;
  308.         function    EnumSurfaces(dwFlags: DWORD; lpDDSD: PDDSURFACEDESC; lpContext: PVOID; lpEnumCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
  309.         function    FlipToGDISurface: HRESULT; virtual; stdcall; abstract;
  310.         function    GetCaps(lpDDDriverCaps: PDDCAPS; lpDDHELCaps: PDDCAPS): HRESULT; virtual; stdcall; abstract;
  311.         function    GetDisplayMode(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
  312.         function    GetFourCCCodes(lpNumCodes: PDWORD; lpCodes: PDWORD ): HRESULT; virtual; stdcall; abstract;
  313.         function    GetGDISurface(var lplpGDIDDSSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
  314.         function    GetMonitorFrequency(lpdwFrequency: PDWORD): HRESULT; virtual; stdcall; abstract;
  315.         function    GetScanLine(lpdwScanLine: PDWORD): HRESULT; virtual; stdcall; abstract;
  316.         function    GetVerticalBlankStatus(lpblsInVB: PBOOL): HRESULT; virtual; stdcall; abstract;
  317.         function    Initialize(lpGUID: PGUID): HRESULT; virtual; stdcall; abstract;
  318.         function    RestoreDisplayMode: HRESULT; virtual; stdcall; abstract;
  319.         function    SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  320.         { SetDisplayMode changed in v2 }
  321.         function    SetDisplayMode(dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD; dwRefreshRate: DWORD; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  322.         function    WaitForVerticalBlank(dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
  323.         { Added in the v2 interface }
  324.         function    GetAvailableVidMem(lpDDSCaps: PDDSCAPS; lpdwTotal: PDWORD; lpdwFree: PDWORD): HRESULT; virtual; stdcall; abstract;
  325.     end;
  326. {-- IDirectDrawPalette -------------------------------------------------------}
  327.     IDirectDrawPalette              = class(IUnknown)
  328.     public
  329.         function    GetCaps(lpdwCaps: PDWORD): HRESULT; virtual; stdcall; abstract;
  330.         function    GetEntries(dwFlags: DWORD; dwBase: DWORD; dwNumEntries: DWORD; lpEntries: PPALETTEENTRY): HRESULT; virtual; stdcall; abstract;
  331.         function    Initialize(lpDD: PDIRECTDRAW; dwFlags: DWORD; lpDDColorTable: PPALETTEENTRY): HRESULT; virtual; stdcall; abstract;
  332.         function    SetEntries(dwFlags: DWORD; dwStartingEntry: DWORD; dwCount: DWORD; lpEntries: PPALETTEENTRY): HRESULT; virtual; stdcall; abstract;
  333.     end;
  334. {-- IDirectDrawClipper -------------------------------------------------------}
  335.     IDirectDrawClipper              = class(IUnknown)
  336.     public
  337.         function    GetClipList(lpRect: PRECT; lpClipList: PRGNDATA; lpdwSize: PDWORD): HRESULT; virtual; stdcall; abstract;
  338.         function    GetHWnd(lphWnd: PHWND): HRESULT; virtual; stdcall; abstract;
  339.         function    Initialize(lpDD: PDIRECTDRAW; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  340.         function    IsClipListChanged(lpbChanged: PBOOL): HRESULT; virtual; stdcall; abstract;
  341.         function    SetClipList(lpClipList: PRGNDATA; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  342.         function    SetHWnd(dwFlags: DWORD; hWnd: HWND): HRESULT; virtual; stdcall; abstract;
  343.     end;
  344. {-- IDirectDrawSurface -------------------------------------------------------}
  345.     IDirectDrawSurface              = class(IUnknown)
  346.     public
  347.         function    AddAttachedSurface(lpDDSAttachedSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
  348.         function    AddOverlayDirtyRect(lpRect: PRECT): HRESULT; virtual; stdcall; abstract;
  349.         function    Blt(lpDestRect: PRECT; lpDDSrcSurface: PDIRECTDRAWSURFACE; lpSrcRect: PRECT; dwFlags: DWORD; lpDDBltFx: PDDBLTFX): HRESULT; virtual; stdcall; abstract;
  350.         function    BltBatch(lpDDBltBatch: PDDBLTBATCH; dwCount: DWORD; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  351.         function    BltFast(dwX: DWORD; dwY: DWORD; lpDDSrcSurface: PDIRECTDRAWSURFACE; lpSrcRect: PRECT; dwTrans: DWORD): HRESULT; virtual; stdcall; abstract;
  352.         function    DeleteAttachedSurface(dwFlags: DWORD; lpDDSAttachedSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
  353.         function    EnumAttachedSurfaces(lpContext: PVOID; lpEnumSurfacesCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
  354.         function    EnumOverlayZOrders(dwFlags: DWORD; lpContext: PVOID; lpfnCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
  355.         function    Flip(lpDDSurfaceTargetOverride: PDIRECTDRAWSURFACE; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  356.         function    GetAttachedSurface(lpDDSCaps: PDDSCAPS; var lplpDDAttachedSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
  357.         function    GetBltStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  358.         function    GetCaps(lpDDSCaps: PDDSCAPS): HRESULT; virtual; stdcall; abstract;
  359.         function    GetClipper(var lplpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
  360.         function    GetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
  361.         function    GetDC(lphDC: PHDC): HRESULT; virtual; stdcall; abstract;
  362.         function    GetFlipStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  363.         function    GetOverlayPosition(lplX: PLONG; lplY: PLONG ): HRESULT; virtual; stdcall; abstract;
  364.         function    GetPalette(var lplpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
  365.         function    GetPixelFormat(lpDDPixelFormat: PDDPIXELFORMAT): HRESULT; virtual; stdcall; abstract;
  366.         function    GetSurfaceDesc(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
  367.         function    Initialize(lpDD: PDIRECTDRAW; lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
  368.         function    IsLost: HRESULT; virtual; stdcall; abstract;
  369.         function    Lock(lpDestRect: PRECT; lpDDSurfaceDesc: PDDSURFACEDESC; dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
  370.         function    ReleaseDC(hDC: HDC): HRESULT; virtual; stdcall; abstract;
  371.         function    Restore: HRESULT; virtual; stdcall; abstract;
  372.         function    SetClipper(lpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
  373.         function    SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
  374.         function    SetOverlayPosition(lX: LONG; lY: LONG): HRESULT; virtual; stdcall; abstract;
  375.         function    SetPalette(lpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
  376.         function    Unlock(lpSurfaceData: PVOID): HRESULT; virtual; stdcall; abstract;
  377.         function    UpdateOverlay(lpSrcRect: PRECT; lpDDDestSurface: PDIRECTDRAWSURFACE; lpDestRect: PRECT; dwFlags: DWORD; lpDDOverlayFx: PDDOVERLAYFX): HRESULT; virtual; stdcall; abstract;
  378.         function    UpdateOverlayDisplay(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  379.         function    UpdateOverlayZOrder(dwFlags: DWORD; lpDDSReference: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
  380.     end;
  381. {-- IDirectDrawSurface2 and related interfaces -------------------------------}
  382.     PDirectDrawSurface2             = ^IDirectDrawSurface2;
  383.     IDirectDrawSurface2             = class(IUnknown)
  384.         function    AddAttachedSurface(lpDDSAttachedSurface: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
  385.         function    AddOverlayDirtyRect(lpRect: PRECT): HRESULT; virtual; stdcall; abstract;
  386.         function    Blt(lpDestRect: PRECT; lpDDSrcSurface: PDIRECTDRAWSURFACE2; lpSrcRect: PRECT; dwFlags: DWORD; lpDDBltFx: PDDBLTFX): HRESULT; virtual; stdcall; abstract;
  387.         function    BltBatch(lpDDBltBatch: PDDBLTBATCH; dwCount: DWORD; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  388.         function    BltFast(dwX: DWORD; dwY: DWORD; lpDDSrcSurface: PDIRECTDRAWSURFACE2; lpSrcRect: PRECT; dwTrans: DWORD): HRESULT; virtual; stdcall; abstract;
  389.         function    DeleteAttachedSurface(dwFlags: DWORD; lpDDSAttachedSurface: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
  390.         function    EnumAttachedSurfaces(lpContext: PVOID; lpEnumSurfacesCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
  391.         function    EnumOverlayZOrders(dwFlags: DWORD; lpContext: PVOID; lpfnCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
  392.         function    Flip(lpDDSurfaceTargetOverride: PDIRECTDRAWSURFACE2; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  393.         function    GetAttachedSurface(lpDDSCaps: PDDSCAPS; var lplpDDAttachedSurface: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
  394.         function    GetBltStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  395.         function    GetCaps(lpDDSCaps: PDDSCAPS): HRESULT; virtual; stdcall; abstract;
  396.         function    GetClipper(var lplpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
  397.         function    GetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
  398.         function    GetDC(lphDC: PHDC): HRESULT; virtual; stdcall; abstract;
  399.         function    GetFlipStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  400.         function    GetOverlayPosition(lplX: PLONG; lplY: PLONG): HRESULT; virtual; stdcall; abstract;
  401.         function    GetPalette(var lplpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
  402.         function    GetPixelFormat(lpDDPixelFormat: PDDPIXELFORMAT): HRESULT; virtual; stdcall; abstract;
  403.         function    GetSurfaceDesc(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
  404.         function    Initialize(lpDD: PDIRECTDRAW; lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
  405.         function    IsLost: HRESULT; virtual; stdcall; abstract;
  406.         function    Lock(lpDestRect: PRECT; lpDDSurfaceDesc: PDDSURFACEDESC; dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
  407.         function    ReleaseDC(hDC: HDC): HRESULT; virtual; stdcall; abstract;
  408.         function    Restore: HRESULT; virtual; stdcall; abstract;
  409.         function    SetClipper(lpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
  410.         function    SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
  411.         function    SetOverlayPosition(lX: LONG; lY: LONG): HRESULT; virtual; stdcall; abstract;
  412.         function    SetPalette(lpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
  413.         function    Unlock(lpSurfaceData: PVOID): HRESULT; virtual; stdcall; abstract;
  414.         function    UpdateOverlay(lpSrcRect: PRECT; lpDDDestSurface: PDIRECTDRAWSURFACE2; lpDestRect: PRECT; dwFlags: DWORD; lpDDOverlayFx: PDDOVERLAYFX): HRESULT; virtual; stdcall; abstract;
  415.         function    UpdateOverlayDisplay(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  416.         function    UpdateOverlayZOrder(dwFlags: DWORD; lpDDSReference: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
  417.         { Added in the v2 interface }
  418.         function    GetDDInterface(var lplpDD: PVOID): HRESULT; virtual; stdcall; abstract;
  419.         function    PageLock(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  420.         function    PageUnlock(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
  421.     end;
  422. // #ifdef WINNT
  423. //  //This is the user-mode entry stub to the kernel mode procedure.
  424. //  extern HRESULT NtDirectDrawCreate( GUID FAR *lpGUID, HANDLE *lplpDD, IUnknown FAR *pUnkOuter );
  425. // #endif
  426. {-- Caps flags ---------------------------------------------------------------}
  427. const
  428.     // ddsCaps field is valid.
  429.     DDSD_CAPS                   = $00000001;     // default
  430.     // dwHeight field is valid.
  431.     DDSD_HEIGHT                 = $00000002;
  432.     // dwWidth field is valid.
  433.     DDSD_WIDTH                  = $00000004;
  434.     // lPitch is valid.
  435.     DDSD_PITCH                  = $00000008;
  436.     // dwBackBufferCount is valid.
  437.     DDSD_BACKBUFFERCOUNT        = $00000020;
  438.     // dwZBufferBitDepth is valid.
  439.     DDSD_ZBUFFERBITDEPTH        = $00000040;
  440.     // dwAlphaBitDepth is valid.
  441.     DDSD_ALPHABITDEPTH          = $00000080;
  442.     // ddpfPixelFormat is valid.
  443.     DDSD_PIXELFORMAT            = $00001000;
  444.     // ddckCKDestOverlay is valid.
  445.     DDSD_CKDESTOVERLAY          = $00002000;
  446.     // ddckCKDestBlt is valid.
  447.     DDSD_CKDESTBLT              = $00004000;
  448.     // ddckCKSrcOverlay is valid.
  449.     DDSD_CKSRCOVERLAY           = $00008000;
  450.     // ddckCKSrcBlt is valid.
  451.     DDSD_CKSRCBLT               = $00010000;
  452.     // dwMipMapCount is valid.
  453.     DDSD_MIPMAPCOUNT            = $00020000;
  454.     // dwRefreshRate is valid
  455.     DDSD_REFRESHRATE            = $00040000;
  456.     // All input fields are valid.
  457.     DDSD_ALL                    = $0007F9EE;
  458. {== Capability flags =========================================================}
  459. // These flags are used to describe the capabilities of a given Surface.
  460. // All flags are bit flags.
  461. const
  462.     //
  463.     // This bit currently has no meaning.
  464.     //
  465.     DDSCAPS_3D                          = $00000001;
  466.     //
  467.     // Indicates that this surface contains alpha information.  The pixel
  468.     // format must be interrogated to determine whether this surface
  469.     // contains only alpha information or alpha information interlaced
  470.     // with pixel color data (e.g. RGBA or YUVA).
  471.     //
  472.     DDSCAPS_ALPHA                       = $00000002;
  473.     //
  474.     // Indicates that this surface is a backbuffer.  It is generally
  475.     // set by CreateSurface when the DDSCAPS_FLIP capability bit is set.
  476.     // It indicates that this surface is THE back buffer of a surface
  477.     // flipping structure.  DirectDraw supports N surfaces in a
  478.     // surface flipping structure.  Only the surface that immediately
  479.     // precedeces the DDSCAPS_FRONTBUFFER has this capability bit set.
  480.     // The other surfaces are identified as back buffers by the presence
  481.     // of the DDSCAPS_FLIP capability, their attachment order, and the
  482.     // absence of the DDSCAPS_FRONTBUFFER and DDSCAPS_BACKBUFFER
  483.     // capabilities.  The bit is sent to CreateSurface when a standalone
  484.     // back buffer is being created.  This surface could be attached to
  485.     // a front buffer and/or back buffers to form a flipping surface
  486.     // structure after the CreateSurface call.  See AddAttachments for
  487.     // a detailed description of the behaviors in this case.
  488.     //
  489.     DDSCAPS_BACKBUFFER                  = $00000004;
  490.     //
  491.     // Indicates a complex surface structure is being described.  A
  492.     // complex surface structure results in the creation of more than
  493.     // one surface.  The additional surfaces are attached to the root
  494.     // surface.  The complex structure can only be destroyed by
  495.     // destroying the root.
  496.     //
  497.     DDSCAPS_COMPLEX                     = $00000008;
  498.     //
  499.     // Indicates that this surface is a part of a surface flipping structure.
  500.     // When it is passed to CreateSurface the DDSCAPS_FRONTBUFFER and
  501.     // DDSCAP_BACKBUFFER bits are not set.  They are set by CreateSurface
  502.     // on the resulting creations.  The dwBackBufferCount field in the
  503.     // DDSURFACEDESC structure must be set to at least 1 in order for
  504.     // the CreateSurface call to succeed.  The DDSCAPS_COMPLEX capability
  505.     // must always be set with creating multiple surfaces through CreateSurface.
  506.     //
  507.     DDSCAPS_FLIP                        = $00000010;
  508.     //
  509.     // Indicates that this surface is THE front buffer of a surface flipping
  510.     // structure.  It is generally set by CreateSurface when the DDSCAPS_FLIP
  511.     // capability bit is set.
  512.     // If this capability is sent to CreateSurface then a standalone front buffer
  513.     // is created.  This surface will not have the DDSCAPS_FlIP capability.
  514.     // It can be attached to other back buffers to form a flipping structure.
  515.     // See AddAttachments for a detailed description of the behaviors in this
  516.     // case.
  517.     //
  518.     DDSCAPS_FRONTBUFFER                 = $00000020;
  519.     //
  520.     // Indicates that this surface is any offscreen surface that is not an overlay,
  521.     // texture, zbuffer, front buffer, back buffer, or alpha surface.  It is used
  522.     // to identify plain vanilla surfaces.
  523.     //
  524.     DDSCAPS_OFFSCREENPLAIN              = $00000040;
  525.     //
  526.     // Indicates that this surface is an overlay.  It may or may not be directly visible
  527.     // depending on whether or not it is currently being overlayed onto the primary
  528.     // surface.  DDSCAPS_VISIBLE can be used to determine whether or not it is being
  529.     // overlayed at the moment.
  530.     //
  531.     DDSCAPS_OVERLAY                     = $00000080;
  532.     //
  533.     // Indicates that unique DirectDrawPalette objects can be created and
  534.     // attached to this surface.
  535.     //
  536.     DDSCAPS_PALETTE                     = $00000100;
  537.     //
  538.     // Indicates that this surface is the primary surface.  The primary
  539.     // surface represents what the user is seeing at the moment.
  540.     //
  541.     DDSCAPS_PRIMARYSURFACE              = $00000200;
  542.     //
  543.     // Indicates that this surface is the primary surface for the left eye.
  544.     // The primary surface for the left eye represents what the user is seeing
  545.     // at the moment with the users left eye.  When this surface is created the
  546.     // DDSCAPS_PRIMARYSURFACE represents what the user is seeing with the users
  547.     // right eye.
  548.     //
  549.     DDSCAPS_PRIMARYSURFACELEFT          = $00000400;
  550.     //
  551.     // Indicates that this surface memory was allocated in system memory
  552.     // 
  553.     DDSCAPS_SYSTEMMEMORY                = $00000800;
  554.     //
  555.     // Indicates that this surface can be used as a 3D texture.  It does not
  556.     // indicate whether or not the surface is being used for that purpose.
  557.     //
  558.     DDSCAPS_TEXTURE                     = $00001000;
  559.     //
  560.     // Indicates that a surface may be a destination for 3D rendering.  This
  561.     // bit must be set in order to query for a Direct3D Device Interface
  562.     // from this surface.
  563.     // 
  564.     DDSCAPS_3DDEVICE                    = $00002000;
  565.     //
  566.     // Indicates that this surface exists in video memory.
  567.     //
  568.     DDSCAPS_VIDEOMEMORY                 = $00004000;
  569.     //
  570.     // Indicates that changes made to this surface are immediately visible.
  571.     // It is always set for the primary surface and is set for overlays while
  572.     // they are being overlayed and texture maps while they are being textured.
  573.     // 
  574.     DDSCAPS_VISIBLE                     = $00008000;
  575.     //
  576.     // Indicates that only writes are permitted to the surface.  Read accesses
  577.     // from the surface may or may not generate a protection fault, but the
  578.     // results of a read from this surface will not be meaningful.  READ ONLY.
  579.     //
  580.     DDSCAPS_WRITEONLY                   = $00010000;
  581.     //
  582.     // Indicates that this surface is a z buffer. A z buffer does not contain
  583.     // displayable information.  Instead it contains bit depth information that is
  584.     // used to determine which pixels are visible and which are obscured.
  585.     //
  586.     DDSCAPS_ZBUFFER                     = $00020000;
  587.     //
  588.     // Indicates surface will have a DC associated long term
  589.     //
  590.     DDSCAPS_OWNDC                       = $00040000;
  591.     //
  592.     // Indicates surface should be able to receive live video
  593.     //
  594.     DDSCAPS_LIVEVIDEO                   = $00080000;
  595.     //
  596.     // Indicates surface should be able to have a stream decompressed
  597.     // to it by the hardware.
  598.     //
  599.     DDSCAPS_HWCODEC                     = $00100000;
  600.     //
  601.     // Surface is a 320x200 or 320x240 ModeX surface
  602.     // 
  603.     DDSCAPS_MODEX                       = $00200000;
  604.     //
  605.     // Indicates surface is one level of a mip-map. This surface will
  606.     // be attached to other DDSCAPS_MIPMAP surfaces to form the mip-map.
  607.     // This can be done explicitly, by creating a number of surfaces and
  608.     // attaching them with AddAttachedSurface or by implicitly by CreateSurface.
  609.     // If this bit is set then DDSCAPS_TEXTURE must also be set.
  610.     //
  611.     DDSCAPS_MIPMAP                      = $00400000;
  612.     //
  613.     // Indicates that memory for the surface is not allocated until the surface
  614.     // is loaded (via the Direct3D texture load() function).
  615.     //
  616.     DDSCAPS_ALLOCONLOAD                 = $04000000;
  617. {-- Driver capability flags --------------------------------------------------}
  618.     //
  619.     // Display hardware has 3D acceleration.
  620.     //
  621.     DDCAPS_3D                           = $00000001;
  622.     //
  623.     // Indicates that DirectDraw will support only dest rectangles that are aligned
  624.     // on DIRECTDRAWCAPS.dwAlignBoundaryDest boundaries of the surface, respectively.
  625.     // READ ONLY.
  626.     //
  627.     DDCAPS_ALIGNBOUNDARYDEST            = $00000002;
  628.     //
  629.     // Indicates that DirectDraw will support only source rectangles  whose sizes in 
  630.     // BYTEs are DIRECTDRAWCAPS.dwAlignSizeDest multiples, respectively.  READ ONLY.
  631.     //
  632.     DDCAPS_ALIGNSIZEDEST                = $00000004;
  633.     //
  634.     // Indicates that DirectDraw will support only source rectangles that are aligned
  635.     // on DIRECTDRAWCAPS.dwAlignBoundarySrc boundaries of the surface, respectively.
  636.     // READ ONLY.
  637.     //
  638.     DDCAPS_ALIGNBOUNDARYSRC             = $00000008;
  639.     //
  640.     // Indicates that DirectDraw will support only source rectangles  whose sizes in 
  641.     // BYTEs are DIRECTDRAWCAPS.dwAlignSizeSrc multiples, respectively.  READ ONLY.
  642.     //
  643.     DDCAPS_ALIGNSIZESRC                 = $00000010;
  644.     //
  645.     // Indicates that DirectDraw will create video memory surfaces that have a stride 
  646.     // alignment equal to DIRECTDRAWCAPS.dwAlignStride.  READ ONLY.
  647.     //
  648.     DDCAPS_ALIGNSTRIDE                  = $00000020;
  649.     //
  650.     // Display hardware is capable of blt operations.
  651.     //
  652.     DDCAPS_BLT                          = $00000040;
  653.     //
  654.     // Display hardware is capable of asynchronous blt operations.
  655.     //
  656.     DDCAPS_BLTQUEUE                     = $00000080;
  657.     //
  658.     // Display hardware is capable of color space conversions during the blt operation.
  659.     //
  660.     DDCAPS_BLTFOURCC                    = $00000100;
  661.     //
  662.     // Display hardware is capable of stretching during blt operations.
  663.     //
  664.     DDCAPS_BLTSTRETCH                   = $00000200;
  665.     //
  666.     // Display hardware is shared with GDI.
  667.     //
  668.     DDCAPS_GDI                          = $00000400;
  669.     //
  670.     // Display hardware can overlay.
  671.     //
  672.     DDCAPS_OVERLAY                      = $00000800;
  673.     //
  674.     // Set if display hardware supports overlays but can not clip them.
  675.     //
  676.     DDCAPS_OVERLAYCANTCLIP              = $00001000;
  677.     //
  678.     // Indicates that overlay hardware is capable of color space conversions during
  679.     // the overlay operation.
  680.     //
  681.     DDCAPS_OVERLAYFOURCC                = $00002000;
  682.     //
  683.     // Indicates that stretching can be done by the overlay hardware.
  684.     //
  685.     DDCAPS_OVERLAYSTRETCH               = $00004000;
  686.     //
  687.     // Indicates that unique DirectDrawPalettes can be created for DirectDrawSurfaces
  688.     // other than the primary surface.
  689.     //
  690.     DDCAPS_PALETTE                      = $00008000;
  691.     //
  692.     // Indicates that palette changes can be syncd with the veritcal refresh.
  693.     //
  694.     DDCAPS_PALETTEVSYNC                 = $00010000;
  695.     //
  696.     // Display hardware can return the current scan line.
  697.     //
  698.     DDCAPS_READSCANLINE                 = $00020000;
  699.     //
  700.     // Display hardware has stereo vision capabilities.  DDSCAPS_PRIMARYSURFACELEFT
  701.     // can be created.
  702.     //
  703.     DDCAPS_STEREOVIEW                   = $00040000;
  704.     //
  705.     // Display hardware is capable of generating a vertical blank interrupt.
  706.     //
  707.     DDCAPS_VBI                          = $00080000;
  708.     //
  709.     // Supports the use of z buffers with blt operations.
  710.     //
  711.     DDCAPS_ZBLTS                        = $00100000;
  712.     //
  713.     // Supports Z Ordering of overlays.
  714.     //
  715.     DDCAPS_ZOVERLAYS                    = $00200000;
  716.     //
  717.     // Supports color key
  718.     //
  719.     DDCAPS_COLORKEY                     = $00400000;
  720.     //
  721.     // Supports alpha surfaces
  722.     //
  723.     DDCAPS_ALPHA                        = $00800000;
  724.     //
  725.     // colorkey is hardware assisted(DDCAPS_COLORKEY will also be set)
  726.     //
  727.     DDCAPS_COLORKEYHWASSIST             = $01000000;
  728.     //
  729.     // no hardware support at all
  730.     //
  731.     DDCAPS_NOHARDWARE                   = $02000000;
  732.     //
  733.     // Display hardware is capable of color fill with bltter
  734.     //
  735.     DDCAPS_BLTCOLORFILL                 = $04000000;
  736.     //
  737.     // Display hardware is bank switched, and potentially very slow at
  738.     // random access to VRAM.
  739.     //
  740.     DDCAPS_BANKSWITCHED                 = $08000000;
  741.     //
  742.     // Display hardware is capable of depth filling Z-buffers with bltter
  743.     //
  744.     DDCAPS_BLTDEPTHFILL                 = $10000000;
  745.     //
  746.     // Display hardware is capable of clipping while bltting.
  747.     //
  748.     DDCAPS_CANCLIP                      = $20000000;
  749.     //
  750.     // Display hardware is capable of clipping while stretch bltting.
  751.     //
  752.     DDCAPS_CANCLIPSTRETCHED             = $40000000;
  753.     //
  754.     // Display hardware is capable of bltting to or from system memory
  755.     //
  756.     DDCAPS_CANBLTSYSMEM                 = $80000000;
  757. {-- More driver capability flags (dwCaps2) -----------------------------------}
  758.     //
  759.     // Display hardware is certified
  760.     //
  761.     DDCAPS2_CERTIFIED                   = $00000001;
  762.     //
  763.     // Driver cannot interleave 2D operations (lock and blt) to surfaces with
  764.     // Direct3D rendering operations between calls to BeginScene() and EndScene()
  765.     //
  766.     DDCAPS2_NO2DDURING3DSCENE           = $00000002;
  767. {-- DirectDraw FX ALPHA capability flags -------------------------------------}
  768.     //
  769.     // Supports alpha blending around the edge of a source color keyed surface.
  770.     // For Blt.
  771.     //
  772.     DDFXALPHACAPS_BLTALPHAEDGEBLEND             = $00000001;
  773.     //
  774.     // Supports alpha information in the pixel format.  The bit depth of alpha
  775.     // information in the pixel format can be 1,2,4, or 8.  The alpha value becomes
  776.     // more opaque as the alpha value increases.  (0 is transparent.)
  777.     // For Blt.
  778.     //
  779.     DDFXALPHACAPS_BLTALPHAPIXELS                = $00000002;
  780.     //
  781.     // Supports alpha information in the pixel format.  The bit depth of alpha
  782.     // information in the pixel format can be 1,2,4, or 8.  The alpha value
  783.     // becomes more transparent as the alpha value increases.  (0 is opaque.)
  784.     // This flag can only be set if DDCAPS_ALPHA is set.
  785.     // For Blt.
  786.     //
  787.     DDFXALPHACAPS_BLTALPHAPIXELSNEG             = $00000004;
  788.     //
  789.     // Supports alpha only surfaces.  The bit depth of an alpha only surface can be
  790.     // 1,2,4, or 8.  The alpha value becomes more opaque as the alpha value increases.
  791.     // (0 is transparent.)
  792.     // For Blt.
  793.     //
  794.     DDFXALPHACAPS_BLTALPHASURFACES              = $00000008;
  795.     //
  796.     // The depth of the alpha channel data can range can be 1,2,4, or 8.
  797.     // The NEG suffix indicates that this alpha channel becomes more transparent
  798.     // as the alpha value increases. (0 is opaque.)  This flag can only be set if
  799.     // DDCAPS_ALPHA is set.
  800.     // For Blt.
  801.     //
  802.     DDFXALPHACAPS_BLTALPHASURFACESNEG           = $00000010;
  803.     //
  804.     // Supports alpha blending around the edge of a source color keyed surface.
  805.     // For Overlays.
  806.     //
  807.     DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND         = $00000020;
  808.     //
  809.     // Supports alpha information in the pixel format.  The bit depth of alpha
  810.     // information in the pixel format can be 1,2,4, or 8.  The alpha value becomes
  811.     // more opaque as the alpha value increases.  (0 is transparent.)
  812.     // For Overlays.
  813.     //
  814.     DDFXALPHACAPS_OVERLAYALPHAPIXELS            = $00000040;
  815.     //
  816.     // Supports alpha information in the pixel format.  The bit depth of alpha
  817.     // information in the pixel format can be 1,2,4, or 8.  The alpha value
  818.     // becomes more transparent as the alpha value increases.  (0 is opaque.)
  819.     // This flag can only be set if DDCAPS_ALPHA is set.
  820.     // For Overlays.
  821.     //
  822.     DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG         = $00000080;
  823.     //
  824.     // Supports alpha only surfaces.  The bit depth of an alpha only surface can be
  825.     // 1,2,4, or 8.  The alpha value becomes more opaque as the alpha value increases.
  826.     // (0 is transparent.)
  827.     // For Overlays.
  828.     //
  829.     DDFXALPHACAPS_OVERLAYALPHASURFACES          = $00000100;
  830.     //
  831.     // The depth of the alpha channel data can range can be 1,2,4, or 8.
  832.     // The NEG suffix indicates that this alpha channel becomes more transparent
  833.     // as the alpha value increases. (0 is opaque.)  This flag can only be set if
  834.     // DDCAPS_ALPHA is set.
  835.     // For Overlays.
  836.     //
  837.     DDFXALPHACAPS_OVERLAYALPHASURFACESNEG       = $00000200;
  838. {-- DirectDraw FX capability flags -------------------------------------------}
  839.     //
  840.     // Uses arithmetic operations to stretch and shrink surfaces during blt
  841.     // rather than pixel doubling techniques.  Along the Y axis.
  842.     //
  843.     DDFXCAPS_BLTARITHSTRETCHY                   = $00000020;
  844.     //
  845.     // Uses arithmetic operations to stretch during blt
  846.     // rather than pixel doubling techniques.  Along the Y axis. Only
  847.     // works for x1, x2, etc.
  848.     //
  849.     DDFXCAPS_BLTARITHSTRETCHYN                  = $00000010;
  850.     //
  851.     // Supports mirroring left to right in blt.
  852.     //
  853.     DDFXCAPS_BLTMIRRORLEFTRIGHT                 = $00000040;
  854.     //
  855.     // Supports mirroring top to bottom in blt.
  856.     //
  857.     DDFXCAPS_BLTMIRRORUPDOWN                    = $00000080;
  858.     //
  859.     // Supports arbitrary rotation for blts.
  860.     //
  861.     DDFXCAPS_BLTROTATION                        = $00000100;
  862.     //
  863.     // Supports 90 degree rotations for blts.
  864.     //
  865.     DDFXCAPS_BLTROTATION90                      = $00000200;
  866.     //
  867.     // DirectDraw supports arbitrary shrinking of a surface along the
  868.     // x axis (horizontal direction) for blts.
  869.     //
  870.     DDFXCAPS_BLTSHRINKX                         = $00000400;
  871.     //
  872.     // DirectDraw supports integer shrinking (1x,2x,) of a surface
  873.     // along the x axis (horizontal direction) for blts.
  874.     //
  875.     DDFXCAPS_BLTSHRINKXN                        = $00000800;
  876.     //
  877.     // DirectDraw supports arbitrary shrinking of a surface along the
  878.     // y axis (horizontal direction) for blts.
  879.     //
  880.     DDFXCAPS_BLTSHRINKY                         = $00001000;
  881.     //
  882.     // DirectDraw supports integer shrinking (1x,2x,) of a surface
  883.     // along the y axis (vertical direction) for blts.
  884.     //
  885.     DDFXCAPS_BLTSHRINKYN                        = $00002000;
  886.     //
  887.     // DirectDraw supports arbitrary stretching of a surface along the
  888.     // x axis (horizontal direction) for blts.
  889.     //
  890.     DDFXCAPS_BLTSTRETCHX                        = $00004000;
  891.     //
  892.     // DirectDraw supports integer stretching (1x,2x,) of a surface
  893.     // along the x axis (horizontal direction) for blts.
  894.     //
  895.     DDFXCAPS_BLTSTRETCHXN                       = $00008000;
  896.     //
  897.     // DirectDraw supports arbitrary stretching of a surface along the
  898.     // y axis (horizontal direction) for blts.
  899.     //
  900.     DDFXCAPS_BLTSTRETCHY                        = $00010000;
  901.     //
  902.     // DirectDraw supports integer stretching (1x,2x,) of a surface
  903.     // along the y axis (vertical direction) for blts.
  904.     //
  905.     DDFXCAPS_BLTSTRETCHYN                       = $00020000;
  906.     //
  907.     // Uses arithmetic operations to stretch and shrink surfaces during
  908.     // overlay rather than pixel doubling techniques.  Along the Y axis
  909.     // for overlays.
  910.     //
  911.     DDFXCAPS_OVERLAYARITHSTRETCHY               = $00040000;
  912.     //
  913.     // Uses arithmetic operations to stretch surfaces during
  914.     // overlay rather than pixel doubling techniques.  Along the Y axis
  915.     // for overlays. Only works for x1, x2, etc.
  916.     //
  917.     DDFXCAPS_OVERLAYARITHSTRETCHYN              = $00000008;
  918.     //
  919.     // DirectDraw supports arbitrary shrinking of a surface along the
  920.     // x axis (horizontal direction) for overlays.
  921.     //
  922.     DDFXCAPS_OVERLAYSHRINKX                     = $00080000;
  923.     //
  924.     // DirectDraw supports integer shrinking (1x,2x,) of a surface
  925.     // along the x axis (horizontal direction) for overlays.
  926.     //
  927.     DDFXCAPS_OVERLAYSHRINKXN                    = $00100000;
  928.     //
  929.     // DirectDraw supports arbitrary shrinking of a surface along the
  930.     // y axis (horizontal direction) for overlays.
  931.     //
  932.     DDFXCAPS_OVERLAYSHRINKY                     = $00200000;
  933.     //
  934.     // DirectDraw supports integer shrinking (1x,2x,) of a surface
  935.     // along the y axis (vertical direction) for overlays.
  936.     //
  937.     DDFXCAPS_OVERLAYSHRINKYN                    = $00400000;
  938.     //
  939.     // DirectDraw supports arbitrary stretching of a surface along the
  940.     // x axis (horizontal direction) for overlays.
  941.     //
  942.     DDFXCAPS_OVERLAYSTRETCHX                    = $00800000;
  943.     //
  944.     // DirectDraw supports integer stretching (1x,2x,) of a surface
  945.     // along the x axis (horizontal direction) for overlays.
  946.     //
  947.     DDFXCAPS_OVERLAYSTRETCHXN                   = $01000000;
  948.     //
  949.     // DirectDraw supports arbitrary stretching of a surface along the
  950.     // y axis (horizontal direction) for overlays.
  951.     //
  952.     DDFXCAPS_OVERLAYSTRETCHY                    = $02000000;
  953.     //
  954.     // DirectDraw supports integer stretching (1x,2x,) of a surface
  955.     // along the y axis (vertical direction) for overlays.
  956.     //
  957.     DDFXCAPS_OVERLAYSTRETCHYN                   = $04000000;
  958.     //
  959.     // DirectDraw supports mirroring of overlays across the vertical axis
  960.     //
  961.     DDFXCAPS_OVERLAYMIRRORLEFTRIGHT             = $08000000;
  962.     //
  963.     // DirectDraw supports mirroring of overlays across the horizontal axis
  964.     //
  965.     DDFXCAPS_OVERLAYMIRRORUPDOWN                = $10000000;
  966. {-- DirectDraw stereo view capabilities --------------------------------------}
  967.     //
  968.     // The stereo view is accomplished via enigma encoding.
  969.     //
  970.     DDSVCAPS_ENIGMA                             = $00000001;
  971.     //
  972.     // The stereo view is accomplished via high frequency flickering.
  973.     //
  974.     DDSVCAPS_FLICKER                            = $00000002;
  975.     //
  976.     // The stereo view is accomplished via red and blue filters applied
  977.     // to the left and right eyes.  All images must adapt their colorspaces
  978.     // for this process.
  979.     //
  980.     DDSVCAPS_REDBLUE                            = $00000004;
  981.     //
  982.     // The stereo view is accomplished with split screen technology.
  983.     //
  984.     DDSVCAPS_SPLIT                              = $00000008;
  985. {-- DirectDrawPalette capabilities -------------------------------------------}
  986.     //
  987.     // Index is 4 bits.  There are sixteen color entries in the palette table.
  988.     //
  989.     DDPCAPS_4BIT                                = $00000001;
  990.     //
  991.     // Index is onto a 8 bit color index.  This field is only valid with the
  992.     // DDPCAPS_1BIT, DDPCAPS_2BIT or DDPCAPS_4BIT capability and the target
  993.     // surface is in 8bpp. Each color entry is one byte long and is an index
  994.     // into destination surface's 8bpp palette.
  995.     //
  996.     DDPCAPS_8BITENTRIES                         = $00000002;
  997.     //
  998.     // Index is 8 bits.  There are 256 color entries in the palette table.
  999.     //
  1000.     DDPCAPS_8BIT                                = $00000004;
  1001.     //
  1002.     // Indicates that this DIRECTDRAWPALETTE should use the palette color array
  1003.     // passed into the lpDDColorArray parameter to initialize the DIRECTDRAWPALETTE
  1004.     // object.
  1005.     //
  1006.     DDPCAPS_INITIALIZE                          = $00000008;
  1007.     //
  1008.     // This palette is the one attached to the primary surface.  Changing this
  1009.     // table has immediate effect on the display unless DDPSETPAL_VSYNC is specified
  1010.     // and supported.
  1011.     //
  1012.     DDPCAPS_PRIMARYSURFACE                      = $00000010;
  1013.     //
  1014.     // This palette is the one attached to the primary surface left.  Changing
  1015.     // this table has immediate effect on the display for the left eye unless
  1016.     // DDPSETPAL_VSYNC is specified and supported.
  1017.     //
  1018.     DDPCAPS_PRIMARYSURFACELEFT                  = $00000020;
  1019.     //
  1020.     // This palette can have all 256 entries defined
  1021.     //
  1022.     DDPCAPS_ALLOW256                            = $00000040;
  1023.     //
  1024.     // This palette can have modifications to it synced with the monitors
  1025.     // refresh rate.
  1026.     //
  1027.     DDPCAPS_VSYNC                               = $00000080;
  1028.     //
  1029.     // Index is 1 bit.  There are two color entries in the palette table.
  1030.     //
  1031.     DDPCAPS_1BIT                                = $00000100;
  1032.     //
  1033.     // Index is 2 bit.  There are four color entries in the palette table.
  1034.     //
  1035.     DDPCAPS_2BIT                                = $00000200;
  1036. {-- DirectDrawPalette setentry constants -------------------------------------}
  1037. {-- DirectDrawPalette getentry constants -------------------------------------}
  1038. // 0 is the only legal value
  1039. {-- DirectDrawSurface setpalette constants -----------------------------------}
  1040. {-- DirectDraw bitdepth constants --------------------------------------------}
  1041.     // NOTE:  These are only used to indicate supported bit depths.   These
  1042.     // are flags only, they are not to be used as an actual bit depth.   The
  1043.     // absolute numbers 1, 2, 4, 8, 16, 24 and 32 are used to indicate actual
  1044.     // bit depths in a surface or for changing the display mode.
  1045.     //
  1046.     // 1 bit per pixel.
  1047.     //
  1048.     DDBD_1                                      = $00004000;
  1049.     //
  1050.     // 2 bits per pixel.
  1051.     //
  1052.     DDBD_2                                      = $00002000;
  1053.     //
  1054.     // 4 bits per pixel.
  1055.     //
  1056.     DDBD_4                                      = $00001000;
  1057.     //
  1058.     // 8 bits per pixel.
  1059.     //
  1060.     DDBD_8                                      = $00000800;
  1061.     //
  1062.     // 16 bits per pixel.
  1063.     //
  1064.     DDBD_16                                     = $00000400;
  1065.     //
  1066.     // 24 bits per pixel.
  1067.     //
  1068.     DDBD_24                                     = $00000200;
  1069.     //
  1070.     // 32 bits per pixel.
  1071.     //
  1072.     DDBD_32                                     = $00000100;
  1073. {-- DirectDrawSurface set/get color key flags --------------------------------}
  1074.     //
  1075.     // Set if the structure contains a color space.  Not set if the structure
  1076.     // contains a single color key.
  1077.     //
  1078.     DDCKEY_COLORSPACE                           = $00000001;
  1079.     //
  1080.     // Set if the structure specifies a color key or color space which is to be
  1081.     // used as a destination color key for blt operations.
  1082.     //
  1083.     DDCKEY_DESTBLT                              = $00000002;
  1084.     //
  1085.     // Set if the structure specifies a color key or color space which is to be
  1086.     // used as a destination color key for overlay operations.
  1087.     //
  1088.     DDCKEY_DESTOVERLAY                          = $00000004;
  1089.     //
  1090.     // Set if the structure specifies a color key or color space which is to be
  1091.     // used as a source color key for blt operations.
  1092.     //
  1093.     DDCKEY_SRCBLT                               = $00000008;
  1094.     //
  1095.     // Set if the structure specifies a color key or color space which is to be
  1096.     // used as a source color key for overlay operations.
  1097.     //
  1098.     DDCKEY_SRCOVERLAY                           = $00000010;
  1099.     {-- DirectDraw color key capability flags ------------------------------------}
  1100.     //
  1101.     // Supports transparent blting using a color key to identify the replaceable
  1102.     // bits of the destination surface for RGB colors.
  1103.     //
  1104.     DDCKEYCAPS_DESTBLT                          = $00000001;
  1105.     //
  1106.     // Supports transparent blting using a color space to identify the replaceable
  1107.     // bits of the destination surface for RGB colors.
  1108.     //
  1109.     DDCKEYCAPS_DESTBLTCLRSPACE                  = $00000002;
  1110.     //
  1111.     // Supports transparent blting using a color space to identify the replaceable
  1112.     // bits of the destination surface for YUV colors.
  1113.     //
  1114.     DDCKEYCAPS_DESTBLTCLRSPACEYUV               = $00000004;
  1115.     //
  1116.     // Supports transparent blting using a color key to identify the replaceable 
  1117.     // bits of the destination surface for YUV colors.
  1118.     //
  1119.     DDCKEYCAPS_DESTBLTYUV                       = $00000008;
  1120.     //
  1121.     // Supports overlaying using colorkeying of the replaceable bits of the surface
  1122.     // being overlayed for RGB colors.
  1123.     //
  1124.     DDCKEYCAPS_DESTOVERLAY                      = $00000010;
  1125.     //
  1126.     // Supports a color space as the color key for the destination for RGB colors.
  1127.     //
  1128.     DDCKEYCAPS_DESTOVERLAYCLRSPACE              = $00000020;
  1129.     //
  1130.     // Supports a color space as the color key for the destination for YUV colors.
  1131.     //
  1132.     DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV           = $00000040;
  1133.     //
  1134.     // Supports only one active destination color key value for visible overlay
  1135.     // surfaces.
  1136.     //
  1137.     DDCKEYCAPS_DESTOVERLAYONEACTIVE             = $00000080;
  1138.     //
  1139.     // Supports overlaying using colorkeying of the replaceable bits of the
  1140.     // surface being overlayed for YUV colors.
  1141.     //
  1142.     DDCKEYCAPS_DESTOVERLAYYUV                   = $00000100;
  1143.     //
  1144.     // Supports transparent blting using the color key for the source with
  1145.     // this surface for RGB colors.
  1146.     //
  1147.     DDCKEYCAPS_SRCBLT                           = $00000200;
  1148.     //
  1149.     // Supports transparent blting using a color space for the source with
  1150.     // this surface for RGB colors.
  1151.     //
  1152.     DDCKEYCAPS_SRCBLTCLRSPACE                   = $00000400;
  1153.     //
  1154.     // Supports transparent blting using a color space for the source with
  1155.     // this surface for YUV colors.
  1156.     //
  1157.     DDCKEYCAPS_SRCBLTCLRSPACEYUV                = $00000800;
  1158.     //
  1159.     // Supports transparent blting using the color key for the source with
  1160.     // this surface for YUV colors.
  1161.     //
  1162.     DDCKEYCAPS_SRCBLTYUV                        = $00001000;
  1163.     //
  1164.     // Supports overlays using the color key for the source with this
  1165.     // overlay surface for RGB colors.
  1166.     //
  1167.     DDCKEYCAPS_SRCOVERLAY                       = $00002000;
  1168.     //
  1169.     // Supports overlays using a color space as the source color key for
  1170.     // the overlay surface for RGB colors.
  1171.     //
  1172.     DDCKEYCAPS_SRCOVERLAYCLRSPACE               = $00004000;
  1173.     //
  1174.     // Supports overlays using a color space as the source color key for
  1175.     // the overlay surface for YUV colors.
  1176.     //
  1177.     DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV            = $00008000;
  1178.     //
  1179.     // Supports only one active source color key value for visible
  1180.     // overlay surfaces.
  1181.     //
  1182.     DDCKEYCAPS_SRCOVERLAYONEACTIVE              = $00010000;
  1183.     //
  1184.     // Supports overlays using the color key for the source with this
  1185.     // overlay surface for YUV colors.
  1186.     //
  1187.     DDCKEYCAPS_SRCOVERLAYYUV                    = $00020000;
  1188.     //
  1189.     // there are no bandwidth trade-offs for using colorkey with an overlay
  1190.     //
  1191.     DDCKEYCAPS_NOCOSTOVERLAY                    = $00040000;
  1192. {-- DirectDraw pixelformat flags ---------------------------------------------}
  1193.     //
  1194.     // The surface has alpha channel information in the pixel format.
  1195.     //
  1196.     DDPF_ALPHAPIXELS                            = $00000001;
  1197.     //
  1198.     // The pixel format contains alpha only information
  1199.     //
  1200.     DDPF_ALPHA                                  = $00000002;
  1201.     //
  1202.     // The FourCC code is valid.
  1203.     //
  1204.     DDPF_FOURCC                                 = $00000004;
  1205.     //
  1206.     // The surface is 4-bit color indexed.
  1207.     //
  1208.     DDPF_PALETTEINDEXED4                        = $00000008;
  1209.     //
  1210.     // The surface is indexed into a palette which stores indices
  1211.     // into the destination surface's 8-bit palette.
  1212.     //
  1213.     DDPF_PALETTEINDEXEDTO8                      = $00000010;
  1214.     //
  1215.     // The surface is 8-bit color indexed.
  1216.     //
  1217.     DDPF_PALETTEINDEXED8                        = $00000020;
  1218.     //
  1219.     // The RGB data in the pixel format structure is valid.
  1220.     //
  1221.     DDPF_RGB                                    = $00000040;
  1222.     //
  1223.     // The surface will accept pixel data in the format specified
  1224.     // and compress it during the write.
  1225.     //
  1226.     DDPF_COMPRESSED                             = $00000080;
  1227.     //
  1228.     // The surface will accept RGB data and translate it during
  1229.     // the write to YUV data.  The format of the data to be written
  1230.     // will be contained in the pixel format structure.  The DDPF_RGB
  1231.     // flag will be set.
  1232.     //
  1233.     DDPF_RGBTOYUV                               = $00000100;
  1234.     //
  1235.     // pixel format is YUV - YUV data in pixel format struct is valid
  1236.     //
  1237.     DDPF_YUV                                    = $00000200;
  1238.     //
  1239.     // pixel format is a z buffer only surface
  1240.     //
  1241.     DDPF_ZBUFFER                                = $00000400;
  1242.     //
  1243.     // The surface is 1-bit color indexed.
  1244.     //
  1245.     DDPF_PALETTEINDEXED1                        = $00000800;
  1246.     //
  1247.     // The surface is 2-bit color indexed.
  1248.     //
  1249.     DDPF_PALETTEINDEXED2                        = $00001000;
  1250. {== DirectDraw callback flags ================================================}
  1251. {-- DirectDraw EnumSurfaces flags --------------------------------------------}
  1252.     //
  1253.     // Enumerate all of the surfaces that meet the search criterion.
  1254.     //
  1255.     DDENUMSURFACES_ALL                          = $00000001;
  1256.     //
  1257.     // A search hit is a surface that matches the surface description.
  1258.     //
  1259.     DDENUMSURFACES_MATCH                        = $00000002;
  1260.     //
  1261.     // A search hit is a surface that does not match the surface description.
  1262.     //
  1263.     DDENUMSURFACES_NOMATCH                      = $00000004;
  1264.     //
  1265.     // Enumerate the first surface that can be created which meets the search criterion.
  1266.     //
  1267.     DDENUMSURFACES_CANBECREATED                 = $00000008;
  1268.     //
  1269.     // Enumerate the surfaces that already exist that meet the search criterion.
  1270.     //
  1271.     DDENUMSURFACES_DOESEXIST                    = $00000010;
  1272. {-- DirectDraw EnumDisplayModes flags ----------------------------------------}
  1273.     //
  1274.     // Enumerate Modes with different refresh rates.  EnumDisplayModes guarantees
  1275.     // that a particular mode will be enumerated only once.  This flag specifies whether
  1276.     // the refresh rate is taken into account when determining if a mode is unique.
  1277.     //
  1278.     DDEDM_REFRESHRATES                          = $00000001;
  1279. {-- DirectDraw SetCooperativeLevel flags -------------------------------------}
  1280.     //
  1281.     // Exclusive mode owner will be responsible for the entire primary surface.
  1282.     // GDI can be ignored. used with DD
  1283.     //
  1284.     DDSCL_FULLSCREEN                            = $00000001;
  1285.     //
  1286.     // allow CTRL_ALT_DEL to work while in fullscreen exclusive mode
  1287.     //
  1288.     DDSCL_ALLOWREBOOT                           = $00000002;
  1289.     //
  1290.     // prevents DDRAW from modifying the application window.
  1291.     // prevents DDRAW from minimize/restore the application window on activation.
  1292.     //
  1293.     DDSCL_NOWINDOWCHANGES                       = $00000004;
  1294.     //
  1295.     // app wants to work as a regular Windows application
  1296.     //
  1297.     DDSCL_NORMAL                                = $00000008;
  1298.     //
  1299.     // app wants exclusive access
  1300.     //
  1301.     DDSCL_EXCLUSIVE                             = $00000010;
  1302.     //
  1303.     // app can deal with non-windows display modes
  1304.     //
  1305.     DDSCL_ALLOWMODEX                            = $00000040;
  1306. {-- DirectDraw blt flags -----------------------------------------------------}
  1307.     //
  1308.     // Use the alpha information in the pixel format or the alpha channel surface
  1309.     // attached to the destination surface as the alpha channel for this blt.
  1310.     //
  1311.     DDBLT_ALPHADEST                             = $00000001;
  1312.     //
  1313.     // Use the dwConstAlphaDest field in the DDBLTFX structure as the alpha channel
  1314.     // for the destination surface for this blt.
  1315.     //
  1316.     DDBLT_ALPHADESTCONSTOVERRIDE                = $00000002;
  1317.     //
  1318.     // The NEG suffix indicates that the destination surface becomes more
  1319.     // transparent as the alpha value increases. (0 is opaque)
  1320.     //
  1321.     DDBLT_ALPHADESTNEG                          = $00000004;
  1322.     //
  1323.     // Use the lpDDSAlphaDest field in the DDBLTFX structure as the alpha
  1324.     // channel for the destination for this blt.
  1325.     //
  1326.     DDBLT_ALPHADESTSURFACEOVERRIDE              = $00000008;
  1327.     //
  1328.     // Use the dwAlphaEdgeBlend field in the DDBLTFX structure as the alpha channel
  1329.     // for the edges of the image that border the color key colors.
  1330.     //
  1331.     DDBLT_ALPHAEDGEBLEND                        = $00000010;
  1332.     //
  1333.     // Use the alpha information in the pixel format or the alpha channel surface
  1334.     // attached to the source surface as the alpha channel for this blt.
  1335.     //
  1336.     DDBLT_ALPHASRC                              = $00000020;
  1337.     //
  1338.     // Use the dwConstAlphaSrc field in the DDBLTFX structure as the alpha channel
  1339.     // for the source for this blt.
  1340.     //
  1341.     DDBLT_ALPHASRCCONSTOVERRIDE                 = $00000040;
  1342.     //
  1343.     // The NEG suffix indicates that the source surface becomes more transparent
  1344.     // as the alpha value increases. (0 is opaque)
  1345.     //
  1346.     DDBLT_ALPHASRCNEG                           = $00000080;
  1347.     //
  1348.     // Use the lpDDSAlphaSrc field in the DDBLTFX structure as the alpha channel
  1349.     // for the source for this blt. 
  1350.     //
  1351.     DDBLT_ALPHASRCSURFACEOVERRIDE               = $00000100;
  1352.     //
  1353.     // Do this blt asynchronously through the FIFO in the order received.  If
  1354.     // there is no room in the hardware FIFO fail the call.
  1355.     //
  1356.     DDBLT_ASYNC                                 = $00000200;
  1357.     //
  1358.     // Uses the dwFillColor field in the DDBLTFX structure as the RGB color
  1359.     // to fill the destination rectangle on the destination surface with.
  1360.     //
  1361.     DDBLT_COLORFILL                             = $00000400;
  1362.     //
  1363.     // Uses the dwDDFX field in the DDBLTFX structure to specify the effects
  1364.     // to use for the blt.
  1365.     //
  1366.     DDBLT_DDFX                                  = $00000800;
  1367.     //
  1368.     // Uses the dwDDROPS field in the DDBLTFX structure to specify the ROPS
  1369.     // that are not part of the Win32 API.
  1370.     //
  1371.     DDBLT_DDROPS                                = $00001000;
  1372.     //
  1373.     // Use the color key associated with the destination surface.
  1374.     //
  1375.     DDBLT_KEYDEST                               = $00002000;
  1376.     //
  1377.     // Use the dckDestColorkey field in the DDBLTFX structure as the color key
  1378.     // for the destination surface.
  1379.     //
  1380.     DDBLT_KEYDESTOVERRIDE                       = $00004000;
  1381.     //
  1382.     // Use the color key associated with the source surface.
  1383.     //
  1384.     DDBLT_KEYSRC                                = $00008000;
  1385.     //
  1386.     // Use the dckSrcColorkey field in the DDBLTFX structure as the color key
  1387.     // for the source surface.
  1388.     //
  1389.     DDBLT_KEYSRCOVERRIDE                        = $00010000;
  1390.     //
  1391.     // Use the dwROP field in the DDBLTFX structure for the raster operation
  1392.     // for this blt.  These ROPs are the same as the ones defined in the Win32 API.
  1393.     //
  1394.     DDBLT_ROP                                   = $00020000;
  1395.     //
  1396.     // Use the dwRotationAngle field in the DDBLTFX structure as the angle
  1397.     // (specified in 1/100th of a degree) to rotate the surface.
  1398.     //
  1399.     DDBLT_ROTATIONANGLE                         = $00040000;
  1400.     //
  1401.     // Z-buffered blt using the z-buffers attached to the source and destination
  1402.     // surfaces and the dwZBufferOpCode field in the DDBLTFX structure as the
  1403.     // z-buffer opcode.
  1404.     //
  1405.     DDBLT_ZBUFFER                               = $00080000;
  1406.     //
  1407.     // Z-buffered blt using the dwConstDest Zfield and the dwZBufferOpCode field
  1408.     // in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively
  1409.     // for the destination.
  1410.     //
  1411.     DDBLT_ZBUFFERDESTCONSTOVERRIDE              = $00100000;
  1412.     //
  1413.     // Z-buffered blt using the lpDDSDestZBuffer field and the dwZBufferOpCode
  1414.     // field in the DDBLTFX structure as the z-buffer and z-buffer opcode
  1415.     // respectively for the destination.
  1416.     //
  1417.     DDBLT_ZBUFFERDESTOVERRIDE                   = $00200000;
  1418.     //
  1419.     // Z-buffered blt using the dwConstSrcZ field and the dwZBufferOpCode field
  1420.     // in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively
  1421.     // for the source.
  1422.     //
  1423.     DDBLT_ZBUFFERSRCCONSTOVERRIDE               = $00400000;
  1424.     //
  1425.     // Z-buffered blt using the lpDDSSrcZBuffer field and the dwZBufferOpCode
  1426.     // field in the DDBLTFX structure as the z-buffer and z-buffer opcode
  1427.     // respectively for the source.
  1428.     //
  1429.     DDBLT_ZBUFFERSRCOVERRIDE                    = $00800000;
  1430.     //
  1431.     // wait until the device is ready to handle the blt
  1432.     // this will cause blt to not return DDERR_WASSTILLDRAWING
  1433.     //
  1434.     DDBLT_WAIT                                  = $01000000;
  1435.     //
  1436.     // Uses the dwFillDepth field in the DDBLTFX structure as the depth value
  1437.     // to fill the destination rectangle on the destination Z-buffer surface
  1438.     // with.
  1439.     //
  1440.     DDBLT_DEPTHFILL                             = $02000000;
  1441. {-- BltFast flags ------------------------------------------------------------}
  1442.     DDBLTFAST_NOCOLORKEY                        = $00000000;
  1443.     DDBLTFAST_SRCCOLORKEY                       = $00000001;
  1444.     DDBLTFAST_DESTCOLORKEY                      = $00000002;
  1445.     DDBLTFAST_WAIT                              = $00000010;
  1446. {-- Flip flags ---------------------------------------------------------------}
  1447.     DDFLIP_WAIT                                 = $00000001;
  1448. {-- DirectDraw surface overlay flags -----------------------------------------}
  1449.     //
  1450.     // Use the alpha information in the pixel format or the alpha channel surface
  1451.     // attached to the destination surface as the alpha channel for the
  1452.     // destination overlay.
  1453.     //
  1454.     DDOVER_ALPHADEST                            = $00000001;
  1455.     //
  1456.     // Use the dwConstAlphaDest field in the DDOVERLAYFX structure as the
  1457.     // destination alpha channel for this overlay.
  1458.     //
  1459.     DDOVER_ALPHADESTCONSTOVERRIDE               = $00000002;
  1460.     //
  1461.     // The NEG suffix indicates that the destination surface becomes more
  1462.     // transparent as the alpha value increases. 
  1463.     //
  1464.     DDOVER_ALPHADESTNEG                         = $00000004;
  1465.     //
  1466.     // Use the lpDDSAlphaDest field in the DDOVERLAYFX structure as the alpha
  1467.     // channel destination for this overlay.
  1468.     //
  1469.     DDOVER_ALPHADESTSURFACEOVERRIDE             = $00000008;
  1470.     //
  1471.     // Use the dwAlphaEdgeBlend field in the DDOVERLAYFX structure as the alpha
  1472.     // channel for the edges of the image that border the color key colors.
  1473.     //
  1474.     DDOVER_ALPHAEDGEBLEND                       = $00000010;
  1475.     //
  1476.     // Use the alpha information in the pixel format or the alpha channel surface
  1477.     // attached to the source surface as the source alpha channel for this overlay.
  1478.     //
  1479.     DDOVER_ALPHASRC                             = $00000020;
  1480.     //
  1481.     // Use the dwConstAlphaSrc field in the DDOVERLAYFX structure as the source
  1482.     // alpha channel for this overlay.
  1483.     //
  1484.     DDOVER_ALPHASRCCONSTOVERRIDE                = $00000040;
  1485.     //
  1486.     // The NEG suffix indicates that the source surface becomes more transparent
  1487.     // as the alpha value increases.
  1488.     //
  1489.     DDOVER_ALPHASRCNEG                          = $00000080;
  1490.     //
  1491.     // Use the lpDDSAlphaSrc field in the DDOVERLAYFX structure as the alpha channel
  1492.     // source for this overlay.
  1493.     //
  1494.     DDOVER_ALPHASRCSURFACEOVERRIDE              = $00000100;
  1495.     //
  1496.     // Turn this overlay off.
  1497.     //
  1498.     DDOVER_HIDE                                 = $00000200;
  1499.     //
  1500.     // Use the color key associated with the destination surface.
  1501.     //
  1502.     DDOVER_KEYDEST                              = $00000400;
  1503.     //
  1504.     // Use the dckDestColorkey field in the DDOVERLAYFX structure as the color key
  1505.     // for the destination surface
  1506.     //
  1507.     DDOVER_KEYDESTOVERRIDE                      = $00000800;
  1508.     //
  1509.     // Use the color key associated with the source surface.
  1510.     //
  1511.     DDOVER_KEYSRC                               = $00001000;
  1512.     //
  1513.     // Use the dckSrcColorkey field in the DDOVERLAYFX structure as the color key
  1514.     // for the source surface.
  1515.     //
  1516.     DDOVER_KEYSRCOVERRIDE                       = $00002000;
  1517.     //
  1518.     // Turn this overlay on.
  1519.     //
  1520.     DDOVER_SHOW                                 = $00004000;
  1521.     //
  1522.     // Add a dirty rect to an emulated overlayed surface.
  1523.     //
  1524.     DDOVER_ADDDIRTYRECT                         = $00008000;
  1525.     //
  1526.     // Redraw all dirty rects on an emulated overlayed surface.
  1527.     //
  1528.     DDOVER_REFRESHDIRTYRECTS                    = $00010000;
  1529.     //
  1530.     // Redraw the entire surface on an emulated overlayed surface.
  1531.     //
  1532.     DDOVER_REFRESHALL                           = $00020000;
  1533.     //
  1534.     // Use the overlay FX flags to define special overlay FX
  1535.     //
  1536.     DDOVER_DDFX                                 = $00080000;
  1537. {-- DirectDrawSurface lock flags ---------------------------------------------}
  1538.     //
  1539.     // The default.  Set to indicate that Lock should return a valid memory pointer
  1540.     // to the top of the specified rectangle.  If no rectangle is specified then a
  1541.     // pointer to the top of the surface is returned.
  1542.     //
  1543.     DDLOCK_SURFACEMEMORYPTR                     = $00000000;    // default
  1544.     //
  1545.     // Set to indicate that Lock should wait until it can obtain a valid memory
  1546.     // pointer before returning.  If this bit is set, Lock will never return
  1547.     // DDERR_WASSTILLDRAWING.
  1548.     //
  1549.     DDLOCK_WAIT                                 = $00000001;
  1550.     //
  1551.     // Set if an event handle is being passed to Lock.  Lock will trigger the event
  1552.     // when it can return the surface memory pointer requested.
  1553.     //
  1554.     DDLOCK_EVENT                                = $00000002;
  1555.     //
  1556.     // Indicates that the surface being locked will only be read from.
  1557.     //
  1558.     DDLOCK_READONLY                             = $00000010;
  1559.     //
  1560.     // Indicates that the surface being locked will only be written to
  1561.     //
  1562.     DDLOCK_WRITEONLY                            = $00000020;
  1563. {-- DDS pagelock flags -------------------------------------------------------}
  1564.     //
  1565.     // No flags defined at present
  1566.     //
  1567. {-- DDS pageunlock flags -----------------------------------------------------}
  1568.     //
  1569.     // No flags defined at present
  1570.     //
  1571. {-- DDS blt FX flags ---------------------------------------------------------}
  1572.     //
  1573.     // If stretching, use arithmetic stretching along the Y axis for this blt.
  1574.     //
  1575.     DDBLTFX_ARITHSTRETCHY                       = $00000001;
  1576.     //
  1577.     // Do this blt mirroring the surface left to right.  Spin the
  1578.     // surface around its y-axis.
  1579.     //
  1580.     DDBLTFX_MIRRORLEFTRIGHT                     = $00000002;
  1581.     //
  1582.     // Do this blt mirroring the surface up and down.  Spin the surface
  1583.     // around its x-axis.
  1584.     //
  1585.     DDBLTFX_MIRRORUPDOWN                        = $00000004;
  1586.     //
  1587.     // Schedule this blt to avoid tearing.
  1588.     //
  1589.     DDBLTFX_NOTEARING                           = $00000008;
  1590.     //
  1591.     // Do this blt rotating the surface one hundred and eighty degrees.
  1592.     //
  1593.     DDBLTFX_ROTATE180                           = $00000010;
  1594.     //
  1595.     // Do this blt rotating the surface two hundred and seventy degrees.
  1596.     //
  1597.     DDBLTFX_ROTATE270                           = $00000020;
  1598.     //
  1599.     // Do this blt rotating the surface ninety degrees.
  1600.     //
  1601.     DDBLTFX_ROTATE90                            = $00000040;
  1602.     //
  1603.     // Do this z blt using dwZBufferLow and dwZBufferHigh as  range values
  1604.     // specified to limit the bits copied from the source surface.
  1605.     //
  1606.     DDBLTFX_ZBUFFERRANGE                        = $00000080;
  1607.     //
  1608.     // Do this z blt adding the dwZBufferBaseDest to each of the sources z values
  1609.     // before comparing it with the desting z values.
  1610.     //
  1611.     DDBLTFX_ZBUFFERBASEDEST                     = $00000100;
  1612. {-- DDS overlay FX flags -----------------------------------------------------}
  1613.     //
  1614.     // If stretching, use arithmetic stretching along the Y axis for this overlay.
  1615.     //
  1616.     DDOVERFX_ARITHSTRETCHY                      = $00000001;
  1617.     //
  1618.     // Mirror the overlay across the vertical axis
  1619.     //
  1620.     DDOVERFX_MIRRORLEFTRIGHT                    = $00000002;
  1621.     //
  1622.     // Mirror the overlay across the horizontal axis
  1623.     //
  1624.     DDOVERFX_MIRRORUPDOWN                       = $00000004;
  1625. {-- DirectDraw WaitForVerticalBlank flags ------------------------------------}
  1626.     //
  1627.     // return when the vertical blank interval begins
  1628.     //
  1629.     DDWAITVB_BLOCKBEGIN                         = $00000001;
  1630.     //
  1631.     // set up an event to trigger when the vertical blank begins
  1632.     //
  1633.     DDWAITVB_BLOCKBEGINEVENT                    = $00000002;
  1634.     //
  1635.     // return when the vertical blank interval ends and display begins
  1636.     //
  1637.     DDWAITVB_BLOCKEND                           = $00000004;
  1638. {-- DD GetFlipStatus flags ---------------------------------------------------}
  1639.     //
  1640.     // is it OK to flip now?
  1641.     //
  1642.     DDGFS_CANFLIP                               = $00000001;
  1643.     //
  1644.     // is the last flip finished?
  1645.     //
  1646.     DDGFS_ISFLIPDONE                            = $00000002;
  1647. {-- DD GetBltStatus flags ----------------------------------------------------}
  1648.     //
  1649.     // is it OK to blt now?
  1650.     //
  1651.     DDGBS_CANBLT                                = $00000001;
  1652.     //
  1653.     // is the blt to the surface finished?
  1654.     //
  1655.     DDGBS_ISBLTDONE                             = $00000002;
  1656. {-- DD EnumOverlayZOrder flags -----------------------------------------------}
  1657.     //
  1658.     // Enumerate overlays back to front.
  1659.     //
  1660.     DDENUMOVERLAYZ_BACKTOFRONT                  = $00000000;
  1661.     //
  1662.     // Enumerate overlays front to back
  1663.     //
  1664.     DDENUMOVERLAYZ_FRONTTOBACK                  = $00000001;
  1665. {-- DD UpdateOverlayZOrder flags ---------------------------------------------}
  1666.     //
  1667.     // Send overlay to front
  1668.     //
  1669.     DDOVERZ_SENDTOFRONT                         = $00000000;
  1670.     //
  1671.     // Send overlay to back
  1672.     //
  1673.     DDOVERZ_SENDTOBACK                          = $00000001;
  1674.     //
  1675.     // Move Overlay forward
  1676.     //
  1677.     DDOVERZ_MOVEFORWARD                         = $00000002;
  1678.     //
  1679.     // Move Overlay backward
  1680.     //
  1681.     DDOVERZ_MOVEBACKWARD                        = $00000003;
  1682.     //
  1683.     // Move Overlay in front of relative surface
  1684.     //
  1685.     DDOVERZ_INSERTINFRONTOF                     = $00000004;
  1686.     //
  1687.     // Move Overlay in back of relative surface
  1688.     //
  1689.     DDOVERZ_INSERTINBACKOF                      = $00000005;
  1690. {== DD return codes ==========================================================}
  1691.     // The return values from DirectDraw Commands and Surface that return an HRESULT
  1692.     // are codes from DirectDraw concerning the results of the action
  1693.     // requested by DirectDraw.
  1694.     //
  1695.     // Status is OK
  1696.     //
  1697.     // Issued by: DirectDraw Commands and all callbacks
  1698.     //
  1699.     DD_OK                                       = 0;
  1700. {-- DD EnumCallback return values --------------------------------------------}
  1701.     // EnumCallback returns are used to control the flow of the DIRECTDRAW and
  1702.     // DIRECTDRAWSURFACE object enumerations.   They can only be returned by
  1703.     // enumeration callback routines.
  1704.     //
  1705.     // stop the enumeration
  1706.     //
  1707.     DDENUMRET_CANCEL                        = 0;
  1708.     //
  1709.     // continue the enumeration
  1710.     //
  1711.     DDENUMRET_OK                            = 1;
  1712. {-- DD errors ----------------------------------------------------------------}
  1713.     // Errors are represented by negative values and cannot be combined.
  1714.     DDERR_BASE                              = $88760000;
  1715.     //
  1716.     // This object is already initialized
  1717.     //
  1718.     DDERR_ALREADYINITIALIZED                = DDERR_BASE + 5 ;
  1719.     //
  1720.     // This surface can not be attached to the requested surface.
  1721.     //
  1722.     DDERR_CANNOTATTACHSURFACE               = DDERR_BASE + 10 ;
  1723.     //
  1724.     // This surface can not be detached from the requested surface.
  1725.     //
  1726.     DDERR_CANNOTDETACHSURFACE               = DDERR_BASE + 20 ;
  1727.     //
  1728.     // Support is currently not available.
  1729.     //
  1730.     DDERR_CURRENTLYNOTAVAIL                 = DDERR_BASE + 40 ;
  1731.     //
  1732.     // An exception was encountered while performing the requested operation
  1733.     //
  1734.     DDERR_EXCEPTION                         = DDERR_BASE + 55 ;
  1735.     //
  1736.     // Generic failure.
  1737.     //
  1738.     DDERR_GENERIC                           = E_FAIL ;
  1739.     //
  1740.     // Height of rectangle provided is not a multiple of reqd alignment
  1741.     //
  1742.     DDERR_HEIGHTALIGN                       = DDERR_BASE + 90 ;
  1743.     //
  1744.     // Unable to match primary surface creation request with existing
  1745.     // primary surface.
  1746.     //
  1747.     DDERR_INCOMPATIBLEPRIMARY               = DDERR_BASE + 95 ;
  1748.     //
  1749.     // One or more of the caps bits passed to the callback are incorrect.
  1750.     //
  1751.     DDERR_INVALIDCAPS                       = DDERR_BASE + 100 ;
  1752.     //
  1753.     // DirectDraw does not support provided Cliplist.
  1754.     //
  1755.     DDERR_INVALIDCLIPLIST                   = DDERR_BASE + 110 ;
  1756.     //
  1757.     // DirectDraw does not support the requested mode
  1758.     //
  1759.     DDERR_INVALIDMODE                       = DDERR_BASE + 120 ;
  1760.     //
  1761.     // DirectDraw received a pointer that was an invalid DIRECTDRAW object.
  1762.     //
  1763.     DDERR_INVALIDOBJECT                     = DDERR_BASE + 130 ;
  1764.     //
  1765.     // One or more of the parameters passed to the callback function are
  1766.     // incorrect.
  1767.     //
  1768.     DDERR_INVALIDPARAMS                     = E_INVALIDARG;
  1769.     //
  1770.     // pixel format was invalid as specified
  1771.     //
  1772.     DDERR_INVALIDPIXELFORMAT                = DDERR_BASE + 145 ;
  1773.     //
  1774.     // Rectangle provided was invalid.
  1775.     //
  1776.     DDERR_INVALIDRECT                       = DDERR_BASE + 150 ;
  1777.     //
  1778.     // Operation could not be carried out because one or more surfaces are locked
  1779.     //
  1780.     DDERR_LOCKEDSURFACES                    = DDERR_BASE + 160 ;
  1781.     //
  1782.     // There is no 3D present.
  1783.     //
  1784.     DDERR_NO3D                              = DDERR_BASE + 170 ;
  1785.     //
  1786.     // Operation could not be carried out because there is no alpha accleration
  1787.     // hardware present or available.
  1788.     //
  1789.     DDERR_NOALPHAHW                         = DDERR_BASE + 180 ;
  1790.     //
  1791.     // no clip list available
  1792.     //
  1793.     DDERR_NOCLIPLIST                        = DDERR_BASE + 205 ;
  1794.     //
  1795.     // Operation could not be carried out because there is no color conversion
  1796.     // hardware present or available.
  1797.     //
  1798.     DDERR_NOCOLORCONVHW                     = DDERR_BASE + 210 ;
  1799.     //
  1800.     // Create function called without DirectDraw object method SetCooperativeLevel
  1801.     // being called.
  1802.     //
  1803.     DDERR_NOCOOPERATIVELEVELSET             = DDERR_BASE + 212 ;
  1804.     //
  1805.     // Surface doesn't currently have a color key
  1806.     //
  1807.     DDERR_NOCOLORKEY                        = DDERR_BASE + 215 ;
  1808.     //
  1809.     // Operation could not be carried out because there is no hardware support
  1810.     // of the dest color key.
  1811.     //
  1812.     DDERR_NOCOLORKEYHW                      = DDERR_BASE + 220 ;
  1813.     //
  1814.     // No DirectDraw support possible with current display driver
  1815.     //
  1816.     DDERR_NODIRECTDRAWSUPPORT               = DDERR_BASE + 222 ;
  1817.     //
  1818.     // Operation requires the application to have exclusive mode but the
  1819.     // application does not have exclusive mode.
  1820.     //
  1821.     DDERR_NOEXCLUSIVEMODE                   = DDERR_BASE + 225 ;
  1822.     //
  1823.     // Flipping visible surfaces is not supported.
  1824.     //
  1825.     DDERR_NOFLIPHW                          = DDERR_BASE + 230 ;
  1826.     //
  1827.     // There is no GDI present.
  1828.     //
  1829.     DDERR_NOGDI                             = DDERR_BASE + 240 ;
  1830.     //
  1831.     // Operation could not be carried out because there is no hardware present
  1832.     // or available.
  1833.     //
  1834.     DDERR_NOMIRRORHW                        = DDERR_BASE + 250 ;
  1835.     //
  1836.     // Requested item was not found
  1837.     //
  1838.     DDERR_NOTFOUND                          = DDERR_BASE + 255 ;
  1839.     //
  1840.     // Operation could not be carried out because there is no overlay hardware
  1841.     // present or available.
  1842.     //
  1843.     DDERR_NOOVERLAYHW                       = DDERR_BASE + 260 ;
  1844.     //
  1845.     // Operation could not be carried out because there is no appropriate raster
  1846.     // op hardware present or available.
  1847.     //
  1848.     DDERR_NORASTEROPHW                      = DDERR_BASE + 280 ;
  1849.     //
  1850.     // Operation could not be carried out because there is no rotation hardware
  1851.     // present or available.
  1852.     //
  1853.     DDERR_NOROTATIONHW                      = DDERR_BASE + 290 ;
  1854.     //
  1855.     // Operation could not be carried out because there is no hardware support
  1856.     // for stretching
  1857.     //
  1858.     DDERR_NOSTRETCHHW                       = DDERR_BASE + 310 ;
  1859.     //
  1860.     // DirectDrawSurface is not in 4 bit color palette and the requested operation
  1861.     // requires 4 bit color palette.
  1862.     //
  1863.     DDERR_NOT4BITCOLOR                      = DDERR_BASE + 316 ;
  1864.     //
  1865.     // DirectDrawSurface is not in 4 bit color index palette and the requested
  1866.     // operation requires 4 bit color index palette.
  1867.     //
  1868.     DDERR_NOT4BITCOLORINDEX                 = DDERR_BASE + 317 ;
  1869.     //
  1870.     // DirectDraw Surface is not in 8 bit color mode and the requested operation
  1871.     // requires 8 bit color.
  1872.     //
  1873.     DDERR_NOT8BITCOLOR                      = DDERR_BASE + 320 ;
  1874.     //
  1875.     // Operation could not be carried out because there is no texture mapping
  1876.     // hardware present or available.
  1877.     //
  1878.     DDERR_NOTEXTUREHW                       = DDERR_BASE + 330 ;
  1879.     //
  1880.     // Operation could not be carried out because there is no hardware support
  1881.     // for vertical blank synchronized operations.
  1882.     //
  1883.     DDERR_NOVSYNCHW                         = DDERR_BASE + 335 ;
  1884.     //
  1885.     // Operation could not be carried out because there is no hardware support
  1886.     // for zbuffer blting.
  1887.     //
  1888.     DDERR_NOZBUFFERHW                       = DDERR_BASE + 340 ;
  1889.     //
  1890.     // Overlay surfaces could not be z layered based on their BltOrder because
  1891.     // the hardware does not support z layering of overlays.
  1892.     //
  1893.     DDERR_NOZOVERLAYHW                      = DDERR_BASE + 350 ;
  1894.     //
  1895.     // The hardware needed for the requested operation has already been
  1896.     // allocated.
  1897.     //
  1898.     DDERR_OUTOFCAPS                         = DDERR_BASE + 360 ;
  1899.     //
  1900.     // DirectDraw does not have enough memory to perform the operation.
  1901.     //
  1902.     DDERR_OUTOFMEMORY                       = E_OUTOFMEMORY;
  1903.     //
  1904.     // DirectDraw does not have enough memory to perform the operation.
  1905.     //
  1906.     DDERR_OUTOFVIDEOMEMORY                  = DDERR_BASE + 380 ;
  1907.     //
  1908.     // hardware does not support clipped overlays
  1909.     //
  1910.     DDERR_OVERLAYCANTCLIP                   = DDERR_BASE + 382 ;
  1911.     //
  1912.     // Can only have ony color key active at one time for overlays
  1913.     //
  1914.     DDERR_OVERLAYCOLORKEYONLYONEACTIVE      = DDERR_BASE + 384 ;
  1915.     //
  1916.     // Access to this palette is being refused because the palette is already
  1917.     // locked by another thread.
  1918.     //
  1919.     DDERR_PALETTEBUSY                       = DDERR_BASE + 387 ;
  1920.     //
  1921.     // No src color key specified for this operation.
  1922.     //
  1923.     DDERR_COLORKEYNOTSET                    = DDERR_BASE + 400 ;
  1924.     //
  1925.     // This surface is already attached to the surface it is being attached to.
  1926.     //
  1927.     DDERR_SURFACEALREADYATTACHED            = DDERR_BASE + 410 ;
  1928.     //
  1929.     // This surface is already a dependency of the surface it is being made a
  1930.     // dependency of.
  1931.     //
  1932.     DDERR_SURFACEALREADYDEPENDENT           = DDERR_BASE + 420 ;
  1933.     //
  1934.     // Access to this surface is being refused because the surface is already
  1935.     // locked by another thread.
  1936.     //
  1937.     DDERR_SURFACEBUSY                       = DDERR_BASE + 430 ;
  1938.     //
  1939.     // Access to this surface is being refused because no driver exists
  1940.     // which can supply a pointer to the surface.
  1941.     // This is most likely to happen when attempting to lock the primary
  1942.     // surface when no DCI provider is present.
  1943.     //
  1944.     DDERR_CANTLOCKSURFACE                   = DDERR_BASE + 435 ;
  1945.     //
  1946.     // Access to Surface refused because Surface is obscured.
  1947.     //
  1948.     DDERR_SURFACEISOBSCURED                 = DDERR_BASE + 440 ;
  1949.     //
  1950.     // Access to this surface is being refused because the surface is gone.
  1951.     // The DIRECTDRAWSURFACE object representing this surface should
  1952.     // have Restore called on it.
  1953.     //
  1954.     DDERR_SURFACELOST                       = DDERR_BASE + 450 ;
  1955.     //
  1956.     // The requested surface is not attached.
  1957.     //
  1958.     DDERR_SURFACENOTATTACHED                = DDERR_BASE + 460 ;
  1959.     //
  1960.     // Height requested by DirectDraw is too large.
  1961.     //
  1962.     DDERR_TOOBIGHEIGHT                      = DDERR_BASE + 470 ;
  1963.     //
  1964.     // Size requested by DirectDraw is too large --  The individual height and
  1965.     // width are OK.
  1966.     //
  1967.     DDERR_TOOBIGSIZE                        = DDERR_BASE + 480 ;
  1968.     //
  1969.     // Width requested by DirectDraw is too large.
  1970.     //
  1971.     DDERR_TOOBIGWIDTH                       = DDERR_BASE + 490 ;
  1972.     //
  1973.     // Action not supported.
  1974.     //
  1975.     DDERR_UNSUPPORTED                       = E_NOTIMPL;
  1976.     //
  1977.     // FOURCC format requested is unsupported by DirectDraw
  1978.     //
  1979.     DDERR_UNSUPPORTEDFORMAT                 = DDERR_BASE + 510 ;
  1980.     //
  1981.     // Bitmask in the pixel format requested is unsupported by DirectDraw
  1982.     //
  1983.     DDERR_UNSUPPORTEDMASK                   = DDERR_BASE + 520 ;
  1984.     //
  1985.     // vertical blank is in progress
  1986.     //
  1987.     DDERR_VERTICALBLANKINPROGRESS           = DDERR_BASE + 537 ;
  1988.     //
  1989.     // Informs DirectDraw that the previous Blt which is transfering information
  1990.     // to or from this Surface is incomplete.
  1991.     //
  1992.     DDERR_WASSTILLDRAWING                   = DDERR_BASE + 540 ;
  1993.     //
  1994.     // Rectangle provided was not horizontally aligned on reqd. boundary
  1995.     //
  1996.     DDERR_XALIGN                            = DDERR_BASE + 560 ;
  1997.     //
  1998.     // The GUID passed to DirectDrawCreate is not a valid DirectDraw driver
  1999.     // identifier.
  2000.     //
  2001.     DDERR_INVALIDDIRECTDRAWGUID             = DDERR_BASE + 561 ;
  2002.     //
  2003.     // A DirectDraw object representing this driver has already been created
  2004.     // for this process.
  2005.     //
  2006.     DDERR_DIRECTDRAWALREADYCREATED          = DDERR_BASE + 562 ;
  2007.     //
  2008.     // A hardware only DirectDraw object creation was attempted but the driver
  2009.     // did not support any hardware.
  2010.     //
  2011.     DDERR_NODIRECTDRAWHW                    = DDERR_BASE + 563 ;
  2012.     //
  2013.     // this process already has created a primary surface
  2014.     //
  2015.     DDERR_PRIMARYSURFACEALREADYEXISTS       = DDERR_BASE + 564 ;
  2016.     //
  2017.     // software emulation not available.
  2018.     //
  2019.     DDERR_NOEMULATION                       = DDERR_BASE + 565 ;
  2020.     //
  2021.     // region passed to Clipper::GetClipList is too small.
  2022.     //
  2023.     DDERR_REGIONTOOSMALL                    = DDERR_BASE + 566 ;
  2024.     //
  2025.     // an attempt was made to set a clip list for a clipper objec that
  2026.     // is already monitoring an hwnd.
  2027.     //
  2028.     DDERR_CLIPPERISUSINGHWND                = DDERR_BASE + 567 ;
  2029.     //
  2030.     // No clipper object attached to surface object
  2031.     //
  2032.     DDERR_NOCLIPPERATTACHED                 = DDERR_BASE + 568 ;
  2033.     //
  2034.     // Clipper notification requires an HWND or
  2035.     // no HWND has previously been set as the CooperativeLevel HWND.
  2036.     //
  2037.     DDERR_NOHWND                            = DDERR_BASE + 569 ;
  2038.     //
  2039.     // HWND used by DirectDraw CooperativeLevel has been subclassed,
  2040.     // this prevents DirectDraw from restoring state.
  2041.     //
  2042.     DDERR_HWNDSUBCLASSED                    = DDERR_BASE + 570 ;
  2043.     //
  2044.     // The CooperativeLevel HWND has already been set.
  2045.     // It can not be reset while the process has surfaces or palettes created.
  2046.     //
  2047.     DDERR_HWNDALREADYSET                    = DDERR_BASE + 571 ;
  2048.     //
  2049.     // No palette object attached to this surface.
  2050.     //
  2051.     DDERR_NOPALETTEATTACHED                 = DDERR_BASE + 572 ;
  2052.     //
  2053.     // No hardware support for 16 or 256 color palettes.
  2054.     //
  2055.     DDERR_NOPALETTEHW                       = DDERR_BASE + 573 ;
  2056.     //
  2057.     // If a clipper object is attached to the source surface passed into a
  2058.     // BltFast call.
  2059.     //
  2060.     DDERR_BLTFASTCANTCLIP                   = DDERR_BASE + 574 ;
  2061.     //
  2062.     // No blter.
  2063.     //
  2064.     DDERR_NOBLTHW                           = DDERR_BASE + 575 ;
  2065.     //
  2066.     // No DirectDraw ROP hardware.
  2067.     //
  2068.     DDERR_NODDROPSHW                        = DDERR_BASE + 576 ;
  2069.     //
  2070.     // returned when GetOverlayPosition is called on a hidden overlay
  2071.     //
  2072.     DDERR_OVERLAYNOTVISIBLE                 = DDERR_BASE + 577 ;
  2073.     //
  2074.     // returned when GetOverlayPosition is called on a overlay that UpdateOverlay
  2075.     // has never been called on to establish a destionation.
  2076.     //
  2077.     DDERR_NOOVERLAYDEST                     = DDERR_BASE + 578 ;
  2078.     //
  2079.     // returned when the position of the overlay on the destionation is no longer
  2080.     // legal for that destionation.
  2081.     //
  2082.     DDERR_INVALIDPOSITION                   = DDERR_BASE + 579 ;
  2083.     //
  2084.     // returned when an overlay member is called for a non-overlay surface
  2085.     //
  2086.     DDERR_NOTAOVERLAYSURFACE                = DDERR_BASE + 580 ;
  2087.  
  2088.     //
  2089.     // An attempt was made to set the cooperative level when it was already
  2090.     // set to exclusive.
  2091.     //
  2092.     DDERR_EXCLUSIVEMODEALREADYSET           = DDERR_BASE + 581 ;
  2093.     //
  2094.     // An attempt has been made to flip a surface that is not flippable.
  2095.     //
  2096.     DDERR_NOTFLIPPABLE                      = DDERR_BASE + 582 ;
  2097.     //
  2098.     // Can't duplicate primary & 3D surfaces, or surfaces that are implicitly
  2099.     // created.
  2100.     //
  2101.     DDERR_CANTDUPLICATE                     = DDERR_BASE + 583 ;
  2102.     //
  2103.     // Surface was not locked.  An attempt to unlock a surface that was not
  2104.     // locked at all, or by this process, has been attempted.
  2105.     //
  2106.     DDERR_NOTLOCKED                         = DDERR_BASE + 584 ;
  2107.     //
  2108.     // Windows can not create any more DCs
  2109.     //
  2110.     DDERR_CANTCREATEDC                      = DDERR_BASE + 585 ;
  2111.     //
  2112.     // No DC was ever created for this surface.
  2113.     //
  2114.     DDERR_NODC                              = DDERR_BASE + 586 ;
  2115.     //
  2116.     // This surface can not be restored because it was created in a different
  2117.     // mode.
  2118.     //
  2119.     DDERR_WRONGMODE                         = DDERR_BASE + 587 ;
  2120.     //
  2121.     // This surface can not be restored because it is an implicitly created
  2122.     // surface.
  2123.     //
  2124.     DDERR_IMPLICITLYCREATED                 = DDERR_BASE + 588 ;
  2125.     //
  2126.     // The surface being used is not a palette-based surface
  2127.     //
  2128.     DDERR_NOTPALETTIZED                     = DDERR_BASE + 589 ;
  2129.     //
  2130.     // The display is currently in an unsupported mode
  2131.     //
  2132.     DDERR_UNSUPPORTEDMODE                   = DDERR_BASE + 590 ;
  2133.     //
  2134.     // Operation could not be carried out because there is no mip-map
  2135.     // texture mapping hardware present or available.
  2136.     //
  2137.     DDERR_NOMIPMAPHW                        = DDERR_BASE + 591 ;
  2138.     //
  2139.     // The requested action could not be performed because the surface was of
  2140.     // the wrong type.
  2141.     //
  2142.     DDERR_INVALIDSURFACETYPE                = DDERR_BASE + 592 ;
  2143.     //
  2144.     // A DC has already been returned for this surface. Only one DC can be
  2145.     // retrieved per surface.
  2146.     //
  2147.     DDERR_DCALREADYCREATED                  = DDERR_BASE + 620 ;
  2148.     //
  2149.     // The attempt to page lock a surface failed.
  2150.     //
  2151.     DDERR_CANTPAGELOCK                      = DDERR_BASE + 640 ;
  2152.     //
  2153.     // The attempt to page unlock a surface failed.
  2154.     //
  2155.     DDERR_CANTPAGEUNLOCK                    = DDERR_BASE + 660 ;
  2156.     //
  2157.     // An attempt was made to page unlock a surface with no outstanding page locks.
  2158.     //
  2159.     DDERR_NOTPAGELOCKED                     = DDERR_BASE + 680 ;
  2160.     //
  2161.     // An attempt was made to invoke an interface member of a DirectDraw object
  2162.     // created by CoCreateInstance() before it was initialized.
  2163.     //
  2164.     DDERR_NOTINITIALIZED                    = CO_E_NOTINITIALIZED;
  2165. {-- API's --------------------------------------------------------------------}
  2166. (*
  2167. function DirectDrawEnumerate(lpCallback: PDDENUMCALLBACK;
  2168.                              lpContext: Pointer): HRESULT; stdcall;
  2169. function DirectDrawCreate(lpGUID: PGUID; var lplpDD: IDirectDraw;
  2170.                           pUnkOuter: IUnknown): HRESULT; stdcall;
  2171. function DirectDrawCreateClipper(dwFlags: DWORD;
  2172.                                  var lplpDDClipper: IDirectDrawClipper;
  2173.                                  pUnkOuter: IUnknown): HRESULT; stdcall;
  2174. *)
  2175. implementation
  2176. uses
  2177.     SysUtils;
  2178. (*
  2179. const
  2180.      DLLName = 'DDRAW.DLL';
  2181. function DirectDrawEnumerate; external DLLName name 'DirectDrawEnumerateA' ;
  2182. function DirectDrawCreate; external DLLName;
  2183. function DirectDrawCreateClipper ; external DLLName;
  2184. *)
  2185. end.