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

Delphi控件源码

开发平台:

Delphi

  1. {******************************************************************************}
  2. {*                                                                            *}
  3. {*  Copyright (C) Microsoft Corporation.  All Rights Reserved.                *}
  4. {*                                                                            *}
  5. {*  Files:      ddraw.h dvp.h                                                 *}
  6. {*  Content:    DirectDraw and DirectDrawVideoPort include files              *}
  7. {*                                                                            *}
  8. {*  DirectX 9.0 Delphi adaptation by Alexey Barkovoy                          *}
  9. {*  E-Mail: clootie@reactor.ru                                                *}
  10. {*                                                                            *}
  11. {*  Modified: 26-Jan-2003                                                     *}
  12. {*                                                                            *}
  13. {*  Based upon :                                                              *}
  14. {*    DirectX 7.0 Object Pascal adaptation by                                 *}
  15. {*      Erik Unger, e-Mail: DelphiDirectX@next-reality.com                    *}
  16. {*                                                                            *}
  17. {*  Latest version can be downloaded from:                                    *}
  18. {*     http://clootie.narod.ru/delphi/                                        *}
  19. {*                                                                            *}
  20. {******************************************************************************}
  21. {                                                                              }
  22. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  23. {                                                                              }
  24. { The contents of this file are used with permission, subject to the Mozilla   }
  25. { Public License Version 1.1 (the "License"); you may not use this file except }
  26. { in compliance with the License. You may obtain a copy of the License at      }
  27. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  28. {                                                                              }
  29. { Software distributed under the License is distributed on an "AS IS" basis,   }
  30. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  31. { the specific language governing rights and limitations under the License.    }
  32. {                                                                              }
  33. { Alternatively, the contents of this file may be used under the terms of the  }
  34. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  35. { provisions of the LGPL License are applicable instead of those above.        }
  36. { If you wish to allow use of your version of this file only under the terms   }
  37. { of the LGPL License and not to allow others to use your version of this file }
  38. { under the MPL, indicate your decision by deleting  the provisions above and  }
  39. { replace  them with the notice and other provisions required by the LGPL      }
  40. { License.  If you do not delete the provisions above, a recipient may use     }
  41. { your version of this file under either the MPL or the LGPL License.          }
  42. {                                                                              }
  43. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  44. {                                                                              }
  45. {******************************************************************************}
  46. ///////////////////////////////////////////////////////////////////////////////
  47. // Notes:
  48. //----------------------------------------------------------------------------
  49. // Possible input defines for this file, mapped to original C values:
  50. //   DIRECTDRAW_VERSION_7 : DIRECTDRAW_VERSION = 0x0700,
  51. //   DIRECTDRAW_VERSION_6 : DIRECTDRAW_VERSION = 0x0600,
  52. //   DIRECTDRAW_VERSION_5 : DIRECTDRAW_VERSION = 0x0500,
  53. //   DIRECTDRAW_VERSION_3 : DIRECTDRAW_VERSION = 0x0300,
  54. //   DIRECTDRAW_VERSION_LESS_3 : DIRECTDRAW_VERSION < 0x0300,
  55. //
  56. // By default DIRECTDRAW_VERSION_7 (DIRECTDRAW_VERSION = 0x0700) is assumed
  57. //
  58. // Also you can use generic DIRECTXx defines, so:
  59. //   DIRECTX7 equal to DIRECTDRAW_VERSION_7;
  60. //   DIRECTX6 equal to DIRECTDRAW_VERSION_6;
  61. //   DIRECTX5 equal to DIRECTDRAW_VERSION_5;
  62. //   DIRECTX3 equal to DIRECTDRAW_VERSION_3
  63. ///////////////////////////////////////////////////////////////////////////////
  64. unit DirectDraw;
  65. interface
  66. {$I DirectX.inc}
  67. ////////////////////////////////////////////////////////////////////////
  68. // Global level dynamic loading support
  69. {$IFDEF DYNAMIC_LINK_ALL}
  70.   {$DEFINE DIRECTDRAW_DYNAMIC_LINK}
  71. {$ENDIF}
  72. {$IFDEF DYNAMIC_LINK_EXPLICIT_ALL}
  73.   {$DEFINE DIRECTDRAW_DYNAMIC_LINK_EXPLICIT}
  74. {$ENDIF}
  75. // Remove "dots" below to force some kind of dynamic linking
  76. {.$DEFINE DIRECTDRAW_DYNAMIC_LINK}
  77. {.$DEFINE DIRECTDRAW_DYNAMIC_LINK_EXPLICIT}
  78. ////////////////////////////////////////////////////////////////////////
  79. // Assume for what DirectDraw version we will compile headers
  80. {$IFDEF DIRECTX7}
  81.   {$DEFINE DIRECTDRAW_VERSION_7}
  82. {$ENDIF}
  83. {$IFDEF DIRECTX6}
  84.   {$DEFINE DIRECTDRAW_VERSION_6}
  85. {$ENDIF}
  86. {$IFDEF DIRECTX5}
  87.   {$DEFINE DIRECTDRAW_VERSION_5}
  88. {$ENDIF}
  89. {$IFDEF DIRECTX3}
  90.   {$DEFINE DIRECTDRAW_VERSION_3}
  91. {$ENDIF}
  92. {$IFNDEF DIRECTDRAW_VERSION_7}
  93.   {$IFNDEF DIRECTDRAW_VERSION_6}
  94.     {$IFNDEF DIRECTDRAW_VERSION_5}
  95.       {$IFNDEF DIRECTDRAW_VERSION_3}
  96.         {$IFNDEF DIRECTDRAW_VERSION_LESS_3}
  97.           {$DEFINE DIRECTDRAW_VERSION_7} // Compiling for DirectDraw7 by default
  98.         {$ENDIF}
  99.       {$ENDIF}
  100.     {$ENDIF}
  101.   {$ENDIF}
  102. {$ENDIF}
  103. ////////////////////////////////////////////////////////////////////////
  104. // Emit conditionals to C++Builder compiler
  105. {$IFDEF DIRECTDRAW_VERSION_LESS_3}
  106.   {$HPPEMIT '#define DIRECTDRAW_VERSION         0x0100'}
  107. {$ENDIF}
  108. {$IFDEF DIRECTDRAW_VERSION_3}
  109.   {$HPPEMIT '#define DIRECTDRAW_VERSION         0x0300'}
  110. {$ENDIF}
  111. {$IFDEF DIRECTDRAW_VERSION_5}
  112.   {$HPPEMIT '#define DIRECTDRAW_VERSION         0x0500'}
  113. {$ENDIF}
  114. {$IFDEF DIRECTDRAW_VERSION_6}
  115.   {$HPPEMIT '#define DIRECTDRAW_VERSION         0x0600'}
  116. {$ENDIF}
  117. {$IFDEF DIRECTDRAW_VERSION_7}
  118.   {$HPPEMIT '#define DIRECTDRAW_VERSION         0x0700'}
  119. {$ENDIF}
  120. ////////////////////////////////////////////////////////////////////////
  121. // Define symbols for '<=' comparision
  122. {$IFDEF DIRECTDRAW_VERSION_7}
  123.   {$DEFINE DIRECTDRAW_VERSION_6}
  124. {$ENDIF}
  125. {$IFDEF DIRECTDRAW_VERSION_6}
  126.   {$DEFINE DIRECTDRAW_VERSION_5}
  127. {$ENDIF}
  128. {$IFDEF DIRECTDRAW_VERSION_5}
  129.   {$DEFINE DIRECTDRAW_VERSION_3}
  130. {$ENDIF}
  131. {$IFDEF DIRECTDRAW_VERSION_3}
  132.   {$DEFINE DIRECTDRAW_VERSION_LESS_3}
  133. {$ENDIF}
  134. (*$HPPEMIT '#include "ddraw.h"' *)
  135. (*$HPPEMIT '#include "dvp.h"' *)
  136. uses
  137.   Windows;
  138.   
  139. (*==========================================================================;
  140.  *
  141.  *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  142.  *
  143.  *  File:       ddraw.h
  144.  *  Content:    DirectDraw include file
  145.  *
  146.  ***************************************************************************)
  147. function MAKEFOURCC(ch0, ch1, ch2, ch3: Char): DWORD;
  148. {$EXTERNALSYM MAKEFOURCC}
  149. (*
  150.  * FOURCC codes for DX compressed-texture pixel formats
  151.  *)
  152. const
  153.   //#define FOURCC_DXT1  (MAKEFOURCC('D','X','T','1'))
  154.   FOURCC_DXT1 = DWORD(Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('1') shl 24));
  155.   {$EXTERNALSYM FOURCC_DXT1}
  156.   //#define FOURCC_DXT2  (MAKEFOURCC('D','X','T','2'))
  157.   FOURCC_DXT2 = DWORD(Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('2') shl 24));
  158.   {$EXTERNALSYM FOURCC_DXT2}
  159.   //#define FOURCC_DXT3  (MAKEFOURCC('D','X','T','3'))
  160.   FOURCC_DXT3 = DWORD(Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('3') shl 24));
  161.   {$EXTERNALSYM FOURCC_DXT3}
  162.   //#define FOURCC_DXT4  (MAKEFOURCC('D','X','T','4'))
  163.   FOURCC_DXT4 = DWORD(Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('4') shl 24));
  164.   {$EXTERNALSYM FOURCC_DXT4}
  165.   //#define FOURCC_DXT5  (MAKEFOURCC('D','X','T','5'))
  166.   FOURCC_DXT5 = DWORD(Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('5') shl 24));
  167.   {$EXTERNALSYM FOURCC_DXT5}
  168. (*
  169.  * GUIDS used by DirectDraw objects
  170.  *)
  171. const
  172.   CLSID_DirectDraw: TGUID = '{D7B70EE0-4340-11CF-B063-0020AFC2CD35}';
  173.   {$EXTERNALSYM CLSID_DirectDraw}
  174.   CLSID_DirectDraw7: TGUID = '{3c305196-50db-11d3-9cfe-00c04fd930c5}';
  175.   {$EXTERNALSYM CLSID_DirectDraw7}
  176.   CLSID_DirectDrawClipper: TGUID = '{593817A0-7DB3-11CF-A2DE-00AA00b93356}';
  177.   {$EXTERNALSYM CLSID_DirectDrawClipper}
  178.   (* These GUID's defined later by typedefing to Delphi interfaces
  179.   DEFINE_GUID( IID_IDirectDraw,                   0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  180.   DEFINE_GUID( IID_IDirectDraw2,                  0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 );
  181.   DEFINE_GUID( IID_IDirectDraw4,                  0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 );
  182.   DEFINE_GUID( IID_IDirectDraw7,                  0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );
  183.   DEFINE_GUID( IID_IDirectDrawSurface,            0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  184.   DEFINE_GUID( IID_IDirectDrawSurface2,           0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 );
  185.   DEFINE_GUID( IID_IDirectDrawSurface3,           0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB );
  186.   DEFINE_GUID( IID_IDirectDrawSurface4,           0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B );
  187.   DEFINE_GUID( IID_IDirectDrawSurface7,           0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );
  188.   DEFINE_GUID( IID_IDirectDrawPalette,            0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  189.   DEFINE_GUID( IID_IDirectDrawClipper,            0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
  190.   DEFINE_GUID( IID_IDirectDrawColorControl,       0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 );
  191.   DEFINE_GUID( IID_IDirectDrawGammaControl,       0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E );
  192.   *)
  193. const
  194.   DD_ROP_SPACE = (256 div 32);       // space required to store ROP array
  195.   {$EXTERNALSYM DD_ROP_SPACE}
  196.   MAX_DDDEVICEID_STRING = 512;
  197.   {$EXTERNALSYM MAX_DDDEVICEID_STRING}
  198. (*============================================================================
  199.  *
  200.  * DirectDraw Structures
  201.  *
  202.  * Various structures used to invoke DirectDraw.
  203.  *
  204.  *==========================================================================*)
  205. var
  206.   NilGUID : TGUID = '{00000000-0000-0000-0000-000000000000}';
  207. type
  208.   //Clootie: This was originally in Erik Unger headers - don't know why, so leave it alone
  209.   TRefGUID = packed record
  210.     case Integer of
  211.     1: (guid : PGUID);
  212.     2: (dwFlags : DWORD);
  213.   end;
  214.   REFGUID = PGUID;
  215.   {$EXTERNALSYM REFGUID}
  216.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDraw);'}
  217.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDraw2);'}
  218.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDraw4);'}
  219.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDraw7);'}
  220.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawSurface);'}
  221.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawSurface2);'}
  222.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawSurface3);'}
  223.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawSurface4);'}
  224.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawSurface7);'}
  225.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawPalette);'}
  226.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawClipper);'}
  227.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawColorControl);'}
  228.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectDrawGammaControl);'}
  229.   
  230.   IDirectDraw = interface;
  231.   {$EXTERNALSYM IDirectDraw}
  232.   IDirectDraw2 = interface;
  233.   {$EXTERNALSYM IDirectDraw2}
  234.   IDirectDraw4 = interface;
  235.   {$EXTERNALSYM IDirectDraw4}
  236.   IDirectDraw7 = interface;
  237.   {$EXTERNALSYM IDirectDraw7}
  238.   IDirectDrawSurface = interface;
  239.   {$EXTERNALSYM IDirectDrawSurface}
  240.   IDirectDrawSurface2 = interface;
  241.   {$EXTERNALSYM IDirectDrawSurface2}
  242.   IDirectDrawSurface3 = interface;
  243.   {$EXTERNALSYM IDirectDrawSurface3}
  244.   IDirectDrawSurface4 = interface;
  245.   {$EXTERNALSYM IDirectDrawSurface4}
  246.   IDirectDrawSurface7 = interface;
  247.   {$EXTERNALSYM IDirectDrawSurface7}
  248.   IDirectDrawPalette = interface;
  249.   {$EXTERNALSYM IDirectDrawPalette}
  250.   IDirectDrawClipper = interface;
  251.   {$EXTERNALSYM IDirectDrawClipper}
  252.   IDirectDrawColorControl = interface;
  253.   {$EXTERNALSYM IDirectDrawColorControl}
  254.   IDirectDrawGammaControl = interface;
  255.   {$EXTERNALSYM IDirectDrawGammaControl}
  256. (*
  257.  * Generic pixel format with 8-bit RGB and alpha components
  258.  *)
  259.   PDDARGB = ^TDDARGB;
  260.   _DDARGB = packed record
  261.     blue:     Byte;
  262.     green:    Byte;
  263.     red:      Byte;
  264.     alpha:    Byte;
  265.   end;
  266.   {$EXTERNALSYM _DDARGB}
  267.   DDARGB = _DDARGB;
  268.   {$EXTERNALSYM DDARGB}
  269.   TDDARGB = _DDARGB;
  270. (*
  271.  * This version of the structure remains for backwards source compatibility.
  272.  * The DDARGB structure is the one that should be used for all DirectDraw APIs.
  273.  *)
  274.   PDDRGBA = ^TDDRGBA;
  275.   _DDRGBA = packed record
  276.     red   : Byte;
  277.     green : Byte;
  278.     blue  : Byte;
  279.     alpha : Byte;
  280.   end;
  281.   {$EXTERNALSYM _DDRGBA}
  282.   DDRGBA = _DDRGBA;
  283.   {$EXTERNALSYM DDRGBA}
  284.   TDDRGBA = _DDRGBA;
  285. (*
  286.  * TDDColorKey
  287.  *)
  288.   PDDColorKey = ^TDDColorKey;
  289.   _DDCOLORKEY = packed record
  290.     dwColorSpaceLowValue: DWORD;   // low boundary of color space that is to
  291.                                    // be treated as Color Key, inclusive
  292.     dwColorSpaceHighValue: DWORD;  // high boundary of color space that is
  293.                                    // to be treated as Color Key, inclusive
  294.   end;
  295.   {$EXTERNALSYM _DDCOLORKEY}
  296.   DDCOLORKEY = _DDCOLORKEY;
  297.   {$EXTERNALSYM DDCOLORKEY}
  298.   TDDColorKey = _DDCOLORKEY;
  299. // Delphi 5 and up don't allow interfaces in variant records
  300. // so we have to use pointers instead (which can be type-casted into interfaces):
  301. {$IFDEF COMPILER5_UP}
  302.   PDirectDrawSurface = Pointer;
  303. {$ELSE}
  304.   PDirectDrawSurface = IDirectDrawSurface;
  305. {$ENDIF}
  306. (*
  307.  * TDDBltFX
  308.  * Used to pass override information to the DIRECTDRAWSURFACE callback Blt.
  309.  *)
  310.   PDDBltFX = ^TDDBltFX;
  311.   _DDBLTFX = packed record
  312.     dwSize                        : DWORD;     // size of structure
  313.     dwDDFX                        : DWORD;     // FX operations
  314.     dwROP                         : DWORD;     // Win32 raster operations
  315.     dwDDROP                       : DWORD;     // Raster operations new for DirectDraw
  316.     dwRotationAngle               : DWORD;     // Rotation angle for blt
  317.     dwZBufferOpCode               : DWORD;     // ZBuffer compares
  318.     dwZBufferLow                  : DWORD;     // Low limit of Z buffer
  319.     dwZBufferHigh                 : DWORD;     // High limit of Z buffer
  320.     dwZBufferBaseDest             : DWORD;     // Destination base value
  321.     dwZDestConstBitDepth          : DWORD;     // Bit depth used to specify Z constant for destination
  322.     case Integer of
  323.     0: (
  324.       dwZDestConst                : DWORD      // Constant to use as Z buffer for dest
  325.      );
  326.     1: (
  327.       lpDDSZBufferDest            : PDirectDrawSurface; // Surface to use as Z buffer for dest
  328.       dwZSrcConstBitDepth         : DWORD;     // Bit depth used to specify Z constant for source
  329.       case integer of
  330.       0: (
  331.         dwZSrcConst               : DWORD;     // Constant to use as Z buffer for src
  332.        );
  333.       1: (
  334.         lpDDSZBufferSrc           : PDirectDrawSurface; // Surface to use as Z buffer for src
  335.         dwAlphaEdgeBlendBitDepth  : DWORD;     // Bit depth used to specify constant for alpha edge blend
  336.         dwAlphaEdgeBlend          : DWORD;     // Alpha for edge blending
  337.         dwReserved                : DWORD;
  338.         dwAlphaDestConstBitDepth  : DWORD;     // Bit depth used to specify alpha constant for destination
  339.         case integer of
  340.         0: (
  341.           dwAlphaDestConst        : DWORD;     // Constant to use as Alpha Channel
  342.          );
  343.         1: (
  344.           lpDDSAlphaDest          : PDirectDrawSurface; // Surface to use as Alpha Channel
  345.           dwAlphaSrcConstBitDepth : DWORD;     // Bit depth used to specify alpha constant for source
  346.           case integer of
  347.           0: (
  348.             dwAlphaSrcConst       : DWORD;     // Constant to use as Alpha Channel
  349.           );
  350.           1: (
  351.             lpDDSAlphaSrc         : PDirectDrawSurface; // Surface to use as Alpha Channel
  352.             case integer of
  353.             0: (
  354.               dwFillColor         : DWORD;     // color in RGB or Palettized
  355.             );
  356.             1: (
  357.               dwFillDepth         : DWORD;     // depth value for z-buffer
  358.             );
  359.             2: (
  360.               dwFillPixel         : DWORD;     // pixel value
  361.             );
  362.             3: (
  363.               lpDDSPattern        : PDirectDrawSurface; // Surface to use as pattern
  364.               ddckDestColorkey    : TDDColorKey; // DestColorkey override
  365.               ddckSrcColorkey     : TDDColorKey; // SrcColorkey override
  366.             )
  367.         )
  368.       )
  369.     )
  370.   )
  371.   end;
  372.   {$EXTERNALSYM _DDBLTFX}
  373.   DDBLTFX = _DDBLTFX;
  374.   {$EXTERNALSYM DDBLTFX}
  375.   TDDBltFX = _DDBLTFX;
  376. (*
  377.  * TDDSCaps
  378.  *)
  379.   PDDSCaps = ^TDDSCaps;
  380.   _DDSCAPS = packed record
  381.     dwCaps: DWORD;         // capabilities of surface wanted
  382.   end;
  383.   {$EXTERNALSYM _DDSCAPS}
  384.   DDSCAPS = _DDSCAPS;
  385.   {$EXTERNALSYM DDSCAPS}
  386.   TDDSCaps = _DDSCAPS;
  387. (*
  388.  * TDDOSCaps
  389.  *)
  390.   PDDOSCaps = ^TDDOSCaps;
  391.   _DDOSCAPS = packed record
  392.     dwCaps: DWORD;         // capabilities of surface wanted
  393.   end;
  394.   {$EXTERNALSYM _DDOSCAPS}
  395.   DDOSCAPS = _DDOSCAPS;
  396.   {$EXTERNALSYM DDOSCAPS}
  397.   TDDOSCaps = _DDOSCAPS;
  398. (*
  399.  * This structure is used internally by DirectDraw.
  400.  *)
  401.   PDDSCapsEx = ^TDDSCapsEx;
  402.   _DDSCAPSEX = packed record
  403.     dwCaps2 : DWORD;
  404.     dwCaps3 : DWORD;
  405.     dwCaps4 : DWORD;
  406.   end;
  407.   {$EXTERNALSYM _DDSCAPSEX}
  408.   DDSCAPSEX = _DDSCAPSEX;
  409.   {$EXTERNALSYM DDSCAPSEX}
  410.   TDDSCapsEx = _DDSCAPSEX;
  411. (*
  412.  * TDDSCaps2
  413.  *)
  414.   PDDSCaps2 = ^TDDSCaps2;
  415.   _DDSCAPS2 = packed record
  416.     dwCaps: DWORD;         // capabilities of surface wanted
  417.     dwCaps2 : DWORD;
  418.     dwCaps3 : DWORD;
  419.     dwCaps4 : DWORD;
  420.   end;
  421.   {$EXTERNALSYM _DDSCAPS2}
  422.   DDSCAPS2 = _DDSCAPS2;
  423.   {$EXTERNALSYM DDSCAPS2}
  424.   TDDSCaps2 = _DDSCAPS2;
  425. (*
  426.  * NOTE: Our choosen structure number scheme is to append a single digit to
  427.  * the end of the structure giving the version that structure is associated
  428.  * with.
  429.  *)
  430. (*
  431.  * This structure represents the DDCAPS structure released in DirectDraw 1.0.  It is used internally
  432.  * by DirectDraw to interpret caps passed into ddraw by drivers written prior to the release of DirectDraw 2.0.
  433.  * New applications should use the DDCAPS structure defined below.
  434.  *)
  435.   PDDCaps_DX1 = ^TDDCaps_DX1;
  436.   _DDCAPS_DX1 = packed record
  437.     dwSize: DWORD;                 // size of the DDDRIVERCAPS structure
  438.     dwCaps: DWORD;                 // driver specific capabilities
  439.     dwCaps2: DWORD;                // more driver specific capabilites
  440.     dwCKeyCaps: DWORD;             // color key capabilities of the surface
  441.     dwFXCaps: DWORD;               // driver specific stretching and effects capabilites
  442.     dwFXAlphaCaps: DWORD;          // alpha driver specific capabilities
  443.     dwPalCaps: DWORD;              // palette capabilities
  444.     dwSVCaps: DWORD;               // stereo vision capabilities
  445.     dwAlphaBltConstBitDepths: DWORD;       // DDBD_2,4,8
  446.     dwAlphaBltPixelBitDepths: DWORD;       // DDBD_1,2,4,8
  447.     dwAlphaBltSurfaceBitDepths: DWORD;     // DDBD_1,2,4,8
  448.     dwAlphaOverlayConstBitDepths: DWORD;   // DDBD_2,4,8
  449.     dwAlphaOverlayPixelBitDepths: DWORD;   // DDBD_1,2,4,8
  450.     dwAlphaOverlaySurfaceBitDepths: DWORD; // DDBD_1,2,4,8
  451.     dwZBufferBitDepths: DWORD;             // DDBD_8,16,24,32
  452.     dwVidMemTotal: DWORD;          // total amount of video memory
  453.     dwVidMemFree: DWORD;           // amount of free video memory
  454.     dwMaxVisibleOverlays: DWORD;   // maximum number of visible overlays
  455.     dwCurrVisibleOverlays: DWORD;  // current number of visible overlays
  456.     dwNumFourCCCodes: DWORD;       // number of four cc codes
  457.     dwAlignBoundarySrc: DWORD;     // source rectangle alignment
  458.     dwAlignSizeSrc: DWORD;         // source rectangle byte size
  459.     dwAlignBoundaryDest: DWORD;    // dest rectangle alignment
  460.     dwAlignSizeDest: DWORD;        // dest rectangle byte size
  461.     dwAlignStrideAlign: DWORD;     // stride alignment
  462.     dwRops: Array [0..DD_ROP_SPACE-1] of DWORD;   // ROPS supported
  463.     ddsCaps: TDDSCaps;             // TDDSCaps structure has all the general capabilities
  464.     dwMinOverlayStretch: DWORD;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  465.     dwMaxOverlayStretch: DWORD;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  466.     dwMinLiveVideoStretch: DWORD;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  467.     dwMaxLiveVideoStretch: DWORD;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  468.     dwMinHwCodecStretch: DWORD;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  469.     dwMaxHwCodecStretch: DWORD;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  470.     dwReserved1: DWORD;            // reserved
  471.     dwReserved2: DWORD;            // reserved
  472.     dwReserved3: DWORD;            // reserved
  473.   end;
  474.   {$EXTERNALSYM _DDCAPS_DX1}
  475.   DDCAPS_DX1 = _DDCAPS_DX1;
  476.   {$EXTERNALSYM DDCAPS_DX1}
  477.   TDDCaps_DX1 = _DDCAPS_DX1;
  478. (*
  479.  * This structure is the TDDCaps structure as it was in version 2 and 3 of Direct X.
  480.  * It is present for back compatability.
  481.  *)
  482.   PDDCaps_DX3 = ^TDDCaps_DX3;
  483.   _DDCAPS_DX3 = packed record
  484.     dwSize: DWORD;                 // size of the DDDRIVERCAPS structure
  485.     dwCaps: DWORD;                 // driver specific capabilities
  486.     dwCaps2: DWORD;                // more driver specific capabilites
  487.     dwCKeyCaps: DWORD;             // color key capabilities of the surface
  488.     dwFXCaps: DWORD;               // driver specific stretching and effects capabilites
  489.     dwFXAlphaCaps: DWORD;          // alpha driver specific capabilities
  490.     dwPalCaps: DWORD;              // palette capabilities
  491.     dwSVCaps: DWORD;               // stereo vision capabilities
  492.     dwAlphaBltConstBitDepths: DWORD;       // DDBD_2,4,8
  493.     dwAlphaBltPixelBitDepths: DWORD;       // DDBD_1,2,4,8
  494.     dwAlphaBltSurfaceBitDepths: DWORD;     // DDBD_1,2,4,8
  495.     dwAlphaOverlayConstBitDepths: DWORD;   // DDBD_2,4,8
  496.     dwAlphaOverlayPixelBitDepths: DWORD;   // DDBD_1,2,4,8
  497.     dwAlphaOverlaySurfaceBitDepths: DWORD; // DDBD_1,2,4,8
  498.     dwZBufferBitDepths: DWORD;             // DDBD_8,16,24,32
  499.     dwVidMemTotal: DWORD;          // total amount of video memory
  500.     dwVidMemFree: DWORD;           // amount of free video memory
  501.     dwMaxVisibleOverlays: DWORD;   // maximum number of visible overlays
  502.     dwCurrVisibleOverlays: DWORD;  // current number of visible overlays
  503.     dwNumFourCCCodes: DWORD;       // number of four cc codes
  504.     dwAlignBoundarySrc: DWORD;     // source rectangle alignment
  505.     dwAlignSizeSrc: DWORD;         // source rectangle byte size
  506.     dwAlignBoundaryDest: DWORD;    // dest rectangle alignment
  507.     dwAlignSizeDest: DWORD;        // dest rectangle byte size
  508.     dwAlignStrideAlign: DWORD;     // stride alignment
  509.     dwRops: Array [0..DD_ROP_SPACE-1] of DWORD;   // ROPS supported
  510.     ddsCaps: TDDSCaps;             // TDDSCaps structure has all the general capabilities
  511.     dwMinOverlayStretch: DWORD;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  512.     dwMaxOverlayStretch: DWORD;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  513.     dwMinLiveVideoStretch: DWORD;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  514.     dwMaxLiveVideoStretch: DWORD;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  515.     dwMinHwCodecStretch: DWORD;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  516.     dwMaxHwCodecStretch: DWORD;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  517.     dwReserved1: DWORD;            // reserved
  518.     dwReserved2: DWORD;            // reserved
  519.     dwReserved3: DWORD;            // reserved
  520.     dwSVBCaps: DWORD;              // driver specific capabilities for System->Vmem blts
  521.     dwSVBCKeyCaps: DWORD;          // driver color key capabilities for System->Vmem blts
  522.     dwSVBFXCaps: DWORD;            // driver FX capabilities for System->Vmem blts
  523.     dwSVBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->Vmem blts
  524.     dwVSBCaps: DWORD;              // driver specific capabilities for Vmem->System blts
  525.     dwVSBCKeyCaps: DWORD;          // driver color key capabilities for Vmem->System blts
  526.     dwVSBFXCaps: DWORD;            // driver FX capabilities for Vmem->System blts
  527.     dwVSBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for Vmem->System blts
  528.     dwSSBCaps: DWORD;              // driver specific capabilities for System->System blts
  529.     dwSSBCKeyCaps: DWORD;          // driver color key capabilities for System->System blts
  530.     dwSSBFXCaps: DWORD;            // driver FX capabilities for System->System blts
  531.     dwSSBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->System blts
  532.     dwReserved4 : DWORD;
  533.     dwReserved5 : DWORD;
  534.     dwReserved6 : DWORD;
  535.   end;
  536.   {$EXTERNALSYM _DDCAPS_DX3}
  537.   DDCAPS_DX3 = _DDCAPS_DX3;
  538.   {$EXTERNALSYM DDCAPS_DX3}
  539.   TDDCaps_DX3 = _DDCAPS_DX3;
  540. (*
  541.  * This structure is the TDDCaps structure as it was in version 5 of Direct X.
  542.  * It is present for back compatability.
  543.  *)
  544.   PDDCaps_DX5 = ^TDDCaps_DX5;
  545.   _DDCAPS_DX5 = packed record
  546.     dwSize: DWORD;                 // size of the DDDRIVERCAPS structure
  547.     dwCaps: DWORD;                 // driver specific capabilities
  548.     dwCaps2: DWORD;                // more driver specific capabilites
  549.     dwCKeyCaps: DWORD;             // color key capabilities of the surface
  550.     dwFXCaps: DWORD;               // driver specific stretching and effects capabilites
  551.     dwFXAlphaCaps: DWORD;          // alpha driver specific capabilities
  552.     dwPalCaps: DWORD;              // palette capabilities
  553.     dwSVCaps: DWORD;               // stereo vision capabilities
  554.     dwAlphaBltConstBitDepths: DWORD;       // DDBD_2,4,8
  555.     dwAlphaBltPixelBitDepths: DWORD;       // DDBD_1,2,4,8
  556.     dwAlphaBltSurfaceBitDepths: DWORD;     // DDBD_1,2,4,8
  557.     dwAlphaOverlayConstBitDepths: DWORD;   // DDBD_2,4,8
  558.     dwAlphaOverlayPixelBitDepths: DWORD;   // DDBD_1,2,4,8
  559.     dwAlphaOverlaySurfaceBitDepths: DWORD; // DDBD_1,2,4,8
  560.     dwZBufferBitDepths: DWORD;             // DDBD_8,16,24,32
  561.     dwVidMemTotal: DWORD;          // total amount of video memory
  562.     dwVidMemFree: DWORD;           // amount of free video memory
  563.     dwMaxVisibleOverlays: DWORD;   // maximum number of visible overlays
  564.     dwCurrVisibleOverlays: DWORD;  // current number of visible overlays
  565.     dwNumFourCCCodes: DWORD;       // number of four cc codes
  566.     dwAlignBoundarySrc: DWORD;     // source rectangle alignment
  567.     dwAlignSizeSrc: DWORD;         // source rectangle byte size
  568.     dwAlignBoundaryDest: DWORD;    // dest rectangle alignment
  569.     dwAlignSizeDest: DWORD;        // dest rectangle byte size
  570.     dwAlignStrideAlign: DWORD;     // stride alignment
  571.     dwRops: Array [0..DD_ROP_SPACE-1] of DWORD;   // ROPS supported
  572.     ddsCaps: TDDSCaps;             // TDDSCaps structure has all the general capabilities
  573.     dwMinOverlayStretch: DWORD;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  574.     dwMaxOverlayStretch: DWORD;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  575.     dwMinLiveVideoStretch: DWORD;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  576.     dwMaxLiveVideoStretch: DWORD;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  577.     dwMinHwCodecStretch: DWORD;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  578.     dwMaxHwCodecStretch: DWORD;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  579.     dwReserved1: DWORD;            // reserved
  580.     dwReserved2: DWORD;            // reserved
  581.     dwReserved3: DWORD;            // reserved
  582.     dwSVBCaps: DWORD;              // driver specific capabilities for System->Vmem blts
  583.     dwSVBCKeyCaps: DWORD;          // driver color key capabilities for System->Vmem blts
  584.     dwSVBFXCaps: DWORD;            // driver FX capabilities for System->Vmem blts
  585.     dwSVBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->Vmem blts
  586.     dwVSBCaps: DWORD;              // driver specific capabilities for Vmem->System blts
  587.     dwVSBCKeyCaps: DWORD;          // driver color key capabilities for Vmem->System blts
  588.     dwVSBFXCaps: DWORD;            // driver FX capabilities for Vmem->System blts
  589.     dwVSBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for Vmem->System blts
  590.     dwSSBCaps: DWORD;              // driver specific capabilities for System->System blts
  591.     dwSSBCKeyCaps: DWORD;          // driver color key capabilities for System->System blts
  592.     dwSSBFXCaps: DWORD;            // driver FX capabilities for System->System blts
  593.     dwSSBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->System blts
  594.     // Members added for DX5:
  595.     dwMaxVideoPorts: DWORD;    // maximum number of usable video ports
  596.     dwCurrVideoPorts: DWORD;    // current number of video ports used
  597.     dwSVBCaps2: DWORD;    // more driver specific capabilities for System->Vmem blts
  598.     dwNLVBCaps: DWORD;    // driver specific capabilities for non-local->local vidmem blts
  599.     dwNLVBCaps2: DWORD;    // more driver specific capabilities non-local->local vidmem blts
  600.     dwNLVBCKeyCaps: DWORD;    // driver color key capabilities for non-local->local vidmem blts
  601.     dwNLVBFXCaps: DWORD;    // driver FX capabilities for non-local->local blts
  602.     dwNLVBRops: Array [0..DD_ROP_SPACE-1] of DWORD; // ROPS supported for non-local->local blts
  603.   end;
  604.   {$EXTERNALSYM _DDCAPS_DX5}
  605.   DDCAPS_DX5 = _DDCAPS_DX5;
  606.   {$EXTERNALSYM DDCAPS_DX5}
  607.   TDDCaps_DX5 = _DDCAPS_DX5;
  608.   PDDCaps_DX6 = ^TDDCaps_DX6;
  609.   _DDCAPS_DX6 = packed record
  610.     dwSize: DWORD;                 // size of the DDDRIVERCAPS structure
  611.     dwCaps: DWORD;                 // driver specific capabilities
  612.     dwCaps2: DWORD;                // more driver specific capabilites
  613.     dwCKeyCaps: DWORD;             // color key capabilities of the surface
  614.     dwFXCaps: DWORD;               // driver specific stretching and effects capabilites
  615.     dwFXAlphaCaps: DWORD;          // alpha driver specific capabilities
  616.     dwPalCaps: DWORD;              // palette capabilities
  617.     dwSVCaps: DWORD;               // stereo vision capabilities
  618.     dwAlphaBltConstBitDepths: DWORD;       // DDBD_2,4,8
  619.     dwAlphaBltPixelBitDepths: DWORD;       // DDBD_1,2,4,8
  620.     dwAlphaBltSurfaceBitDepths: DWORD;     // DDBD_1,2,4,8
  621.     dwAlphaOverlayConstBitDepths: DWORD;   // DDBD_2,4,8
  622.     dwAlphaOverlayPixelBitDepths: DWORD;   // DDBD_1,2,4,8
  623.     dwAlphaOverlaySurfaceBitDepths: DWORD; // DDBD_1,2,4,8
  624.     dwZBufferBitDepths: DWORD;             // DDBD_8,16,24,32
  625.     dwVidMemTotal: DWORD;          // total amount of video memory
  626.     dwVidMemFree: DWORD;           // amount of free video memory
  627.     dwMaxVisibleOverlays: DWORD;   // maximum number of visible overlays
  628.     dwCurrVisibleOverlays: DWORD;  // current number of visible overlays
  629.     dwNumFourCCCodes: DWORD;       // number of four cc codes
  630.     dwAlignBoundarySrc: DWORD;     // source rectangle alignment
  631.     dwAlignSizeSrc: DWORD;         // source rectangle byte size
  632.     dwAlignBoundaryDest: DWORD;    // dest rectangle alignment
  633.     dwAlignSizeDest: DWORD;        // dest rectangle byte size
  634.     dwAlignStrideAlign: DWORD;     // stride alignment
  635.     dwRops: Array [0..DD_ROP_SPACE-1] of DWORD;   // ROPS supported
  636.     ddsOldCaps: TDDSCaps;          // Was dssCaps: TDDSCaps. ddsCaps is of type TDDScaps2 for DX6
  637.     dwMinOverlayStretch: DWORD;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  638.     dwMaxOverlayStretch: DWORD;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  639.     dwMinLiveVideoStretch: DWORD;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  640.     dwMaxLiveVideoStretch: DWORD;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  641.     dwMinHwCodecStretch: DWORD;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  642.     dwMaxHwCodecStretch: DWORD;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
  643.     dwReserved1: DWORD;            // reserved
  644.     dwReserved2: DWORD;            // reserved
  645.     dwReserved3: DWORD;            // reserved
  646.     dwSVBCaps: DWORD;              // driver specific capabilities for System->Vmem blts
  647.     dwSVBCKeyCaps: DWORD;          // driver color key capabilities for System->Vmem blts
  648.     dwSVBFXCaps: DWORD;            // driver FX capabilities for System->Vmem blts
  649.     dwSVBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->Vmem blts
  650.     dwVSBCaps: DWORD;              // driver specific capabilities for Vmem->System blts
  651.     dwVSBCKeyCaps: DWORD;          // driver color key capabilities for Vmem->System blts
  652.     dwVSBFXCaps: DWORD;            // driver FX capabilities for Vmem->System blts
  653.     dwVSBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for Vmem->System blts
  654.     dwSSBCaps: DWORD;              // driver specific capabilities for System->System blts
  655.     dwSSBCKeyCaps: DWORD;          // driver color key capabilities for System->System blts
  656.     dwSSBFXCaps: DWORD;            // driver FX capabilities for System->System blts
  657.     dwSSBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->System blts
  658.     // Members added for DX5:
  659.     dwMaxVideoPorts: DWORD;    // maximum number of usable video ports
  660.     dwCurrVideoPorts: DWORD;    // current number of video ports used
  661.     dwSVBCaps2: DWORD;    // more driver specific capabilities for System->Vmem blts
  662.     dwNLVBCaps: DWORD;    // driver specific capabilities for non-local->local vidmem blts
  663.     dwNLVBCaps2: DWORD;    // more driver specific capabilities non-local->local vidmem blts
  664.     dwNLVBCKeyCaps: DWORD;    // driver color key capabilities for non-local->local vidmem blts
  665.     dwNLVBFXCaps: DWORD;    // driver FX capabilities for non-local->local blts
  666.     dwNLVBRops: Array [0..DD_ROP_SPACE-1] of DWORD; // ROPS supported for non-local->local blts
  667.     // Members added for DX6 release
  668.     ddsCaps : TDDSCaps2 ;          // Surface Caps
  669.   end;
  670.   {$EXTERNALSYM _DDCAPS_DX6}
  671.   DDCAPS_DX6 = _DDCAPS_DX6;
  672.   {$EXTERNALSYM DDCAPS_DX6}
  673.   TDDCaps_DX6 = _DDCAPS_DX6;
  674.   _DDCAPS_DX7 = TDDCaps_DX6;
  675.   {$EXTERNALSYM _DDCAPS_DX7}
  676.   DDCAPS_DX7 = _DDCAPS_DX7;
  677.   {$EXTERNALSYM DDCAPS_DX7}
  678.   PDDCaps_DX7 = ^TDDCaps_DX7;
  679.   TDDCaps_DX7 = TDDCaps_DX6;
  680. {$IFDEF DIRECTDRAW_VERSION_7}
  681.   PDDCaps = PDDCaps_DX7;
  682.   TDDCaps = TDDCaps_DX7;
  683. {$ELSE}
  684. {$IFDEF DIRECTDRAW_VERSION_6}
  685.   PDDCaps = PDDCaps_DX6;
  686.   TDDCaps = TDDCaps_DX6;
  687. {$ELSE}
  688. {$IFDEF DIRECTDRAW_VERSION_5}
  689.   PDDCaps = PDDCaps_DX5;
  690.   TDDCaps = TDDCaps_DX5;
  691. {$ELSE}
  692. {$IFDEF DIRECTDRAW_VERSION_3}
  693.   PDDCaps = PDDCaps_DX3;
  694.   TDDCaps = TDDCaps_DX3;
  695. {$ELSE}
  696.   PDDCaps = PDDCaps_DX1;
  697.   TDDCaps = TDDCaps_DX1;
  698. {$ENDIF}
  699. {$ENDIF}
  700. {$ENDIF}
  701. {$ENDIF}
  702. (*
  703.  * TDDPixelFormat
  704.  *)
  705.   PDDPixelFormat = ^TDDPixelFormat;
  706.   _DDPIXELFORMAT = packed record
  707.     dwSize: DWORD;                 // size of structure
  708.     dwFlags: DWORD;                // pixel format flags
  709.     dwFourCC: DWORD;               // (FOURCC code)
  710.     case Integer of
  711.       1: (
  712.           dwRGBBitCount : DWORD;          // how many bits per pixel
  713.           dwRBitMask : DWORD;             // mask for red bit
  714.           dwGBitMask : DWORD;             // mask for green bits
  715.           dwBBitMask : DWORD;             // mask for blue bits
  716.           dwRGBAlphaBitMask : DWORD;      // mask for alpha channel
  717.           );
  718.       2: (
  719.           dwYUVBitCount : DWORD;          // how many bits per pixel
  720.           dwYBitMask : DWORD;             // mask for Y bits
  721.           dwUBitMask : DWORD;             // mask for U bits
  722.           dwVBitMask : DWORD;             // mask for V bits
  723.           dwYUVAlphaBitMask : DWORD;      // mask for alpha channel
  724.           );
  725.       3: (
  726.           dwZBufferBitDepth : DWORD;      // how many total bits/pixel in z buffer (including any stencil bits)
  727.           dwStencilBitDepth : DWORD;      // how many stencil bits (note: dwZBufferBitDepth-dwStencilBitDepth is total Z-only bits)
  728.           dwZBitMask : DWORD;             // mask for Z bits
  729.           dwStencilBitMask : DWORD;       // mask for stencil bits
  730.           dwLuminanceAlphaBitMask : DWORD; // mask for alpha channel
  731.           );
  732.       4: (
  733.           dwAlphaBitDepth : DWORD;        // how many bits for alpha channels
  734.           dwLuminanceBitMask : DWORD;     // mask for luminance bits
  735.           dwBumpDvBitMask : DWORD;        // mask for bump map V delta bits
  736.           dwBumpLuminanceBitMask : DWORD; // mask for luminance in bump map
  737.           dwRGBZBitMask : DWORD;          // mask for Z channel
  738.           );
  739.       5: (
  740.            dwLuminanceBitCount : DWORD;   // how many bits per pixel
  741.            dwBumpDuBitMask : DWORD;       // mask for bump map U delta bits
  742.            Fill1, Fill2    : DWORD;
  743.            dwYUVZBitMask   : DWORD;       // mask for Z channel
  744.          );
  745.       6: ( dwBumpBitCount  : DWORD;       // how many bits per "buxel", total
  746.          );
  747.   end;
  748.   {$EXTERNALSYM _DDPIXELFORMAT}
  749.   DDPIXELFORMAT = _DDPIXELFORMAT;
  750.   {$EXTERNALSYM DDPIXELFORMAT}
  751.   TDDPixelFormat = _DDPIXELFORMAT;
  752.   // These definitions are for compatibility with Erik Unger original conversion
  753.   PDDPixelFormat_DX3 = PDDPixelFormat;
  754.   TDDPixelFormat_DX3 = TDDPixelFormat;
  755.   PDDPixelFormat_DX5 = PDDPixelFormat;
  756.   TDDPixelFormat_DX5 = TDDPixelFormat;
  757.   PDDPixelFormat_DX6 = PDDPixelFormat;
  758.   TDDPixelFormat_DX6 = TDDPixelFormat;
  759.   PDDPixelFormat_DX7 = PDDPixelFormat;
  760.   TDDPixelFormat_DX7 = TDDPixelFormat;
  761. (*
  762.  * TDDOverlayFX
  763.  *)
  764.   PDDOverlayFX = ^TDDOverlayFX;
  765.   _DDOVERLAYFX = packed record
  766.     dwSize: DWORD;                         // size of structure
  767.     dwAlphaEdgeBlendBitDepth: DWORD;       // Bit depth used to specify constant for alpha edge blend
  768.     dwAlphaEdgeBlend: DWORD;               // Constant to use as alpha for edge blend
  769.     dwReserved: DWORD;
  770.     dwAlphaDestConstBitDepth: DWORD;       // Bit depth used to specify alpha constant for destination
  771.     case Integer of
  772.     0: (
  773.       dwAlphaDestConst: DWORD;             // Constant to use as alpha channel for dest
  774.       dwAlphaSrcConstBitDepth: DWORD;      // Bit depth used to specify alpha constant for source
  775.       dwAlphaSrcConst: DWORD;              // Constant to use as alpha channel for src
  776.       dckDestColorkey: TDDColorKey;        // DestColorkey override
  777.       dckSrcColorkey: TDDColorKey;         // DestColorkey override
  778.       dwDDFX: DWORD;                       // Overlay FX
  779.       dwFlags: DWORD;                      // flags
  780.      );
  781.     1: (
  782.       lpDDSAlphaDest: PDirectDrawSurface;  // Surface to use as alpha channel for dest
  783.       filler: DWORD;
  784.       lpDDSAlphaSrc: PDirectDrawSurface;   // Surface to use as alpha channel for src
  785.      );
  786.   end;
  787.   {$EXTERNALSYM _DDOVERLAYFX}
  788.   DDOVERLAYFX = _DDOVERLAYFX;
  789.   {$EXTERNALSYM DDOVERLAYFX}
  790.   TDDOverlayFX = _DDOVERLAYFX;
  791. (*
  792.  * TDDBltBatch: BltBatch entry structure
  793.  *)
  794.   PDDBltBatch = ^TDDBltBatch;
  795.   _DDBLTBATCH = packed record
  796.     lprDest: PRect;
  797.     lpDDSSrc: IDirectDrawSurface;
  798.     lprSrc: PRect;
  799.     dwFlags: DWORD;
  800.     lpDDBltFx: TDDBltFX;
  801.   end;
  802.   {$EXTERNALSYM _DDBLTBATCH}
  803.   DDBLTBATCH = _DDBLTBATCH;
  804.   {$EXTERNALSYM DDBLTBATCH}
  805.   TDDBltBatch = _DDBLTBATCH;
  806. (*
  807.  * TDDGammaRamp
  808.  *)
  809.   PDDGammaRamp = ^TDDGammaRamp;
  810.   _DDGAMMARAMP = packed record
  811.     red   : array[0..255] of WORD;
  812.     green : array[0..255] of WORD;
  813.     blue  : array[0..255] of WORD;
  814.   end;
  815.   {$EXTERNALSYM _DDGAMMARAMP}
  816.   DDGAMMARAMP = _DDGAMMARAMP;
  817.   {$EXTERNALSYM DDGAMMARAMP}
  818.   TDDGammaRamp = _DDGAMMARAMP;
  819. (*
  820.  *  This is the structure within which DirectDraw returns data about the current graphics driver and chipset
  821.  *)
  822.   PDDDeviceIdentifier = ^TDDDeviceIdentifier;
  823.   tagDDDEVICEIDENTIFIER = packed record
  824.     //
  825.     // These elements are for presentation to the user only. They should not be used to identify particular
  826.     // drivers, since this is unreliable and many different strings may be associated with the same
  827.     // device, and the same driver from different vendors.
  828.     //
  829.     szDriver: array[0..MAX_DDDEVICEID_STRING-1] of Char;
  830.     szDescription: array[0..MAX_DDDEVICEID_STRING-1] of Char;
  831.     //
  832.     // This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons
  833.     // on the whole 64 bits. Caution should be exercised if you use this element to identify problematic
  834.     // drivers. It is recommended that guidDeviceIdentifier is used for this purpose.
  835.     //
  836.     // This version has the form:
  837.     //  wProduct = HIWORD(liDriverVersion.HighPart)
  838.     //  wVersion = LOWORD(liDriverVersion.HighPart)
  839.     //  wSubVersion = HIWORD(liDriverVersion.LowPart)
  840.     //  wBuild = LOWORD(liDriverVersion.LowPart)
  841.     //
  842.     liDriverVersion: TLargeInteger;     // Defined for applications and other 32 bit components
  843.     //
  844.     // These elements can be used to identify particular chipsets. Use with extreme caution.
  845.     //   dwVendorId     Identifies the manufacturer. May be zero if unknown.
  846.     //   dwDeviceId     Identifies the type of chipset. May be zero if unknown.
  847.     //   dwSubSysId     Identifies the subsystem, typically this means the particular board. May be zero if unknown.
  848.     //   dwRevision     Identifies the revision level of the chipset. May be zero if unknown.
  849.     //
  850.     dwVendorId: DWORD;
  851.     dwDeviceId: DWORD;
  852.     dwSubSysId: DWORD;
  853.     dwRevision: DWORD;
  854.     //
  855.     // This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the
  856.     // driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to
  857.     // reprofile the graphics subsystem.
  858.     // This element can also be used to identify particular problematic drivers.
  859.     //
  860.     guidDeviceIdentifier: TGUID;
  861.   end;
  862.   {$EXTERNALSYM tagDDDEVICEIDENTIFIER}
  863.   DDDEVICEIDENTIFIER = tagDDDEVICEIDENTIFIER;
  864.   {$EXTERNALSYM DDDEVICEIDENTIFIER}
  865.   TDDDeviceIdentifier = tagDDDEVICEIDENTIFIER;
  866.   PDDDeviceIdentifier2 = ^TDDDeviceIdentifier2;
  867.   tagDDDEVICEIDENTIFIER2 = packed record
  868.     //
  869.     // These elements are for presentation to the user only. They should not be used to identify particular
  870.     // drivers, since this is unreliable and many different strings may be associated with the same
  871.     // device, and the same driver from different vendors.
  872.     //
  873.     szDriver: array[0..MAX_DDDEVICEID_STRING-1] of Char;
  874.     szDescription: array[0..MAX_DDDEVICEID_STRING-1] of Char;
  875.     //
  876.     // This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons
  877.     // on the whole 64 bits. Caution should be exercised if you use this element to identify problematic
  878.     // drivers. It is recommended that guidDeviceIdentifier is used for this purpose.
  879.     //
  880.     // This version has the form:
  881.     //  wProduct = HIWORD(liDriverVersion.HighPart)
  882.     //  wVersion = LOWORD(liDriverVersion.HighPart)
  883.     //  wSubVersion = HIWORD(liDriverVersion.LowPart)
  884.     //  wBuild = LOWORD(liDriverVersion.LowPart)
  885.     //
  886.     liDriverVersion: TLargeInteger;     // Defined for applications and other 32 bit components
  887.     //
  888.     // These elements can be used to identify particular chipsets. Use with extreme caution.
  889.     //   dwVendorId     Identifies the manufacturer. May be zero if unknown.
  890.     //   dwDeviceId     Identifies the type of chipset. May be zero if unknown.
  891.     //   dwSubSysId     Identifies the subsystem, typically this means the particular board. May be zero if unknown.
  892.     //   dwRevision     Identifies the revision level of the chipset. May be zero if unknown.
  893.     //
  894.     dwVendorId: DWORD;
  895.     dwDeviceId: DWORD;
  896.     dwSubSysId: DWORD;
  897.     dwRevision: DWORD;
  898.     //
  899.     // This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the
  900.     // driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to
  901.     // reprofile the graphics subsystem.
  902.     // This element can also be used to identify particular problematic drivers.
  903.     //
  904.     guidDeviceIdentifier: TGUID;
  905.     (*
  906.      * This element is used to determine the Windows Hardware Quality Lab (WHQL)
  907.      * certification level for this driver/device pair.
  908.      *)
  909.     dwWHQLLevel: DWORD;
  910.   end;
  911.   {$EXTERNALSYM tagDDDEVICEIDENTIFIER2}
  912.   DDDEVICEIDENTIFIER2 = tagDDDEVICEIDENTIFIER2;
  913.   {$EXTERNALSYM DDDEVICEIDENTIFIER2}
  914.   TDDDeviceIdentifier2 = tagDDDEVICEIDENTIFIER2;
  915. (*
  916.  * callbacks
  917.  *)
  918.   TClipperCallback = function(lpDDClipper: IDirectDrawClipper; hWnd: HWND;
  919.       Code: DWORD; lpContext: Pointer): HResult; stdcall;
  920.   {$NODEFINE TClipperCallback}
  921.   {$HPPEMIT 'typedef LPCLIPPERCALLBACK TClipperCallback;'}
  922.   TSurfacesStreamingCallback = function(arg: DWORD): HResult; stdcall;
  923.   {$NODEFINE TSurfacesStreamingCallback}
  924. (*
  925.  * TDDSurfaceDesc
  926.  *)
  927.   PDDSurfaceDesc = ^TDDSurfaceDesc;
  928.   _DDSURFACEDESC = packed record
  929.     dwSize: DWORD;                        // size of the TDDSurfaceDesc structure
  930.     dwFlags: DWORD;                       // determines what fields are valid
  931.     dwHeight: DWORD;                      // height of surface to be created
  932.     dwWidth: DWORD;                       // width of input surface
  933.     case Integer of
  934.     0: (
  935.       dwLinearSize: DWORD;                // unused at the moment
  936.      );
  937.     1: (
  938.       lPitch: Longint;                    // distance to start of next line (return value only)
  939.       dwBackBufferCount: DWORD;           // number of back buffers requested
  940.       case Integer of
  941.       0: (
  942.         dwMipMapCount: DWORD;             // number of mip-map levels requested
  943.         dwAlphaBitDepth: DWORD;           // depth of alpha buffer requested
  944.         dwReserved: DWORD;                // reserved
  945.         lpSurface: Pointer;               // pointer to the associated surface memory
  946.         ddckCKDestOverlay: TDDColorKey;   // color key for destination overlay use
  947.         ddckCKDestBlt: TDDColorKey;       // color key for destination blt use
  948.         ddckCKSrcOverlay: TDDColorKey;    // color key for source overlay use
  949.         ddckCKSrcBlt: TDDColorKey;        // color key for source blt use
  950.         ddpfPixelFormat: TDDPixelFormat;  // pixel format description of the surface
  951.         ddsCaps: TDDSCaps;                // direct draw surface capabilities
  952.        );
  953.       1: (
  954.         dwZBufferBitDepth: DWORD;         // depth of Z buffer requested
  955.        );
  956.       2: (
  957.         dwRefreshRate: DWORD;             // refresh rate (used when display mode is described)
  958.        );
  959.      );
  960.   end;
  961.   {$EXTERNALSYM _DDSURFACEDESC}
  962.   DDSURFACEDESC = _DDSURFACEDESC;
  963.   {$EXTERNALSYM DDSURFACEDESC}
  964.   TDDSurfaceDesc = _DDSURFACEDESC;
  965.   // These definitions are for compatibility with Erik Unger original conversion
  966.   PDDSurfaceDesc_DX5 = PDDSurfaceDesc;
  967.   TDDSurfaceDesc_DX5 = TDDSurfaceDesc;
  968.   PDDSurfaceDesc_DX6 = PDDSurfaceDesc;
  969.   TDDSurfaceDesc_DX6 = TDDSurfaceDesc;
  970. (*
  971.  * TDDSurfaceDesc2
  972.  *)
  973.   PDDSurfaceDesc2 = ^TDDSurfaceDesc2;
  974.   _DDSURFACEDESC2 = packed record
  975.     dwSize: DWORD;                      // size of the TDDSurfaceDesc structure
  976.     dwFlags: DWORD;                     // determines what fields are valid
  977.     dwHeight: DWORD;                    // height of surface to be created
  978.     dwWidth: DWORD;                     // width of input surface
  979.     case Integer of
  980.     0: (
  981.       lPitch : Longint;                  // distance to start of next line (return value only)
  982.      );
  983.     1: (
  984.       dwLinearSize : DWORD;              // Formless late-allocated optimized surface size
  985.       dwBackBufferCount: DWORD;          // number of back buffers requested
  986.       case Integer of
  987.       0: (
  988.         dwMipMapCount: DWORD;            // number of mip-map levels requested
  989.         dwAlphaBitDepth: DWORD;          // depth of alpha buffer requested
  990.         dwReserved: DWORD;               // reserved
  991.         lpSurface: Pointer;              // pointer to the associated surface memory
  992.         ddckCKDestOverlay: TDDColorKey;  // color key for destination overlay use
  993.         ddckCKDestBlt: TDDColorKey;      // color key for destination blt use
  994.         ddckCKSrcOverlay: TDDColorKey;   // color key for source overlay use
  995.         ddckCKSrcBlt: TDDColorKey;       // color key for source blt use
  996.         ddpfPixelFormat: TDDPixelFormat; // pixel format description of the surface
  997.         ddsCaps: TDDSCaps2;              // direct draw surface capabilities
  998.         dwTextureStage: DWORD;           // stage in multitexture cascade
  999.        );
  1000.       1: (
  1001.         dwRefreshRate: DWORD;            // refresh rate (used when display mode is described)
  1002.        );
  1003.      );
  1004.   end;
  1005.   {$EXTERNALSYM _DDSURFACEDESC2}
  1006.   DDSURFACEDESC2 = _DDSURFACEDESC2;
  1007.   {$EXTERNALSYM DDSURFACEDESC2}
  1008.   TDDSurfaceDesc2 = _DDSURFACEDESC2;
  1009. (*
  1010.  * TDDOptSurfaceDesc
  1011.  *)
  1012.   PDDOptSurfaceDesc = ^TDDOptSurfaceDesc;
  1013.   _DDOPTSURFACEDESC = packed record
  1014.     dwSize : DWORD;             // size of the DDOPTSURFACEDESC structure
  1015.     dwFlags : DWORD;            // determines what fields are valid
  1016.     ddSCaps : TDDSCaps2;        // Common caps like: Memory type
  1017.     ddOSCaps : TDDOSCaps;       // Common caps like: Memory type
  1018.     guid : TGUID;               // Compression technique GUID
  1019.     dwCompressionRatio : DWORD; // Compression ratio
  1020.   end;
  1021.   {$EXTERNALSYM _DDOPTSURFACEDESC}
  1022.   DDOPTSURFACEDESC = _DDOPTSURFACEDESC;
  1023.   {$EXTERNALSYM DDOPTSURFACEDESC}
  1024.   TDDOptSurfaceDesc = _DDOPTSURFACEDESC;
  1025. (*
  1026.  * DDCOLORCONTROL
  1027.  *)
  1028.   PDDColorControl = ^TDDColorControl;
  1029.   _DDCOLORCONTROL = packed record
  1030.     dwSize: DWORD;
  1031.     dwFlags: DWORD;
  1032.     lBrightness: Longint;
  1033.     lContrast: Longint;
  1034.     lHue: Longint;
  1035.     lSaturation: Longint;
  1036.     lSharpness: Longint;
  1037.     lGamma: Longint;
  1038.     lColorEnable: Longint;
  1039.     dwReserved1: DWORD;
  1040.   end;
  1041.   {$EXTERNALSYM _DDCOLORCONTROL}
  1042.   DDCOLORCONTROL = _DDCOLORCONTROL;
  1043.   {$EXTERNALSYM DDCOLORCONTROL}
  1044.   TDDColorControl = _DDCOLORCONTROL;
  1045. (*
  1046.  * callbacks
  1047.  *)
  1048. //{$IFNDEF WINNT}
  1049.   TDDEnumModesCallback = function (const lpDDSurfaceDesc: TDDSurfaceDesc;
  1050.       lpContext: Pointer): HResult; stdcall;
  1051.   {$NODEFINE TDDEnumModesCallback}
  1052.   {$HPPEMIT 'typedef LPCLIPPERCALLBACK TDDEnumModesCallback;'}
  1053.   TDDEnumModesCallback2 = function (const lpDDSurfaceDesc: TDDSurfaceDesc2;
  1054.       lpContext: Pointer): HResult; stdcall;
  1055.   {$NODEFINE TDDEnumModesCallback2}
  1056.   {$HPPEMIT 'typedef LPDDENUMMODESCALLBACK2 TDDEnumModesCallback2;'}
  1057.   TDDEnumSurfacesCallback = function (lpDDSurface: IDirectDrawSurface;
  1058.       const lpDDSurfaceDesc: TDDSurfaceDesc; lpContext: Pointer): HResult; stdcall;
  1059.   {$NODEFINE TDDEnumSurfacesCallback}
  1060.   {$HPPEMIT 'typedef LPDDENUMSURFACESCALLBACK TDDEnumSurfacesCallback;'}
  1061.   TDDEnumSurfacesCallback2 = function (lpDDSurface: IDirectDrawSurface4;
  1062.       const lpDDSurfaceDesc: TDDSurfaceDesc2; lpContext: Pointer): HResult; stdcall;
  1063.   {$NODEFINE TDDEnumSurfacesCallback2}
  1064.   {$HPPEMIT 'typedef LPDDENUMSURFACESCALLBACK2 TDDEnumSurfacesCallback2;'}
  1065.   TDDEnumSurfacesCallback7 = function (lpDDSurface: IDirectDrawSurface7;
  1066.       const lpDDSurfaceDesc: TDDSurfaceDesc2; lpContext: Pointer): HResult; stdcall;
  1067.   {$NODEFINE TDDEnumSurfacesCallback7}
  1068.   {$HPPEMIT 'typedef LPDDENUMSURFACESCALLBACK7 TDDEnumSurfacesCallback7;'}
  1069. //{$ENDIF}
  1070. (*
  1071.  * INTERACES FOLLOW:
  1072.  *      IDirectDraw
  1073.  *      IDirectDrawClipper
  1074.  *      IDirectDrawPalette
  1075.  *      IDirectDrawSurface
  1076.  *)
  1077. (*
  1078.  * IDirectDraw
  1079.  *)
  1080.   IDirectDraw = interface(IUnknown)
  1081.     ['{6C14DB80-A733-11CE-A521-0020AF0BE560}']
  1082.     (*** IDirectDraw methods ***)
  1083.     function Compact: HResult; stdcall;
  1084.     function CreateClipper(dwFlags: DWORD;
  1085.         out lplpDDClipper: IDirectDrawClipper;
  1086.         pUnkOuter: IUnknown): HResult; stdcall;
  1087.     function CreatePalette(dwFlags: DWORD; lpColorTable: Pointer;
  1088.         out lplpDDPalette: IDirectDrawPalette;
  1089.         pUnkOuter: IUnknown): HResult; stdcall;
  1090.     function CreateSurface(var lpDDSurfaceDesc: TDDSurfaceDesc;
  1091.         out lplpDDSurface: IDirectDrawSurface;
  1092.         pUnkOuter: IUnknown): HResult; stdcall;
  1093.     function DuplicateSurface(lpDDSurface: IDirectDrawSurface;
  1094.         out lplpDupDDSurface: IDirectDrawSurface): HResult; stdcall;
  1095.     function EnumDisplayModes(dwFlags: DWORD;
  1096.         lpDDSurfaceDesc: PDDSurfaceDesc; lpContext: Pointer;
  1097.         lpEnumModesCallback: TDDEnumModesCallback): HResult; stdcall;
  1098.     function EnumSurfaces(dwFlags: DWORD; const lpDDSD: TDDSurfaceDesc;
  1099.         lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback) :
  1100.         HResult; stdcall;
  1101.     function FlipToGDISurface: HResult; stdcall;
  1102.     function GetCaps(lpDDDriverCaps: PDDCaps; lpDDHELCaps: PDDCaps): HResult; stdcall;
  1103.     function GetDisplayMode(out lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
  1104.     function GetFourCCCodes(var lpNumCodes: DWORD; lpCodes: PDWORD): HResult; stdcall;
  1105.     function GetGDISurface(out lplpGDIDDSSurface: IDirectDrawSurface): HResult; stdcall;
  1106.     function GetMonitorFrequency(out lpdwFrequency: DWORD): HResult; stdcall;
  1107.     function GetScanLine(out lpdwScanLine: DWORD): HResult; stdcall;
  1108.     function GetVerticalBlankStatus(out lpbIsInVB: BOOL): HResult; stdcall;
  1109.     function Initialize(lpGUID: PGUID): HResult; stdcall;
  1110.     function RestoreDisplayMode: HResult; stdcall;
  1111.     function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall;
  1112.     (*** Warning!  SetDisplayMode differs between DirectDraw 1 and DirectDraw 2 ***)
  1113.     function SetDisplayMode(dwWidth: DWORD; dwHeight: DWORD;
  1114.         dwBpp: DWORD): HResult; stdcall;
  1115.     function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
  1116.   end;
  1117.   IDirectDraw2 = interface(IUnknown)
  1118.     ['{B3A6F3E0-2B43-11CF-A2DE-00AA00B93356}']
  1119.     (*** IDirectDraw methods ***)
  1120.     function Compact: HResult; stdcall;
  1121.     function CreateClipper(dwFlags: DWORD;
  1122.         out lplpDDClipper: IDirectDrawClipper;
  1123.         pUnkOuter: IUnknown): HResult; stdcall;
  1124.     function CreatePalette(dwFlags: DWORD; lpColorTable: Pointer;
  1125.         out lplpDDPalette: IDirectDrawPalette;
  1126.         pUnkOuter: IUnknown): HResult; stdcall;
  1127.     function CreateSurface(var lpDDSurfaceDesc: TDDSurfaceDesc;
  1128.         out lplpDDSurface: IDirectDrawSurface;
  1129.         pUnkOuter: IUnknown): HResult; stdcall;
  1130.     function DuplicateSurface(lpDDSurface: IDirectDrawSurface;
  1131.         out lplpDupDDSurface: IDirectDrawSurface): HResult; stdcall;
  1132.     function EnumDisplayModes(dwFlags: DWORD;
  1133.         lpDDSurfaceDesc: PDDSurfaceDesc; lpContext: Pointer;
  1134.         lpEnumModesCallback: TDDEnumModesCallback): HResult; stdcall;
  1135.     function EnumSurfaces(dwFlags: DWORD; var lpDDSD: TDDSurfaceDesc;
  1136.         lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback): HResult; stdcall;
  1137.     function FlipToGDISurface: HResult; stdcall;
  1138.     function GetCaps(lpDDDriverCaps: PDDCaps; lpDDHELCaps: PDDCaps): HResult; stdcall;
  1139.     function GetDisplayMode(out lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
  1140.     function GetFourCCCodes(var lpNumCodes: DWORD; lpCodes: PDWORD): HResult; stdcall;
  1141.     function GetGDISurface(out lplpGDIDDSSurface: IDirectDrawSurface): HResult; stdcall;
  1142.     function GetMonitorFrequency(out lpdwFrequency: DWORD): HResult; stdcall;
  1143.     function GetScanLine(out lpdwScanLine: DWORD): HResult; stdcall;
  1144.     function GetVerticalBlankStatus(out lpbIsInVB: BOOL): HResult; stdcall;
  1145.     function Initialize(lpGUID: PGUID): HResult; stdcall;
  1146.     function RestoreDisplayMode: HResult; stdcall;
  1147.     function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall;
  1148.     function SetDisplayMode(dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD;
  1149.         dwRefreshRate: DWORD; dwFlags: DWORD): HResult; stdcall;
  1150.     function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
  1151.     (*** Added in the v2 interface ***)
  1152.     function GetAvailableVidMem(var lpDDSCaps: TDDSCaps;
  1153.         out lpdwTotal, lpdwFree: DWORD): HResult; stdcall;
  1154.   end;
  1155.   IDirectDraw4 = interface(IUnknown)
  1156.     ['{9c59509a-39bd-11d1-8c4a-00c04fd930c5}']
  1157.     (*** IDirectDraw methods ***)
  1158.     function Compact: HResult; stdcall;
  1159.     function CreateClipper(dwFlags: DWORD;
  1160.         out lplpDDClipper: IDirectDrawClipper;
  1161.         pUnkOuter: IUnknown): HResult; stdcall;
  1162.     function CreatePalette(dwFlags: DWORD; lpColorTable: Pointer;
  1163.         out lplpDDPalette: IDirectDrawPalette;
  1164.         pUnkOuter: IUnknown): HResult; stdcall;
  1165.     function CreateSurface(const lpDDSurfaceDesc: TDDSurfaceDesc2;
  1166.         out lplpDDSurface: IDirectDrawSurface4;
  1167.         pUnkOuter: IUnknown): HResult; stdcall;
  1168.     function DuplicateSurface(lpDDSurface: IDirectDrawSurface4;
  1169.         out lplpDupDDSurface: IDirectDrawSurface4): HResult; stdcall;
  1170.     function EnumDisplayModes(dwFlags: DWORD;
  1171.         lpDDSurfaceDesc: PDDSurfaceDesc2; lpContext: Pointer;
  1172.         lpEnumModesCallback: TDDEnumModesCallback2): HResult; stdcall;
  1173.     function EnumSurfaces(dwFlags: DWORD; const lpDDSD: TDDSurfaceDesc2;
  1174.         lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback2):
  1175.         HResult; stdcall;
  1176.     function FlipToGDISurface: HResult; stdcall;
  1177.     function GetCaps(lpDDDriverCaps: PDDCaps; lpDDHELCaps: PDDCaps): HResult; stdcall;
  1178.     function GetDisplayMode(out lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
  1179.     function GetFourCCCodes(var lpNumCodes: DWORD; lpCodes: PDWORD): HResult; stdcall;
  1180.     function GetGDISurface(out lplpGDIDDSSurface: IDirectDrawSurface4): HResult; stdcall;
  1181.     function GetMonitorFrequency(out lpdwFrequency: DWORD): HResult; stdcall;
  1182.     function GetScanLine(out lpdwScanLine: DWORD): HResult; stdcall;
  1183.     function GetVerticalBlankStatus(out lpbIsInVB: BOOL): HResult; stdcall;
  1184.     function Initialize(lpGUID: PGUID): HResult; stdcall;
  1185.     function RestoreDisplayMode: HResult; stdcall;
  1186.     function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall;
  1187.     function SetDisplayMode(dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD;
  1188.         dwRefreshRate: DWORD; dwFlags: DWORD): HResult; stdcall;
  1189.     function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
  1190.     (*** Added in the v2 interface ***)
  1191.     function GetAvailableVidMem(const lpDDSCaps: TDDSCaps2;
  1192.         out lpdwTotal, lpdwFree: DWORD): HResult; stdcall;
  1193.     (*** Added in the V4 Interface ***)
  1194.     function GetSurfaceFromDC(hdc: Windows.HDC;
  1195.         out lpDDS4: IDirectDrawSurface4): HResult; stdcall;
  1196.     function RestoreAllSurfaces: HResult; stdcall;
  1197.     function TestCooperativeLevel: HResult; stdcall;
  1198.     function GetDeviceIdentifier(out lpdddi: TDDDeviceIdentifier;
  1199.         dwFlags: DWORD): HResult; stdcall;
  1200.   end;
  1201.   IDirectDraw7 = interface(IUnknown)
  1202.     ['{15e65ec0-3b9c-11d2-b92f-00609797ea5b}']
  1203.     (*** IDirectDraw methods ***)
  1204.     function Compact: HResult; stdcall;
  1205.     function CreateClipper(dwFlags: DWORD;
  1206.         out lplpDDClipper: IDirectDrawClipper;
  1207.         pUnkOuter: IUnknown): HResult; stdcall;
  1208.     function CreatePalette(dwFlags: DWORD; lpColorTable: Pointer;
  1209.         out lplpDDPalette: IDirectDrawPalette;
  1210.         pUnkOuter: IUnknown): HResult; stdcall;
  1211.     function CreateSurface(const lpDDSurfaceDesc: TDDSurfaceDesc2;
  1212.         out lplpDDSurface: IDirectDrawSurface7;
  1213.         pUnkOuter: IUnknown): HResult; stdcall;
  1214.     function DuplicateSurface(lpDDSurface: IDirectDrawSurface7;
  1215.         out lplpDupDDSurface: IDirectDrawSurface7): HResult; stdcall;
  1216.     function EnumDisplayModes(dwFlags: DWORD;
  1217.         lpDDSurfaceDesc: PDDSurfaceDesc2; lpContext: Pointer;
  1218.         lpEnumModesCallback: TDDEnumModesCallback2): HResult; stdcall;
  1219.     function EnumSurfaces(dwFlags: DWORD; const lpDDSD: TDDSurfaceDesc2;
  1220.         lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback7) :
  1221.         HResult; stdcall;
  1222.     function FlipToGDISurface: HResult; stdcall;
  1223.     function GetCaps(lpDDDriverCaps: PDDCaps; lpDDHELCaps: PDDCaps): HResult; stdcall;
  1224.     function GetDisplayMode(out lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
  1225.     function GetFourCCCodes(var lpNumCodes: DWORD; lpCodes: PDWORD): HResult; stdcall;
  1226.     function GetGDISurface(out lplpGDIDDSSurface: IDirectDrawSurface7) :
  1227.         HResult; stdcall;
  1228.     function GetMonitorFrequency(out lpdwFrequency: DWORD): HResult; stdcall;
  1229.     function GetScanLine(out lpdwScanLine: DWORD): HResult; stdcall;
  1230.     function GetVerticalBlankStatus(out lpbIsInVB: BOOL): HResult; stdcall;
  1231.     function Initialize(lpGUID: PGUID): HResult; stdcall;
  1232.     function RestoreDisplayMode: HResult; stdcall;
  1233.     function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall;
  1234.     function SetDisplayMode(dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD;
  1235.         dwRefreshRate: DWORD; dwFlags: DWORD): HResult; stdcall;
  1236.     function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THandle) :
  1237.         HResult; stdcall;
  1238.     (*** Added in the v2 interface ***)
  1239.     function GetAvailableVidMem(const lpDDSCaps: TDDSCaps2;
  1240.         out lpdwTotal, lpdwFree: DWORD): HResult; stdcall;
  1241.     (*** Added in the V4 Interface ***)
  1242.     function GetSurfaceFromDC(hdc: Windows.HDC;
  1243.         out lpDDS: IDirectDrawSurface7): HResult; stdcall;
  1244.     function RestoreAllSurfaces: HResult; stdcall;
  1245.     function TestCooperativeLevel: HResult; stdcall;
  1246.     function GetDeviceIdentifier(out lpdddi: TDDDeviceIdentifier2;
  1247.         dwFlags: DWORD): HResult; stdcall;
  1248.     function StartModeTest(const lpModesToTest; dwNumEntries, dwFlags: DWORD): HResult; stdcall;
  1249.     function EvaluateMode(dwFlags: DWORD; out pSecondsUntilTimeout: DWORD): HResult; stdcall;
  1250.   end;
  1251. (*
  1252.  * IDirectDrawPalette
  1253.  *)
  1254.   IDirectDrawPalette = interface(IUnknown)
  1255.     ['{6C14DB84-A733-11CE-A521-0020AF0BE560}']
  1256.     (*** IDirectDrawPalette methods ***)
  1257.     function GetCaps(out lpdwCaps: DWORD): HResult; stdcall;
  1258.     function GetEntries(dwFlags: DWORD; dwBase: DWORD; dwNumEntries: DWORD;
  1259.         lpEntries: Pointer): HResult; stdcall;
  1260.     function Initialize(lpDD: IDirectDraw; dwFlags: DWORD;
  1261.         lpDDColorTable: Pointer): HResult; stdcall;
  1262.     function SetEntries(dwFlags: DWORD; dwStartingEntry: DWORD;
  1263.         dwCount: DWORD; lpEntries: Pointer): HResult; stdcall;
  1264.   end;
  1265. (*
  1266.  * IDirectDrawClipper
  1267.  *)
  1268.   IDirectDrawClipper = interface(IUnknown)
  1269.     ['{6C14DB85-A733-11CE-A521-0020AF0BE560}']
  1270.     (*** IDirectDrawClipper methods ***)
  1271.     function GetClipList(lpRect: PRect; lpClipList: PRgnData;
  1272.         var lpdwSize: DWORD): HResult; stdcall;
  1273.     function GetHWnd(out lphWnd: HWND): HResult; stdcall;
  1274.     function Initialize(lpDD: IDirectDraw; dwFlags: DWORD): HResult; stdcall;
  1275.     function IsClipListChanged(out lpbChanged: BOOL): HResult; stdcall;
  1276.     function SetClipList(lpClipList: PRgnData; dwFlags: DWORD): HResult; stdcall;
  1277.     function SetHWnd(dwFlags: DWORD; hWnd: HWND): HResult; stdcall;
  1278.   end;
  1279. (*
  1280.  * IDirectDrawSurface and related interfaces
  1281.  *)
  1282.   IDirectDrawSurface = interface(IUnknown)
  1283.     ['{6C14DB81-A733-11CE-A521-0020AF0BE560}']
  1284.     (*** IDirectDrawSurface methods ***)
  1285.     function AddAttachedSurface(lpDDSAttachedSurface: IDirectDrawSurface) :
  1286.         HResult; stdcall;
  1287.     function AddOverlayDirtyRect(const lpRect: TRect): HResult; stdcall;
  1288.     function Blt(lpDestRect: PRect;
  1289.         lpDDSrcSurface: IDirectDrawSurface; lpSrcRect: PRect;
  1290.         dwFlags: DWORD; lpDDBltFx: PDDBltFX): HResult; stdcall;
  1291.     function BltBatch(const lpDDBltBatch: TDDBltBatch; dwCount: DWORD;
  1292.         dwFlags: DWORD): HResult; stdcall;
  1293.     function BltFast(dwX: DWORD; dwY: DWORD;
  1294.         lpDDSrcSurface: IDirectDrawSurface; lpSrcRect: PRect;
  1295.         dwTrans: DWORD): HResult; stdcall;
  1296.     function DeleteAttachedSurface(dwFlags: DWORD;
  1297.         lpDDSAttachedSurface: IDirectDrawSurface): HResult; stdcall;
  1298.     function EnumAttachedSurfaces(lpContext: Pointer;
  1299.         lpEnumSurfacesCallback: TDDEnumSurfacesCallback): HResult; stdcall;
  1300.     function EnumOverlayZOrders(dwFlags: DWORD; lpContext: Pointer;
  1301.         lpfnCallback: TDDEnumSurfacesCallback): HResult; stdcall;
  1302.     function Flip(lpDDSurfaceTargetOverride: IDirectDrawSurface;
  1303.         dwFlags: DWORD): HResult; stdcall;
  1304.     function GetAttachedSurface(var lpDDSCaps: TDDSCaps;
  1305.         (*out*)var lplpDDAttachedSurface: IDirectDrawSurface): HResult; stdcall;
  1306.     function GetBltStatus(dwFlags: DWORD): HResult; stdcall;
  1307.     function GetCaps(out lpDDSCaps: TDDSCaps): HResult; stdcall;
  1308.     function GetClipper(out lplpDDClipper: IDirectDrawClipper): HResult; stdcall;
  1309.     function GetColorKey(dwFlags: DWORD; out lpDDColorKey: TDDColorKey) :
  1310.         HResult; stdcall;
  1311.     function GetDC(out lphDC: HDC): HResult; stdcall;
  1312.     function GetFlipStatus(dwFlags: DWORD): HResult; stdcall;
  1313.     function GetOverlayPosition(out lplX, lplY: Longint): HResult; stdcall;
  1314.     function GetPalette(out lplpDDPalette: IDirectDrawPalette): HResult; stdcall;
  1315.     function GetPixelFormat(out lpDDPixelFormat: TDDPixelFormat): HResult; stdcall;
  1316.     function GetSurfaceDesc(out lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
  1317.     function Initialize(lpDD: IDirectDraw;
  1318.         out lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
  1319.     function IsLost: HResult; stdcall;
  1320.     function Lock(lpDestRect: PRect; out lpDDSurfaceDesc:
  1321.         TDDSurfaceDesc; dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
  1322.     function ReleaseDC(hDC: Windows.HDC): HResult; stdcall;
  1323.     function _Restore: HResult; stdcall;
  1324.     function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
  1325.     function SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDColorKey) :
  1326.         HResult; stdcall;
  1327.     function SetOverlayPosition(lX, lY: Longint): HResult; stdcall;
  1328.     function SetPalette(lpDDPalette: IDirectDrawPalette): HResult; stdcall;
  1329.     function Unlock(lpSurfaceData: Pointer): HResult; stdcall;
  1330.     function UpdateOverlay(lpSrcRect: PRect;
  1331.         lpDDDestSurface: IDirectDrawSurface; lpDestRect: PRect;
  1332.         dwFlags: DWORD; lpDDOverlayFx: PDDOverlayFX): HResult; stdcall;
  1333.     function UpdateOverlayDisplay(dwFlags: DWORD): HResult; stdcall;
  1334.     function UpdateOverlayZOrder(dwFlags: DWORD;
  1335.         lpDDSReference: IDirectDrawSurface): HResult; stdcall;
  1336.   end;
  1337. (*
  1338.  * IDirectDrawSurface2 and related interfaces
  1339.  *)
  1340.   IDirectDrawSurface2 = interface(IUnknown)
  1341.     ['{57805885-6eec-11cf-9441-a82303c10e27}']
  1342.     (*** IDirectDrawSurface methods ***)
  1343.     function AddAttachedSurface(lpDDSAttachedSurface: IDirectDrawSurface2) :
  1344.         HResult; stdcall;
  1345.     function AddOverlayDirtyRect(const lpRect: TRect): HResult; stdcall;
  1346.     function Blt(lpDestRect: PRect;
  1347.         lpDDSrcSurface: IDirectDrawSurface2; lpSrcRect: PRect;
  1348.         dwFlags: DWORD; lpDDBltFx: PDDBltFX): HResult; stdcall;
  1349.     function BltBatch(const lpDDBltBatch: TDDBltBatch; dwCount: DWORD;
  1350.         dwFlags: DWORD): HResult; stdcall;
  1351.     function BltFast(dwX: DWORD; dwY: DWORD;
  1352.         lpDDSrcSurface: IDirectDrawSurface2; lpSrcRect: PRect;
  1353.         dwTrans: DWORD): HResult; stdcall;
  1354.     function DeleteAttachedSurface(dwFlags: DWORD;
  1355.         lpDDSAttachedSurface: IDirectDrawSurface2): HResult; stdcall;
  1356.     function EnumAttachedSurfaces(lpContext: Pointer;
  1357.         lpEnumSurfacesCallback: TDDEnumSurfacesCallback): HResult; stdcall;
  1358.     function EnumOverlayZOrders(dwFlags: DWORD; lpContext: Pointer;
  1359.         lpfnCallback: TDDEnumSurfacesCallback): HResult; stdcall;
  1360.     function Flip(lpDDSurfaceTargetOverride: IDirectDrawSurface2;
  1361.         dwFlags: DWORD): HResult; stdcall;
  1362.     function GetAttachedSurface(var lpDDSCaps: TDDSCaps;
  1363.         out lplpDDAttachedSurface: IDirectDrawSurface2): HResult; stdcall;
  1364.     function GetBltStatus(dwFlags: DWORD): HResult; stdcall;
  1365.     function GetCaps(out lpDDSCaps: TDDSCaps): HResult; stdcall;
  1366.     function GetClipper(out lplpDDClipper: IDirectDrawClipper): HResult; stdcall;
  1367.     function GetColorKey(dwFlags: DWORD; out lpDDColorKey: TDDColorKey) :
  1368.         HResult; stdcall;
  1369.     function GetDC(out lphDC: HDC): HResult; stdcall;
  1370.     function GetFlipStatus(dwFlags: DWORD): HResult; stdcall;
  1371.     function GetOverlayPosition(out lplX, lplY: Longint): HResult; stdcall;
  1372.     function GetPalette(out lplpDDPalette: IDirectDrawPalette): HResult; stdcall;
  1373.     function GetPixelFormat(out lpDDPixelFormat: TDDPixelFormat): HResult; stdcall;
  1374.     function GetSurfaceDesc(out lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
  1375.     function Initialize(lpDD: IDirectDraw;
  1376.         out lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
  1377.     function IsLost: HResult; stdcall;
  1378.     function Lock(lpDestRect: PRect;
  1379.         out lpDDSurfaceDesc: TDDSurfaceDesc; dwFlags: DWORD;
  1380.         hEvent: THandle): HResult; stdcall;
  1381.     function ReleaseDC(hDC: Windows.HDC): HResult; stdcall;
  1382.     function _Restore: HResult; stdcall;
  1383.     function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
  1384.     function SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDColorKey) :
  1385.         HResult; stdcall;
  1386.     function SetOverlayPosition(lX, lY: Longint): HResult; stdcall;
  1387.     function SetPalette(lpDDPalette: IDirectDrawPalette): HResult; stdcall;
  1388.     function Unlock(lpSurfaceData: Pointer): HResult; stdcall;
  1389.     function UpdateOverlay(lpSrcRect: PRect;
  1390.         lpDDDestSurface: IDirectDrawSurface2; lpDestRect: PRect;
  1391.         dwFlags: DWORD; lpDDOverlayFx: PDDOverlayFX): HResult; stdcall;
  1392.     function UpdateOverlayDisplay(dwFlags: DWORD): HResult; stdcall;
  1393.     function UpdateOverlayZOrder(dwFlags: DWORD;
  1394.         lpDDSReference: IDirectDrawSurface2): HResult; stdcall;
  1395.     (*** Added in the v2 interface ***)
  1396.     function GetDDInterface(var lplpDD: IDirectDraw): HResult; stdcall;
  1397.     function PageLock(dwFlags: DWORD): HResult; stdcall;
  1398.     function PageUnlock(dwFlags: DWORD): HResult; stdcall;
  1399.   end;
  1400.   IDirectDrawSurface3 = interface(IUnknown)
  1401.     ['{DA044E00-69B2-11D0-A1D5-00AA00B8DFBB}']
  1402.     (*** IDirectDrawSurface methods ***)
  1403.     function AddAttachedSurface(lpDDSAttachedSurface: IDirectDrawSurface3) :
  1404.         HResult; stdcall;
  1405.     function AddOverlayDirtyRect(const lpRect: TRect): HResult; stdcall;
  1406.     function Blt(lpDestRect: PRect;
  1407.         lpDDSrcSurface: IDirectDrawSurface3; lpSrcRect: PRect;
  1408.         dwFlags: DWORD; lpDDBltFx: PDDBltFX): HResult; stdcall;
  1409.     function BltBatch(const lpDDBltBatch: TDDBltBatch; dwCount: DWORD;
  1410.         dwFlags: DWORD): HResult; stdcall;
  1411.     function BltFast(dwX: DWORD; dwY: DWORD;
  1412.         lpDDSrcSurface: IDirectDrawSurface3; lpSrcRect: PRect;
  1413.         dwTrans: DWORD): HResult; stdcall;
  1414.     function DeleteAttachedSurface(dwFlags: DWORD;
  1415.         lpDDSAttachedSurface: IDirectDrawSurface3): HResult; stdcall;
  1416.     function EnumAttachedSurfaces(lpContext: Pointer;
  1417.         lpEnumSurfacesCallback: TDDEnumSurfacesCallback): HResult; stdcall;
  1418.     function EnumOverlayZOrders(dwFlags: DWORD; lpContext: Pointer;
  1419.         lpfnCallback: TDDEnumSurfacesCallback): HResult; stdcall;
  1420.     function Flip(lpDDSurfaceTargetOverride: IDirectDrawSurface3;
  1421.         dwFlags: DWORD): HResult; stdcall;
  1422.     function GetAttachedSurface(var lpDDSCaps: TDDSCaps;
  1423.         out lplpDDAttachedSurface: IDirectDrawSurface3): HResult; stdcall;
  1424.     function GetBltStatus(dwFlags: DWORD): HResult; stdcall;
  1425.     function GetCaps(out lpDDSCaps: TDDSCaps): HResult; stdcall;
  1426.     function GetClipper(out lplpDDClipper: IDirectDrawClipper): HResult; stdcall;
  1427.     function GetColorKey(dwFlags: DWORD; out lpDDColorKey: TDDColorKey) :
  1428.         HResult; stdcall;
  1429.     function GetDC(out lphDC: HDC): HResult; stdcall;
  1430.     function GetFlipStatus(dwFlags: DWORD): HResult; stdcall;
  1431.     function GetOverlayPosition(out lplX, lplY: Longint): HResult; stdcall;
  1432.     function GetPalette(out lplpDDPalette: IDirectDrawPalette): HResult; stdcall;
  1433.     function GetPixelFormat(out lpDDPixelFormat: TDDPixelFormat): HResult; stdcall;
  1434.     function GetSurfaceDesc(out lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
  1435.     function Initialize(lpDD: IDirectDraw;
  1436.         out lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
  1437.     function IsLost: HResult; stdcall;
  1438.     function Lock(lpDestRect: PRect;
  1439.         out lpDDSurfaceDesc: TDDSurfaceDesc; dwFlags: DWORD;
  1440.         hEvent: THandle): HResult; stdcall;
  1441.     function ReleaseDC(hDC: Windows.HDC): HResult; stdcall;
  1442.     function _Restore: HResult; stdcall;
  1443.     function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
  1444.     function SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDColorKey) :
  1445.         HResult; stdcall;
  1446.     function SetOverlayPosition(lX, lY: Longint): HResult; stdcall;
  1447.     function SetPalette(lpDDPalette: IDirectDrawPalette): HResult; stdcall;
  1448.     function Unlock(lpSurfaceData: Pointer): HResult; stdcall;
  1449.     function UpdateOverlay(lpSrcRect: PRect;
  1450.         lpDDDestSurface: IDirectDrawSurface3; lpDestRect: PRect;
  1451.         dwFlags: DWORD; lpDDOverlayFx: PDDOverlayFX): HResult; stdcall;
  1452.     function UpdateOverlayDisplay(dwFlags: DWORD): HResult; stdcall;
  1453.     function UpdateOverlayZOrder(dwFlags: DWORD;
  1454.         lpDDSReference: IDirectDrawSurface3): HResult; stdcall;
  1455.     (*** Added in the v2 interface ***)
  1456.     function GetDDInterface(out lplpDD: IDirectDraw): HResult; stdcall;
  1457.     function PageLock(dwFlags: DWORD): HResult; stdcall;
  1458.     function PageUnlock(dwFlags: DWORD): HResult; stdcall;
  1459.     (*** Added in the V3 interface ***)
  1460.     function SetSurfaceDesc(const lpddsd: TDDSurfaceDesc; dwFlags: DWORD): HResult; stdcall;
  1461.   end;
  1462. (*
  1463.  * IDirectDrawSurface4 and related interfaces
  1464.  *)
  1465.   IDirectDrawSurface4 = interface(IUnknown)
  1466.     ['{0B2B8630-AD35-11D0-8EA6-00609797EA5B}']
  1467.     (*** IDirectDrawSurface methods ***)
  1468.     function AddAttachedSurface(lpDDSAttachedSurface: IDirectDrawSurface4) :
  1469.         HResult; stdcall;
  1470.     function AddOverlayDirtyRect(const lpRect: TRect): HResult; stdcall;
  1471.     function Blt(lpDestRect: PRect;
  1472.         lpDDSrcSurface: IDirectDrawSurface4; lpSrcRect: PRect;
  1473.         dwFlags: DWORD; lpDDBltFx: PDDBltFX): HResult; stdcall;
  1474.     function BltBatch(const lpDDBltBatch: TDDBltBatch; dwCount: DWORD;
  1475.         dwFlags: DWORD): HResult; stdcall;
  1476.     function BltFast(dwX: DWORD; dwY: DWORD;
  1477.         lpDDSrcSurface: IDirectDrawSurface4; lpSrcRect: PRect;
  1478.         dwTrans: DWORD): HResult; stdcall;
  1479.     function DeleteAttachedSurface(dwFlags: DWORD;
  1480.         lpDDSAttachedSurface: IDirectDrawSurface4): HResult; stdcall;
  1481.     function EnumAttachedSurfaces(lpContext: Pointer;
  1482.         lpEnumSurfacesCallback: TDDEnumSurfacesCallback2): HResult; stdcall;
  1483.     function EnumOverlayZOrders(dwFlags: DWORD; lpContext: Pointer;
  1484.         lpfnCallback: TDDEnumSurfacesCallback2): HResult; stdcall;
  1485.     function Flip(lpDDSurfaceTargetOverride: IDirectDrawSurface4;
  1486.         dwFlags: DWORD): HResult; stdcall;
  1487.     function GetAttachedSurface(const lpDDSCaps: TDDSCaps2;
  1488.         out lplpDDAttachedSurface: IDirectDrawSurface4): HResult; stdcall;
  1489.     function GetBltStatus(dwFlags: DWORD): HResult; stdcall;
  1490.     function GetCaps(out lpDDSCaps: TDDSCaps2): HResult; stdcall;
  1491.     function GetClipper(out lplpDDClipper: IDirectDrawClipper): HResult; stdcall;
  1492.     function GetColorKey(dwFlags: DWORD; out lpDDColorKey: TDDColorKey) :
  1493.         HResult; stdcall;
  1494.     function GetDC(out lphDC: HDC): HResult; stdcall;
  1495.     function GetFlipStatus(dwFlags: DWORD): HResult; stdcall;
  1496.     function GetOverlayPosition(out lplX, lplY: Longint): HResult; stdcall;
  1497.     function GetPalette(out lplpDDPalette: IDirectDrawPalette): HResult; stdcall;
  1498.     function GetPixelFormat(out lpDDPixelFormat: TDDPixelFormat): HResult; stdcall;
  1499.     function GetSurfaceDesc(out lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
  1500.     function Initialize(lpDD: IDirectDraw;
  1501.         out lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
  1502.     function IsLost: HResult; stdcall;
  1503.     function Lock(lpDestRect: PRect;
  1504.         out lpDDSurfaceDesc: TDDSurfaceDesc2; dwFlags: DWORD;
  1505.         hEvent: THandle): HResult; stdcall;
  1506.     function ReleaseDC(hDC: Windows.HDC): HResult; stdcall;
  1507.     function _Restore: HResult; stdcall;
  1508.     function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
  1509.     function SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDColorKey) :
  1510.         HResult; stdcall;
  1511.     function SetOverlayPosition(lX, lY: Longint): HResult; stdcall;
  1512.     function SetPalette(lpDDPalette: IDirectDrawPalette): HResult; stdcall;
  1513.     function Unlock(lpRect: PRect): HResult; stdcall;
  1514.     function UpdateOverlay(lpSrcRect: PRect;
  1515.         lpDDDestSurface: IDirectDrawSurface4; lpDestRect: PRect;
  1516.         dwFlags: DWORD; lpDDOverlayFx: PDDOverlayFX): HResult; stdcall;
  1517.     function UpdateOverlayDisplay(dwFlags: DWORD): HResult; stdcall;
  1518.     function UpdateOverlayZOrder(dwFlags: DWORD;
  1519.         lpDDSReference: IDirectDrawSurface4): HResult; stdcall;
  1520.     (*** Added in the v2 interface ***)
  1521.     function GetDDInterface(out lplpDD: IUnknown): HResult; stdcall;
  1522.     function PageLock(dwFlags: DWORD): HResult; stdcall;
  1523.     function PageUnlock(dwFlags: DWORD): HResult; stdcall;
  1524.     (*** Added in the V3 interface ***)
  1525.     function SetSurfaceDesc(const lpddsd2: TDDSurfaceDesc2; dwFlags: DWORD): HResult; stdcall;
  1526.     (*** Added in the v4 interface ***)
  1527.     function SetPrivateData(const guidTag: TGUID; lpData: Pointer;
  1528.         cbSize: DWORD; dwFlags: DWORD): HResult; stdcall;
  1529.     function GetPrivateData(const guidTag: TGUID; lpBuffer: Pointer;
  1530.         var lpcbBufferSize: DWORD): HResult; stdcall;
  1531.     function FreePrivateData(const guidTag: TGUID): HResult; stdcall;
  1532.     function GetUniquenessValue(out lpValue: DWORD): HResult; stdcall;
  1533.     function ChangeUniquenessValue: HResult; stdcall;
  1534.   end;
  1535.   IDirectDrawSurface7 = interface(IUnknown)
  1536.     ['{06675a80-3b9b-11d2-b92f-00609797ea5b}']
  1537.     (*** IDirectDrawSurface methods ***)
  1538.     function AddAttachedSurface(lpDDSAttachedSurface: IDirectDrawSurface7) :
  1539.         HResult; stdcall;
  1540.     function AddOverlayDirtyRect(const lpRect: TRect): HResult; stdcall;
  1541.     function Blt(lpDestRect: PRect;
  1542.         lpDDSrcSurface: IDirectDrawSurface7; lpSrcRect: PRect;
  1543.         dwFlags: DWORD; lpDDBltFx: PDDBltFX): HResult; stdcall;
  1544.     function BltBatch(const lpDDBltBatch: TDDBltBatch; dwCount: DWORD;
  1545.         dwFlags: DWORD): HResult; stdcall;
  1546.     function BltFast(dwX: DWORD; dwY: DWORD;
  1547.         lpDDSrcSurface: IDirectDrawSurface7; lpSrcRect: PRect;
  1548.         dwTrans: DWORD): HResult; stdcall;
  1549.     function DeleteAttachedSurface(dwFlags: DWORD;
  1550.         lpDDSAttachedSurface: IDirectDrawSurface7): HResult; stdcall;
  1551.     function EnumAttachedSurfaces(lpContext: Pointer;
  1552.         lpEnumSurfacesCallback: TDDEnumSurfacesCallback7): HResult; stdcall;
  1553.     function EnumOverlayZOrders(dwFlags: DWORD; lpContext: Pointer;
  1554.         lpfnCallback: TDDEnumSurfacesCallback7): HResult; stdcall;
  1555.     function Flip(lpDDSurfaceTargetOverride: IDirectDrawSurface7;
  1556.         dwFlags: DWORD): HResult; stdcall;
  1557.     function GetAttachedSurface(const lpDDSCaps: TDDSCaps2;
  1558.         out lplpDDAttachedSurface: IDirectDrawSurface7): HResult; stdcall;
  1559.     function GetBltStatus(dwFlags: DWORD): HResult; stdcall;
  1560.     function GetCaps(out lpDDSCaps: TDDSCaps2): HResult; stdcall;
  1561.     function GetClipper(out lplpDDClipper: IDirectDrawClipper): HResult; stdcall;
  1562.     function GetColorKey(dwFlags: DWORD; out lpDDColorKey: TDDColorKey) :
  1563.         HResult; stdcall;
  1564.     function GetDC(out lphDC: HDC): HResult; stdcall;
  1565.     function GetFlipStatus(dwFlags: DWORD): HResult; stdcall;
  1566.     function GetOverlayPosition(out lplX, lplY: Longint): HResult; stdcall;
  1567.     function GetPalette(out lplpDDPalette: IDirectDrawPalette): HResult; stdcall;
  1568.     function GetPixelFormat(out lpDDPixelFormat: TDDPixelFormat): HResult; stdcall;
  1569.     function GetSurfaceDesc(out lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
  1570.     function Initialize(lpDD: IDirectDraw;
  1571.         out lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
  1572.     function IsLost: HResult; stdcall;
  1573.     function Lock(lpDestRect: PRect;
  1574.         out lpDDSurfaceDesc: TDDSurfaceDesc2; dwFlags: DWORD;
  1575.         hEvent: THandle): HResult; stdcall;
  1576.     function ReleaseDC(hDC: Windows.HDC): HResult; stdcall;
  1577.     function _Restore: HResult; stdcall;
  1578.     function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
  1579.     function SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDColorKey) :
  1580.         HResult; stdcall;
  1581.     function SetOverlayPosition(lX, lY: Longint): HResult; stdcall;
  1582.     function SetPalette(lpDDPalette: IDirectDrawPalette): HResult; stdcall;
  1583.     function Unlock(lpRect: PRect): HResult; stdcall;
  1584.     function UpdateOverlay(lpSrcRect: PRect;
  1585.         lpDDDestSurface: IDirectDrawSurface7; lpDestRect: PRect;
  1586.         dwFlags: DWORD; lpDDOverlayFx: PDDOverlayFX): HResult; stdcall;
  1587.     function UpdateOverlayDisplay(dwFlags: DWORD): HResult; stdcall;
  1588.     function UpdateOverlayZOrder(dwFlags: DWORD;
  1589.         lpDDSReference: IDirectDrawSurface7): HResult; stdcall;
  1590.     (*** Added in the v2 interface ***)
  1591.     function GetDDInterface(out lplpDD: IUnknown): HResult; stdcall;
  1592.     function PageLock(dwFlags: DWORD): HResult; stdcall;
  1593.     function PageUnlock(dwFlags: DWORD): HResult; stdcall;
  1594.     (*** Added in the V3 interface ***)
  1595.     function SetSurfaceDesc(const lpddsd2: TDDSurfaceDesc2; dwFlags: DWORD): HResult; stdcall;
  1596.     (*** Added in the v4 interface ***)
  1597.     function SetPrivateData(const guidTag: TGUID; lpData: Pointer;
  1598.         cbSize: DWORD; dwFlags: DWORD): HResult; stdcall;
  1599.     function GetPrivateData(const guidTag: TGUID; lpBuffer: Pointer;
  1600.         var lpcbBufferSize: DWORD): HResult; stdcall;
  1601.     function FreePrivateData(const guidTag: TGUID): HResult; stdcall;
  1602.     function GetUniquenessValue(out lpValue: DWORD): HResult; stdcall;
  1603.     function ChangeUniquenessValue: HResult; stdcall;
  1604.     (*** Moved Texture7 methods here ***)
  1605.     function SetPriority(dwPriority: DWORD): HResult; stdcall;
  1606.     function GetPriority(out lpdwPriority: DWORD): HResult; stdcall;
  1607.     function SetLOD(dwMaxLOD: DWORD): HResult; stdcall;
  1608.     function GetLOD(out lpdwMaxLOD: DWORD): HResult; stdcall;
  1609.   end;
  1610.   IDirectDrawColorControl = interface(IUnknown)
  1611.     ['{4B9F0EE0-0D7E-11D0-9B06-00A0C903A3B8}']
  1612.     function GetColorControls(out lpColorControl: TDDColorControl): HResult; stdcall;
  1613.     function SetColorControls(const lpColorControl: TDDColorControl): HResult; stdcall;
  1614.   end;
  1615. (*
  1616.  * IDirectDrawGammaControl
  1617.  *)
  1618.   IDirectDrawGammaControl = interface(IUnknown)
  1619.     ['{69C11C3E-B46B-11D1-AD7A-00C04FC29B4E}']
  1620.     function GetGammaRamp(dwFlags: DWORD; out lpRampData: TDDGammaRamp): HResult; stdcall;
  1621.     function SetGammaRamp(dwFlags: DWORD; const lpRampData: TDDGammaRamp): HResult; stdcall;
  1622.   end;
  1623. type
  1624.   IID_IDirectDraw = IDirectDraw;
  1625.   {$EXTERNALSYM IID_IDirectDraw}
  1626.   IID_IDirectDraw2 = IDirectDraw2;
  1627.   {$EXTERNALSYM IID_IDirectDraw2}
  1628.   IID_IDirectDraw4 = IDirectDraw4;
  1629.   {$EXTERNALSYM IID_IDirectDraw4}
  1630.   IID_IDirectDraw7 = IDirectDraw7;
  1631.   {$EXTERNALSYM IID_IDirectDraw7}
  1632.   IID_IDirectDrawSurface = IDirectDrawSurface;
  1633.   {$EXTERNALSYM IID_IDirectDrawSurface}
  1634.   IID_IDirectDrawSurface2 = IDirectDrawSurface2;
  1635.   {$EXTERNALSYM IID_IDirectDrawSurface2}
  1636.   IID_IDirectDrawSurface3 = IDirectDrawSurface3;
  1637.   {$EXTERNALSYM IID_IDirectDrawSurface3}
  1638.   IID_IDirectDrawSurface4 = IDirectDrawSurface4;
  1639.   {$EXTERNALSYM IID_IDirectDrawSurface4}
  1640.   IID_IDirectDrawSurface7 = IDirectDrawSurface7;
  1641.   {$EXTERNALSYM IID_IDirectDrawSurface7}
  1642.   IID_IDirectDrawPalette = IDirectDrawPalette;
  1643.   {$EXTERNALSYM IID_IDirectDrawPalette}
  1644.   IID_IDirectDrawClipper = IDirectDrawClipper;
  1645.   {$EXTERNALSYM IID_IDirectDrawClipper}
  1646.   IID_IDirectDrawColorControl = IDirectDrawColorControl;
  1647.   {$EXTERNALSYM IID_IDirectDrawColorControl}
  1648.   IID_IDirectDrawGammaControl = IDirectDrawGammaControl;
  1649.   {$EXTERNALSYM IID_IDirectDrawGammaControl}
  1650. const
  1651. (*
  1652.  * ddsCaps field is valid.
  1653.  *)
  1654.   DDSD_CAPS               = $00000001;     // default
  1655.   {$EXTERNALSYM DDSD_CAPS}
  1656. (*
  1657.  * dwHeight field is valid.
  1658.  *)
  1659.   DDSD_HEIGHT             = $00000002;
  1660.   {$EXTERNALSYM DDSD_HEIGHT}
  1661. (*
  1662.  * dwWidth field is valid.
  1663.  *)
  1664.   DDSD_WIDTH              = $00000004;
  1665.   {$EXTERNALSYM DDSD_WIDTH}
  1666. (*
  1667.  * lPitch is valid.
  1668.  *)
  1669.   DDSD_PITCH              = $00000008;
  1670.   {$EXTERNALSYM DDSD_PITCH}
  1671. (*
  1672.  * dwBackBufferCount is valid.
  1673.  *)
  1674.   DDSD_BACKBUFFERCOUNT    = $00000020;
  1675.   {$EXTERNALSYM DDSD_BACKBUFFERCOUNT}
  1676. (*
  1677.  * dwZBufferBitDepth is valid.  (shouldnt be used in DDSURFACEDESC2)
  1678.  *)
  1679.   DDSD_ZBUFFERBITDEPTH    = $00000040;
  1680.   {$EXTERNALSYM DDSD_ZBUFFERBITDEPTH}
  1681. (*
  1682.  * dwAlphaBitDepth is valid.
  1683.  *)
  1684.    DDSD_ALPHABITDEPTH      = $00000080;
  1685.    {$EXTERNALSYM DDSD_ALPHABITDEPTH}
  1686. (*
  1687.  * lpSurface is valid.
  1688.  *)
  1689.   DDSD_LPSURFACE    = $00000800;
  1690.   {$EXTERNALSYM DDSD_LPSURFACE}
  1691. (*
  1692.  * ddpfPixelFormat is valid.
  1693.  *)
  1694.   DDSD_PIXELFORMAT        = $00001000;
  1695.   {$EXTERNALSYM DDSD_PIXELFORMAT}
  1696. (*
  1697.  * ddckCKDestOverlay is valid.
  1698.  *)
  1699.   DDSD_CKDESTOVERLAY      = $00002000;
  1700.   {$EXTERNALSYM DDSD_CKDESTOVERLAY}
  1701. (*
  1702.  * ddckCKDestBlt is valid.
  1703.  *)
  1704.   DDSD_CKDESTBLT          = $00004000;
  1705.   {$EXTERNALSYM DDSD_CKDESTBLT}
  1706. (*
  1707.  * ddckCKSrcOverlay is valid.
  1708.  *)
  1709.   DDSD_CKSRCOVERLAY       = $00008000;
  1710.   {$EXTERNALSYM DDSD_CKSRCOVERLAY}
  1711. (*
  1712.  * ddckCKSrcBlt is valid.
  1713.  *)
  1714.   DDSD_CKSRCBLT           = $00010000;
  1715.   {$EXTERNALSYM DDSD_CKSRCBLT}
  1716. (*
  1717.  * dwMipMapCount is valid.
  1718.  *)
  1719.   DDSD_MIPMAPCOUNT        = $00020000;
  1720.   {$EXTERNALSYM DDSD_MIPMAPCOUNT}
  1721.  (*
  1722.   * dwRefreshRate is valid
  1723.   *)
  1724.   DDSD_REFRESHRATE        = $00040000;
  1725.   {$EXTERNALSYM DDSD_REFRESHRATE}
  1726. (*
  1727.  * dwLinearSize is valid
  1728.  *)
  1729.   DDSD_LINEARSIZE   = $00080000;
  1730.   {$EXTERNALSYM DDSD_LINEARSIZE}
  1731. (*
  1732.  * dwTextureStage is valid
  1733.  *)
  1734.   DDSD_TEXTURESTAGE       = $00100000;
  1735.   {$EXTERNALSYM DDSD_TEXTURESTAGE}
  1736. (*
  1737.  * dwFVF is valid
  1738.  *)
  1739.   DDSD_FVF                = $00200000;
  1740.   {$EXTERNALSYM DDSD_FVF}
  1741. (*
  1742.  * dwSrcVBHandle is valid
  1743.  *)
  1744.   DDSD_SRCVBHANDLE        = $00400000;
  1745.   {$EXTERNALSYM DDSD_SRCVBHANDLE}
  1746. (*
  1747.  * dwDepth is valid
  1748.  *)
  1749.   DDSD_DEPTH              = $00800000;
  1750.   {$EXTERNALSYM DDSD_DEPTH}
  1751. (*
  1752.  * All input fields are valid.
  1753.  *)
  1754.   DDSD_ALL   = $00fff9ee;
  1755.   {$EXTERNALSYM DDSD_ALL}
  1756. (*
  1757.  * guid field is valid.
  1758.  *)
  1759.   DDOSD_GUID                  = $00000001;
  1760.   {$EXTERNALSYM DDOSD_GUID}
  1761. (*
  1762.  * dwCompressionRatio field is valid.
  1763.  *)
  1764.   DDOSD_COMPRESSION_RATIO     = $00000002;
  1765.   {$EXTERNALSYM DDOSD_COMPRESSION_RATIO}
  1766. (*
  1767.  * ddSCaps field is valid.
  1768.  *)
  1769.   DDOSD_SCAPS                 = $00000004;
  1770.   {$EXTERNALSYM DDOSD_SCAPS}
  1771. (*
  1772.  * ddOSCaps field is valid.
  1773.  *)
  1774.   DDOSD_OSCAPS                = $00000008;
  1775.   {$EXTERNALSYM DDOSD_OSCAPS}
  1776. (*
  1777.  * All input fields are valid.
  1778.  *)
  1779.   DDOSD_ALL                   = $0000000f;
  1780.   {$EXTERNALSYM DDOSD_ALL}
  1781. (*
  1782.  * The surface's optimized pixelformat is compressed
  1783.  *)
  1784.   DDOSDCAPS_OPTCOMPRESSED = $00000001;
  1785.   {$EXTERNALSYM DDOSDCAPS_OPTCOMPRESSED}
  1786. (*
  1787.  * The surface's optimized pixelformat is reordered
  1788.  *)
  1789.   DDOSDCAPS_OPTREORDERED = $00000002;
  1790.   {$EXTERNALSYM DDOSDCAPS_OPTREORDERED}
  1791. (*
  1792.  * The opt surface is a monolithic mipmap
  1793.  *)
  1794.   DDOSDCAPS_MONOLITHICMIPMAP = $00000004;
  1795.   {$EXTERNALSYM DDOSDCAPS_MONOLITHICMIPMAP}
  1796. (*
  1797.  * The valid Surf caps:
  1798.  *   DDSCAPS_SYSTEMMEMORY   = $00000800;
  1799.  *   DDSCAPS_VIDEOMEMORY        = $00004000;
  1800.  *   DDSCAPS_LOCALVIDMEM        = $10000000;
  1801.  *   DDSCAPS_NONLOCALVIDMEM     = $20000000;
  1802.  *)
  1803.   DDOSDCAPS_VALIDSCAPS          = $30004800;
  1804.   {$EXTERNALSYM DDOSDCAPS_VALIDSCAPS}
  1805. (*
  1806.  * The valid OptSurf caps
  1807.  *)
  1808.   DDOSDCAPS_VALIDOSCAPS          = $00000007;
  1809.   {$EXTERNALSYM DDOSDCAPS_VALIDOSCAPS}
  1810. (*
  1811.  * DDCOLORCONTROL
  1812.  *)
  1813. (*
  1814.  * lBrightness field is valid.
  1815.  *)
  1816.   DDCOLOR_BRIGHTNESS = $00000001;
  1817.   {$EXTERNALSYM DDCOLOR_BRIGHTNESS}
  1818. (*
  1819.  * lContrast field is valid.
  1820.  *)
  1821.   DDCOLOR_CONTRAST = $00000002;
  1822.   {$EXTERNALSYM DDCOLOR_CONTRAST}
  1823. (*
  1824.  * lHue field is valid.
  1825.  *)
  1826.   DDCOLOR_HUE = $00000004;
  1827.   {$EXTERNALSYM DDCOLOR_HUE}
  1828. (*
  1829.  * lSaturation field is valid.
  1830.  *)
  1831.   DDCOLOR_SATURATION = $00000008;
  1832.   {$EXTERNALSYM DDCOLOR_SATURATION}
  1833. (*
  1834.  * lSharpness field is valid.
  1835.  *)
  1836.   DDCOLOR_SHARPNESS = $00000010;
  1837.   {$EXTERNALSYM DDCOLOR_SHARPNESS}
  1838. (*
  1839.  * lGamma field is valid.
  1840.  *)
  1841.   DDCOLOR_GAMMA = $00000020;
  1842.   {$EXTERNALSYM DDCOLOR_GAMMA}
  1843. (*
  1844.  * lColorEnable field is valid.
  1845.  *)
  1846.   DDCOLOR_COLORENABLE = $00000040;
  1847.   {$EXTERNALSYM DDCOLOR_COLORENABLE}
  1848. (*============================================================================
  1849.  *
  1850.  * Direct Draw Capability Flags
  1851.  *
  1852.  * These flags are used to describe the capabilities of a given Surface.
  1853.  * All flags are bit flags.
  1854.  *
  1855.  *==========================================================================*)
  1856. (****************************************************************************
  1857.  *
  1858.  * DIRECTDRAWSURFACE CAPABILITY FLAGS
  1859.  *
  1860.  ****************************************************************************)
  1861. (*
  1862.  * This bit currently has no meaning.
  1863.  *)
  1864.   DDSCAPS_RESERVED1                       = $00000001;
  1865.   {$EXTERNALSYM DDSCAPS_RESERVED1}
  1866. (*
  1867.  * Indicates that this surface contains alpha-only information.
  1868.  * (To determine if a surface is RGBA/YUVA, the pixel format must be
  1869.  * interrogated.)
  1870.  *)
  1871.   DDSCAPS_ALPHA                           = $00000002;
  1872.   {$EXTERNALSYM DDSCAPS_ALPHA}
  1873. (*
  1874.  * Indicates that this surface is a backbuffer.  It is generally
  1875.  * set by CreateSurface when the DDSCAPS_FLIP capability bit is set.
  1876.  * It indicates that this surface is THE back buffer of a surface
  1877.  * flipping structure.  DirectDraw supports N surfaces in a
  1878.  * surface flipping structure.  Only the surface that immediately
  1879.  * precedeces the DDSCAPS_FRONTBUFFER has this capability bit set.
  1880.  * The other surfaces are identified as back buffers by the presence
  1881.  * of the DDSCAPS_FLIP capability, their attachment order, and the
  1882.  * absence of the DDSCAPS_FRONTBUFFER and DDSCAPS_BACKBUFFER
  1883.  * capabilities.  The bit is sent to CreateSurface when a standalone
  1884.  * back buffer is being created.  This surface could be attached to
  1885.  * a front buffer and/or back buffers to form a flipping surface
  1886.  * structure after the CreateSurface call.  See AddAttachments for
  1887.  * a detailed description of the behaviors in this case.
  1888.  *)
  1889.   DDSCAPS_BACKBUFFER                      = $00000004;
  1890.   {$EXTERNALSYM DDSCAPS_BACKBUFFER}
  1891. (*
  1892.  * Indicates a complex surface structure is being described.  A
  1893.  * complex surface structure results in the creation of more than
  1894.  * one surface.  The additional surfaces are attached to the root
  1895.  * surface.  The complex structure can only be destroyed by
  1896.  * destroying the root.
  1897.  *)
  1898.   DDSCAPS_COMPLEX                         = $00000008;
  1899.   {$EXTERNALSYM DDSCAPS_COMPLEX}
  1900. (*
  1901.  * Indicates that this surface is a part of a surface flipping structure.
  1902.  * When it is passed to CreateSurface the DDSCAPS_FRONTBUFFER and
  1903.  * DDSCAP_BACKBUFFER bits are not set.  They are set by CreateSurface
  1904.  * on the resulting creations.  The dwBackBufferCount field in the
  1905.  * TDDSurfaceDesc structure must be set to at least 1 in order for
  1906.  * the CreateSurface call to succeed.  The DDSCAPS_COMPLEX capability
  1907.  * must always be set with creating multiple surfaces through CreateSurface.
  1908.  *)
  1909.   DDSCAPS_FLIP                            = $00000010;
  1910.   {$EXTERNALSYM DDSCAPS_FLIP}
  1911. (*
  1912.  * Indicates that this surface is THE front buffer of a surface flipping
  1913.  * structure.  It is generally set by CreateSurface when the DDSCAPS_FLIP
  1914.  * capability bit is set.
  1915.  * If this capability is sent to CreateSurface then a standalonw front buffer
  1916.  * is created.  This surface will not have the DDSCAPS_FLIP capability.
  1917.  * It can be attached to other back buffers to form a flipping structure.
  1918.  * See AddAttachments for a detailed description of the behaviors in this
  1919.  * case.
  1920.  *)
  1921.   DDSCAPS_FRONTBUFFER                     = $00000020;
  1922.   {$EXTERNALSYM DDSCAPS_FRONTBUFFER}
  1923. (*
  1924.  * Indicates that this surface is any offscreen surface that is not an overlay,
  1925.  * texture, zbuffer, front buffer, back buffer, or alpha surface.  It is used
  1926.  * to identify plain vanilla surfaces.
  1927.  *)
  1928.   DDSCAPS_OFFSCREENPLAIN                  = $00000040;
  1929.   {$EXTERNALSYM DDSCAPS_OFFSCREENPLAIN}
  1930. (*
  1931.  * Indicates that this surface is an overlay.  It may or may not be directly visible
  1932.  * depending on whether or not it is currently being overlayed onto the primary
  1933.  * surface.  DDSCAPS_VISIBLE can be used to determine whether or not it is being
  1934.  * overlayed at the moment.
  1935.  *)
  1936.   DDSCAPS_OVERLAY                         = $00000080;
  1937.   {$EXTERNALSYM DDSCAPS_OVERLAY}
  1938. (*
  1939.  * Indicates that unique DirectDrawPalette objects can be created and
  1940.  * attached to this surface.
  1941.  *)
  1942.   DDSCAPS_PALETTE                         = $00000100;
  1943.   {$EXTERNALSYM DDSCAPS_PALETTE}
  1944. (*
  1945.  * Indicates that this surface is the primary surface.  The primary
  1946.  * surface represents what the user is seeing at the moment.
  1947.  *)
  1948.   DDSCAPS_PRIMARYSURFACE                  = $00000200;
  1949.   {$EXTERNALSYM DDSCAPS_PRIMARYSURFACE}
  1950. (*
  1951.  * This flag used to be DDSCAPS_PRIMARYSURFACELEFT, which is now
  1952.  * obsolete.
  1953.  *)
  1954.   DDSCAPS_RESERVED3              = $00000400;
  1955.   {$EXTERNALSYM DDSCAPS_RESERVED3}
  1956.   DDSCAPS_PRIMARYSURFACELEFT = DDSCAPS_RESERVED3;
  1957.   {$EXTERNALSYM DDSCAPS_PRIMARYSURFACELEFT}
  1958. (*
  1959.  * Indicates that this surface memory was allocated in system memory
  1960.  *)
  1961.   DDSCAPS_SYSTEMMEMORY                    = $00000800;
  1962.   {$EXTERNALSYM DDSCAPS_SYSTEMMEMORY}
  1963. (*
  1964.  * Indicates that this surface can be used as a 3D texture.  It does not
  1965.  * indicate whether or not the surface is being used for that purpose.
  1966.  *)
  1967.   DDSCAPS_TEXTURE                         = $00001000;
  1968.   {$EXTERNALSYM DDSCAPS_TEXTURE}
  1969. (*
  1970.  * Indicates that a surface may be a destination for 3D rendering.  This
  1971.  * bit must be set in order to query for a Direct3D Device Interface
  1972.  * from this surface.
  1973.  *)
  1974.   DDSCAPS_3DDEVICE                        = $00002000;
  1975.   {$EXTERNALSYM DDSCAPS_3DDEVICE}
  1976. (*
  1977.  * Indicates that this surface exists in video memory.
  1978.  *)
  1979.   DDSCAPS_VIDEOMEMORY                     = $00004000;
  1980.   {$EXTERNALSYM DDSCAPS_VIDEOMEMORY}
  1981. (*
  1982.  * Indicates that changes made to this surface are immediately visible.
  1983.  * It is always set for the primary surface and is set for overlays while
  1984.  * they are being overlayed and texture maps while they are being textured.
  1985.  *)
  1986.   DDSCAPS_VISIBLE                         = $00008000;
  1987.   {$EXTERNALSYM DDSCAPS_VISIBLE}
  1988. (*
  1989.  * Indicates that only writes are permitted to the surface.  Read accesses
  1990.  * from the surface may or may not generate a protection fault, but the
  1991.  * results of a read from this surface will not be meaningful.  READ ONLY.
  1992.  *)
  1993.   DDSCAPS_WRITEONLY                       = $00010000;
  1994.   {$EXTERNALSYM DDSCAPS_WRITEONLY}
  1995. (*
  1996.  * Indicates that this surface is a z buffer. A z buffer does not contain
  1997.  * displayable information.  Instead it contains bit depth information that is
  1998.  * used to determine which pixels are visible and which are obscured.
  1999.  *)
  2000.   DDSCAPS_ZBUFFER                         = $00020000;
  2001.   {$EXTERNALSYM DDSCAPS_ZBUFFER}
  2002. (*
  2003.  * Indicates surface will have a DC associated long term
  2004.  *)
  2005.   DDSCAPS_OWNDC                           = $00040000;
  2006.   {$EXTERNALSYM DDSCAPS_OWNDC}
  2007. (*
  2008.  * Indicates surface should be able to receive live video
  2009.  *)
  2010.   DDSCAPS_LIVEVIDEO                       = $00080000;
  2011.   {$EXTERNALSYM DDSCAPS_LIVEVIDEO}
  2012. (*
  2013.  * Indicates surface should be able to have a stream decompressed
  2014.  * to it by the hardware.
  2015.  *)
  2016.   DDSCAPS_HWCODEC                         = $00100000;
  2017.   {$EXTERNALSYM DDSCAPS_HWCODEC}
  2018. (*
  2019.  * Surface is a ModeX surface.
  2020.  *
  2021.  *)
  2022.   DDSCAPS_MODEX                           = $00200000;
  2023.   {$EXTERNALSYM DDSCAPS_MODEX}
  2024. (*
  2025.  * Indicates surface is one level of a mip-map. This surface will
  2026.  * be attached to other DDSCAPS_MIPMAP surfaces to form the mip-map.
  2027.  * This can be done explicitly, by creating a number of surfaces and
  2028.  * attaching them with AddAttachedSurface or by implicitly by CreateSurface.
  2029.  * If this bit is set then DDSCAPS_TEXTURE must also be set.
  2030.  *)
  2031.   DDSCAPS_MIPMAP                          = $00400000;
  2032.   {$EXTERNALSYM DDSCAPS_MIPMAP}
  2033. (*
  2034.  * This bit is reserved. It should not be specified.
  2035.  *)
  2036.   DDSCAPS_RESERVED2                       = $00800000;
  2037.   {$EXTERNALSYM DDSCAPS_RESERVED2}
  2038. (*
  2039.  * Indicates that memory for the surface is not allocated until the surface
  2040.  * is loaded (via the Direct3D texture Load() function).
  2041.  *)
  2042.   DDSCAPS_ALLOCONLOAD                     = $04000000;
  2043.   {$EXTERNALSYM DDSCAPS_ALLOCONLOAD}
  2044. (*
  2045.  * Indicates that the surface will recieve data from a video port.
  2046.  *)
  2047.   DDSCAPS_VIDEOPORT           = $08000000;
  2048.   {$EXTERNALSYM DDSCAPS_VIDEOPORT}
  2049. (*
  2050.  * Indicates that a video memory surface is resident in true, local video
  2051.  * memory rather than non-local video memory. If this flag is specified then
  2052.  * so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with
  2053.  * DDSCAPS_NONLOCALVIDMEM.
  2054.  *)
  2055.   DDSCAPS_LOCALVIDMEM                     = $10000000;
  2056.   {$EXTERNALSYM DDSCAPS_LOCALVIDMEM}
  2057. (*
  2058.  * Indicates that a video memory surface is resident in non-local video
  2059.  * memory rather than true, local video memory. If this flag is specified
  2060.  * then so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with
  2061.  * DDSCAPS_LOCALVIDMEM.
  2062.  *)
  2063.   DDSCAPS_NONLOCALVIDMEM                  = $20000000;
  2064.   {$EXTERNALSYM DDSCAPS_NONLOCALVIDMEM}
  2065. (*
  2066.  * Indicates that this surface is a standard VGA mode surface, and not a
  2067.  * ModeX surface. (This flag will never be set in combination with the
  2068.  * DDSCAPS_MODEX flag).
  2069.  *)
  2070.   DDSCAPS_STANDARDVGAMODE                 = $40000000;
  2071.   {$EXTERNALSYM DDSCAPS_STANDARDVGAMODE}
  2072. (*
  2073.  * Indicates that this surface will be an optimized surface. This flag is
  2074.  * currently only valid in conjunction with the DDSCAPS_TEXTURE flag. The surface
  2075.  * will be created without any underlying video memory until loaded.
  2076.  *)
  2077.   DDSCAPS_OPTIMIZED                       = $80000000;
  2078.   {$EXTERNALSYM DDSCAPS_OPTIMIZED}
  2079. (*
  2080.  * This bit is reserved
  2081.  *)
  2082.   DDSCAPS2_RESERVED4                      = $00000002;
  2083.   {$EXTERNALSYM DDSCAPS2_RESERVED4}
  2084.   DDSCAPS2_HARDWAREDEINTERLACE            = $00000000;
  2085.   {$EXTERNALSYM DDSCAPS2_HARDWAREDEINTERLACE}
  2086. (*
  2087.  * Indicates to the driver that this surface will be locked very frequently
  2088.  * (for procedural textures, dynamic lightmaps, etc). Surfaces with this cap
  2089.  * set must also have DDSCAPS_TEXTURE. This cap cannot be used with
  2090.  * DDSCAPS2_HINTSTATIC and DDSCAPS2_OPAQUE.
  2091.  *)
  2092.   DDSCAPS2_HINTDYNAMIC  = $00000004;
  2093.   {$EXTERNALSYM DDSCAPS2_HINTDYNAMIC}
  2094. (*
  2095.  * Indicates to the driver that this surface can be re-ordered/retiled on
  2096.  * load. This operation will not change the size of the texture. It is
  2097.  * relatively fast and symmetrical, since the application may lock these
  2098.  * bits (although it will take a performance hit when doing so). Surfaces
  2099.  * with this cap set must also have DDSCAPS_TEXTURE. This cap cannot be
  2100.  * used with DDSCAPS2_HINTDYNAMIC and DDSCAPS2_OPAQUE.
  2101.  *)
  2102.   DDSCAPS2_HINTSTATIC  = $00000008;
  2103.   {$EXTERNALSYM DDSCAPS2_HINTSTATIC}
  2104. (*
  2105.  * Indicates that the client would like this texture surface to be managed by the
  2106.  * DirectDraw/Direct3D runtime. Surfaces with this cap set must also have
  2107.  * DDSCAPS_TEXTURE and DDSCAPS_SYSTEMMEMORY.
  2108.  *)
  2109.   DDSCAPS2_TEXTUREMANAGE                  = $00000010;
  2110.   {$EXTERNALSYM DDSCAPS2_TEXTUREMANAGE}
  2111. (*
  2112.  * These bits are reserved for internal use *)
  2113.   DDSCAPS2_RESERVED1                      = $00000020;
  2114.   {$EXTERNALSYM DDSCAPS2_RESERVED1}
  2115.   DDSCAPS2_RESERVED2                      = $00000040;
  2116.   {$EXTERNALSYM DDSCAPS2_RESERVED2}
  2117. (*
  2118.  * Indicates to the driver that this surface will never be locked again.
  2119.  * The driver is free to optimize this surface via retiling and actual compression.
  2120.  * All calls to Lock() or Blts from this surface will fail. Surfaces with this
  2121.  * cap set must also have DDSCAPS_TEXTURE. This cap cannot be used with
  2122.  * DDSCAPS2_HINTDYNAMIC and DDSCAPS2_HINTSTATIC.
  2123.  *)
  2124.   DDSCAPS2_OPAQUE                         = $00000080;
  2125.   {$EXTERNALSYM DDSCAPS2_OPAQUE}
  2126. (*
  2127.  * Applications should set this bit at CreateSurface time to indicate that they
  2128.  * intend to use antialiasing. Only valid if DDSCAPS_3DDEVICE is also set.
  2129.  *)
  2130.   DDSCAPS2_HINTANTIALIASING               = $00000100;
  2131.   {$EXTERNALSYM DDSCAPS2_HINTANTIALIASING}
  2132. (*
  2133.  * This flag is used at CreateSurface time to indicate that this set of
  2134.  * surfaces is a cubic environment map
  2135.  *)
  2136.   DDSCAPS2_CUBEMAP                        = $00000200;
  2137.   {$EXTERNALSYM DDSCAPS2_CUBEMAP}
  2138. (*
  2139.  * These flags preform two functions:
  2140.  * - At CreateSurface time, they define which of the six cube faces are
  2141.  *   required by the application.
  2142.  * - After creation, each face in the cubemap will have exactly one of these
  2143.  *   bits set.
  2144.  *)
  2145.   DDSCAPS2_CUBEMAP_POSITIVEX              = $00000400;
  2146.   {$EXTERNALSYM DDSCAPS2_CUBEMAP_POSITIVEX}
  2147.   DDSCAPS2_CUBEMAP_NEGATIVEX              = $00000800;
  2148.   {$EXTERNALSYM DDSCAPS2_CUBEMAP_NEGATIVEX}
  2149.   DDSCAPS2_CUBEMAP_POSITIVEY              = $00001000;
  2150.   {$EXTERNALSYM DDSCAPS2_CUBEMAP_POSITIVEY}
  2151.   DDSCAPS2_CUBEMAP_NEGATIVEY              = $00002000;
  2152.   {$EXTERNALSYM DDSCAPS2_CUBEMAP_NEGATIVEY}
  2153.   DDSCAPS2_CUBEMAP_POSITIVEZ              = $00004000;
  2154.   {$EXTERNALSYM DDSCAPS2_CUBEMAP_POSITIVEZ}
  2155.   DDSCAPS2_CUBEMAP_NEGATIVEZ              = $00008000;
  2156.   {$EXTERNALSYM DDSCAPS2_CUBEMAP_NEGATIVEZ}
  2157. (*
  2158.  * This macro may be used to specify all faces of a cube map at CreateSurface time
  2159.  *)
  2160.   DDSCAPS2_CUBEMAP_ALLFACES = ( DDSCAPS2_CUBEMAP_POSITIVEX or
  2161.                                 DDSCAPS2_CUBEMAP_NEGATIVEX or
  2162.                                 DDSCAPS2_CUBEMAP_POSITIVEY or
  2163.                                 DDSCAPS2_CUBEMAP_NEGATIVEY or
  2164.                                 DDSCAPS2_CUBEMAP_POSITIVEZ or
  2165.                                 DDSCAPS2_CUBEMAP_NEGATIVEZ );
  2166.   {$EXTERNALSYM DDSCAPS2_CUBEMAP_ALLFACES}
  2167. (*
  2168.  * This flag is an additional flag which is present on mipmap sublevels from DX7 onwards
  2169.  * It enables easier use of GetAttachedSurface rather than EnumAttachedSurfaces for surface
  2170.  * constructs such as Cube Maps, wherein there are more than one mipmap surface attached
  2171.  * to the root surface.
  2172.  * This caps bit is ignored by CreateSurface
  2173.  *)
  2174.   DDSCAPS2_MIPMAPSUBLEVEL                 = $00010000;
  2175.   {$EXTERNALSYM DDSCAPS2_MIPMAPSUBLEVEL}
  2176. (* This flag indicates that the texture should be managed by D3D only *)
  2177.   DDSCAPS2_D3DTEXTUREMANAGE               = $00020000;
  2178.   {$EXTERNALSYM DDSCAPS2_D3DTEXTUREMANAGE}
  2179. (* This flag indicates that the managed surface can be safely lost *)
  2180.   DDSCAPS2_DONOTPERSIST                   = $00040000;
  2181.   {$EXTERNALSYM DDSCAPS2_DONOTPERSIST}
  2182. (* indicates that this surface is part of a stereo flipping chain *)
  2183.   DDSCAPS2_STEREOSURFACELEFT              = $00080000;
  2184.   {$EXTERNALSYM DDSCAPS2_STEREOSURFACELEFT}
  2185. (*
  2186.  * Indicates that the surface is a volume.
  2187.  * Can be combined with DDSCAPS_MIPMAP to indicate a multi-level volume
  2188.  *)
  2189.   DDSCAPS2_VOLUME                         = $00200000;
  2190.   {$EXTERNALSYM DDSCAPS2_VOLUME}
  2191. (*
  2192.  * Indicates that the surface may be locked multiple times by the application.
  2193.  * This cap cannot be used with DDSCAPS2_OPAQUE.
  2194.  *)
  2195.   DDSCAPS2_NOTUSERLOCKABLE                = $00400000;