DirectDraw.pas
上传用户:yj_qiu
上传日期:2022-08-08
资源大小:23636k
文件大小:258k
源码类别:

游戏引擎

开发平台:

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