home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 May / CMCD0504.ISO / Software / Freeware / Programare / dspack / DSPACK231.exe / {app} / src / DirectX9 / Direct3D9.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2003-01-26  |  207.6 KB  |  4,944 lines

  1. {******************************************************************************}
  2. {*                                                                            *}
  3. {*  Copyright (C) Microsoft Corporation.  All Rights Reserved.                *}
  4. {*                                                                            *}
  5. {*  Files:      d3d9types.h d3d9caps.h d3d9.h                                 *}
  6. {*  Content:    Direct3D9 include files                                       *}
  7. {*                                                                            *}
  8. {*  DirectX 9.0 Delphi adaptation by Alexey Barkovoy                          *}
  9. {*  E-Mail: clootie@reactor.ru                                                *}
  10. {*                                                                            *}
  11. {*  Modified: 26-Jan-2003                                                     *}
  12. {*                                                                            *}
  13. {*  Latest version can be downloaded from:                                    *}
  14. {*     http://clootie.narod.ru/delphi                                         *}
  15. {*                                                                            *}
  16. {*  This File contains only Direct3D 9.0 definitions.                         *}
  17. {*  If you want to use previous versions - use Direct3D.pas and Direct3D8.pas *}
  18. {*                                                                            *}
  19. {******************************************************************************}
  20. {                                                                              }
  21. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  22. {                                                                              }
  23. { The contents of this file are used with permission, subject to the Mozilla   }
  24. { Public License Version 1.1 (the "License"); you may not use this file except }
  25. { in compliance with the License. You may obtain a copy of the License at      }
  26. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  27. {                                                                              }
  28. { Software distributed under the License is distributed on an "AS IS" basis,   }
  29. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  30. { the specific language governing rights and limitations under the License.    }
  31. {                                                                              }
  32. { Alternatively, the contents of this file may be used under the terms of the  }
  33. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  34. { provisions of the LGPL License are applicable instead of those above.        }
  35. { If you wish to allow use of your version of this file only under the terms   }
  36. { of the LGPL License and not to allow others to use your version of this file }
  37. { under the MPL, indicate your decision by deleting  the provisions above and  }
  38. { replace  them with the notice and other provisions required by the LGPL      }
  39. { License.  If you do not delete the provisions above, a recipient may use     }
  40. { your version of this file under either the MPL or the LGPL License.          }
  41. {                                                                              }
  42. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  43. {                                                                              }
  44. {******************************************************************************}
  45.  
  46. {$I DirectX.inc}
  47.  
  48. unit Direct3D9;
  49.  
  50. interface
  51.  
  52. // Global level dynamic loading support
  53. {$IFDEF DYNAMIC_LINK_ALL}
  54.   {$DEFINE DIRECT3D9_DYNAMIC_LINK}
  55. {$ENDIF}
  56. {$IFDEF DYNAMIC_LINK_EXPLICIT_ALL}
  57.   {$DEFINE DIRECT3D9_DYNAMIC_LINK_EXPLICIT}
  58. {$ENDIF}
  59.  
  60. // Remove "dots" below to force some kind of dynamic linking
  61. {.$DEFINE DIRECT3D9_DYNAMIC_LINK}
  62. {.$DEFINE DIRECT3D9_DYNAMIC_LINK_EXPLICIT}
  63.  
  64. {$NOINCLUDE DXTypes}
  65. (*$HPPEMIT '#include "d3d9.h"' *)
  66. (*$HPPEMIT '#include "d3d9types.h"' *)
  67. (*$HPPEMIT '#include "d3d9caps.h"' *)
  68.  
  69. uses Windows, DXTypes;
  70.  
  71. ///// Helper constants (for use in SetRenderState) /////
  72. const
  73.   iTrue  = DWORD(True);
  74.   iFalse = DWORD(False);
  75.  
  76.  
  77.  
  78.  
  79. (*==========================================================================;
  80.  *
  81.  *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  82.  *
  83.  *  File:       d3d9types.h
  84.  *  Content:    Direct3D capabilities include file
  85.  *
  86.  ***************************************************************************)
  87.  
  88. type
  89.   // D3DCOLOR is equivalent to D3DFMT_A8R8G8B8
  90.   D3DCOLOR = DXTypes.D3DCOLOR;
  91.   {$EXTERNALSYM D3DCOLOR}
  92.   TD3DColor = DXTypes.TD3DColor;
  93.   {$NODEFINE TD3DColor}
  94.   {$HPPEMIT 'typedef D3DCOLOR TD3DColor;'}
  95.  
  96. // maps unsigned 8 bits/channel to D3DCOLOR
  97. // #define D3DCOLOR_ARGB(a,r,g,b) \
  98. //     ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
  99. function D3DCOLOR_ARGB(a,r,g,b: DWord): TD3DColor;
  100. {$EXTERNALSYM D3DCOLOR_ARGB}
  101. // #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
  102. function D3DCOLOR_RGBA(r,g,b,a: DWord): TD3DColor;
  103. {$EXTERNALSYM D3DCOLOR_RGBA}
  104. // #define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)
  105. function D3DCOLOR_XRGB(r,g,b: DWord): TD3DColor;
  106. {$EXTERNALSYM D3DCOLOR_XRGB}
  107.  
  108. // #define D3DCOLOR_XYUV(y,u,v)   D3DCOLOR_ARGB(0xff,y,u,v)
  109. function D3DCOLOR_XYUV(y,u,v: DWord): TD3DColor;
  110. {$EXTERNALSYM D3DCOLOR_XYUV}
  111. // #define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v)
  112. function D3DCOLOR_AYUV(a,y,u,v: DWord): TD3DColor;
  113. {$EXTERNALSYM D3DCOLOR_AYUV}
  114.  
  115. // maps floating point channels (0.f to 1.f range) to D3DCOLOR
  116. // #define D3DCOLOR_COLORVALUE(r,g,b,a) \
  117. //     D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
  118. function D3DCOLOR_COLORVALUE(r,g,b,a: Single): TD3DColor;
  119. {$EXTERNALSYM D3DCOLOR_COLORVALUE}
  120.  
  121. type
  122.   _D3DVECTOR = DXTypes._D3DVECTOR;
  123.   {$EXTERNALSYM _D3DVECTOR}
  124.   D3DVECTOR = DXTypes.D3DVECTOR;
  125.   {$EXTERNALSYM D3DVECTOR}
  126.   TD3DVector = DXTypes.TD3DVector;
  127.   {$NODEFINE TD3DVector}
  128.   PD3DVector = DXTypes.PD3DVector;
  129.   {$NODEFINE PD3DVector}
  130.   {$HPPEMIT 'typedef _D3DVECTOR TD3DVector;'}
  131.   {$HPPEMIT 'typedef _D3DVECTOR *PD3DVector;'}
  132.  
  133.   PD3DColorValue = ^TD3DColorValue;
  134.   _D3DCOLORVALUE = packed record
  135.     r: Single;
  136.     g: Single;
  137.     b: Single;
  138.     a: Single;
  139.   end {_D3DCOLORVALUE};
  140.   {$EXTERNALSYM _D3DCOLORVALUE}
  141.   D3DCOLORVALUE = _D3DCOLORVALUE;
  142.   {$EXTERNALSYM D3DCOLORVALUE}
  143.   TD3DColorValue = _D3DCOLORVALUE;
  144.  
  145.   PD3DRect = ^TD3DRect;
  146.   _D3DRECT = packed record
  147.     x1: LongInt;
  148.     y1: LongInt;
  149.     x2: LongInt;
  150.     y2: LongInt;
  151.   end {_D3DRECT};
  152.   {$EXTERNALSYM _D3DRECT}
  153.   D3DRECT = _D3DRECT;
  154.   {$EXTERNALSYM D3DRECT}
  155.   TD3DRect = _D3DRECT;
  156.  
  157.   PD3DMatrix = ^TD3DMatrix;
  158.   _D3DMATRIX = packed record
  159.     case integer of
  160.       0 : (_11, _12, _13, _14: Single;
  161.            _21, _22, _23, _24: Single;
  162.            _31, _32, _33, _34: Single;
  163.            _41, _42, _43, _44: Single);
  164.       1 : (m : array [0..3, 0..3] of Single);
  165.   end {_D3DMATRIX};
  166.   {$EXTERNALSYM _D3DMATRIX}
  167.   D3DMATRIX = _D3DMATRIX;
  168.   {$EXTERNALSYM D3DMATRIX}
  169.   TD3DMatrix = _D3DMATRIX;
  170.  
  171.   PD3DViewport9 = ^TD3DViewport9;
  172.   _D3DVIEWPORT9 = packed record
  173.     X: DWord;
  174.     Y: DWord;         { Viewport Top left }
  175.     Width: DWord;
  176.     Height: DWord;    { Viewport Dimensions }
  177.     MinZ: Single;       { Min/max of clip Volume }
  178.     MaxZ: Single;
  179.   end {_D3DVIEWPORT9};
  180.   {$EXTERNALSYM _D3DVIEWPORT9}
  181.   D3DVIEWPORT9 = _D3DVIEWPORT9;
  182.   {$EXTERNALSYM D3DVIEWPORT9}
  183.   TD3DViewport9 = _D3DVIEWPORT9;
  184.  
  185. (*
  186.  * Values for clip fields.
  187.  *)
  188.  
  189. const
  190.   // Max number of user clipping planes, supported in D3D.
  191.   D3DMAXUSERCLIPPLANES = 32;
  192.   {$EXTERNALSYM D3DMAXUSERCLIPPLANES}
  193.  
  194.   // These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE
  195.   //
  196.   D3DCLIPPLANE0 = (1 shl 0);
  197.   {$EXTERNALSYM D3DCLIPPLANE0}
  198.   D3DCLIPPLANE1 = (1 shl 1);
  199.   {$EXTERNALSYM D3DCLIPPLANE1}
  200.   D3DCLIPPLANE2 = (1 shl 2);
  201.   {$EXTERNALSYM D3DCLIPPLANE2}
  202.   D3DCLIPPLANE3 = (1 shl 3);
  203.   {$EXTERNALSYM D3DCLIPPLANE3}
  204.   D3DCLIPPLANE4 = (1 shl 4);
  205.   {$EXTERNALSYM D3DCLIPPLANE4}
  206.   D3DCLIPPLANE5 = (1 shl 5);
  207.   {$EXTERNALSYM D3DCLIPPLANE5}
  208.  
  209.   // The following bits are used in the ClipUnion and ClipIntersection
  210.   // members of the D3DCLIPSTATUS9
  211.   //
  212.   D3DCS_LEFT    = $00000001;
  213.   {$EXTERNALSYM D3DCS_LEFT}
  214.   D3DCS_RIGHT   = $00000002;
  215.   {$EXTERNALSYM D3DCS_RIGHT}
  216.   D3DCS_TOP     = $00000004;
  217.   {$EXTERNALSYM D3DCS_TOP}
  218.   D3DCS_BOTTOM  = $00000008;
  219.   {$EXTERNALSYM D3DCS_BOTTOM}
  220.   D3DCS_FRONT   = $00000010;
  221.   {$EXTERNALSYM D3DCS_FRONT}
  222.   D3DCS_BACK    = $00000020;
  223.   {$EXTERNALSYM D3DCS_BACK}
  224.   D3DCS_PLANE0  = $00000040;
  225.   {$EXTERNALSYM D3DCS_PLANE0}
  226.   D3DCS_PLANE1  = $00000080;
  227.   {$EXTERNALSYM D3DCS_PLANE1}
  228.   D3DCS_PLANE2  = $00000100;
  229.   {$EXTERNALSYM D3DCS_PLANE2}
  230.   D3DCS_PLANE3  = $00000200;
  231.   {$EXTERNALSYM D3DCS_PLANE3}
  232.   D3DCS_PLANE4  = $00000400;
  233.   {$EXTERNALSYM D3DCS_PLANE4}
  234.   D3DCS_PLANE5  = $00000800;
  235.   {$EXTERNALSYM D3DCS_PLANE5}
  236.  
  237.   D3DCS_ALL     = D3DCS_LEFT   or
  238.                   D3DCS_RIGHT  or
  239.                   D3DCS_TOP    or
  240.                   D3DCS_BOTTOM or
  241.                   D3DCS_FRONT  or
  242.                   D3DCS_BACK   or
  243.                   D3DCS_PLANE0 or
  244.                   D3DCS_PLANE1 or
  245.                   D3DCS_PLANE2 or
  246.                   D3DCS_PLANE3 or
  247.                   D3DCS_PLANE4 or
  248.                   D3DCS_PLANE5;
  249.   {$EXTERNALSYM D3DCS_ALL}
  250.  
  251. type
  252.   PD3DClipStatus9 = ^TD3DClipStatus9;
  253.   _D3DCLIPSTATUS9 = packed record
  254.     ClipUnion: DWord;
  255.     ClipIntersection: DWord;
  256.   end {_D3DCLIPSTATUS9};
  257.   {$EXTERNALSYM _D3DCLIPSTATUS9}
  258.   D3DCLIPSTATUS9 = _D3DCLIPSTATUS9;
  259.   {$EXTERNALSYM D3DCLIPSTATUS9}
  260.   TD3DClipStatus9 = _D3DCLIPSTATUS9;
  261.  
  262.   PD3DMaterial9 = ^TD3DMaterial9;
  263.   _D3DMATERIAL9 = packed record
  264.     Diffuse: TD3DColorValue;   { Diffuse color RGBA }
  265.     Ambient: TD3DColorValue;   { Ambient color RGB }
  266.     Specular: TD3DColorValue;  { Specular 'shininess' }
  267.     Emissive: TD3DColorValue;  { Emissive color RGB }
  268.     Power: Single;             { Sharpness if specular highlight }
  269.   end {_D3DMATERIAL9};
  270.   {$EXTERNALSYM _D3DMATERIAL9}
  271.   D3DMATERIAL9 = _D3DMATERIAL9;
  272.   {$EXTERNALSYM D3DMATERIAL9}
  273.   TD3DMaterial9 = _D3DMATERIAL9;
  274.  
  275.   _D3DLIGHTTYPE = (
  276.   {$IFNDEF COMPILER6_UP}
  277.     D3DLIGHT_INVALID_0, {= 0}
  278.     D3DLIGHT_POINT,     {= 1}
  279.     D3DLIGHT_SPOT,      {= 2}
  280.     D3DLIGHT_DIRECTIONAL{= 3}
  281.   {$ELSE}
  282.     D3DLIGHT_POINT       = 1,
  283.     D3DLIGHT_SPOT        = 2,
  284.     D3DLIGHT_DIRECTIONAL = 3
  285.   {$ENDIF}
  286.   );
  287.   {$EXTERNALSYM _D3DLIGHTTYPE}
  288.   D3DLIGHTTYPE = _D3DLIGHTTYPE;
  289.   {$EXTERNALSYM D3DLIGHTTYPE}
  290.   TD3DLightType = _D3DLIGHTTYPE;
  291.  
  292.   PD3DLight9 = ^TD3DLight9;
  293.   _D3DLIGHT9 = packed record
  294.     _Type: TD3DLightType;       { Type of light source }
  295.     Diffuse: TD3DColorValue;    { Diffuse color of light }
  296.     Specular: TD3DColorValue;   { Specular color of light }
  297.     Ambient: TD3DColorValue;    { Ambient color of light }
  298.     Position: TD3DVector;       { Position in world space }
  299.     Direction: TD3DVector;      { Direction in world space }
  300.     Range: Single;              { Cutoff range }
  301.     Falloff: Single;            { Falloff }
  302.     Attenuation0: Single;       { Constant attenuation }
  303.     Attenuation1: Single;       { Linear attenuation }
  304.     Attenuation2: Single;       { Quadratic attenuation }
  305.     Theta: Single;              { Inner angle of spotlight cone }
  306.     Phi: Single;                { Outer angle of spotlight cone }
  307.   end {_D3DLIGHT9};
  308.   {$EXTERNALSYM _D3DLIGHT9}
  309.   D3DLIGHT9 = _D3DLIGHT9;
  310.   {$EXTERNALSYM D3DLIGHT9}
  311.   TD3DLight9 = _D3DLIGHT9;
  312.  
  313. (*
  314.  * Options for clearing
  315.  *)
  316. const
  317.   D3DCLEAR_TARGET       = $00000001; { Clear target surface }
  318.   {$EXTERNALSYM D3DCLEAR_TARGET}
  319.   D3DCLEAR_ZBUFFER      = $00000002; { Clear target z buffer }
  320.   {$EXTERNALSYM D3DCLEAR_ZBUFFER}
  321.   D3DCLEAR_STENCIL      = $00000004; { Clear stencil planes }
  322.   {$EXTERNALSYM D3DCLEAR_STENCIL}
  323.  
  324. (*
  325.  * The following defines the rendering states
  326.  *)
  327. type
  328.   _D3DSHADEMODE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  329.   {$EXTERNALSYM _D3DSHADEMODE}
  330.   D3DSHADEMODE = _D3DSHADEMODE;
  331.   {$EXTERNALSYM D3DSHADEMODE}
  332.   TD3DShadeMode = _D3DSHADEMODE;
  333.  
  334. const
  335.   D3DSHADE_FLAT      = 1;
  336.   {$EXTERNALSYM D3DSHADE_FLAT}
  337.   D3DSHADE_GOURAUD   = 2;
  338.   {$EXTERNALSYM D3DSHADE_GOURAUD}
  339.   D3DSHADE_PHONG     = 3;
  340.   {$EXTERNALSYM D3DSHADE_PHONG}
  341.  
  342. type
  343.   _D3DFILLMODE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  344.   {$EXTERNALSYM _D3DFILLMODE}
  345.   D3DFILLMODE = _D3DFILLMODE;
  346.   {$EXTERNALSYM D3DFILLMODE}
  347.   TD3DFillMode = _D3DFILLMODE;
  348.  
  349. const
  350.   D3DFILL_POINT      = 1;
  351.   {$EXTERNALSYM D3DFILL_POINT}
  352.   D3DFILL_WIREFRAME  = 2;
  353.   {$EXTERNALSYM D3DFILL_WIREFRAME}
  354.   D3DFILL_SOLID      = 3;
  355.   {$EXTERNALSYM D3DFILL_SOLID}
  356.  
  357. type
  358.   _D3DBLEND = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  359.   {$EXTERNALSYM _D3DBLEND}
  360.   D3DBLEND = _D3DBLEND;
  361.   {$EXTERNALSYM D3DBLEND}
  362.   TD3DBlend = _D3DBLEND;
  363.  
  364. const
  365.   D3DBLEND_ZERO              = 1;
  366.   {$EXTERNALSYM D3DBLEND_ZERO}
  367.   D3DBLEND_ONE               = 2;
  368.   {$EXTERNALSYM D3DBLEND_ONE}
  369.   D3DBLEND_SRCCOLOR          = 3;
  370.   {$EXTERNALSYM D3DBLEND_SRCCOLOR}
  371.   D3DBLEND_INVSRCCOLOR       = 4;
  372.   {$EXTERNALSYM D3DBLEND_INVSRCCOLOR}
  373.   D3DBLEND_SRCALPHA          = 5;
  374.   {$EXTERNALSYM D3DBLEND_SRCALPHA}
  375.   D3DBLEND_INVSRCALPHA       = 6;
  376.   {$EXTERNALSYM D3DBLEND_INVSRCALPHA}
  377.   D3DBLEND_DESTALPHA         = 7;
  378.   {$EXTERNALSYM D3DBLEND_DESTALPHA}
  379.   D3DBLEND_INVDESTALPHA      = 8;
  380.   {$EXTERNALSYM D3DBLEND_INVDESTALPHA}
  381.   D3DBLEND_DESTCOLOR         = 9;
  382.   {$EXTERNALSYM D3DBLEND_DESTCOLOR}
  383.   D3DBLEND_INVDESTCOLOR      = 10;
  384.   {$EXTERNALSYM D3DBLEND_INVDESTCOLOR}
  385.   D3DBLEND_SRCALPHASAT       = 11;
  386.   {$EXTERNALSYM D3DBLEND_SRCALPHASAT}
  387.   D3DBLEND_BOTHSRCALPHA      = 12;
  388.   {$EXTERNALSYM D3DBLEND_BOTHSRCALPHA}
  389.   D3DBLEND_BOTHINVSRCALPHA   = 13;
  390.   {$EXTERNALSYM D3DBLEND_BOTHINVSRCALPHA}
  391.   D3DBLEND_BLENDFACTOR       = 14; (* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on *)
  392.   {$EXTERNALSYM D3DBLEND_BLENDFACTOR}
  393.   D3DBLEND_INVBLENDFACTOR    = 15; (* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on *)
  394.   {$EXTERNALSYM D3DBLEND_INVBLENDFACTOR}
  395.  
  396. type
  397.   _D3DBLENDOP = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  398.   {$EXTERNALSYM _D3DBLENDOP}
  399.   D3DBLENDOP = _D3DBLENDOP;
  400.   {$EXTERNALSYM D3DBLENDOP}
  401.   TD3DBlendOp = _D3DBLENDOP;
  402.  
  403. const
  404.   D3DBLENDOP_ADD             = 1;
  405.   {$EXTERNALSYM D3DBLENDOP_ADD}
  406.   D3DBLENDOP_SUBTRACT        = 2;
  407.   {$EXTERNALSYM D3DBLENDOP_SUBTRACT}
  408.   D3DBLENDOP_REVSUBTRACT     = 3;
  409.   {$EXTERNALSYM D3DBLENDOP_REVSUBTRACT}
  410.   D3DBLENDOP_MIN             = 4;
  411.   {$EXTERNALSYM D3DBLENDOP_MIN}
  412.   D3DBLENDOP_MAX             = 5;
  413.   {$EXTERNALSYM D3DBLENDOP_MAX}
  414.  
  415. type
  416.   _D3DTEXTUREADDRESS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  417.   {$EXTERNALSYM _D3DTEXTUREADDRESS}
  418.   D3DTEXTUREADDRESS = _D3DTEXTUREADDRESS;
  419.   {$EXTERNALSYM D3DTEXTUREADDRESS}
  420.   TD3DTextureAddress = _D3DTEXTUREADDRESS;
  421.  
  422. const
  423.   D3DTADDRESS_WRAP           = 1;
  424.   {$EXTERNALSYM D3DTADDRESS_WRAP}
  425.   D3DTADDRESS_MIRROR         = 2;
  426.   {$EXTERNALSYM D3DTADDRESS_MIRROR}
  427.   D3DTADDRESS_CLAMP          = 3;
  428.   {$EXTERNALSYM D3DTADDRESS_CLAMP}
  429.   D3DTADDRESS_BORDER         = 4;
  430.   {$EXTERNALSYM D3DTADDRESS_BORDER}
  431.   D3DTADDRESS_MIRRORONCE     = 5;
  432.   {$EXTERNALSYM D3DTADDRESS_MIRRORONCE}
  433.  
  434. type
  435.   _D3DCULL = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  436.   {$EXTERNALSYM _D3DCULL}
  437.   D3DCULL = _D3DCULL;
  438.   {$EXTERNALSYM D3DCULL}
  439.   TD3DCull = _D3DCULL;
  440.  
  441. const
  442.   D3DCULL_NONE       = 1;
  443.   {$EXTERNALSYM D3DCULL_NONE}
  444.   D3DCULL_CW         = 2;
  445.   {$EXTERNALSYM D3DCULL_CW}
  446.   D3DCULL_CCW        = 3;
  447.   {$EXTERNALSYM D3DCULL_CCW}
  448.  
  449. type
  450.   _D3DCMPFUNC = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  451.   {$EXTERNALSYM _D3DCMPFUNC}
  452.   D3DCMPFUNC = _D3DCMPFUNC;
  453.   {$EXTERNALSYM D3DCMPFUNC}
  454.   TD3DCmpFunc = _D3DCMPFUNC;
  455.  
  456. const
  457.   D3DCMP_NEVER          = 1;
  458.   {$EXTERNALSYM D3DCMP_NEVER}
  459.   D3DCMP_LESS           = 2;
  460.   {$EXTERNALSYM D3DCMP_LESS}
  461.   D3DCMP_EQUAL          = 3;
  462.   {$EXTERNALSYM D3DCMP_EQUAL}
  463.   D3DCMP_LESSEQUAL      = 4;
  464.   {$EXTERNALSYM D3DCMP_LESSEQUAL}
  465.   D3DCMP_GREATER        = 5;
  466.   {$EXTERNALSYM D3DCMP_GREATER}
  467.   D3DCMP_NOTEQUAL       = 6;
  468.   {$EXTERNALSYM D3DCMP_NOTEQUAL}
  469.   D3DCMP_GREATEREQUAL   = 7;
  470.   {$EXTERNALSYM D3DCMP_GREATEREQUAL}
  471.   D3DCMP_ALWAYS         = 8;
  472.   {$EXTERNALSYM D3DCMP_ALWAYS}
  473.  
  474. type
  475.   _D3DSTENCILOP = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  476.   {$EXTERNALSYM _D3DSTENCILOP}
  477.   D3DSTENCILOP = _D3DSTENCILOP;
  478.   {$EXTERNALSYM D3DSTENCILOP}
  479.   TD3DStencilOp = _D3DSTENCILOP;
  480.  
  481. const
  482.   D3DSTENCILOP_KEEP     = 1;
  483.   {$EXTERNALSYM D3DSTENCILOP_KEEP}
  484.   D3DSTENCILOP_ZERO     = 2;
  485.   {$EXTERNALSYM D3DSTENCILOP_ZERO}
  486.   D3DSTENCILOP_REPLACE  = 3;
  487.   {$EXTERNALSYM D3DSTENCILOP_REPLACE}
  488.   D3DSTENCILOP_INCRSAT  = 4;
  489.   {$EXTERNALSYM D3DSTENCILOP_INCRSAT}
  490.   D3DSTENCILOP_DECRSAT  = 5;
  491.   {$EXTERNALSYM D3DSTENCILOP_DECRSAT}
  492.   D3DSTENCILOP_INVERT   = 6;
  493.   {$EXTERNALSYM D3DSTENCILOP_INVERT}
  494.   D3DSTENCILOP_INCR     = 7;
  495.   {$EXTERNALSYM D3DSTENCILOP_INCR}
  496.   D3DSTENCILOP_DECR     = 8;
  497.   {$EXTERNALSYM D3DSTENCILOP_DECR}
  498.  
  499. type
  500.   _D3DFOGMODE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  501.   {$EXTERNALSYM _D3DFOGMODE}
  502.   D3DFOGMODE = _D3DFOGMODE;
  503.   {$EXTERNALSYM D3DFOGMODE}
  504.   TD3DFogMode = _D3DFOGMODE;
  505.  
  506. const
  507.   D3DFOG_NONE   = 0;
  508.   {$EXTERNALSYM D3DFOG_NONE}
  509.   D3DFOG_EXP    = 1;
  510.   {$EXTERNALSYM D3DFOG_EXP}
  511.   D3DFOG_EXP2   = 2;
  512.   {$EXTERNALSYM D3DFOG_EXP2}
  513.   D3DFOG_LINEAR = 3;
  514.   {$EXTERNALSYM D3DFOG_LINEAR}
  515.  
  516. type
  517.   _D3DZBUFFERTYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  518.   {$EXTERNALSYM _D3DZBUFFERTYPE}
  519.   D3DZBUFFERTYPE = _D3DZBUFFERTYPE;
  520.   {$EXTERNALSYM D3DZBUFFERTYPE}
  521.   TD3DZBufferType = _D3DZBUFFERTYPE;
  522.  
  523. const
  524.   D3DZB_FALSE   = 0;
  525.   {$EXTERNALSYM D3DZB_FALSE}
  526.   D3DZB_TRUE    = 1;
  527.   {$EXTERNALSYM D3DZB_TRUE}
  528.   D3DZB_USEW    = 2;
  529.   {$EXTERNALSYM D3DZB_USEW}
  530.  
  531. type
  532.   // Primitives supported by draw-primitive API
  533.   _D3DPRIMITIVETYPE = (
  534.   {$IFNDEF COMPILER6_UP}
  535.     D3DPT_INVALID_0    {= 0},
  536.     D3DPT_POINTLIST    {= 1},
  537.     D3DPT_LINELIST     {= 2},
  538.     D3DPT_LINESTRIP    {= 3},
  539.     D3DPT_TRIANGLELIST {= 4},
  540.     D3DPT_TRIANGLESTRIP{= 5},
  541.     D3DPT_TRIANGLEFAN  {= 6}
  542.   {$ELSE}
  543.     D3DPT_POINTLIST     = 1,
  544.     D3DPT_LINELIST      = 2,
  545.     D3DPT_LINESTRIP     = 3,
  546.     D3DPT_TRIANGLELIST  = 4,
  547.     D3DPT_TRIANGLESTRIP = 5,
  548.     D3DPT_TRIANGLEFAN   = 6
  549.   {$ENDIF}
  550.   );
  551.   {$EXTERNALSYM _D3DPRIMITIVETYPE}
  552.   D3DPRIMITIVETYPE = _D3DPRIMITIVETYPE;
  553.   {$EXTERNALSYM D3DPRIMITIVETYPE}
  554.   TD3DPrimitiveType = _D3DPRIMITIVETYPE;
  555.  
  556. {$IFNDEF COMPILER6_UP}
  557. const
  558.   D3DTS_VIEW          = 2;
  559.   {$EXTERNALSYM D3DTS_VIEW}
  560.   D3DTS_PROJECTION    = 3;
  561.   {$EXTERNALSYM D3DTS_PROJECTION}
  562.   D3DTS_TEXTURE0      = 16;
  563.   {$EXTERNALSYM D3DTS_TEXTURE0}
  564.   D3DTS_TEXTURE1      = 17;
  565.   {$EXTERNALSYM D3DTS_TEXTURE1}
  566.   D3DTS_TEXTURE2      = 18;
  567.   {$EXTERNALSYM D3DTS_TEXTURE2}
  568.   D3DTS_TEXTURE3      = 19;
  569.   {$EXTERNALSYM D3DTS_TEXTURE3}
  570.   D3DTS_TEXTURE4      = 20;
  571.   {$EXTERNALSYM D3DTS_TEXTURE4}
  572.   D3DTS_TEXTURE5      = 21;
  573.   {$EXTERNALSYM D3DTS_TEXTURE5}
  574.   D3DTS_TEXTURE6      = 22;
  575.   {$EXTERNALSYM D3DTS_TEXTURE6}
  576.   D3DTS_TEXTURE7      = 23;
  577.   {$EXTERNALSYM D3DTS_TEXTURE7}
  578.   D3DTS_FORCE_DWORD   = $7fffffff; (* force 32-bit size enum *)
  579.   {$EXTERNALSYM D3DTS_FORCE_DWORD}
  580.  
  581. type
  582.   _D3DTRANSFORMSTATETYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  583. {$ELSE}
  584. type
  585.   _D3DTRANSFORMSTATETYPE = (
  586.     D3DTS_VIEW          = 2,
  587.     D3DTS_PROJECTION    = 3,
  588.     D3DTS_TEXTURE0      = 16,
  589.     D3DTS_TEXTURE1      = 17,
  590.     D3DTS_TEXTURE2      = 18,
  591.     D3DTS_TEXTURE3      = 19,
  592.     D3DTS_TEXTURE4      = 20,
  593.     D3DTS_TEXTURE5      = 21,
  594.     D3DTS_TEXTURE6      = 22,
  595.     D3DTS_TEXTURE7      = 23
  596.   );
  597. {$ENDIF}
  598.   {$EXTERNALSYM _D3DTRANSFORMSTATETYPE}
  599.   D3DTRANSFORMSTATETYPE = _D3DTRANSFORMSTATETYPE;
  600.   {$EXTERNALSYM D3DTRANSFORMSTATETYPE}
  601.   TD3DTransformStateType = _D3DTRANSFORMSTATETYPE;
  602.  
  603. // #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
  604. function D3DTS_WORLDMATRIX(index: Byte): TD3DTransformStateType;
  605. {$EXTERNALSYM D3DTS_WORLDMATRIX}
  606.  
  607. const
  608.   D3DTS_WORLD   =  TD3DTransformStateType(0 + 256); // #define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)
  609.   {$EXTERNALSYM D3DTS_WORLD}
  610.   D3DTS_WORLD1  =  TD3DTransformStateType(1 + 256); // #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
  611.   {$EXTERNALSYM D3DTS_WORLD1}
  612.   D3DTS_WORLD2  =  TD3DTransformStateType(2 + 256); // #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
  613.   {$EXTERNALSYM D3DTS_WORLD2}
  614.   D3DTS_WORLD3  =  TD3DTransformStateType(3 + 256); // #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
  615.   {$EXTERNALSYM D3DTS_WORLD3}
  616.  
  617. {$IFNDEF COMPILER6_UP}
  618. type
  619.   _D3DRENDERSTATETYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  620.   {$EXTERNALSYM _D3DRENDERSTATETYPE}
  621.   D3DRENDERSTATETYPE = _D3DRENDERSTATETYPE;
  622.   {$EXTERNALSYM D3DRENDERSTATETYPE}
  623.   TD3DRenderStateType = _D3DRENDERSTATETYPE;
  624.  
  625. const
  626.   D3DRS_ZENABLE                   = TD3DRenderStateType(7);    { D3DZBUFFERTYPE (or TRUE/FALSE for legacy) }
  627.   {$EXTERNALSYM D3DRS_ZENABLE}
  628.   D3DRS_FILLMODE                  = TD3DRenderStateType(8);    { D3DFILLMODE }
  629.   {$EXTERNALSYM D3DRS_FILLMODE}
  630.   D3DRS_SHADEMODE                 = TD3DRenderStateType(9);    { D3DSHADEMODE }
  631.   {$EXTERNALSYM D3DRS_SHADEMODE}
  632.   D3DRS_ZWRITEENABLE              = TD3DRenderStateType(14);   { TRUE to enable z writes }
  633.   {$EXTERNALSYM D3DRS_ZWRITEENABLE}
  634.   D3DRS_ALPHATESTENABLE           = TD3DRenderStateType(15);   { TRUE to enable alpha tests }
  635.   {$EXTERNALSYM D3DRS_ALPHATESTENABLE}
  636.   D3DRS_LASTPIXEL                 = TD3DRenderStateType(16);   { TRUE for last-pixel on lines }
  637.   {$EXTERNALSYM D3DRS_LASTPIXEL}
  638.   D3DRS_SRCBLEND                  = TD3DRenderStateType(19);   { D3DBLEND }
  639.   {$EXTERNALSYM D3DRS_SRCBLEND}
  640.   D3DRS_DESTBLEND                 = TD3DRenderStateType(20);   { D3DBLEND }
  641.   {$EXTERNALSYM D3DRS_DESTBLEND}
  642.   D3DRS_CULLMODE                  = TD3DRenderStateType(22);   { D3DCULL }
  643.   {$EXTERNALSYM D3DRS_CULLMODE}
  644.   D3DRS_ZFUNC                     = TD3DRenderStateType(23);   { D3DCMPFUNC }
  645.   {$EXTERNALSYM D3DRS_ZFUNC}
  646.   D3DRS_ALPHAREF                  = TD3DRenderStateType(24);   { D3DFIXED }
  647.   {$EXTERNALSYM D3DRS_ALPHAREF}
  648.   D3DRS_ALPHAFUNC                 = TD3DRenderStateType(25);   { D3DCMPFUNC }
  649.   {$EXTERNALSYM D3DRS_ALPHAFUNC}
  650.   D3DRS_DITHERENABLE              = TD3DRenderStateType(26);   { TRUE to enable dithering }
  651.   {$EXTERNALSYM D3DRS_DITHERENABLE}
  652.   D3DRS_ALPHABLENDENABLE          = TD3DRenderStateType(27);   { TRUE to enable alpha blending }
  653.   {$EXTERNALSYM D3DRS_ALPHABLENDENABLE}
  654.   D3DRS_FOGENABLE                 = TD3DRenderStateType(28);   { TRUE to enable fog blending }
  655.   {$EXTERNALSYM D3DRS_FOGENABLE}
  656.   D3DRS_SPECULARENABLE            = TD3DRenderStateType(29);   { TRUE to enable specular }
  657.   {$EXTERNALSYM D3DRS_SPECULARENABLE}
  658.   D3DRS_FOGCOLOR                  = TD3DRenderStateType(34);   { D3DCOLOR }
  659.   {$EXTERNALSYM D3DRS_FOGCOLOR}
  660.   D3DRS_FOGTABLEMODE              = TD3DRenderStateType(35);   { D3DFOGMODE }
  661.   {$EXTERNALSYM D3DRS_FOGTABLEMODE}
  662.   D3DRS_FOGSTART                  = TD3DRenderStateType(36);   { Fog start (for both vertex and pixel fog) }
  663.   {$EXTERNALSYM D3DRS_FOGSTART}
  664.   D3DRS_FOGEND                    = TD3DRenderStateType(37);   { Fog end      }
  665.   {$EXTERNALSYM D3DRS_FOGEND}
  666.   D3DRS_FOGDENSITY                = TD3DRenderStateType(38);   { Fog density  }
  667.   {$EXTERNALSYM D3DRS_FOGDENSITY}
  668.   D3DRS_RANGEFOGENABLE            = TD3DRenderStateType(48);   { Enables range-based fog }
  669.   {$EXTERNALSYM D3DRS_RANGEFOGENABLE}
  670.   D3DRS_STENCILENABLE             = TD3DRenderStateType(52);   { BOOL enable/disable stenciling }
  671.   {$EXTERNALSYM D3DRS_STENCILENABLE}
  672.   D3DRS_STENCILFAIL               = TD3DRenderStateType(53);   { D3DSTENCILOP to do if stencil test fails }
  673.   {$EXTERNALSYM D3DRS_STENCILFAIL}
  674.   D3DRS_STENCILZFAIL              = TD3DRenderStateType(54);   { D3DSTENCILOP to do if stencil test passes and Z test fails }
  675.   {$EXTERNALSYM D3DRS_STENCILZFAIL}
  676.   D3DRS_STENCILPASS               = TD3DRenderStateType(55);   { D3DSTENCILOP to do if both stencil and Z tests pass }
  677.   {$EXTERNALSYM D3DRS_STENCILPASS}
  678.   D3DRS_STENCILFUNC               = TD3DRenderStateType(56);   { D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true }
  679.   {$EXTERNALSYM D3DRS_STENCILFUNC}
  680.   D3DRS_STENCILREF                = TD3DRenderStateType(57);   { Reference value used in stencil test }
  681.   {$EXTERNALSYM D3DRS_STENCILREF}
  682.   D3DRS_STENCILMASK               = TD3DRenderStateType(58);   { Mask value used in stencil test }
  683.   {$EXTERNALSYM D3DRS_STENCILMASK}
  684.   D3DRS_STENCILWRITEMASK          = TD3DRenderStateType(59);   { Write mask applied to values written to stencil buffer }
  685.   {$EXTERNALSYM D3DRS_STENCILWRITEMASK}
  686.   D3DRS_TEXTUREFACTOR             = TD3DRenderStateType(60);   { D3DCOLOR used for multi-texture blend }
  687.   {$EXTERNALSYM D3DRS_TEXTUREFACTOR}
  688.   D3DRS_WRAP0                     = TD3DRenderStateType(128);  { wrap for 1st texture coord. set }
  689.   {$EXTERNALSYM D3DRS_WRAP0}
  690.   D3DRS_WRAP1                     = TD3DRenderStateType(129);  { wrap for 2nd texture coord. set }
  691.   {$EXTERNALSYM D3DRS_WRAP1}
  692.   D3DRS_WRAP2                     = TD3DRenderStateType(130);  { wrap for 3rd texture coord. set }
  693.   {$EXTERNALSYM D3DRS_WRAP2}
  694.   D3DRS_WRAP3                     = TD3DRenderStateType(131);  { wrap for 4th texture coord. set }
  695.   {$EXTERNALSYM D3DRS_WRAP3}
  696.   D3DRS_WRAP4                     = TD3DRenderStateType(132);  { wrap for 5th texture coord. set }
  697.   {$EXTERNALSYM D3DRS_WRAP4}
  698.   D3DRS_WRAP5                     = TD3DRenderStateType(133);  { wrap for 6th texture coord. set }
  699.   {$EXTERNALSYM D3DRS_WRAP5}
  700.   D3DRS_WRAP6                     = TD3DRenderStateType(134);  { wrap for 7th texture coord. set }
  701.   {$EXTERNALSYM D3DRS_WRAP6}
  702.   D3DRS_WRAP7                     = TD3DRenderStateType(135);  { wrap for 8th texture coord. set }
  703.   {$EXTERNALSYM D3DRS_WRAP7}
  704.   D3DRS_CLIPPING                  = TD3DRenderStateType(136);
  705.   {$EXTERNALSYM D3DRS_CLIPPING}
  706.   D3DRS_LIGHTING                  = TD3DRenderStateType(137);
  707.   {$EXTERNALSYM D3DRS_LIGHTING}
  708.   D3DRS_AMBIENT                   = TD3DRenderStateType(139);
  709.   {$EXTERNALSYM D3DRS_AMBIENT}
  710.   D3DRS_FOGVERTEXMODE             = TD3DRenderStateType(140);
  711.   {$EXTERNALSYM D3DRS_FOGVERTEXMODE}
  712.   D3DRS_COLORVERTEX               = TD3DRenderStateType(141);
  713.   {$EXTERNALSYM D3DRS_COLORVERTEX}
  714.   D3DRS_LOCALVIEWER               = TD3DRenderStateType(142);
  715.   {$EXTERNALSYM D3DRS_LOCALVIEWER}
  716.   D3DRS_NORMALIZENORMALS          = TD3DRenderStateType(143);
  717.   {$EXTERNALSYM D3DRS_NORMALIZENORMALS}
  718.   D3DRS_DIFFUSEMATERIALSOURCE     = TD3DRenderStateType(145);
  719.   {$EXTERNALSYM D3DRS_DIFFUSEMATERIALSOURCE}
  720.   D3DRS_SPECULARMATERIALSOURCE    = TD3DRenderStateType(146);
  721.   {$EXTERNALSYM D3DRS_SPECULARMATERIALSOURCE}
  722.   D3DRS_AMBIENTMATERIALSOURCE     = TD3DRenderStateType(147);
  723.   {$EXTERNALSYM D3DRS_AMBIENTMATERIALSOURCE}
  724.   D3DRS_EMISSIVEMATERIALSOURCE    = TD3DRenderStateType(148);
  725.   {$EXTERNALSYM D3DRS_EMISSIVEMATERIALSOURCE}
  726.   D3DRS_VERTEXBLEND               = TD3DRenderStateType(151);
  727.   {$EXTERNALSYM D3DRS_VERTEXBLEND}
  728.   D3DRS_CLIPPLANEENABLE           = TD3DRenderStateType(152);
  729.   {$EXTERNALSYM D3DRS_CLIPPLANEENABLE}
  730.   D3DRS_POINTSIZE                 = TD3DRenderStateType(154);   { float point size }
  731.   {$EXTERNALSYM D3DRS_POINTSIZE}
  732.   D3DRS_POINTSIZE_MIN             = TD3DRenderStateType(155);   { float point size min threshold }
  733.   {$EXTERNALSYM D3DRS_POINTSIZE_MIN}
  734.   D3DRS_POINTSPRITEENABLE         = TD3DRenderStateType(156);   { BOOL point texture coord control }
  735.   {$EXTERNALSYM D3DRS_POINTSPRITEENABLE}
  736.   D3DRS_POINTSCALEENABLE          = TD3DRenderStateType(157);   { BOOL point size scale enable }
  737.   {$EXTERNALSYM D3DRS_POINTSCALEENABLE}
  738.   D3DRS_POINTSCALE_A              = TD3DRenderStateType(158);   { float point attenuation A value }
  739.   {$EXTERNALSYM D3DRS_POINTSCALE_A}
  740.   D3DRS_POINTSCALE_B              = TD3DRenderStateType(159);   { float point attenuation B value }
  741.   {$EXTERNALSYM D3DRS_POINTSCALE_B}
  742.   D3DRS_POINTSCALE_C              = TD3DRenderStateType(160);   { float point attenuation C value }
  743.   {$EXTERNALSYM D3DRS_POINTSCALE_C}
  744.   D3DRS_MULTISAMPLEANTIALIAS      = TD3DRenderStateType(161);  // BOOL - set to do FSAA with multisample buffer
  745.   {$EXTERNALSYM D3DRS_MULTISAMPLEANTIALIAS}
  746.   D3DRS_MULTISAMPLEMASK           = TD3DRenderStateType(162);  // DWORD - per-sample enable/disable
  747.   {$EXTERNALSYM D3DRS_MULTISAMPLEMASK}
  748.   D3DRS_PATCHEDGESTYLE            = TD3DRenderStateType(163);  // Sets whether patch edges will use float style tessellation
  749.   {$EXTERNALSYM D3DRS_PATCHEDGESTYLE}
  750.   D3DRS_DEBUGMONITORTOKEN         = TD3DRenderStateType(165);  // DEBUG ONLY - token to debug monitor
  751.   {$EXTERNALSYM D3DRS_DEBUGMONITORTOKEN}
  752.   D3DRS_POINTSIZE_MAX             = TD3DRenderStateType(166);   { float point size max threshold }
  753.   {$EXTERNALSYM D3DRS_POINTSIZE_MAX}
  754.   D3DRS_INDEXEDVERTEXBLENDENABLE  = TD3DRenderStateType(167);
  755.   {$EXTERNALSYM D3DRS_INDEXEDVERTEXBLENDENABLE}
  756.   D3DRS_COLORWRITEENABLE          = TD3DRenderStateType(168);  // per-channel write enable
  757.   {$EXTERNALSYM D3DRS_COLORWRITEENABLE}
  758.   D3DRS_TWEENFACTOR               = TD3DRenderStateType(170);   // float tween factor
  759.   {$EXTERNALSYM D3DRS_TWEENFACTOR}
  760.   D3DRS_BLENDOP                   = TD3DRenderStateType(171);   // D3DBLENDOP setting
  761.   {$EXTERNALSYM D3DRS_BLENDOP}
  762.   D3DRS_POSITIONDEGREE            = TD3DRenderStateType(172);   // NPatch position interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default)
  763.   {$EXTERNALSYM D3DRS_POSITIONDEGREE}
  764.   D3DRS_NORMALDEGREE              = TD3DRenderStateType(173);   // NPatch normal interpolation degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC
  765.   {$EXTERNALSYM D3DRS_NORMALDEGREE}
  766.   D3DRS_SCISSORTESTENABLE         = TD3DRenderStateType(174);
  767.   {$EXTERNALSYM D3DRS_SCISSORTESTENABLE}
  768.   D3DRS_SLOPESCALEDEPTHBIAS       = TD3DRenderStateType(175);
  769.   {$EXTERNALSYM D3DRS_SLOPESCALEDEPTHBIAS}
  770.   D3DRS_ANTIALIASEDLINEENABLE     = TD3DRenderStateType(176);
  771.   {$EXTERNALSYM D3DRS_ANTIALIASEDLINEENABLE}
  772.   D3DRS_MINTESSELLATIONLEVEL      = TD3DRenderStateType(178);
  773.   {$EXTERNALSYM D3DRS_MINTESSELLATIONLEVEL}
  774.   D3DRS_MAXTESSELLATIONLEVEL      = TD3DRenderStateType(179);
  775.   {$EXTERNALSYM D3DRS_MAXTESSELLATIONLEVEL}
  776.   D3DRS_ADAPTIVETESS_X            = TD3DRenderStateType(180);
  777.   {$EXTERNALSYM D3DRS_ADAPTIVETESS_X}
  778.   D3DRS_ADAPTIVETESS_Y            = TD3DRenderStateType(181);
  779.   {$EXTERNALSYM D3DRS_ADAPTIVETESS_Y}
  780.   D3DRS_ADAPTIVETESS_Z            = TD3DRenderStateType(182);
  781.   {$EXTERNALSYM D3DRS_ADAPTIVETESS_Z}
  782.   D3DRS_ADAPTIVETESS_W            = TD3DRenderStateType(183);
  783.   {$EXTERNALSYM D3DRS_ADAPTIVETESS_W}
  784.   D3DRS_ENABLEADAPTIVETESSELLATION = TD3DRenderStateType(184);
  785.   {$EXTERNALSYM D3DRS_ENABLEADAPTIVETESSELLATION}
  786.   D3DRS_TWOSIDEDSTENCILMODE       = TD3DRenderStateType(185);   (* BOOL enable/disable 2 sided stenciling *)
  787.   {$EXTERNALSYM D3DRS_TWOSIDEDSTENCILMODE}
  788.   D3DRS_CCW_STENCILFAIL           = TD3DRenderStateType(186);   (* D3DSTENCILOP to do if ccw stencil test fails *)
  789.   {$EXTERNALSYM D3DRS_CCW_STENCILFAIL}
  790.   D3DRS_CCW_STENCILZFAIL          = TD3DRenderStateType(187);   (* D3DSTENCILOP to do if ccw stencil test passes and Z test fails *)
  791.   {$EXTERNALSYM D3DRS_CCW_STENCILZFAIL}
  792.   D3DRS_CCW_STENCILPASS           = TD3DRenderStateType(188);   (* D3DSTENCILOP to do if both ccw stencil and Z tests pass *)
  793.   {$EXTERNALSYM D3DRS_CCW_STENCILPASS}
  794.   D3DRS_CCW_STENCILFUNC           = TD3DRenderStateType(189);   (* D3DCMPFUNC fn.  ccw Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true *)
  795.   {$EXTERNALSYM D3DRS_CCW_STENCILFUNC}
  796.   D3DRS_COLORWRITEENABLE1         = TD3DRenderStateType(190);   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  797.   {$EXTERNALSYM D3DRS_COLORWRITEENABLE1}
  798.   D3DRS_COLORWRITEENABLE2         = TD3DRenderStateType(191);   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  799.   {$EXTERNALSYM D3DRS_COLORWRITEENABLE2}
  800.   D3DRS_COLORWRITEENABLE3         = TD3DRenderStateType(192);   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  801.   {$EXTERNALSYM D3DRS_COLORWRITEENABLE3}
  802.   D3DRS_BLENDFACTOR               = TD3DRenderStateType(193);   (* D3DCOLOR used for a constant blend factor during alpha blending for devices that support D3DPBLENDCAPS_BLENDFACTOR *)
  803.   {$EXTERNALSYM D3DRS_BLENDFACTOR}
  804.   D3DRS_SRGBWRITEENABLE           = TD3DRenderStateType(194);   (* Enable rendertarget writes to be DE-linearized to SRGB (for formats that expose D3DUSAGE_QUERY_SRGBWRITE) *)
  805.   {$EXTERNALSYM D3DRS_SRGBWRITEENABLE}
  806.   D3DRS_DEPTHBIAS                 = TD3DRenderStateType(195);
  807.   {$EXTERNALSYM D3DRS_DEPTHBIAS}
  808.   D3DRS_WRAP8                     = TD3DRenderStateType(198);   (* Additional wrap states for vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD *)
  809.   {$EXTERNALSYM D3DRS_WRAP8}
  810.   D3DRS_WRAP9                     = TD3DRenderStateType(199);
  811.   {$EXTERNALSYM D3DRS_WRAP9}
  812.   D3DRS_WRAP10                    = TD3DRenderStateType(200);
  813.   {$EXTERNALSYM D3DRS_WRAP10}
  814.   D3DRS_WRAP11                    = TD3DRenderStateType(201);
  815.   {$EXTERNALSYM D3DRS_WRAP11}
  816.   D3DRS_WRAP12                    = TD3DRenderStateType(202);
  817.   {$EXTERNALSYM D3DRS_WRAP12}
  818.   D3DRS_WRAP13                    = TD3DRenderStateType(203);
  819.   {$EXTERNALSYM D3DRS_WRAP13}
  820.   D3DRS_WRAP14                    = TD3DRenderStateType(204);
  821.   {$EXTERNALSYM D3DRS_WRAP14}
  822.   D3DRS_WRAP15                    = TD3DRenderStateType(205);
  823.   {$EXTERNALSYM D3DRS_WRAP15}
  824.   D3DRS_SEPARATEALPHABLENDENABLE  = TD3DRenderStateType(206);  (* TRUE to enable a separate blending function for the alpha channel *)
  825.   {$EXTERNALSYM D3DRS_SEPARATEALPHABLENDENABLE}
  826.   D3DRS_SRCBLENDALPHA             = TD3DRenderStateType(207);  (* SRC blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  827.   {$EXTERNALSYM D3DRS_SRCBLENDALPHA}
  828.   D3DRS_DESTBLENDALPHA            = TD3DRenderStateType(208);  (* DST blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  829.   {$EXTERNALSYM D3DRS_DESTBLENDALPHA}
  830.   D3DRS_BLENDOPALPHA              = TD3DRenderStateType(209);  (* Blending operation for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  831.   {$EXTERNALSYM D3DRS_BLENDOPALPHA}
  832.  
  833.  
  834.   D3DRS_FORCE_DWORD               = TD3DRenderStateType($7fffffff); { force 32-bit size enum }
  835.   {$EXTERNALSYM D3DRS_FORCE_DWORD}
  836. {$ELSE}
  837. type
  838.   _D3DRENDERSTATETYPE = (
  839.     D3DRS_ZENABLE                   = 7,    (* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) *)
  840.     D3DRS_FILLMODE                  = 8,    (* D3DFILLMODE *)
  841.     D3DRS_SHADEMODE                 = 9,    (* D3DSHADEMODE *)
  842.     D3DRS_ZWRITEENABLE              = 14,   (* TRUE to enable z writes *)
  843.     D3DRS_ALPHATESTENABLE           = 15,   (* TRUE to enable alpha tests *)
  844.     D3DRS_LASTPIXEL                 = 16,   (* TRUE for last-pixel on lines *)
  845.     D3DRS_SRCBLEND                  = 19,   (* D3DBLEND *)
  846.     D3DRS_DESTBLEND                 = 20,   (* D3DBLEND *)
  847.     D3DRS_CULLMODE                  = 22,   (* D3DCULL *)
  848.     D3DRS_ZFUNC                     = 23,   (* D3DCMPFUNC *)
  849.     D3DRS_ALPHAREF                  = 24,   (* D3DFIXED *)
  850.     D3DRS_ALPHAFUNC                 = 25,   (* D3DCMPFUNC *)
  851.     D3DRS_DITHERENABLE              = 26,   (* TRUE to enable dithering *)
  852.     D3DRS_ALPHABLENDENABLE          = 27,   (* TRUE to enable alpha blending *)
  853.     D3DRS_FOGENABLE                 = 28,   (* TRUE to enable fog blending *)
  854.     D3DRS_SPECULARENABLE            = 29,   (* TRUE to enable specular *)
  855.     D3DRS_FOGCOLOR                  = 34,   (* D3DCOLOR *)
  856.     D3DRS_FOGTABLEMODE              = 35,   (* D3DFOGMODE *)
  857.     D3DRS_FOGSTART                  = 36,   (* Fog start (for both vertex and pixel fog) *)
  858.     D3DRS_FOGEND                    = 37,   (* Fog end      *)
  859.     D3DRS_FOGDENSITY                = 38,   (* Fog density  *)
  860.     D3DRS_RANGEFOGENABLE            = 48,   (* Enables range-based fog *)
  861.     D3DRS_STENCILENABLE             = 52,   (* BOOL enable/disable stenciling *)
  862.     D3DRS_STENCILFAIL               = 53,   (* D3DSTENCILOP to do if stencil test fails *)
  863.     D3DRS_STENCILZFAIL              = 54,   (* D3DSTENCILOP to do if stencil test passes and Z test fails *)
  864.     D3DRS_STENCILPASS               = 55,   (* D3DSTENCILOP to do if both stencil and Z tests pass *)
  865.     D3DRS_STENCILFUNC               = 56,   (* D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true *)
  866.     D3DRS_STENCILREF                = 57,   (* Reference value used in stencil test *)
  867.     D3DRS_STENCILMASK               = 58,   (* Mask value used in stencil test *)
  868.     D3DRS_STENCILWRITEMASK          = 59,   (* Write mask applied to values written to stencil buffer *)
  869.     D3DRS_TEXTUREFACTOR             = 60,   (* D3DCOLOR used for multi-texture blend *)
  870.     D3DRS_WRAP0                     = 128,  (* wrap for 1st texture coord. set *)
  871.     D3DRS_WRAP1                     = 129,  (* wrap for 2nd texture coord. set *)
  872.     D3DRS_WRAP2                     = 130,  (* wrap for 3rd texture coord. set *)
  873.     D3DRS_WRAP3                     = 131,  (* wrap for 4th texture coord. set *)
  874.     D3DRS_WRAP4                     = 132,  (* wrap for 5th texture coord. set *)
  875.     D3DRS_WRAP5                     = 133,  (* wrap for 6th texture coord. set *)
  876.     D3DRS_WRAP6                     = 134,  (* wrap for 7th texture coord. set *)
  877.     D3DRS_WRAP7                     = 135,  (* wrap for 8th texture coord. set *)
  878.     D3DRS_CLIPPING                  = 136,
  879.     D3DRS_LIGHTING                  = 137,
  880.     D3DRS_AMBIENT                   = 139,
  881.     D3DRS_FOGVERTEXMODE             = 140,
  882.     D3DRS_COLORVERTEX               = 141,
  883.     D3DRS_LOCALVIEWER               = 142,
  884.     D3DRS_NORMALIZENORMALS          = 143,
  885.     D3DRS_DIFFUSEMATERIALSOURCE     = 145,
  886.     D3DRS_SPECULARMATERIALSOURCE    = 146,
  887.     D3DRS_AMBIENTMATERIALSOURCE     = 147,
  888.     D3DRS_EMISSIVEMATERIALSOURCE    = 148,
  889.     D3DRS_VERTEXBLEND               = 151,
  890.     D3DRS_CLIPPLANEENABLE           = 152,
  891.     D3DRS_POINTSIZE                 = 154,   (* float point size *)
  892.     D3DRS_POINTSIZE_MIN             = 155,   (* float point size min threshold *)
  893.     D3DRS_POINTSPRITEENABLE         = 156,   (* BOOL point texture coord control *)
  894.     D3DRS_POINTSCALEENABLE          = 157,   (* BOOL point size scale enable *)
  895.     D3DRS_POINTSCALE_A              = 158,   (* float point attenuation A value *)
  896.     D3DRS_POINTSCALE_B              = 159,   (* float point attenuation B value *)
  897.     D3DRS_POINTSCALE_C              = 160,   (* float point attenuation C value *)
  898.     D3DRS_MULTISAMPLEANTIALIAS      = 161,  // BOOL - set to do FSAA with multisample buffer
  899.     D3DRS_MULTISAMPLEMASK           = 162,  // DWORD - per-sample enable/disable
  900.     D3DRS_PATCHEDGESTYLE            = 163,  // Sets whether patch edges will use float style tessellation
  901.     D3DRS_DEBUGMONITORTOKEN         = 165,  // DEBUG ONLY - token to debug monitor
  902.     D3DRS_POINTSIZE_MAX             = 166,   (* float point size max threshold *)
  903.     D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,
  904.     D3DRS_COLORWRITEENABLE          = 168,  // per-channel write enable
  905.     D3DRS_TWEENFACTOR               = 170,   // float tween factor
  906.     D3DRS_BLENDOP                   = 171,   // D3DBLENDOP setting
  907.     D3DRS_POSITIONDEGREE            = 172,   // NPatch position interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default)
  908.     D3DRS_NORMALDEGREE              = 173,   // NPatch normal interpolation degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC
  909.     D3DRS_SCISSORTESTENABLE         = 174,
  910.     D3DRS_SLOPESCALEDEPTHBIAS       = 175,
  911.     D3DRS_ANTIALIASEDLINEENABLE     = 176,
  912.  
  913.     D3DRS_MINTESSELLATIONLEVEL      = 178,
  914.     D3DRS_MAXTESSELLATIONLEVEL      = 179,
  915.     D3DRS_ADAPTIVETESS_X            = 180,
  916.     D3DRS_ADAPTIVETESS_Y            = 181,
  917.     D3DRS_ADAPTIVETESS_Z            = 182,
  918.     D3DRS_ADAPTIVETESS_W            = 183,
  919.     D3DRS_ENABLEADAPTIVETESSELLATION = 184,
  920.     D3DRS_TWOSIDEDSTENCILMODE       = 185,   (* BOOL enable/disable 2 sided stenciling *)
  921.     D3DRS_CCW_STENCILFAIL           = 186,   (* D3DSTENCILOP to do if ccw stencil test fails *)
  922.     D3DRS_CCW_STENCILZFAIL          = 187,   (* D3DSTENCILOP to do if ccw stencil test passes and Z test fails *)
  923.     D3DRS_CCW_STENCILPASS           = 188,   (* D3DSTENCILOP to do if both ccw stencil and Z tests pass *)
  924.     D3DRS_CCW_STENCILFUNC           = 189,   (* D3DCMPFUNC fn.  ccw Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true *)
  925.     D3DRS_COLORWRITEENABLE1         = 190,   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  926.     D3DRS_COLORWRITEENABLE2         = 191,   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  927.     D3DRS_COLORWRITEENABLE3         = 192,   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  928.     D3DRS_BLENDFACTOR               = 193,   (* D3DCOLOR used for a constant blend factor during alpha blending for devices that support D3DPBLENDCAPS_BLENDFACTOR *)
  929.     D3DRS_SRGBWRITEENABLE           = 194,   (* Enable rendertarget writes to be DE-linearized to SRGB (for formats that expose D3DUSAGE_QUERY_SRGBWRITE) *)
  930.     D3DRS_DEPTHBIAS                 = 195,
  931.     D3DRS_WRAP8                     = 198,   (* Additional wrap states for vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD *)
  932.     D3DRS_WRAP9                     = 199,
  933.     D3DRS_WRAP10                    = 200,
  934.     D3DRS_WRAP11                    = 201,
  935.     D3DRS_WRAP12                    = 202,
  936.     D3DRS_WRAP13                    = 203,
  937.     D3DRS_WRAP14                    = 204,
  938.     D3DRS_WRAP15                    = 205,
  939.     D3DRS_SEPARATEALPHABLENDENABLE  = 206,  (* TRUE to enable a separate blending function for the alpha channel *)
  940.     D3DRS_SRCBLENDALPHA             = 207,  (* SRC blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  941.     D3DRS_DESTBLENDALPHA            = 208,  (* DST blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  942.     D3DRS_BLENDOPALPHA              = 209   (* Blending operation for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  943.   );
  944.   {$EXTERNALSYM _D3DRENDERSTATETYPE}
  945.   D3DRENDERSTATETYPE = _D3DRENDERSTATETYPE;
  946.   {$EXTERNALSYM D3DRENDERSTATETYPE}
  947.   TD3DRenderStateType = _D3DRENDERSTATETYPE;
  948. {$ENDIF}
  949.  
  950. const
  951.   // Maximum number of simultaneous render targets D3D supports
  952.   D3D_MAX_SIMULTANEOUS_RENDERTARGETS = 4;
  953.   {$EXTERNALSYM D3D_MAX_SIMULTANEOUS_RENDERTARGETS}
  954.  
  955. type
  956.   // Values for material source
  957.   _D3DMATERIALCOLORSOURCE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  958.   {$EXTERNALSYM _D3DMATERIALCOLORSOURCE}
  959.   D3DMATERIALCOLORSOURCE = _D3DMATERIALCOLORSOURCE;
  960.   {$EXTERNALSYM D3DMATERIALCOLORSOURCE}
  961.   TD3DMaterialSource = _D3DMATERIALCOLORSOURCE;
  962.  
  963. const
  964.   D3DMCS_MATERIAL       = TD3DMaterialSource(0);         // Color from material is used
  965.   {$EXTERNALSYM D3DMCS_MATERIAL}
  966.   D3DMCS_COLOR1         = TD3DMaterialSource(1);         // Diffuse vertex color is used
  967.   {$EXTERNALSYM D3DMCS_COLOR1}
  968.   D3DMCS_COLOR2         = TD3DMaterialSource(2);         // Specular vertex color is used
  969.   {$EXTERNALSYM D3DMCS_COLOR2}
  970.   D3DMCS_FORCE_DWORD    = TD3DMaterialSource($7fffffff); // force 32-bit size enum
  971.   {$EXTERNALSYM D3DMCS_FORCE_DWORD}
  972.  
  973.   // Bias to apply to the texture coordinate set to apply a wrap to.
  974.   D3DRENDERSTATE_WRAPBIAS                = DWORD(128);
  975.   {$EXTERNALSYM D3DRENDERSTATE_WRAPBIAS}
  976.  
  977.   { Flags to construct the WRAP render states }
  978.   D3DWRAP_U             = $00000001;
  979.   {$EXTERNALSYM D3DWRAP_U}
  980.   D3DWRAP_V             = $00000002;
  981.   {$EXTERNALSYM D3DWRAP_V}
  982.   D3DWRAP_W             = $00000004;
  983.   {$EXTERNALSYM D3DWRAP_W}
  984.  
  985.   { Flags to construct the WRAP render states for 1D thru 4D texture coordinates }
  986.   D3DWRAPCOORD_0        = $00000001;    // same as D3DWRAP_U
  987.   {$EXTERNALSYM D3DWRAPCOORD_0}
  988.   D3DWRAPCOORD_1        = $00000002;    // same as D3DWRAP_V
  989.   {$EXTERNALSYM D3DWRAPCOORD_1}
  990.   D3DWRAPCOORD_2        = $00000004;    // same as D3DWRAP_W
  991.   {$EXTERNALSYM D3DWRAPCOORD_2}
  992.   D3DWRAPCOORD_3        = $00000008;
  993.   {$EXTERNALSYM D3DWRAPCOORD_3}
  994.  
  995.   { Flags to construct D3DRS_COLORWRITEENABLE }
  996.   D3DCOLORWRITEENABLE_RED       = (1 shl 0);
  997.   {$EXTERNALSYM D3DCOLORWRITEENABLE_RED}
  998.   D3DCOLORWRITEENABLE_GREEN     = (1 shl 1);
  999.   {$EXTERNALSYM D3DCOLORWRITEENABLE_GREEN}
  1000.   D3DCOLORWRITEENABLE_BLUE      = (1 shl 2);
  1001.   {$EXTERNALSYM D3DCOLORWRITEENABLE_BLUE}
  1002.   D3DCOLORWRITEENABLE_ALPHA     = (1 shl 3);
  1003.   {$EXTERNALSYM D3DCOLORWRITEENABLE_ALPHA}
  1004.  
  1005. (*
  1006.  * State enumerants for per-stage processing of fixed function pixel processing
  1007.  * Two of these affect fixed function vertex processing as well: TEXTURETRANSFORMFLAGS and TEXCOORDINDEX.
  1008.  *)
  1009. {$IFNDEF COMPILER6_UP}
  1010. type
  1011.   _D3DTEXTURESTAGESTATETYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1012.   {$EXTERNALSYM _D3DTEXTURESTAGESTATETYPE}
  1013.   D3DTEXTURESTAGESTATETYPE = _D3DTEXTURESTAGESTATETYPE;
  1014.   {$EXTERNALSYM D3DTEXTURESTAGESTATETYPE}
  1015.   TD3DTextureStageStateType = _D3DTEXTURESTAGESTATETYPE;
  1016.  
  1017. const
  1018.   D3DTSS_COLOROP        = TD3DTextureStageStateType( 1); { D3DTEXTUREOP - per-stage blending controls for color channels }
  1019.   {$EXTERNALSYM D3DTSS_COLOROP}
  1020.   D3DTSS_COLORARG1      = TD3DTextureStageStateType( 2); { D3DTA_* (texture arg) }
  1021.   {$EXTERNALSYM D3DTSS_COLORARG1}
  1022.   D3DTSS_COLORARG2      = TD3DTextureStageStateType( 3); { D3DTA_* (texture arg) }
  1023.   {$EXTERNALSYM D3DTSS_COLORARG2}
  1024.   D3DTSS_ALPHAOP        = TD3DTextureStageStateType( 4); { D3DTEXTUREOP - per-stage blending controls for alpha channel }
  1025.   {$EXTERNALSYM D3DTSS_ALPHAOP}
  1026.   D3DTSS_ALPHAARG1      = TD3DTextureStageStateType( 5); { D3DTA_* (texture arg) }
  1027.   {$EXTERNALSYM D3DTSS_ALPHAARG1}
  1028.   D3DTSS_ALPHAARG2      = TD3DTextureStageStateType( 6); { D3DTA_* (texture arg) }
  1029.   {$EXTERNALSYM D3DTSS_ALPHAARG2}
  1030.   D3DTSS_BUMPENVMAT00   = TD3DTextureStageStateType( 7); { float (bump mapping matrix) }
  1031.   {$EXTERNALSYM D3DTSS_BUMPENVMAT00}
  1032.   D3DTSS_BUMPENVMAT01   = TD3DTextureStageStateType( 8); { float (bump mapping matrix) }
  1033.   {$EXTERNALSYM D3DTSS_BUMPENVMAT01}
  1034.   D3DTSS_BUMPENVMAT10   = TD3DTextureStageStateType( 9); { float (bump mapping matrix) }
  1035.   {$EXTERNALSYM D3DTSS_BUMPENVMAT10}
  1036.   D3DTSS_BUMPENVMAT11   = TD3DTextureStageStateType(10); { float (bump mapping matrix) }
  1037.   {$EXTERNALSYM D3DTSS_BUMPENVMAT11}
  1038.   D3DTSS_TEXCOORDINDEX  = TD3DTextureStageStateType(11); { identifies which set of texture coordinates index this texture }
  1039.   {$EXTERNALSYM D3DTSS_TEXCOORDINDEX}
  1040.   D3DTSS_BUMPENVLSCALE  = TD3DTextureStageStateType(22); { float scale for bump map luminance }
  1041.   {$EXTERNALSYM D3DTSS_BUMPENVLSCALE}
  1042.   D3DTSS_BUMPENVLOFFSET = TD3DTextureStageStateType(23); { float offset for bump map luminance }
  1043.   {$EXTERNALSYM D3DTSS_BUMPENVLOFFSET}
  1044.   D3DTSS_TEXTURETRANSFORMFLAGS = TD3DTextureStageStateType(24); { D3DTEXTURETRANSFORMFLAGS controls texture transform }
  1045.   {$EXTERNALSYM D3DTSS_TEXTURETRANSFORMFLAGS}
  1046.   D3DTSS_COLORARG0      = TD3DTextureStageStateType(26); { D3DTA_* third arg for triadic ops }
  1047.   {$EXTERNALSYM D3DTSS_COLORARG0}
  1048.   D3DTSS_ALPHAARG0      = TD3DTextureStageStateType(27); { D3DTA_* third arg for triadic ops }
  1049.   {$EXTERNALSYM D3DTSS_ALPHAARG0}
  1050.   D3DTSS_RESULTARG      = TD3DTextureStageStateType(28); { D3DTA_* arg for result (CURRENT or TEMP) }
  1051.   {$EXTERNALSYM D3DTSS_RESULTARG}
  1052.   D3DTSS_CONSTANT       = TD3DTextureStageStateType(32); { Per-stage constant D3DTA_CONSTANT }
  1053.   {$EXTERNALSYM D3DTSS_CONSTANT}
  1054.  
  1055.   D3DTSS_FORCE_DWORD    = TD3DTextureStageStateType($7fffffff); { force 32-bit size enum }
  1056.   {$EXTERNALSYM D3DTSS_FORCE_DWORD}
  1057. {$ELSE}
  1058. type
  1059.   _D3DTEXTURESTAGESTATETYPE = (
  1060.     D3DTSS_COLOROP        =  1, { D3DTEXTUREOP - per-stage blending controls for color channels }
  1061.     D3DTSS_COLORARG1      =  2, { D3DTA_* (texture arg) }
  1062.     D3DTSS_COLORARG2      =  3, { D3DTA_* (texture arg) }
  1063.     D3DTSS_ALPHAOP        =  4, { D3DTEXTUREOP - per-stage blending controls for alpha channel }
  1064.     D3DTSS_ALPHAARG1      =  5, { D3DTA_* (texture arg) }
  1065.     D3DTSS_ALPHAARG2      =  6, { D3DTA_* (texture arg) }
  1066.     D3DTSS_BUMPENVMAT00   =  7, { float (bump mapping matrix) }
  1067.     D3DTSS_BUMPENVMAT01   =  8, { float (bump mapping matrix) }
  1068.     D3DTSS_BUMPENVMAT10   =  9, { float (bump mapping matrix) }
  1069.     D3DTSS_BUMPENVMAT11   = 10, { float (bump mapping matrix) }
  1070.     D3DTSS_TEXCOORDINDEX  = 11, { identifies which set of texture coordinates index this texture }
  1071.     D3DTSS_BUMPENVLSCALE  = 22, { float scale for bump map luminance }
  1072.     D3DTSS_BUMPENVLOFFSET = 23, { float offset for bump map luminance }
  1073.     D3DTSS_TEXTURETRANSFORMFLAGS = 24, { D3DTEXTURETRANSFORMFLAGS controls texture transform }
  1074.     D3DTSS_COLORARG0      = 26, { D3DTA_* third arg for triadic ops }
  1075.     D3DTSS_ALPHAARG0      = 27, { D3DTA_* third arg for triadic ops }
  1076.     D3DTSS_RESULTARG      = 28, { D3DTA_* arg for result (CURRENT or TEMP) }
  1077.     D3DTSS_CONSTANT       = 32  { Per-stage constant D3DTA_CONSTANT }
  1078.   );
  1079.   {$EXTERNALSYM _D3DTEXTURESTAGESTATETYPE}
  1080.   D3DTEXTURESTAGESTATETYPE = _D3DTEXTURESTAGESTATETYPE;
  1081.   {$EXTERNALSYM D3DTEXTURESTAGESTATETYPE}
  1082.   TD3DTextureStageStateType = _D3DTEXTURESTAGESTATETYPE;
  1083. {$ENDIF}
  1084.  
  1085. type
  1086. (*
  1087.  * State enumerants for per-sampler texture processing.
  1088.  *)
  1089.   _D3DSAMPLERSTATETYPE = (
  1090.   {$IFNDEF COMPILER6_UP}
  1091.     D3DSAMP_invalid_0     {= 0},
  1092.     D3DSAMP_ADDRESSU      {= 1},  { D3DTEXTUREADDRESS for U coordinate }
  1093.     D3DSAMP_ADDRESSV      {= 2},  { D3DTEXTUREADDRESS for V coordinate }
  1094.     D3DSAMP_ADDRESSW      {= 3},  { D3DTEXTUREADDRESS for W coordinate }
  1095.     D3DSAMP_BORDERCOLOR   {= 4},  { D3DCOLOR }
  1096.     D3DSAMP_MAGFILTER     {= 5},  { D3DTEXTUREFILTER filter to use for magnification }
  1097.     D3DSAMP_MINFILTER     {= 6},  { D3DTEXTUREFILTER filter to use for minification }
  1098.     D3DSAMP_MIPFILTER     {= 7},  { D3DTEXTUREFILTER filter to use between mipmaps during minification }
  1099.     D3DSAMP_MIPMAPLODBIAS {= 8},  { float Mipmap LOD bias }
  1100.     D3DSAMP_MAXMIPLEVEL   {= 9},  { DWORD 0..(n-1) LOD index of largest map to use (0 == largest) }
  1101.     D3DSAMP_MAXANISOTROPY {= 10}, { DWORD maximum anisotropy }
  1102.     D3DSAMP_SRGBTEXTURE   {= 11}, { Default = 0 (which means Gamma 1.0,
  1103.                                    no correction required.) else correct for
  1104.                                    Gamma = 2.2 }
  1105.     D3DSAMP_ELEMENTINDEX  {= 12}, { When multi-element texture is assigned to sampler, this
  1106.                                     indicates which element index to use.  Default = 0.  }
  1107.     D3DSAMP_DMAPOFFSET    {= 13}  { Offset in vertices in the pre-sampled displacement map.
  1108.                                     Only valid for D3DDMAPSAMPLER sampler  }
  1109.   {$ELSE}
  1110.     D3DSAMP_ADDRESSU       = 1,  { D3DTEXTUREADDRESS for U coordinate }
  1111.     D3DSAMP_ADDRESSV       = 2,  { D3DTEXTUREADDRESS for V coordinate }
  1112.     D3DSAMP_ADDRESSW       = 3,  { D3DTEXTUREADDRESS for W coordinate }
  1113.     D3DSAMP_BORDERCOLOR    = 4,  { D3DCOLOR }
  1114.     D3DSAMP_MAGFILTER      = 5,  { D3DTEXTUREFILTER filter to use for magnification }
  1115.     D3DSAMP_MINFILTER      = 6,  { D3DTEXTUREFILTER filter to use for minification }
  1116.     D3DSAMP_MIPFILTER      = 7,  { D3DTEXTUREFILTER filter to use between mipmaps during minification }
  1117.     D3DSAMP_MIPMAPLODBIAS  = 8,  { float Mipmap LOD bias }
  1118.     D3DSAMP_MAXMIPLEVEL    = 9,  { DWORD 0..(n-1) LOD index of largest map to use (0 == largest) }
  1119.     D3DSAMP_MAXANISOTROPY  = 10, { DWORD maximum anisotropy }
  1120.     D3DSAMP_SRGBTEXTURE    = 11, { Default = 0 (which means Gamma 1.0,
  1121.                                   no correction required.) else correct for
  1122.                                   Gamma = 2.2 }
  1123.     D3DSAMP_ELEMENTINDEX   = 12, { When multi-element texture is assigned to sampler, this
  1124.                                    indicates which element index to use.  Default = 0.  }
  1125.     D3DSAMP_DMAPOFFSET     = 13  { Offset in vertices in the pre-sampled displacement map.
  1126.                                    Only valid for D3DDMAPSAMPLER sampler  }
  1127.   {$ENDIF}
  1128.   );
  1129.   {$EXTERNALSYM _D3DSAMPLERSTATETYPE}
  1130.   D3DSAMPLERSTATETYPE = _D3DSAMPLERSTATETYPE;
  1131.   {$EXTERNALSYM D3DSAMPLERSTATETYPE}
  1132.   TD3DSamplerStateType = _D3DSAMPLERSTATETYPE;
  1133.  
  1134. const
  1135.   { Special sampler which is used in the tesselator }
  1136.   D3DDMAPSAMPLER = 256;
  1137.   {$EXTERNALSYM D3DDMAPSAMPLER}
  1138.  
  1139.   // Samplers used in vertex shaders
  1140.   D3DVERTEXTEXTURESAMPLER0 = (D3DDMAPSAMPLER+1);
  1141.   {$EXTERNALSYM D3DVERTEXTEXTURESAMPLER0}
  1142.   D3DVERTEXTEXTURESAMPLER1 = (D3DDMAPSAMPLER+2);
  1143.   {$EXTERNALSYM D3DVERTEXTEXTURESAMPLER1}
  1144.   D3DVERTEXTEXTURESAMPLER2 = (D3DDMAPSAMPLER+3);
  1145.   {$EXTERNALSYM D3DVERTEXTEXTURESAMPLER2}
  1146.   D3DVERTEXTEXTURESAMPLER3 = (D3DDMAPSAMPLER+4);
  1147.   {$EXTERNALSYM D3DVERTEXTEXTURESAMPLER3}
  1148.  
  1149.   // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position
  1150.   // and normal in the camera space) should be taken as texture coordinates
  1151.   // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from
  1152.   //
  1153.   D3DTSS_TCI_PASSTHRU                           = $00000000;
  1154.   {$EXTERNALSYM D3DTSS_TCI_PASSTHRU}
  1155.   D3DTSS_TCI_CAMERASPACENORMAL                  = $00010000;
  1156.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACENORMAL}
  1157.   D3DTSS_TCI_CAMERASPACEPOSITION                = $00020000;
  1158.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACEPOSITION}
  1159.   D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR        = $00030000;
  1160.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR}
  1161.   D3DTSS_TCI_SPHEREMAP                          = $00040000;
  1162.   {$EXTERNALSYM D3DTSS_TCI_SPHEREMAP}
  1163.  
  1164. (*
  1165.  * Enumerations for COLOROP and ALPHAOP texture blending operations set in
  1166.  * texture processing stage controls in D3DTSS.
  1167.  *)
  1168. type
  1169.   _D3DTEXTUREOP = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1170.   {$EXTERNALSYM _D3DTEXTUREOP}
  1171.   D3DTEXTUREOP = _D3DTEXTUREOP;
  1172.   {$EXTERNALSYM D3DTEXTUREOP}
  1173.   TD3DTextureOp = _D3DTEXTUREOP;
  1174.  
  1175. const
  1176.   // Control
  1177.   D3DTOP_DISABLE              = 1;      // disables stage
  1178.   {$EXTERNALSYM D3DTOP_DISABLE}
  1179.   D3DTOP_SELECTARG1           = 2;      // the default
  1180.   {$EXTERNALSYM D3DTOP_SELECTARG1}
  1181.   D3DTOP_SELECTARG2           = 3;
  1182.   {$EXTERNALSYM D3DTOP_SELECTARG2}
  1183.  
  1184.   // Modulate
  1185.   D3DTOP_MODULATE             = 4;      // multiply args together
  1186.   {$EXTERNALSYM D3DTOP_MODULATE}
  1187.   D3DTOP_MODULATE2X           = 5;      // multiply and  1 bit
  1188.   {$EXTERNALSYM D3DTOP_MODULATE2X}
  1189.   D3DTOP_MODULATE4X           = 6;      // multiply and  2 bits
  1190.   {$EXTERNALSYM D3DTOP_MODULATE4X}
  1191.  
  1192.   // Add
  1193.   D3DTOP_ADD                  =  7;   // add arguments together
  1194.   {$EXTERNALSYM D3DTOP_ADD}
  1195.   D3DTOP_ADDSIGNED            =  8;   // add with -0.5 bias
  1196.   {$EXTERNALSYM D3DTOP_ADDSIGNED}
  1197.   D3DTOP_ADDSIGNED2X          =  9;   // as above but left  1 bit
  1198.   {$EXTERNALSYM D3DTOP_ADDSIGNED2X}
  1199.   D3DTOP_SUBTRACT             = 10;   // Arg1 - Arg2, with no saturation
  1200.   {$EXTERNALSYM D3DTOP_SUBTRACT}
  1201.   D3DTOP_ADDSMOOTH            = 11;   // add 2 args, subtract product
  1202.                                       // Arg1 + Arg2 - Arg1*Arg2
  1203.                                       // = Arg1 + (1-Arg1)*Arg2
  1204.   {$EXTERNALSYM D3DTOP_ADDSMOOTH}
  1205.  
  1206.   // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
  1207.   D3DTOP_BLENDDIFFUSEALPHA    = 12; // iterated alpha
  1208.   {$EXTERNALSYM D3DTOP_BLENDDIFFUSEALPHA}
  1209.   D3DTOP_BLENDTEXTUREALPHA    = 13; // texture alpha
  1210.   {$EXTERNALSYM D3DTOP_BLENDTEXTUREALPHA}
  1211.   D3DTOP_BLENDFACTORALPHA     = 14; // alpha from D3DRS_TEXTUREFACTOR
  1212.   {$EXTERNALSYM D3DTOP_BLENDFACTORALPHA}
  1213.  
  1214.   // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)
  1215.   D3DTOP_BLENDTEXTUREALPHAPM  = 15; // texture alpha
  1216.   {$EXTERNALSYM D3DTOP_BLENDTEXTUREALPHAPM}
  1217.   D3DTOP_BLENDCURRENTALPHA    = 16; // by alpha of current color
  1218.   {$EXTERNALSYM D3DTOP_BLENDCURRENTALPHA}
  1219.  
  1220.   // Specular mapping
  1221.   D3DTOP_PREMODULATE            = 17;     // modulate with next texture before use
  1222.   {$EXTERNALSYM D3DTOP_PREMODULATE}
  1223.   D3DTOP_MODULATEALPHA_ADDCOLOR = 18;     // Arg1.RGB + Arg1.A*Arg2.RGB
  1224.                                           // COLOROP only
  1225.   {$EXTERNALSYM D3DTOP_MODULATEALPHA_ADDCOLOR}
  1226.   D3DTOP_MODULATECOLOR_ADDALPHA = 19;     // Arg1.RGB*Arg2.RGB + Arg1.A
  1227.                                           // COLOROP only
  1228.   {$EXTERNALSYM D3DTOP_MODULATECOLOR_ADDALPHA}
  1229.   D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20;  // (1-Arg1.A)*Arg2.RGB + Arg1.RGB
  1230.                                           // COLOROP only
  1231.   {$EXTERNALSYM D3DTOP_MODULATEINVALPHA_ADDCOLOR}
  1232.   D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21;  // (1-Arg1.RGB)*Arg2.RGB + Arg1.A
  1233.                                           // COLOROP only
  1234.   {$EXTERNALSYM D3DTOP_MODULATEINVCOLOR_ADDALPHA}
  1235.  
  1236.   // Bump mapping
  1237.   D3DTOP_BUMPENVMAP           = 22; // per pixel env map perturbation
  1238.   {$EXTERNALSYM D3DTOP_BUMPENVMAP}
  1239.   D3DTOP_BUMPENVMAPLUMINANCE  = 23; // with luminance channel
  1240.   {$EXTERNALSYM D3DTOP_BUMPENVMAPLUMINANCE}
  1241.  
  1242.   // This can do either diffuse or specular bump mapping with correct input.
  1243.   // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)
  1244.   // where each component has been scaled and offset to make it signed.
  1245.   // The result is replicated into all four (including alpha) channels.
  1246.   // This is a valid COLOROP only.
  1247.   D3DTOP_DOTPRODUCT3          = 24;
  1248.   {$EXTERNALSYM D3DTOP_DOTPRODUCT3}
  1249.  
  1250.   // Triadic ops
  1251.   D3DTOP_MULTIPLYADD          = 25; // Arg0 + Arg1*Arg2
  1252.   {$EXTERNALSYM D3DTOP_MULTIPLYADD}
  1253.   D3DTOP_LERP                 = 26; // (Arg0)*Arg1 + (1-Arg0)*Arg2
  1254.   {$EXTERNALSYM D3DTOP_LERP}
  1255.  
  1256. (*
  1257.  * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending
  1258.  * operations set in texture processing stage controls in D3DRENDERSTATE.
  1259.  *)
  1260. const
  1261.   D3DTA_SELECTMASK        = $0000000f;  // mask for arg selector
  1262.   {$EXTERNALSYM D3DTA_SELECTMASK}
  1263.   D3DTA_DIFFUSE           = $00000000;  // select diffuse color (read only)
  1264.   {$EXTERNALSYM D3DTA_DIFFUSE}
  1265.   D3DTA_CURRENT           = $00000001;  // select stage destination register (read/write)
  1266.   {$EXTERNALSYM D3DTA_CURRENT}
  1267.   D3DTA_TEXTURE           = $00000002;  // select texture color (read only)
  1268.   {$EXTERNALSYM D3DTA_TEXTURE}
  1269.   D3DTA_TFACTOR           = $00000003;  // select D3DRS_TEXTUREFACTOR (read only)
  1270.   {$EXTERNALSYM D3DTA_TFACTOR}
  1271.   D3DTA_SPECULAR          = $00000004;  // select specular color (read only)
  1272.   {$EXTERNALSYM D3DTA_SPECULAR}
  1273.   D3DTA_TEMP              = $00000005;  // select temporary register color (read/write)
  1274.   {$EXTERNALSYM D3DTA_TEMP}
  1275.   D3DTA_CONSTANT          = $00000006;  // select texture stage constant
  1276.   {$EXTERNALSYM D3DTA_CONSTANT}
  1277.   D3DTA_COMPLEMENT        = $00000010;  // take 1.0 - x (read modifier)
  1278.   {$EXTERNALSYM D3DTA_COMPLEMENT}
  1279.   D3DTA_ALPHAREPLICATE    = $00000020;  // replicate alpha to color components (read modifier)
  1280.   {$EXTERNALSYM D3DTA_ALPHAREPLICATE}
  1281.  
  1282. type
  1283.   //
  1284.   // Values for D3DSAMP_***FILTER texture stage states
  1285.   //
  1286.   _D3DTEXTUREFILTERTYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1287.   {$EXTERNALSYM _D3DTEXTUREFILTERTYPE}
  1288.   D3DTEXTUREFILTERTYPE = _D3DTEXTUREFILTERTYPE;
  1289.   {$EXTERNALSYM D3DTEXTUREFILTERTYPE}
  1290.   TD3DTextureFilterType = _D3DTEXTUREFILTERTYPE;
  1291.  
  1292. const
  1293.   D3DTEXF_NONE            = 0;    // filtering disabled (valid for mip filter only)
  1294.   {$EXTERNALSYM D3DTEXF_NONE}
  1295.   D3DTEXF_POINT           = 1;    // nearest
  1296.   {$EXTERNALSYM D3DTEXF_POINT}
  1297.   D3DTEXF_LINEAR          = 2;    // linear interpolation
  1298.   {$EXTERNALSYM D3DTEXF_LINEAR}
  1299.   D3DTEXF_ANISOTROPIC     = 3;    // anisotropic
  1300.   {$EXTERNALSYM D3DTEXF_ANISOTROPIC}
  1301.   D3DTEXF_PYRAMIDALQUAD   = 6;    // 4-sample tent
  1302.   {$EXTERNALSYM D3DTEXF_PYRAMIDALQUAD}
  1303.   D3DTEXF_GAUSSIANQUAD    = 7;    // 4-sample gaussian
  1304.   {$EXTERNALSYM D3DTEXF_GAUSSIANQUAD}
  1305.  
  1306. const
  1307.   { Bits for Flags in ProcessVertices call }
  1308.   D3DPV_DONOTCOPYDATA        = (1 shl 0);
  1309.   {$EXTERNALSYM D3DPV_DONOTCOPYDATA}
  1310.  
  1311. //-------------------------------------------------------------------
  1312.  
  1313.   // Flexible vertex format bits
  1314.   //
  1315.   D3DFVF_RESERVED0        = $001;
  1316.   {$EXTERNALSYM D3DFVF_RESERVED0}
  1317.   D3DFVF_POSITION_MASK    = $400E;
  1318.   {$EXTERNALSYM D3DFVF_POSITION_MASK}
  1319.   D3DFVF_XYZ              = $002;
  1320.   {$EXTERNALSYM D3DFVF_XYZ}
  1321.   D3DFVF_XYZRHW           = $004;
  1322.   {$EXTERNALSYM D3DFVF_XYZRHW}
  1323.   D3DFVF_XYZB1            = $006;
  1324.   {$EXTERNALSYM D3DFVF_XYZB1}
  1325.   D3DFVF_XYZB2            = $008;
  1326.   {$EXTERNALSYM D3DFVF_XYZB2}
  1327.   D3DFVF_XYZB3            = $00a;
  1328.   {$EXTERNALSYM D3DFVF_XYZB3}
  1329.   D3DFVF_XYZB4            = $00c;
  1330.   {$EXTERNALSYM D3DFVF_XYZB4}
  1331.   D3DFVF_XYZB5            = $00e;
  1332.   {$EXTERNALSYM D3DFVF_XYZB5}
  1333.   D3DFVF_XYZW             = $4002;
  1334.   {$EXTERNALSYM D3DFVF_XYZW}
  1335.  
  1336.   D3DFVF_NORMAL           = $010;
  1337.   {$EXTERNALSYM D3DFVF_NORMAL}
  1338.   D3DFVF_PSIZE            = $020;
  1339.   {$EXTERNALSYM D3DFVF_PSIZE}
  1340.   D3DFVF_DIFFUSE          = $040;
  1341.   {$EXTERNALSYM D3DFVF_DIFFUSE}
  1342.   D3DFVF_SPECULAR         = $080;
  1343.   {$EXTERNALSYM D3DFVF_SPECULAR}
  1344.  
  1345.   D3DFVF_TEXCOUNT_MASK    = $f00;
  1346.   {$EXTERNALSYM D3DFVF_TEXCOUNT_MASK}
  1347.   D3DFVF_TEXCOUNT_SHIFT   = 8;
  1348.   {$EXTERNALSYM D3DFVF_TEXCOUNT_SHIFT}
  1349.   D3DFVF_TEX0             = $000;
  1350.   {$EXTERNALSYM D3DFVF_TEX0}
  1351.   D3DFVF_TEX1             = $100;
  1352.   {$EXTERNALSYM D3DFVF_TEX1}
  1353.   D3DFVF_TEX2             = $200;
  1354.   {$EXTERNALSYM D3DFVF_TEX2}
  1355.   D3DFVF_TEX3             = $300;
  1356.   {$EXTERNALSYM D3DFVF_TEX3}
  1357.   D3DFVF_TEX4             = $400;
  1358.   {$EXTERNALSYM D3DFVF_TEX4}
  1359.   D3DFVF_TEX5             = $500;
  1360.   {$EXTERNALSYM D3DFVF_TEX5}
  1361.   D3DFVF_TEX6             = $600;
  1362.   {$EXTERNALSYM D3DFVF_TEX6}
  1363.   D3DFVF_TEX7             = $700;
  1364.   {$EXTERNALSYM D3DFVF_TEX7}
  1365.   D3DFVF_TEX8             = $800;
  1366.   {$EXTERNALSYM D3DFVF_TEX8}
  1367.  
  1368.   D3DFVF_LASTBETA_UBYTE4   = $1000;
  1369.   {$EXTERNALSYM D3DFVF_LASTBETA_UBYTE4}
  1370.   D3DFVF_LASTBETA_D3DCOLOR = $8000;
  1371.   {$EXTERNALSYM D3DFVF_LASTBETA_D3DCOLOR}
  1372.  
  1373.   D3DFVF_RESERVED2         = $6000;  // 2 reserved bits
  1374.   {$EXTERNALSYM D3DFVF_RESERVED2}
  1375.  
  1376. //---------------------------------------------------------------------
  1377. // Vertex Shaders
  1378. //
  1379.  
  1380. // Vertex shader declaration
  1381.  
  1382. // Forces TD3DDeclUsage, TD3DDeclMethod, TD3DDeclType be 1 byte enums
  1383. {$MINENUMSIZE 1}
  1384.  
  1385. type
  1386.   // Vertex element semantics
  1387.   //
  1388.   _D3DDECLUSAGE = (
  1389.     D3DDECLUSAGE_POSITION,      // = 0
  1390.     D3DDECLUSAGE_BLENDWEIGHT,   // 1
  1391.     D3DDECLUSAGE_BLENDINDICES,  // 2
  1392.     D3DDECLUSAGE_NORMAL,        // 3
  1393.     D3DDECLUSAGE_PSIZE,         // 4
  1394.     D3DDECLUSAGE_TEXCOORD,      // 5
  1395.     D3DDECLUSAGE_TANGENT,       // 6
  1396.     D3DDECLUSAGE_BINORMAL,      // 7
  1397.     D3DDECLUSAGE_TESSFACTOR,    // 8
  1398.     D3DDECLUSAGE_POSITIONT,     // 9
  1399.     D3DDECLUSAGE_COLOR,         // 10
  1400.     D3DDECLUSAGE_FOG,           // 11
  1401.     D3DDECLUSAGE_DEPTH,         // 12
  1402.     D3DDECLUSAGE_SAMPLE         // 13
  1403.   );
  1404.   {$EXTERNALSYM _D3DDECLUSAGE}
  1405.   D3DDECLUSAGE = _D3DDECLUSAGE;
  1406.   {$EXTERNALSYM D3DDECLUSAGE}
  1407.   TD3DDeclUsage = _D3DDECLUSAGE;
  1408.  
  1409. const
  1410.   MAXD3DDECLUSAGE         = DWORD(D3DDECLUSAGE_SAMPLE);
  1411.   {$EXTERNALSYM MAXD3DDECLUSAGE}
  1412.   MAXD3DDECLUSAGEINDEX    = 15;
  1413.   {$EXTERNALSYM MAXD3DDECLUSAGEINDEX}
  1414.   MAXD3DDECLLENGTH        = 64; // does not include "end" marker vertex element
  1415.   {$EXTERNALSYM MAXD3DDECLLENGTH}
  1416.  
  1417. type
  1418.   _D3DDECLMETHOD = (
  1419.     D3DDECLMETHOD_DEFAULT,    // = 0,
  1420.     D3DDECLMETHOD_PARTIALU,
  1421.     D3DDECLMETHOD_PARTIALV,
  1422.     D3DDECLMETHOD_CROSSUV,    // Normal
  1423.     D3DDECLMETHOD_UV,
  1424.     D3DDECLMETHOD_LOOKUP,               // Lookup a displacement map
  1425.     D3DDECLMETHOD_LOOKUPPRESAMPLED      // Lookup a pre-sampled displacement map
  1426.   );
  1427.   {$EXTERNALSYM _D3DDECLMETHOD}
  1428.   D3DDECLMETHOD = _D3DDECLMETHOD;
  1429.   {$EXTERNALSYM D3DDECLMETHOD}
  1430.   TD3DDeclMethod = _D3DDECLMETHOD;
  1431.  
  1432. const
  1433.   MAXD3DDECLMETHOD = DWORD(D3DDECLMETHOD_LOOKUPPRESAMPLED);
  1434.   {$EXTERNALSYM MAXD3DDECLMETHOD}
  1435.  
  1436. type
  1437.   // Declarations for _Type fields
  1438.   //
  1439.   _D3DDECLTYPE = (
  1440.   {$IFNDEF COMPILER6_UP}
  1441.     D3DDECLTYPE_FLOAT1   {=  0}, // 1D float expanded to (value, 0., 0., 1.)
  1442.     D3DDECLTYPE_FLOAT2   {=  1}, // 2D float expanded to (value, value, 0., 1.)
  1443.     D3DDECLTYPE_FLOAT3   {=  2}, // 3D float expanded to (value, value, value, 1.)
  1444.     D3DDECLTYPE_FLOAT4   {=  3}, // 4D float
  1445.     D3DDECLTYPE_D3DCOLOR {=  4}, // 4D packed unsigned bytes mapped to 0. to 1. range
  1446.                                  // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A)
  1447.     D3DDECLTYPE_UBYTE4   {=  5}, // 4D unsigned byte
  1448.     D3DDECLTYPE_SHORT2   {=  6}, // 2D signed short expanded to (value, value, 0., 1.)
  1449.     D3DDECLTYPE_SHORT4   {=  7}, // 4D signed short
  1450.  
  1451.   // The following types are valid only with vertex shaders >= 2.0
  1452.  
  1453.  
  1454.     D3DDECLTYPE_UBYTE4N  {=  8}, // Each of 4 bytes is normalized by dividing to 255.0
  1455.     D3DDECLTYPE_SHORT2N  {=  9}, // 2D signed short normalized (v[0]/32767.0,v[1]/32767.0,0,1)
  1456.     D3DDECLTYPE_SHORT4N  {= 10}, // 4D signed short normalized (v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0)
  1457.     D3DDECLTYPE_USHORT2N {= 11}, // 2D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,0,1)
  1458.     D3DDECLTYPE_USHORT4N {= 12}, // 4D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0)
  1459.     D3DDECLTYPE_UDEC3    {= 13}, // 3D unsigned 10 10 10 format expanded to (value, value, value, 1)
  1460.     D3DDECLTYPE_DEC3N    {= 14}, // 3D signed 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1)
  1461.     D3DDECLTYPE_FLOAT16_2{= 15}, // Two 16-bit floating point values, expanded to (value, value, 0, 1)
  1462.     D3DDECLTYPE_FLOAT16_4{= 16}, // Four 16-bit floating point values
  1463.     D3DDECLTYPE_UNUSED   {= 17}  // When the type field in a decl is unused.
  1464.   {$ELSE}
  1465.     D3DDECLTYPE_FLOAT1    =  0,  // 1D float expanded to (value, 0., 0., 1.)
  1466.     D3DDECLTYPE_FLOAT2    =  1,  // 2D float expanded to (value, value, 0., 1.)
  1467.     D3DDECLTYPE_FLOAT3    =  2,  // 3D float expanded to (value, value, value, 1.)
  1468.     D3DDECLTYPE_FLOAT4    =  3,  // 4D float
  1469.     D3DDECLTYPE_D3DCOLOR  =  4,  // 4D packed unsigned bytes mapped to 0. to 1. range
  1470.                                  // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A)
  1471.     D3DDECLTYPE_UBYTE4    =  5,  // 4D unsigned byte
  1472.     D3DDECLTYPE_SHORT2    =  6,  // 2D signed short expanded to (value, value, 0., 1.)
  1473.     D3DDECLTYPE_SHORT4    =  7,  // 4D signed short
  1474.  
  1475.   // The following types are valid only with vertex shaders >= 2.0
  1476.  
  1477.  
  1478.     D3DDECLTYPE_UBYTE4N   =  8,  // Each of 4 bytes is normalized by dividing to 255.0
  1479.     D3DDECLTYPE_SHORT2N   =  9,  // 2D signed short normalized (v[0]/32767.0,v[1]/32767.0,0,1)
  1480.     D3DDECLTYPE_SHORT4N   = 10,  // 4D signed short normalized (v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0)
  1481.     D3DDECLTYPE_USHORT2N  = 11,  // 2D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,0,1)
  1482.     D3DDECLTYPE_USHORT4N  = 12,  // 4D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0)
  1483.     D3DDECLTYPE_UDEC3     = 13,  // 3D unsigned 10 10 10 format expanded to (value, value, value, 1)
  1484.     D3DDECLTYPE_DEC3N     = 14,  // 3D signed 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1)
  1485.     D3DDECLTYPE_FLOAT16_2 = 15,  // Two 16-bit floating point values, expanded to (value, value, 0, 1)
  1486.     D3DDECLTYPE_FLOAT16_4 = 16,  // Four 16-bit floating point values
  1487.     D3DDECLTYPE_UNUSED    = 17   // When the type field in a decl is unused.
  1488.   {$ENDIF}
  1489.   );
  1490.   {$EXTERNALSYM _D3DDECLTYPE}
  1491.   D3DDECLTYPE = _D3DDECLTYPE;
  1492.   {$EXTERNALSYM D3DDECLTYPE}
  1493.   TD3DDeclType = _D3DDECLTYPE;
  1494.  
  1495. // Restores enums to be 4 byte in size
  1496. {$MINENUMSIZE 4}
  1497.  
  1498. const
  1499.   MAXD3DDECLTYPE      = DWORD(D3DDECLTYPE_UNUSED);
  1500.   {$EXTERNALSYM MAXD3DDECLTYPE}
  1501.  
  1502. type
  1503.   PD3DVertexElement9 = ^TD3DVertexElement9;
  1504.   _D3DVERTEXELEMENT9 = packed record
  1505.     Stream:     Word;                 // Stream index
  1506.     Offset:     Word;                 // Offset in the stream in bytes
  1507.     _Type:      TD3DDeclType{Byte};   // Data type
  1508.     Method:     TD3DDeclMethod{Byte}; // Processing method
  1509.     Usage:      TD3DDeclUsage{Byte};  // Semantics
  1510.     UsageIndex: Byte;                 // Semantic index
  1511.   end;
  1512.   {$EXTERNALSYM _D3DVERTEXELEMENT9}
  1513.   D3DVERTEXELEMENT9 = _D3DVERTEXELEMENT9;
  1514.   {$EXTERNALSYM D3DVERTEXELEMENT9}
  1515.   TD3DVertexElement9 = _D3DVERTEXELEMENT9;
  1516.  
  1517. // This is used to initialize the last vertex element in a vertex declaration
  1518. // array
  1519. //
  1520. const
  1521.   D3DDECL_END: TD3DVertexElement9 = (Stream     : $FF;
  1522.                                      Offset     : 0;
  1523.                                      _Type      : D3DDECLTYPE_UNUSED;
  1524.                                      Method     : TD3DDeclMethod(0);
  1525.                                      Usage      : TD3DDeclUsage(0);
  1526.                                      UsageIndex : 0);
  1527.   {$EXTERNALSYM D3DDECL_END}
  1528.  
  1529. // Maximum supported number of texture coordinate sets
  1530. const
  1531.   D3DDP_MAXTEXCOORD   = 8;
  1532.   {$EXTERNALSYM D3DDP_MAXTEXCOORD}
  1533.  
  1534.  
  1535. //---------------------------------------------------------------------
  1536. //
  1537. // The internal format of Pixel Shader (PS) & Vertex Shader (VS)
  1538. // Instruction Tokens is defined in the Direct3D Device Driver Kit
  1539. //
  1540. //---------------------------------------------------------------------
  1541.  
  1542.   //
  1543.   // Instruction Token Bit Definitions
  1544.   //
  1545.   D3DSI_OPCODE_MASK       = $0000FFFF;
  1546.   {$EXTERNALSYM D3DSI_OPCODE_MASK}
  1547.  
  1548.   D3DSI_INSTLENGTH_MASK   = $0F000000;
  1549.   {$EXTERNALSYM D3DSI_INSTLENGTH_MASK}
  1550.   D3DSI_INSTLENGTH_SHIFT  = 24;
  1551.   {$EXTERNALSYM D3DSI_INSTLENGTH_SHIFT}
  1552.  
  1553. type 
  1554.   _D3DSHADER_INSTRUCTION_OPCODE_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1555.   {$EXTERNALSYM _D3DSHADER_INSTRUCTION_OPCODE_TYPE}
  1556.   D3DSHADER_INSTRUCTION_OPCODE_TYPE = _D3DSHADER_INSTRUCTION_OPCODE_TYPE;
  1557.   {$EXTERNALSYM D3DSHADER_INSTRUCTION_OPCODE_TYPE}
  1558.   TD3DShaderInstructionOpcodeType = _D3DSHADER_INSTRUCTION_OPCODE_TYPE;
  1559.  
  1560. const
  1561.   D3DSIO_NOP          = 0;
  1562.   {$EXTERNALSYM D3DSIO_NOP}
  1563.   D3DSIO_MOV          = 1;
  1564.   {$EXTERNALSYM D3DSIO_MOV}
  1565.   D3DSIO_ADD          = 2;
  1566.   {$EXTERNALSYM D3DSIO_ADD}
  1567.   D3DSIO_SUB          = 3;
  1568.   {$EXTERNALSYM D3DSIO_SUB}
  1569.   D3DSIO_MAD          = 4;
  1570.   {$EXTERNALSYM D3DSIO_MAD}
  1571.   D3DSIO_MUL          = 5;
  1572.   {$EXTERNALSYM D3DSIO_MUL}
  1573.   D3DSIO_RCP          = 6;
  1574.   {$EXTERNALSYM D3DSIO_RCP}
  1575.   D3DSIO_RSQ          = 7;
  1576.   {$EXTERNALSYM D3DSIO_RSQ}
  1577.   D3DSIO_DP3          = 8;
  1578.   {$EXTERNALSYM D3DSIO_DP3}
  1579.   D3DSIO_DP4          = 9;
  1580.   {$EXTERNALSYM D3DSIO_DP4}
  1581.   D3DSIO_MIN          = 10;
  1582.   {$EXTERNALSYM D3DSIO_MIN}
  1583.   D3DSIO_MAX          = 11;
  1584.   {$EXTERNALSYM D3DSIO_MAX}
  1585.   D3DSIO_SLT          = 12;
  1586.   {$EXTERNALSYM D3DSIO_SLT}
  1587.   D3DSIO_SGE          = 13;
  1588.   {$EXTERNALSYM D3DSIO_SGE}
  1589.   D3DSIO_EXP          = 14;
  1590.   {$EXTERNALSYM D3DSIO_EXP}
  1591.   D3DSIO_LOG          = 15;
  1592.   {$EXTERNALSYM D3DSIO_LOG}
  1593.   D3DSIO_LIT          = 16;
  1594.   {$EXTERNALSYM D3DSIO_LIT}
  1595.   D3DSIO_DST          = 17;
  1596.   {$EXTERNALSYM D3DSIO_DST}
  1597.   D3DSIO_LRP          = 18;
  1598.   {$EXTERNALSYM D3DSIO_LRP}
  1599.   D3DSIO_FRC          = 19;
  1600.   {$EXTERNALSYM D3DSIO_FRC}
  1601.   D3DSIO_M4x4         = 20;
  1602.   {$EXTERNALSYM D3DSIO_M4x4}
  1603.   D3DSIO_M4x3         = 21;
  1604.   {$EXTERNALSYM D3DSIO_M4x3}
  1605.   D3DSIO_M3x4         = 22;
  1606.   {$EXTERNALSYM D3DSIO_M3x4}
  1607.   D3DSIO_M3x3         = 23;
  1608.   {$EXTERNALSYM D3DSIO_M3x3}
  1609.   D3DSIO_M3x2         = 24;
  1610.   {$EXTERNALSYM D3DSIO_M3x2}
  1611.   D3DSIO_CALL         = 25;
  1612.   {$EXTERNALSYM D3DSIO_CALL}
  1613.   D3DSIO_CALLNZ       = 26;
  1614.   {$EXTERNALSYM D3DSIO_CALLNZ}
  1615.   D3DSIO_LOOP         = 27;
  1616.   {$EXTERNALSYM D3DSIO_LOOP}
  1617.   D3DSIO_RET          = 28;
  1618.   {$EXTERNALSYM D3DSIO_RET}
  1619.   D3DSIO_ENDLOOP      = 29;
  1620.   {$EXTERNALSYM D3DSIO_ENDLOOP}
  1621.   D3DSIO_LABEL        = 30;
  1622.   {$EXTERNALSYM D3DSIO_LABEL}
  1623.   D3DSIO_DCL          = 31;
  1624.   {$EXTERNALSYM D3DSIO_DCL}
  1625.   D3DSIO_POW          = 32;
  1626.   {$EXTERNALSYM D3DSIO_POW}
  1627.   D3DSIO_CRS          = 33;
  1628.   {$EXTERNALSYM D3DSIO_CRS}
  1629.   D3DSIO_SGN          = 34;
  1630.   {$EXTERNALSYM D3DSIO_SGN}
  1631.   D3DSIO_ABS          = 35;
  1632.   {$EXTERNALSYM D3DSIO_ABS}
  1633.   D3DSIO_NRM          = 36;
  1634.   {$EXTERNALSYM D3DSIO_NRM}
  1635.   D3DSIO_SINCOS       = 37;
  1636.   {$EXTERNALSYM D3DSIO_SINCOS}
  1637.   D3DSIO_REP          = 38;
  1638.   {$EXTERNALSYM D3DSIO_REP}
  1639.   D3DSIO_ENDREP       = 39;
  1640.   {$EXTERNALSYM D3DSIO_ENDREP}
  1641.   D3DSIO_IF           = 40;
  1642.   {$EXTERNALSYM D3DSIO_IF}
  1643.   D3DSIO_IFC          = 41;
  1644.   {$EXTERNALSYM D3DSIO_IFC}
  1645.   D3DSIO_ELSE         = 42;
  1646.   {$EXTERNALSYM D3DSIO_ELSE}
  1647.   D3DSIO_ENDIF        = 43;
  1648.   {$EXTERNALSYM D3DSIO_ENDIF}
  1649.   D3DSIO_BREAK        = 44;
  1650.   {$EXTERNALSYM D3DSIO_BREAK}
  1651.   D3DSIO_BREAKC       = 45;
  1652.   {$EXTERNALSYM D3DSIO_BREAKC}
  1653.   D3DSIO_MOVA         = 46;
  1654.   {$EXTERNALSYM D3DSIO_MOVA}
  1655.   D3DSIO_DEFB         = 47;
  1656.   {$EXTERNALSYM D3DSIO_DEFB}
  1657.   D3DSIO_DEFI         = 48;
  1658.   {$EXTERNALSYM D3DSIO_DEFI}
  1659.  
  1660.   D3DSIO_TEXCOORD     = 64;
  1661.   {$EXTERNALSYM D3DSIO_TEXCOORD}
  1662.   D3DSIO_TEXKILL      = 65;
  1663.   {$EXTERNALSYM D3DSIO_TEXKILL}
  1664.   D3DSIO_TEX          = 66;
  1665.   {$EXTERNALSYM D3DSIO_TEX}
  1666.   D3DSIO_TEXBEM       = 67;
  1667.   {$EXTERNALSYM D3DSIO_TEXBEM}
  1668.   D3DSIO_TEXBEML      = 68;
  1669.   {$EXTERNALSYM D3DSIO_TEXBEML}
  1670.   D3DSIO_TEXREG2AR    = 69;
  1671.   {$EXTERNALSYM D3DSIO_TEXREG2AR}
  1672.   D3DSIO_TEXREG2GB    = 70;
  1673.   {$EXTERNALSYM D3DSIO_TEXREG2GB}
  1674.   D3DSIO_TEXM3x2PAD   = 71;
  1675.   {$EXTERNALSYM D3DSIO_TEXM3x2PAD}
  1676.   D3DSIO_TEXM3x2TEX   = 72;
  1677.   {$EXTERNALSYM D3DSIO_TEXM3x2TEX}
  1678.   D3DSIO_TEXM3x3PAD   = 73;
  1679.   {$EXTERNALSYM D3DSIO_TEXM3x3PAD}
  1680.   D3DSIO_TEXM3x3TEX   = 74;
  1681.   {$EXTERNALSYM D3DSIO_TEXM3x3TEX}
  1682.   D3DSIO_RESERVED0    = 75;
  1683.   {$EXTERNALSYM D3DSIO_RESERVED0}
  1684.   D3DSIO_TEXM3x3SPEC  = 76;
  1685.   {$EXTERNALSYM D3DSIO_TEXM3x3SPEC}
  1686.   D3DSIO_TEXM3x3VSPEC = 77;
  1687.   {$EXTERNALSYM D3DSIO_TEXM3x3VSPEC}
  1688.   D3DSIO_EXPP         = 78;
  1689.   {$EXTERNALSYM D3DSIO_EXPP}
  1690.   D3DSIO_LOGP         = 79;
  1691.   {$EXTERNALSYM D3DSIO_LOGP}
  1692.   D3DSIO_CND          = 80;
  1693.   {$EXTERNALSYM D3DSIO_CND}
  1694.   D3DSIO_DEF          = 81;
  1695.   {$EXTERNALSYM D3DSIO_DEF}
  1696.   D3DSIO_TEXREG2RGB   = 82;
  1697.   {$EXTERNALSYM D3DSIO_TEXREG2RGB}
  1698.   D3DSIO_TEXDP3TEX    = 83;
  1699.   {$EXTERNALSYM D3DSIO_TEXDP3TEX}
  1700.   D3DSIO_TEXM3x2DEPTH = 84;
  1701.   {$EXTERNALSYM D3DSIO_TEXM3x2DEPTH}
  1702.   D3DSIO_TEXDP3       = 85;
  1703.   {$EXTERNALSYM D3DSIO_TEXDP3}
  1704.   D3DSIO_TEXM3x3      = 86;
  1705.   {$EXTERNALSYM D3DSIO_TEXM3x3}
  1706.   D3DSIO_TEXDEPTH     = 87;
  1707.   {$EXTERNALSYM D3DSIO_TEXDEPTH}
  1708.   D3DSIO_CMP          = 88;
  1709.   {$EXTERNALSYM D3DSIO_CMP}
  1710.   D3DSIO_BEM          = 89;
  1711.   {$EXTERNALSYM D3DSIO_BEM}
  1712.  
  1713.   D3DSIO_DP2ADD       = 90;
  1714.   {$EXTERNALSYM D3DSIO_DP2ADD}
  1715.   D3DSIO_DSX          = 91;
  1716.   {$EXTERNALSYM D3DSIO_DSX}
  1717.   D3DSIO_DSY          = 92;
  1718.   {$EXTERNALSYM D3DSIO_DSY}
  1719.   D3DSIO_TEXLDD       = 93;
  1720.   {$EXTERNALSYM D3DSIO_TEXLDD}
  1721.   D3DSIO_SETP         = 94;
  1722.   {$EXTERNALSYM D3DSIO_SETP}
  1723.   D3DSIO_TEXLDL       = 95;
  1724.   {$EXTERNALSYM D3DSIO_TEXLDL}
  1725.   D3DSIO_BREAKP       = 96;
  1726.   {$EXTERNALSYM D3DSIO_BREAKP}
  1727.  
  1728.  
  1729.   D3DSIO_PHASE        = $FFFD;
  1730.   {$EXTERNALSYM D3DSIO_PHASE}
  1731.   D3DSIO_COMMENT      = $FFFE;
  1732.   {$EXTERNALSYM D3DSIO_COMMENT}
  1733.   D3DSIO_END          = $FFFF;
  1734.   {$EXTERNALSYM D3DSIO_END}
  1735.  
  1736.   //---------------------------------------------------------------------
  1737.   // Use these constants with D3DSIO_SINCOS macro as SRC2, SRC3
  1738.   //
  1739.   //#define D3DSINCOSCONST1 -1.5500992e-006f, -2.1701389e-005f,  0.0026041667f, 0.00026041668f
  1740.   //#define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f
  1741.  
  1742.   //---------------------------------------------------------------------
  1743.   // Co-Issue Instruction Modifier - if set then this instruction is to be
  1744.   // issued in parallel with the previous instruction(s) for which this bit
  1745.   // is not set.
  1746.   //
  1747.   D3DSI_COISSUE           = $40000000;
  1748.   {$EXTERNALSYM D3DSI_COISSUE}
  1749.  
  1750.   //---------------------------------------------------------------------
  1751.   // Opcode specific controls
  1752.  
  1753.   D3DSP_OPCODESPECIFICCONTROL_MASK  = $00ff0000;
  1754.   {$EXTERNALSYM D3DSP_OPCODESPECIFICCONTROL_MASK}
  1755.   D3DSP_OPCODESPECIFICCONTROL_SHIFT = 16;
  1756.   {$EXTERNALSYM D3DSP_OPCODESPECIFICCONTROL_SHIFT}
  1757.  
  1758.   // ps_2_0 texld controls
  1759.   D3DSI_TEXLD_PROJECT = ($01 shl D3DSP_OPCODESPECIFICCONTROL_SHIFT);
  1760.   {$EXTERNALSYM D3DSI_TEXLD_PROJECT}
  1761.   D3DSI_TEXLD_BIAS    = ($02 shl D3DSP_OPCODESPECIFICCONTROL_SHIFT);
  1762.   {$EXTERNALSYM D3DSI_TEXLD_BIAS}
  1763.  
  1764. type
  1765.   // Comparison for dynamic conditional instruction opcodes (i.e. if, breakc)
  1766.   {$MINENUMSIZE 1} // Forces TD3DShaderComparison be 1 byte enum
  1767.   _D3DSHADER_COMPARISON = (
  1768.                          // < = >
  1769.   {$IFNDEF COMPILER6_UP}
  1770.     D3DSPC_RESERVED0{= 0}, // 0 0 0
  1771.     D3DSPC_GT       {= 1}, // 0 0 1
  1772.     D3DSPC_EQ       {= 2}, // 0 1 0
  1773.     D3DSPC_GE       {= 3}, // 0 1 1
  1774.     D3DSPC_LT       {= 4}, // 1 0 0
  1775.     D3DSPC_NE       {= 5}, // 1 0 1
  1776.     D3DSPC_LE       {= 6}, // 1 1 0
  1777.     D3DSPC_RESERVED1{= 7}  // 1 1 1
  1778.   {$ELSE}
  1779.     D3DSPC_RESERVED0= 0, // 0 0 0
  1780.     D3DSPC_GT       = 1, // 0 0 1
  1781.     D3DSPC_EQ       = 2, // 0 1 0
  1782.     D3DSPC_GE       = 3, // 0 1 1
  1783.     D3DSPC_LT       = 4, // 1 0 0
  1784.     D3DSPC_NE       = 5, // 1 0 1
  1785.     D3DSPC_LE       = 6, // 1 1 0
  1786.     D3DSPC_RESERVED1= 7  // 1 1 1
  1787.   {$ENDIF}
  1788.   );
  1789.   {$EXTERNALSYM _D3DSHADER_COMPARISON}
  1790.   D3DSHADER_COMPARISON = _D3DSHADER_COMPARISON;
  1791.   {$EXTERNALSYM D3DSHADER_COMPARISON}
  1792.   TD3DShaderComparison = _D3DSHADER_COMPARISON;
  1793.   {$MINENUMSIZE 4} // Restores enums to be 4 byte in size
  1794.  
  1795. const
  1796.   // Comparison is part of instruction opcode token:
  1797.   D3DSHADER_COMPARISON_SHIFT = D3DSP_OPCODESPECIFICCONTROL_SHIFT;
  1798.   {$EXTERNALSYM D3DSHADER_COMPARISON_SHIFT}
  1799.   D3DSHADER_COMPARISON_MASK  = ($7 shl D3DSHADER_COMPARISON_SHIFT);
  1800.   {$EXTERNALSYM D3DSHADER_COMPARISON_MASK}
  1801.  
  1802.   //---------------------------------------------------------------------
  1803.   // Predication flags on instruction token
  1804.   D3DSHADER_INSTRUCTION_PREDICATED    = ($1 shl 28);
  1805.   {$EXTERNALSYM D3DSHADER_INSTRUCTION_PREDICATED}
  1806.  
  1807.   //---------------------------------------------------------------------
  1808.   // DCL Info Token Controls
  1809.  
  1810.   // For dcl info tokens requiring a semantic (usage + index)
  1811.   D3DSP_DCL_USAGE_SHIFT = 0;
  1812.   {$EXTERNALSYM D3DSP_DCL_USAGE_SHIFT}
  1813.   D3DSP_DCL_USAGE_MASK  = $0000000f;
  1814.   {$EXTERNALSYM D3DSP_DCL_USAGE_MASK}
  1815.  
  1816.   D3DSP_DCL_USAGEINDEX_SHIFT = 16;
  1817.   {$EXTERNALSYM D3DSP_DCL_USAGEINDEX_SHIFT}
  1818.   D3DSP_DCL_USAGEINDEX_MASK  = $000f0000;
  1819.   {$EXTERNALSYM D3DSP_DCL_USAGEINDEX_MASK}
  1820.  
  1821.   // DCL pixel shader sampler info token.
  1822.   D3DSP_TEXTURETYPE_SHIFT = 27;
  1823.   {$EXTERNALSYM D3DSP_TEXTURETYPE_SHIFT}
  1824.   D3DSP_TEXTURETYPE_MASK  = $78000000;
  1825.   {$EXTERNALSYM D3DSP_TEXTURETYPE_MASK}
  1826.  
  1827. {$IFNDEF COMPILER6_UP}
  1828. type
  1829.   _D3DSAMPLER_TEXTURE_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1830.   {$EXTERNALSYM _D3DSAMPLER_TEXTURE_TYPE}
  1831.   D3DSAMPLER_TEXTURE_TYPE = _D3DSAMPLER_TEXTURE_TYPE;
  1832.   {$EXTERNALSYM D3DSAMPLER_TEXTURE_TYPE}
  1833.   TD3DSamplerTextureType = _D3DSAMPLER_TEXTURE_TYPE;
  1834.  
  1835. const
  1836.   D3DSTT_UNKNOWN = 0 shl D3DSP_TEXTURETYPE_SHIFT; // uninitialized value
  1837.   {$EXTERNALSYM D3DSTT_UNKNOWN}
  1838.   D3DSTT_2D      = 2 shl D3DSP_TEXTURETYPE_SHIFT; // dcl_2d s# (for declaring a 2-D texture)
  1839.   {$EXTERNALSYM D3DSTT_2D}
  1840.   D3DSTT_CUBE    = 3 shl D3DSP_TEXTURETYPE_SHIFT; // dcl_cube s# (for declaring a cube texture)
  1841.   {$EXTERNALSYM D3DSTT_CUBE}
  1842.   D3DSTT_VOLUME  = 4 shl D3DSP_TEXTURETYPE_SHIFT; // dcl_volume s# (for declaring a volume texture)
  1843.   {$EXTERNALSYM D3DSTT_VOLUME}
  1844.   D3DSTT_FORCE_DWORD  = $7fffffff;      // force 32-bit size enum
  1845.   {$EXTERNALSYM D3DSTT_FORCE_DWORD}
  1846. {$ELSE}
  1847. type
  1848.   _D3DSAMPLER_TEXTURE_TYPE = (
  1849.   {$IFDEF BCB}
  1850.     D3DSTT_DUMMY
  1851.   {$ELSE}
  1852.     D3DSTT_UNKNOWN = 0 shl D3DSP_TEXTURETYPE_SHIFT, // uninitialized value
  1853.     D3DSTT_2D      = 2 shl D3DSP_TEXTURETYPE_SHIFT, // dcl_2d s# (for declaring a 2-D texture)
  1854.     D3DSTT_CUBE    = 3 shl D3DSP_TEXTURETYPE_SHIFT, // dcl_cube s# (for declaring a cube texture)
  1855.     D3DSTT_VOLUME  = 4 shl D3DSP_TEXTURETYPE_SHIFT, // dcl_volume s# (for declaring a volume texture)
  1856.     D3DSTT_FORCE_DWORD  = $7fffffff      // force 32-bit size enum
  1857.   {$ENDIF}
  1858.   );
  1859.   {$EXTERNALSYM _D3DSAMPLER_TEXTURE_TYPE}
  1860.   D3DSAMPLER_TEXTURE_TYPE = _D3DSAMPLER_TEXTURE_TYPE;
  1861.   {$EXTERNALSYM D3DSAMPLER_TEXTURE_TYPE}
  1862.   TD3DSamplerTextureType = _D3DSAMPLER_TEXTURE_TYPE;
  1863. {$ENDIF}
  1864.  
  1865. const
  1866.   //---------------------------------------------------------------------
  1867.   // Parameter Token Bit Definitions
  1868.   //
  1869.   D3DSP_REGNUM_MASK       = $000007FF;
  1870.   {$EXTERNALSYM D3DSP_REGNUM_MASK}
  1871.  
  1872.   // destination parameter write mask
  1873.   D3DSP_WRITEMASK_0       = $00010000;  // Component 0 (X;Red)
  1874.   {$EXTERNALSYM D3DSP_WRITEMASK_0}
  1875.   D3DSP_WRITEMASK_1       = $00020000;  // Component 1 (Y;Green)
  1876.   {$EXTERNALSYM D3DSP_WRITEMASK_1}
  1877.   D3DSP_WRITEMASK_2       = $00040000;  // Component 2 (Z;Blue)
  1878.   {$EXTERNALSYM D3DSP_WRITEMASK_2}
  1879.   D3DSP_WRITEMASK_3       = $00080000;  // Component 3 (W;Alpha)
  1880.   {$EXTERNALSYM D3DSP_WRITEMASK_3}
  1881.   D3DSP_WRITEMASK_ALL     = $000F0000;  // All Components
  1882.   {$EXTERNALSYM D3DSP_WRITEMASK_ALL}
  1883.  
  1884.   // destination parameter modifiers
  1885.   D3DSP_DSTMOD_SHIFT      = 20;
  1886.   {$EXTERNALSYM D3DSP_DSTMOD_SHIFT}
  1887.   D3DSP_DSTMOD_MASK       = $00F00000;
  1888.   {$EXTERNALSYM D3DSP_DSTMOD_MASK}
  1889.  
  1890.   // Bit masks for destination parameter modifiers
  1891.     D3DSPDM_NONE                 = (0 shl D3DSP_DSTMOD_SHIFT); // nop
  1892.     {$EXTERNALSYM D3DSPDM_NONE}
  1893.     D3DSPDM_SATURATE             = (1 shl D3DSP_DSTMOD_SHIFT); // clamp to 0. to 1. range
  1894.     {$EXTERNALSYM D3DSPDM_SATURATE}
  1895.     D3DSPDM_PARTIALPRECISION     = (2 shl D3DSP_DSTMOD_SHIFT); // Partial precision hint
  1896.     {$EXTERNALSYM D3DSPDM_PARTIALPRECISION}
  1897.     D3DSPDM_MSAMPCENTROID        = (4 shl D3DSP_DSTMOD_SHIFT); // Relevant to multisampling only:
  1898.     {$EXTERNALSYM D3DSPDM_MSAMPCENTROID}
  1899.                                                                //      When the pixel center is not covered, sample
  1900.                                                                //      attribute or compute gradients/LOD
  1901.                                                                //      using multisample "centroid" location.
  1902.                                                                //      "Centroid" is some location within the covered
  1903.                                                                //      region of the pixel.
  1904.  
  1905.   // destination parameter
  1906.   D3DSP_DSTSHIFT_SHIFT    = 24;
  1907.   {$EXTERNALSYM D3DSP_DSTSHIFT_SHIFT}
  1908.   D3DSP_DSTSHIFT_MASK     = $0F000000;
  1909.   {$EXTERNALSYM D3DSP_DSTSHIFT_MASK}
  1910.  
  1911.   // destination/source parameter register type
  1912.   D3DSP_REGTYPE_SHIFT     = 28;
  1913.   {$EXTERNALSYM D3DSP_REGTYPE_SHIFT}
  1914.   D3DSP_REGTYPE_SHIFT2    = 8;
  1915.   {$EXTERNALSYM D3DSP_REGTYPE_SHIFT2}
  1916.   D3DSP_REGTYPE_MASK      = $70000000;
  1917.   {$EXTERNALSYM D3DSP_REGTYPE_MASK}
  1918.   D3DSP_REGTYPE_MASK2     = $00001800;
  1919.   {$EXTERNALSYM D3DSP_REGTYPE_MASK2}
  1920.  
  1921.  
  1922. {$IFNDEF COMPILER6_UP}
  1923. const
  1924.   D3DSPR_TEMP          =  0; // Temporary Register File
  1925.   {$EXTERNALSYM D3DSPR_TEMP}
  1926.   D3DSPR_INPUT         =  1; // Input Register File
  1927.   {$EXTERNALSYM D3DSPR_INPUT}
  1928.   D3DSPR_CONST         =  2; // Constant Register File
  1929.   {$EXTERNALSYM D3DSPR_CONST}
  1930.   D3DSPR_ADDR          =  3; // Address Register (VS)
  1931.   {$EXTERNALSYM D3DSPR_ADDR}
  1932.   D3DSPR_TEXTURE       =  3; // Texture Register File (PS)
  1933.   {$EXTERNALSYM D3DSPR_TEXTURE}
  1934.   D3DSPR_RASTOUT       =  4; // Rasterizer Register File
  1935.   {$EXTERNALSYM D3DSPR_RASTOUT}
  1936.   D3DSPR_ATTROUT       =  5; // Attribute Output Register File
  1937.   {$EXTERNALSYM D3DSPR_ATTROUT}
  1938.   D3DSPR_TEXCRDOUT     =  6; // Texture Coordinate Output Register File
  1939.   {$EXTERNALSYM D3DSPR_TEXCRDOUT}
  1940.   D3DSPR_OUTPUT        =  6; // Output register file for VS3.0+
  1941.   {$EXTERNALSYM D3DSPR_OUTPUT}
  1942.   D3DSPR_CONSTINT      =  7; // Constant Integer Vector Register File
  1943.   {$EXTERNALSYM D3DSPR_CONSTINT}
  1944.   D3DSPR_COLOROUT      =  8; // Color Output Register File
  1945.   {$EXTERNALSYM D3DSPR_COLOROUT}
  1946.   D3DSPR_DEPTHOUT      =  9; // Depth Output Register File
  1947.   {$EXTERNALSYM D3DSPR_DEPTHOUT}
  1948.   D3DSPR_SAMPLER       = 10; // Sampler State Register File
  1949.   {$EXTERNALSYM D3DSPR_SAMPLER}
  1950.   D3DSPR_CONST2        = 11; // Constant Register File  2048 - 4095
  1951.   {$EXTERNALSYM D3DSPR_CONST2}
  1952.   D3DSPR_CONST3        = 12; // Constant Register File  4096 - 6143
  1953.   {$EXTERNALSYM D3DSPR_CONST3}
  1954.   D3DSPR_CONST4        = 13; // Constant Register File  6144 - 8191
  1955.   {$EXTERNALSYM D3DSPR_CONST4}
  1956.   D3DSPR_CONSTBOOL     = 14; // Constant Boolean register file
  1957.   {$EXTERNALSYM D3DSPR_CONSTBOOL}
  1958.   D3DSPR_LOOP          = 15; // Loop counter register file
  1959.   {$EXTERNALSYM D3DSPR_LOOP}
  1960.   D3DSPR_TEMPFLOAT16   = 16; // 16-bit float temp register file
  1961.   {$EXTERNALSYM D3DSPR_TEMPFLOAT16}
  1962.   D3DSPR_MISCTYPE      = 17; // Miscellaneous (single) registers.
  1963.   {$EXTERNALSYM D3DSPR_MISCTYPE}
  1964.   D3DSPR_LABEL         = 18; // Label
  1965.   {$EXTERNALSYM D3DSPR_LABEL}
  1966.   D3DSPR_PREDICATE     = 19; // Predicate register
  1967.   {$EXTERNALSYM D3DSPR_PREDICATE}
  1968.  
  1969. type
  1970.   _D3DSHADER_PARAM_REGISTER_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1971. {$ELSE}
  1972. type
  1973.   _D3DSHADER_PARAM_REGISTER_TYPE = (
  1974.     D3DSPR_TEMP           =  0, // Temporary Register File
  1975.     D3DSPR_INPUT          =  1, // Input Register File
  1976.     D3DSPR_CONST          =  2, // Constant Register File
  1977.     D3DSPR_ADDR           =  3, // Address Register (VS)
  1978.     D3DSPR_TEXTURE        =  3, // Texture Register File (PS)
  1979.     D3DSPR_RASTOUT        =  4, // Rasterizer Register File
  1980.     D3DSPR_ATTROUT        =  5, // Attribute Output Register File
  1981.     D3DSPR_TEXCRDOUT      =  6, // Texture Coordinate Output Register File
  1982.     D3DSPR_OUTPUT         =  6, // Output register file for VS3.0+
  1983.     D3DSPR_CONSTINT       =  7, // Constant Integer Vector Register File
  1984.     D3DSPR_COLOROUT       =  8, // Color Output Register File
  1985.     D3DSPR_DEPTHOUT       =  9, // Depth Output Register File
  1986.     D3DSPR_SAMPLER        = 10, // Sampler State Register File
  1987.     D3DSPR_CONST2         = 11, // Constant Register File  2048 - 4095
  1988.     D3DSPR_CONST3         = 12, // Constant Register File  4096 - 6143
  1989.     D3DSPR_CONST4         = 13, // Constant Register File  6144 - 8191
  1990.     D3DSPR_CONSTBOOL      = 14, // Constant Boolean register file
  1991.     D3DSPR_LOOP           = 15, // Loop counter register file
  1992.     D3DSPR_TEMPFLOAT16    = 16, // 16-bit float temp register file
  1993.     D3DSPR_MISCTYPE       = 17, // Miscellaneous (single) registers.
  1994.     D3DSPR_LABEL          = 18, // Label
  1995.     D3DSPR_PREDICATE      = 19  // Predicate register
  1996.   );
  1997. {$ENDIF}
  1998.   {$EXTERNALSYM _D3DSHADER_PARAM_REGISTER_TYPE}
  1999.   D3DSHADER_PARAM_REGISTER_TYPE = _D3DSHADER_PARAM_REGISTER_TYPE;
  2000.   {$EXTERNALSYM D3DSHADER_PARAM_REGISTER_TYPE}
  2001.   TD3DShaderParamRegisterType = _D3DSHADER_PARAM_REGISTER_TYPE;
  2002.  
  2003.   // The miscellaneous register file (D3DSPR_MISCTYPES)
  2004.   // contains register types for which there is only ever one
  2005.   // register (i.e. the register # is not needed).
  2006.   // Rather than use up additional register types for such
  2007.   // registers, they are defined
  2008.   // as particular offsets into the misc. register file:
  2009.   {$MINENUMSIZE 1} // Forces TD3DShaderMiscTypeOffsets be 1 byte enum
  2010.   _D3DSHADER_MISCTYPE_OFFSETS = (
  2011.   {$IFNDEF COMPILER6_UP}
  2012.     D3DSMO_POSITION   {= 0}, // Input position x,y,z,rhw (PS)
  2013.     D3DSMO_FACE   {= 1}  // Floating point primitive area (PS)
  2014.   {$ELSE}
  2015.     D3DSMO_POSITION   = 0, // Input position x,y,z,rhw (PS)
  2016.     D3DSMO_FACE   = 1  // Floating point primitive area (PS)
  2017.   {$ENDIF}
  2018.   );
  2019.   {$EXTERNALSYM _D3DSHADER_MISCTYPE_OFFSETS}
  2020.   D3DSHADER_MISCTYPE_OFFSETS = _D3DSHADER_MISCTYPE_OFFSETS;
  2021.   {$EXTERNALSYM D3DSHADER_MISCTYPE_OFFSETS}
  2022.   TD3DShaderMiscTypeOffsets = _D3DSHADER_MISCTYPE_OFFSETS;
  2023.   {$MINENUMSIZE 4} // Restores enums to be 4 byte in size
  2024.  
  2025.   // Register offsets in the Rasterizer Register File
  2026.   //
  2027.   _D3DVS_RASTOUT_OFFSETS = (
  2028.     D3DSRO_POSITION, // = 0,
  2029.     D3DSRO_FOG,
  2030.     D3DSRO_POINT_SIZE
  2031.   );
  2032.   {$EXTERNALSYM _D3DVS_RASTOUT_OFFSETS}
  2033.   D3DVS_RASTOUT_OFFSETS = _D3DVS_RASTOUT_OFFSETS;
  2034.   {$EXTERNALSYM D3DVS_RASTOUT_OFFSETS}
  2035.   TD3DVSRastoutOffsets = _D3DVS_RASTOUT_OFFSETS;
  2036.  
  2037. // Source operand addressing modes
  2038.  
  2039. const
  2040.   D3DVS_ADDRESSMODE_SHIFT = 13;
  2041.   {$EXTERNALSYM D3DVS_ADDRESSMODE_SHIFT}
  2042.   D3DVS_ADDRESSMODE_MASK  = 1 shl D3DVS_ADDRESSMODE_SHIFT;
  2043.   {$EXTERNALSYM D3DVS_ADDRESSMODE_MASK}
  2044.  
  2045. type
  2046.   _D3DVS_ADDRESSMODE_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2047.   {$EXTERNALSYM _D3DVS_ADDRESSMODE_TYPE}
  2048.   D3DVS_ADDRESSMODE_TYPE = _D3DVS_ADDRESSMODE_TYPE;
  2049.   {$EXTERNALSYM D3DVS_ADDRESSMODE_TYPE}
  2050.   TD3DVSAddressModeType = _D3DVS_ADDRESSMODE_TYPE;
  2051.  
  2052. const
  2053.   D3DVS_ADDRMODE_ABSOLUTE    = 0 shl D3DVS_ADDRESSMODE_SHIFT;
  2054.   {$EXTERNALSYM D3DVS_ADDRMODE_ABSOLUTE}
  2055.   D3DVS_ADDRMODE_RELATIVE    = 1 shl D3DVS_ADDRESSMODE_SHIFT; 
  2056.   {$EXTERNALSYM D3DVS_ADDRMODE_RELATIVE}
  2057.   D3DVS_ADDRMODE_FORCE_DWORD = $7fffffff;                      // force 32-bit size enum
  2058.   {$EXTERNALSYM D3DVS_ADDRMODE_FORCE_DWORD}
  2059.  
  2060. const
  2061.   D3DSHADER_ADDRESSMODE_SHIFT = 13;
  2062.   {$EXTERNALSYM D3DSHADER_ADDRESSMODE_SHIFT}
  2063.   D3DSHADER_ADDRESSMODE_MASK  = (1 shl D3DSHADER_ADDRESSMODE_SHIFT);
  2064.   {$EXTERNALSYM D3DSHADER_ADDRESSMODE_MASK}
  2065.  
  2066. type
  2067.   _D3DSHADER_ADDRESSMODE_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2068.   {$EXTERNALSYM _D3DSHADER_ADDRESSMODE_TYPE}
  2069.   D3DSHADER_ADDRESSMODE_TYPE = _D3DSHADER_ADDRESSMODE_TYPE;
  2070.   {$EXTERNALSYM D3DSHADER_ADDRESSMODE_TYPE}
  2071.   TD3DShaderAddressModeType = _D3DSHADER_ADDRESSMODE_TYPE;
  2072.  
  2073. const
  2074.   D3DSHADER_ADDRMODE_ABSOLUTE  = (0 shl D3DSHADER_ADDRESSMODE_SHIFT);
  2075.   {$EXTERNALSYM D3DSHADER_ADDRMODE_ABSOLUTE}
  2076.   D3DSHADER_ADDRMODE_RELATIVE  = (1 shl D3DSHADER_ADDRESSMODE_SHIFT);
  2077.   {$EXTERNALSYM D3DSHADER_ADDRMODE_RELATIVE}
  2078.   D3DSHADER_ADDRMODE_FORCE_DWORD = $7fffffff; // force 32-bit size enum
  2079.   {$EXTERNALSYM D3DSHADER_ADDRMODE_FORCE_DWORD}
  2080.  
  2081.   // Source operand swizzle definitions
  2082.   //
  2083.   D3DVS_SWIZZLE_SHIFT     = 16;
  2084.   {$EXTERNALSYM D3DVS_SWIZZLE_SHIFT}
  2085.   D3DVS_SWIZZLE_MASK      = $00FF0000;
  2086.   {$EXTERNALSYM D3DVS_SWIZZLE_MASK}
  2087.  
  2088.   // The following bits define where to take component X from:
  2089.  
  2090.   D3DVS_X_X = 0 shl D3DVS_SWIZZLE_SHIFT;
  2091.   {$EXTERNALSYM D3DVS_X_X}
  2092.   D3DVS_X_Y = 1 shl D3DVS_SWIZZLE_SHIFT;
  2093.   {$EXTERNALSYM D3DVS_X_Y}
  2094.   D3DVS_X_Z = 2 shl D3DVS_SWIZZLE_SHIFT;
  2095.   {$EXTERNALSYM D3DVS_X_Z}
  2096.   D3DVS_X_W = 3 shl D3DVS_SWIZZLE_SHIFT;
  2097.   {$EXTERNALSYM D3DVS_X_W}
  2098.  
  2099.   // The following bits define where to take component Y from:
  2100.  
  2101.   D3DVS_Y_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 2);
  2102.   {$EXTERNALSYM D3DVS_Y_X}
  2103.   D3DVS_Y_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 2);
  2104.   {$EXTERNALSYM D3DVS_Y_Y}
  2105.   D3DVS_Y_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 2);
  2106.   {$EXTERNALSYM D3DVS_Y_Z}
  2107.   D3DVS_Y_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 2);
  2108.   {$EXTERNALSYM D3DVS_Y_W}
  2109.  
  2110.   // The following bits define where to take component Z from:
  2111.  
  2112.   D3DVS_Z_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 4);
  2113.   {$EXTERNALSYM D3DVS_Z_X}
  2114.   D3DVS_Z_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 4);
  2115.   {$EXTERNALSYM D3DVS_Z_Y}
  2116.   D3DVS_Z_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 4);
  2117.   {$EXTERNALSYM D3DVS_Z_Z}
  2118.   D3DVS_Z_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 4);
  2119.   {$EXTERNALSYM D3DVS_Z_W}
  2120.  
  2121.   // The following bits define where to take component W from:
  2122.  
  2123.   D3DVS_W_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 6);
  2124.   {$EXTERNALSYM D3DVS_W_X}
  2125.   D3DVS_W_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 6);
  2126.   {$EXTERNALSYM D3DVS_W_Y}
  2127.   D3DVS_W_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 6);
  2128.   {$EXTERNALSYM D3DVS_W_Z}
  2129.   D3DVS_W_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 6);
  2130.   {$EXTERNALSYM D3DVS_W_W}
  2131.  
  2132.   // Value when there is no swizzle (X is taken from X, Y is taken from Y,
  2133.   // Z is taken from Z, W is taken from W
  2134.   //
  2135.   D3DVS_NOSWIZZLE = D3DVS_X_X or D3DVS_Y_Y or D3DVS_Z_Z or D3DVS_W_W;
  2136.   {$EXTERNALSYM D3DVS_NOSWIZZLE}
  2137.  
  2138.   // source parameter swizzle
  2139.   D3DSP_SWIZZLE_SHIFT = 16;
  2140.   {$EXTERNALSYM D3DSP_SWIZZLE_SHIFT}
  2141.   D3DSP_SWIZZLE_MASK  = $00FF0000;
  2142.   {$EXTERNALSYM D3DSP_SWIZZLE_MASK}
  2143.  
  2144.   D3DSP_NOSWIZZLE =
  2145.     (0 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  2146.     (1 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  2147.     (2 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  2148.     (3 shl (D3DSP_SWIZZLE_SHIFT + 6));
  2149.   {$EXTERNALSYM D3DSP_NOSWIZZLE}
  2150.  
  2151.   // pixel-shader swizzle ops
  2152.   D3DSP_REPLICATERED =
  2153.     (0 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  2154.     (0 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  2155.     (0 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  2156.     (0 shl (D3DSP_SWIZZLE_SHIFT + 6));
  2157.   {$EXTERNALSYM D3DSP_REPLICATERED}
  2158.  
  2159.   D3DSP_REPLICATEGREEN =
  2160.     (1 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  2161.     (1 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  2162.     (1 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  2163.     (1 shl (D3DSP_SWIZZLE_SHIFT + 6));
  2164.   {$EXTERNALSYM D3DSP_REPLICATEGREEN}
  2165.  
  2166.   D3DSP_REPLICATEBLUE =
  2167.     (2 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  2168.     (2 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  2169.     (2 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  2170.     (2 shl (D3DSP_SWIZZLE_SHIFT + 6));
  2171.   {$EXTERNALSYM D3DSP_REPLICATEBLUE}
  2172.  
  2173.   D3DSP_REPLICATEALPHA =
  2174.     (3 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  2175.     (3 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  2176.     (3 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  2177.     (3 shl (D3DSP_SWIZZLE_SHIFT + 6));
  2178.   {$EXTERNALSYM D3DSP_REPLICATEALPHA}
  2179.  
  2180.   // source parameter modifiers
  2181.   D3DSP_SRCMOD_SHIFT      = 24;
  2182.   {$EXTERNALSYM D3DSP_SRCMOD_SHIFT}
  2183.   D3DSP_SRCMOD_MASK       = $0F000000;
  2184.   {$EXTERNALSYM D3DSP_SRCMOD_MASK}
  2185.  
  2186. type
  2187.   _D3DSHADER_PARAM_SRCMOD_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2188.   {$EXTERNALSYM _D3DSHADER_PARAM_SRCMOD_TYPE}
  2189.   D3DSHADER_PARAM_SRCMOD_TYPE = _D3DSHADER_PARAM_SRCMOD_TYPE;
  2190.   {$EXTERNALSYM D3DSHADER_PARAM_SRCMOD_TYPE}
  2191.   TD3DShaderParamSRCModType = _D3DSHADER_PARAM_SRCMOD_TYPE;
  2192.  
  2193. const
  2194.   D3DSPSM_NONE        = 0 shl D3DSP_SRCMOD_SHIFT; // nop
  2195.   {$EXTERNALSYM D3DSPSM_NONE}
  2196.   D3DSPSM_NEG         = 1 shl D3DSP_SRCMOD_SHIFT; // negate
  2197.   {$EXTERNALSYM D3DSPSM_NEG}
  2198.   D3DSPSM_BIAS        = 2 shl D3DSP_SRCMOD_SHIFT; // bias
  2199.   {$EXTERNALSYM D3DSPSM_BIAS}
  2200.   D3DSPSM_BIASNEG     = 3 shl D3DSP_SRCMOD_SHIFT; // bias and negate
  2201.   {$EXTERNALSYM D3DSPSM_BIASNEG}
  2202.   D3DSPSM_SIGN        = 4 shl D3DSP_SRCMOD_SHIFT; // sign
  2203.   {$EXTERNALSYM D3DSPSM_SIGN}
  2204.   D3DSPSM_SIGNNEG     = 5 shl D3DSP_SRCMOD_SHIFT; // sign and negate
  2205.   {$EXTERNALSYM D3DSPSM_SIGNNEG}
  2206.   D3DSPSM_COMP        = 6 shl D3DSP_SRCMOD_SHIFT; // complement
  2207.   {$EXTERNALSYM D3DSPSM_COMP}
  2208.   D3DSPSM_X2          = 7 shl D3DSP_SRCMOD_SHIFT; // *2
  2209.   {$EXTERNALSYM D3DSPSM_X2}
  2210.   D3DSPSM_X2NEG       = 8 shl D3DSP_SRCMOD_SHIFT; // *2 and negate
  2211.   {$EXTERNALSYM D3DSPSM_X2NEG}
  2212.   D3DSPSM_DZ          = 9 shl D3DSP_SRCMOD_SHIFT; // divide through by z component
  2213.   {$EXTERNALSYM D3DSPSM_DZ}
  2214.   D3DSPSM_DW          = 10 shl D3DSP_SRCMOD_SHIFT; // divide through by w component
  2215.   {$EXTERNALSYM D3DSPSM_DW}
  2216.   D3DSPSM_ABS         = 11 shl D3DSP_SRCMOD_SHIFT; // abs()
  2217.   {$EXTERNALSYM D3DSPSM_ABS}
  2218.   D3DSPSM_ABSNEG      = 12 shl D3DSP_SRCMOD_SHIFT; // -abs()
  2219.   {$EXTERNALSYM D3DSPSM_ABSNEG}
  2220.   D3DSPSM_NOT         = 13 shl D3DSP_SRCMOD_SHIFT; // for predicate register: "!p0"
  2221.   {$EXTERNALSYM D3DSPSM_NOT}
  2222.   D3DSPSM_FORCE_DWORD = $7fffffff;                // force 32-bit size enum
  2223.   {$EXTERNALSYM D3DSPSM_FORCE_DWORD}
  2224.  
  2225. // pixel shader version token
  2226. //#define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor))
  2227. function D3DPS_VERSION(_Major, _Minor: DWord): DWord;
  2228. {$EXTERNALSYM D3DPS_VERSION}
  2229.  
  2230. // vertex shader version token
  2231. //#define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor))
  2232. function D3DVS_VERSION(_Major, _Minor: DWord): DWord;
  2233. {$EXTERNALSYM D3DVS_VERSION}
  2234.  
  2235. // extract major/minor from version cap
  2236. //#define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)
  2237. function D3DSHADER_VERSION_MAJOR(_Version: DWord): DWord;
  2238. {$EXTERNALSYM D3DSHADER_VERSION_MAJOR}
  2239. //#define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)
  2240. function D3DSHADER_VERSION_MINOR(_Version: DWord): DWord;
  2241. {$EXTERNALSYM D3DSHADER_VERSION_MINOR}
  2242.  
  2243. const
  2244.   // destination/source parameter register type
  2245.   D3DSI_COMMENTSIZE_SHIFT = 16;
  2246.   {$EXTERNALSYM D3DSI_COMMENTSIZE_SHIFT}
  2247.   D3DSI_COMMENTSIZE_MASK  = $7FFF0000;
  2248.   {$EXTERNALSYM D3DSI_COMMENTSIZE_MASK}
  2249.  
  2250. //#define D3DSHADER_COMMENT(_DWordSize) \
  2251. //    ((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COMMENT)
  2252. function D3DSHADER_COMMENT(_DWordSize: DWord) : DWord;
  2253. {$EXTERNALSYM D3DSHADER_COMMENT}
  2254.  
  2255. const
  2256.   // pixel/vertex shader end token
  2257.   D3DPS_END  = $0000FFFF;
  2258.   {$EXTERNALSYM D3DPS_END}
  2259.   D3DVS_END  = $0000FFFF;
  2260.   {$EXTERNALSYM D3DVS_END}
  2261.  
  2262.  
  2263. //---------------------------------------------------------------------
  2264.  
  2265. type
  2266.   // High order surfaces
  2267.   //
  2268.   _D3DBASISTYPE = (
  2269.     D3DBASIS_BEZIER      {= 0},
  2270.     D3DBASIS_BSPLINE     {= 1},
  2271.     D3DBASIS_CATMULL_ROM {= 2} { In D3D8 this used to be D3DBASIS_INTERPOLATE }
  2272.   );
  2273.   {$EXTERNALSYM _D3DBASISTYPE}
  2274.   D3DBASISTYPE = _D3DBASISTYPE;
  2275.   {$EXTERNALSYM D3DBASISTYPE}
  2276.   TD3DBasisType = _D3DBASISTYPE;
  2277.  
  2278.   _D3DDEGREETYPE = (
  2279.   {$IFNDEF COMPILER6_UP}
  2280.     D3DDEGREE_invalid_0  {= 0},
  2281.     D3DDEGREE_LINEAR     {= 1},
  2282.     D3DDEGREE_QUADRATIC  {= 2},
  2283.     D3DDEGREE_CUBIC      {= 3},
  2284.     D3DDEGREE_invalid_4  {= 4},
  2285.     D3DDEGREE_QUINTIC    {= 5}
  2286.   {$ELSE}
  2287.     D3DDEGREE_LINEAR      = 1,
  2288.     D3DDEGREE_QUADRATIC   = 2,
  2289.     D3DDEGREE_CUBIC       = 3,
  2290.     D3DDEGREE_QUINTIC     = 5
  2291.   {$ENDIF}
  2292.   );
  2293.   {$EXTERNALSYM _D3DDEGREETYPE}
  2294.   D3DDEGREETYPE = _D3DDEGREETYPE;
  2295.   {$EXTERNALSYM D3DDEGREETYPE}
  2296.   TD3DDegreeType = _D3DDEGREETYPE;
  2297.  
  2298.   _D3DPATCHEDGESTYLE = (
  2299.     D3DPATCHEDGE_DISCRETE   {= 0},
  2300.     D3DPATCHEDGE_CONTINUOUS {= 1}
  2301.   );
  2302.   {$EXTERNALSYM _D3DPATCHEDGESTYLE}
  2303.   D3DPATCHEDGESTYLE = _D3DPATCHEDGESTYLE;
  2304.   {$EXTERNALSYM D3DPATCHEDGESTYLE}
  2305.   TD3DPatchEdgeStyle = _D3DPATCHEDGESTYLE;
  2306.  
  2307.   _D3DSTATEBLOCKTYPE = (
  2308.   {$IFNDEF COMPILER6_UP}
  2309.     D3DSBT_INVALID_0,
  2310.     D3DSBT_ALL          {= 1}, // capture all state
  2311.     D3DSBT_PIXELSTATE   {= 2}, // capture pixel state
  2312.     D3DSBT_VERTEXSTATE  {= 3}  // capture vertex state
  2313.   {$ELSE}
  2314.     D3DSBT_ALL          = 1, // capture all state
  2315.     D3DSBT_PIXELSTATE   = 2, // capture pixel state
  2316.     D3DSBT_VERTEXSTATE  = 3  // capture vertex state
  2317.   {$ENDIF}
  2318.   );
  2319.   {$EXTERNALSYM _D3DSTATEBLOCKTYPE}
  2320.   D3DSTATEBLOCKTYPE = _D3DSTATEBLOCKTYPE;
  2321.   {$EXTERNALSYM D3DSTATEBLOCKTYPE}
  2322.   TD3DStateBlockType = _D3DSTATEBLOCKTYPE;
  2323.  
  2324. type
  2325.   // The D3DVERTEXBLENDFLAGS type is used with D3DRS_VERTEXBLEND state.
  2326.   //
  2327.   _D3DVERTEXBLENDFLAGS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2328.   {$EXTERNALSYM _D3DVERTEXBLENDFLAGS}
  2329.   D3DVERTEXBLENDFLAGS = _D3DVERTEXBLENDFLAGS;
  2330.   {$EXTERNALSYM D3DVERTEXBLENDFLAGS}
  2331.   TD3DVertexBlendFlags = _D3DVERTEXBLENDFLAGS;
  2332.  
  2333. const
  2334.   D3DVBF_DISABLE  = 0;            // Disable vertex blending
  2335.   {$EXTERNALSYM D3DVBF_DISABLE}
  2336.   D3DVBF_1WEIGHTS = 1;            // 2 matrix blending
  2337.   {$EXTERNALSYM D3DVBF_1WEIGHTS}
  2338.   D3DVBF_2WEIGHTS = 2;            // 3 matrix blending
  2339.   {$EXTERNALSYM D3DVBF_2WEIGHTS}
  2340.   D3DVBF_3WEIGHTS = 3;            // 4 matrix blending
  2341.   {$EXTERNALSYM D3DVBF_3WEIGHTS}
  2342.   D3DVBF_TWEENING = 255;          // blending using D3DRS_TWEENFACTOR
  2343.   {$EXTERNALSYM D3DVBF_TWEENING}
  2344.   D3DVBF_0WEIGHTS = 256;          // one matrix is used with weight 1.0
  2345.   {$EXTERNALSYM D3DVBF_0WEIGHTS}
  2346.   D3DVBF_FORCE_DWORD = $7fffffff; // force 32-bit size enum
  2347.   {$EXTERNALSYM D3DVBF_FORCE_DWORD}
  2348.  
  2349. type
  2350.   _D3DTEXTURETRANSFORMFLAGS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2351.   {$EXTERNALSYM _D3DTEXTURETRANSFORMFLAGS}
  2352.   D3DTEXTURETRANSFORMFLAGS = _D3DTEXTURETRANSFORMFLAGS;
  2353.   {$EXTERNALSYM D3DTEXTURETRANSFORMFLAGS}
  2354.   TD3DTextureTransformFlags = _D3DTEXTURETRANSFORMFLAGS;
  2355.  
  2356. const
  2357.   D3DTTFF_DISABLE         = 0;    // texture coordinates are passed directly
  2358.   {$EXTERNALSYM D3DTTFF_DISABLE}
  2359.   D3DTTFF_COUNT1          = 1;    // rasterizer should expect 1-D texture coords
  2360.   {$EXTERNALSYM D3DTTFF_COUNT1}
  2361.   D3DTTFF_COUNT2          = 2;    // rasterizer should expect 2-D texture coords
  2362.   {$EXTERNALSYM D3DTTFF_COUNT2}
  2363.   D3DTTFF_COUNT3          = 3;    // rasterizer should expect 3-D texture coords
  2364.   {$EXTERNALSYM D3DTTFF_COUNT3}
  2365.   D3DTTFF_COUNT4          = 4;    // rasterizer should expect 4-D texture coords
  2366.   {$EXTERNALSYM D3DTTFF_COUNT4}
  2367.   D3DTTFF_PROJECTED       = 256;  // texcoords to be divided by COUNTth element
  2368.   {$EXTERNALSYM D3DTTFF_PROJECTED}
  2369.   D3DTTFF_FORCE_DWORD     = $7fffffff;
  2370.   {$EXTERNALSYM D3DTTFF_FORCE_DWORD}
  2371.  
  2372. const
  2373.   // Macros to set texture coordinate format bits in the FVF id
  2374.  
  2375.   D3DFVF_TEXTUREFORMAT2 = 0;         // Two floating point values
  2376.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT2}
  2377.   D3DFVF_TEXTUREFORMAT1 = 3;         // One floating point value
  2378.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT1}
  2379.   D3DFVF_TEXTUREFORMAT3 = 1;         // Three floating point values
  2380.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT3}
  2381.   D3DFVF_TEXTUREFORMAT4 = 2;         // Four floating point values
  2382.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT4}
  2383.  
  2384. //#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
  2385. function D3DFVF_TEXCOORDSIZE3(CoordIndex: DWord): DWord;
  2386. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE3}
  2387. //#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
  2388. function D3DFVF_TEXCOORDSIZE2(CoordIndex: DWord): DWord;
  2389. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE2}
  2390. //#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
  2391. function D3DFVF_TEXCOORDSIZE4(CoordIndex: DWord): DWord;
  2392. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE4}
  2393. //#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
  2394. function D3DFVF_TEXCOORDSIZE1(CoordIndex: DWord): DWord;
  2395. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE1}
  2396.  
  2397.  
  2398. //---------------------------------------------------------------------
  2399.  
  2400. type
  2401.   { Direct3D9 Device types }
  2402.   _D3DDEVTYPE = (
  2403.   {$IFNDEF COMPILER6_UP}
  2404.     D3DDEVTYPE_INVALID_0,
  2405.     D3DDEVTYPE_HAL         {= 1},
  2406.     D3DDEVTYPE_REF         {= 2},
  2407.     D3DDEVTYPE_SW          {= 3}
  2408.   {$ELSE}
  2409.     D3DDEVTYPE_HAL         = 1,
  2410.     D3DDEVTYPE_REF         = 2,
  2411.     D3DDEVTYPE_SW          = 3
  2412.   {$ENDIF}
  2413.   );
  2414.   {$EXTERNALSYM _D3DDEVTYPE}
  2415.   D3DDEVTYPE = _D3DDEVTYPE;
  2416.   {$EXTERNALSYM D3DDEVTYPE}
  2417.   TD3DDevType = _D3DDEVTYPE;
  2418.  
  2419.   { Multi-Sample buffer types }
  2420.   _D3DMULTISAMPLE_TYPE = (
  2421.   {$IFNDEF COMPILER6_UP}
  2422.     D3DMULTISAMPLE_NONE            {=  0},
  2423.     D3DMULTISAMPLE_NONMASKABLE     {=  1},
  2424.     D3DMULTISAMPLE_2_SAMPLES       {=  2},
  2425.     D3DMULTISAMPLE_3_SAMPLES       {=  3},
  2426.     D3DMULTISAMPLE_4_SAMPLES       {=  4},
  2427.     D3DMULTISAMPLE_5_SAMPLES       {=  5},
  2428.     D3DMULTISAMPLE_6_SAMPLES       {=  6},
  2429.     D3DMULTISAMPLE_7_SAMPLES       {=  7},
  2430.     D3DMULTISAMPLE_8_SAMPLES       {=  8},
  2431.     D3DMULTISAMPLE_9_SAMPLES       {=  9},
  2432.     D3DMULTISAMPLE_10_SAMPLES      {= 10},
  2433.     D3DMULTISAMPLE_11_SAMPLES      {= 11},
  2434.     D3DMULTISAMPLE_12_SAMPLES      {= 12},
  2435.     D3DMULTISAMPLE_13_SAMPLES      {= 13},
  2436.     D3DMULTISAMPLE_14_SAMPLES      {= 14},
  2437.     D3DMULTISAMPLE_15_SAMPLES      {= 15},
  2438.     D3DMULTISAMPLE_16_SAMPLES      {= 16}
  2439.   {$ELSE}
  2440.     D3DMULTISAMPLE_NONE            =  0,
  2441.     D3DMULTISAMPLE_NONMASKABLE     =  1,
  2442.     D3DMULTISAMPLE_2_SAMPLES       =  2,
  2443.     D3DMULTISAMPLE_3_SAMPLES       =  3,
  2444.     D3DMULTISAMPLE_4_SAMPLES       =  4,
  2445.     D3DMULTISAMPLE_5_SAMPLES       =  5,
  2446.     D3DMULTISAMPLE_6_SAMPLES       =  6,
  2447.     D3DMULTISAMPLE_7_SAMPLES       =  7,
  2448.     D3DMULTISAMPLE_8_SAMPLES       =  8,
  2449.     D3DMULTISAMPLE_9_SAMPLES       =  9,
  2450.     D3DMULTISAMPLE_10_SAMPLES      = 10,
  2451.     D3DMULTISAMPLE_11_SAMPLES      = 11,
  2452.     D3DMULTISAMPLE_12_SAMPLES      = 12,
  2453.     D3DMULTISAMPLE_13_SAMPLES      = 13,
  2454.     D3DMULTISAMPLE_14_SAMPLES      = 14,
  2455.     D3DMULTISAMPLE_15_SAMPLES      = 15,
  2456.     D3DMULTISAMPLE_16_SAMPLES      = 16
  2457.   {$ENDIF}
  2458.   );
  2459.   {$EXTERNALSYM _D3DMULTISAMPLE_TYPE}
  2460.   D3DMULTISAMPLE_TYPE = _D3DMULTISAMPLE_TYPE;
  2461.   {$EXTERNALSYM D3DMULTISAMPLE_TYPE}
  2462.   TD3DMultiSampleType = _D3DMULTISAMPLE_TYPE;
  2463.  
  2464. (* Formats
  2465.  * Most of these names have the following convention:
  2466.  *      A = Alpha
  2467.  *      R = Red
  2468.  *      G = Green
  2469.  *      B = Blue
  2470.  *      X = Unused Bits
  2471.  *      P = Palette
  2472.  *      L = Luminance
  2473.  *      U = dU coordinate for BumpMap
  2474.  *      V = dV coordinate for BumpMap
  2475.  *      S = Stencil
  2476.  *      D = Depth (e.g. Z or W buffer)
  2477.  *      C = Computed from other channels (typically on certain read operations)
  2478.  *
  2479.  *      Further, the order of the pieces are from MSB first; hence
  2480.  *      D3DFMT_A8L8 indicates that the high byte of this two byte
  2481.  *      format is alpha.
  2482.  *
  2483.  *      D16 indicates:
  2484.  *           - An integer 16-bit value.
  2485.  *           - An app-lockable surface.
  2486.  *
  2487.  *      All Depth/Stencil formats except D3DFMT_D16_LOCKABLE indicate:
  2488.  *          - no particular bit ordering per pixel, and
  2489.  *          - are not app lockable, and
  2490.  *          - the driver is allowed to consume more than the indicated
  2491.  *            number of bits per Depth channel (but not Stencil channel).
  2492.  *)
  2493. //#ifndef MAKEFOURCC
  2494. //    #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
  2495. //                ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |       \
  2496. //                ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
  2497. //#endif /* defined(MAKEFOURCC) */
  2498. function MAKEFOURCC(ch0, ch1, ch2, ch3: Char): DWord;
  2499. {$EXTERNALSYM MAKEFOURCC}
  2500.  
  2501.  
  2502. {$IFNDEF COMPILER6_UP}
  2503. const
  2504.   D3DFMT_UNKNOWN              =  0;
  2505.   {$EXTERNALSYM D3DFMT_UNKNOWN}
  2506.  
  2507.   D3DFMT_R8G8B8               = 20;
  2508.   {$EXTERNALSYM D3DFMT_R8G8B8}
  2509.   D3DFMT_A8R8G8B8             = 21;
  2510.   {$EXTERNALSYM D3DFMT_A8R8G8B8}
  2511.   D3DFMT_X8R8G8B8             = 22;
  2512.   {$EXTERNALSYM D3DFMT_X8R8G8B8}
  2513.   D3DFMT_R5G6B5               = 23;
  2514.   {$EXTERNALSYM D3DFMT_R5G6B5}
  2515.   D3DFMT_X1R5G5B5             = 24;
  2516.   {$EXTERNALSYM D3DFMT_X1R5G5B5}
  2517.   D3DFMT_A1R5G5B5             = 25;
  2518.   {$EXTERNALSYM D3DFMT_A1R5G5B5}
  2519.   D3DFMT_A4R4G4B4             = 26;
  2520.   {$EXTERNALSYM D3DFMT_A4R4G4B4}
  2521.   D3DFMT_R3G3B2               = 27;
  2522.   {$EXTERNALSYM D3DFMT_R3G3B2}
  2523.   D3DFMT_A8                   = 28;
  2524.   {$EXTERNALSYM D3DFMT_A8}
  2525.   D3DFMT_A8R3G3B2             = 29;
  2526.   {$EXTERNALSYM D3DFMT_A8R3G3B2}
  2527.   D3DFMT_X4R4G4B4             = 30;
  2528.   {$EXTERNALSYM D3DFMT_X4R4G4B4}
  2529.   D3DFMT_A2B10G10R10          = 31;
  2530.   {$EXTERNALSYM D3DFMT_A2B10G10R10}
  2531.   D3DFMT_A8B8G8R8             = 32;
  2532.   {$EXTERNALSYM D3DFMT_A8B8G8R8}
  2533.   D3DFMT_X8B8G8R8             = 33;
  2534.   {$EXTERNALSYM D3DFMT_X8B8G8R8}
  2535.   D3DFMT_G16R16               = 34;
  2536.   {$EXTERNALSYM D3DFMT_G16R16}
  2537.   D3DFMT_A2R10G10B10          = 35;
  2538.   {$EXTERNALSYM D3DFMT_A2R10G10B10}
  2539.   D3DFMT_A16B16G16R16         = 36;
  2540.   {$EXTERNALSYM D3DFMT_A16B16G16R16}
  2541.  
  2542.   D3DFMT_A8P8                 = 40;
  2543.   {$EXTERNALSYM D3DFMT_A8P8}
  2544.   D3DFMT_P8                   = 41;
  2545.   {$EXTERNALSYM D3DFMT_P8}
  2546.  
  2547.   D3DFMT_L8                   = 50;
  2548.   {$EXTERNALSYM D3DFMT_L8}
  2549.   D3DFMT_A8L8                 = 51;
  2550.   {$EXTERNALSYM D3DFMT_A8L8}
  2551.   D3DFMT_A4L4                 = 52;
  2552.   {$EXTERNALSYM D3DFMT_A4L4}
  2553.  
  2554.   D3DFMT_V8U8                 = 60;
  2555.   {$EXTERNALSYM D3DFMT_V8U8}
  2556.   D3DFMT_L6V5U5               = 61;
  2557.   {$EXTERNALSYM D3DFMT_L6V5U5}
  2558.   D3DFMT_X8L8V8U8             = 62;
  2559.   {$EXTERNALSYM D3DFMT_X8L8V8U8}
  2560.   D3DFMT_Q8W8V8U8             = 63;
  2561.   {$EXTERNALSYM D3DFMT_Q8W8V8U8}
  2562.   D3DFMT_V16U16               = 64;
  2563.   {$EXTERNALSYM D3DFMT_V16U16}
  2564.   D3DFMT_A2W10V10U10          = 67;
  2565.   {$EXTERNALSYM D3DFMT_A2W10V10U10}
  2566.  
  2567.   // D3DFMT_UYVY                 = MAKEFOURCC('U', 'Y', 'V', 'Y');
  2568.   D3DFMT_UYVY                 = Byte('U') or (Byte('Y') shl 8) or (Byte('V') shl 16) or (Byte('Y') shl 24);
  2569.   {$EXTERNALSYM D3DFMT_UYVY}
  2570.   // D3DFMT_R8G8_B8G8            = MAKEFOURCC('R', 'G', 'B', 'G'),
  2571.   D3DFMT_R8G8_B8G8            = Byte('R') or (Byte('G') shl 8) or (Byte('B') shl 16) or (Byte('G') shl 24);
  2572.   {$EXTERNALSYM D3DFMT_R8G8_B8G8}
  2573.   // D3DFMT_YUY2                 = MAKEFOURCC('Y', 'U', 'Y', '2'),
  2574.   D3DFMT_YUY2                 = Byte('Y') or (Byte('U') shl 8) or (Byte('Y') shl 16) or (Byte('2') shl 24);
  2575.   {$EXTERNALSYM D3DFMT_YUY2}
  2576.   // D3DFMT_G8R8_G8B8            = MAKEFOURCC('G', 'R', 'G', 'B'),
  2577.   D3DFMT_G8R8_G8B8            = Byte('G') or (Byte('R') shl 8) or (Byte('G') shl 16) or (Byte('B') shl 24);
  2578.   {$EXTERNALSYM D3DFMT_G8R8_G8B8}
  2579.   // D3DFMT_DXT1                 = MAKEFOURCC('D', 'X', 'T', '1'),
  2580.   D3DFMT_DXT1                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('1') shl 24);
  2581.   {$EXTERNALSYM D3DFMT_DXT1}
  2582.   // D3DFMT_DXT2                 = MAKEFOURCC('D', 'X', 'T', '2'),
  2583.   D3DFMT_DXT2                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('2') shl 24);
  2584.   {$EXTERNALSYM D3DFMT_DXT2}
  2585.   // D3DFMT_DXT3                 = MAKEFOURCC('D', 'X', 'T', '3'),
  2586.   D3DFMT_DXT3                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('3') shl 24);
  2587.   {$EXTERNALSYM D3DFMT_DXT3}
  2588.   // D3DFMT_DXT4                 = MAKEFOURCC('D', 'X', 'T', '4'),
  2589.   D3DFMT_DXT4                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('4') shl 24);
  2590.   {$EXTERNALSYM D3DFMT_DXT4}
  2591.   // D3DFMT_DXT5                 = MAKEFOURCC('D', 'X', 'T', '5'),
  2592.   D3DFMT_DXT5                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('5') shl 24);
  2593.   {$EXTERNALSYM D3DFMT_DXT5}
  2594.  
  2595.   D3DFMT_D16_LOCKABLE         = 70;
  2596.   {$EXTERNALSYM D3DFMT_D16_LOCKABLE}
  2597.   D3DFMT_D32                  = 71;
  2598.   {$EXTERNALSYM D3DFMT_D32}
  2599.   D3DFMT_D15S1                = 73;
  2600.   {$EXTERNALSYM D3DFMT_D15S1}
  2601.   D3DFMT_D24S8                = 75;
  2602.   {$EXTERNALSYM D3DFMT_D24S8}
  2603.   D3DFMT_D24X8                = 77;
  2604.   {$EXTERNALSYM D3DFMT_D24X8}
  2605.   D3DFMT_D24X4S4              = 79;
  2606.   {$EXTERNALSYM D3DFMT_D24X4S4}
  2607.   D3DFMT_D16                  = 80;
  2608.   {$EXTERNALSYM D3DFMT_D16}
  2609.  
  2610.  
  2611.   D3DFMT_D32F_LOCKABLE        = 82;
  2612.   {$EXTERNALSYM D3DFMT_D32F_LOCKABLE}
  2613.   D3DFMT_D24FS8               = 83;
  2614.   {$EXTERNALSYM D3DFMT_D24FS8}
  2615.  
  2616.  
  2617.   D3DFMT_L16                  = 81;
  2618.   {$EXTERNALSYM D3DFMT_L16}
  2619.  
  2620.  
  2621.   D3DFMT_VERTEXDATA           =100;
  2622.   {$EXTERNALSYM D3DFMT_VERTEXDATA}
  2623.   D3DFMT_INDEX16              =101;
  2624.   {$EXTERNALSYM D3DFMT_INDEX16}
  2625.   D3DFMT_INDEX32              =102;
  2626.   {$EXTERNALSYM D3DFMT_INDEX32}
  2627.  
  2628.   D3DFMT_Q16W16V16U16         =110;
  2629.   {$EXTERNALSYM D3DFMT_Q16W16V16U16}
  2630.  
  2631.   // D3DFMT_MULTI2_ARGB8         = MAKEFOURCC('M','E','T','1'),
  2632.   D3DFMT_MULTI2_ARGB8         = Byte('M') or (Byte('E') shl 8) or (Byte('T') shl 16) or (Byte('1') shl 24);
  2633.   {$EXTERNALSYM D3DFMT_MULTI2_ARGB8}
  2634.  
  2635.   // Floating point surface formats
  2636.  
  2637.   // s10e5 formats (16-bits per channel)
  2638.   D3DFMT_R16F                 = 111;
  2639.   {$EXTERNALSYM D3DFMT_R16F}
  2640.   D3DFMT_G16R16F              = 112;
  2641.   {$EXTERNALSYM D3DFMT_G16R16F}
  2642.   D3DFMT_A16B16G16R16F        = 113;
  2643.   {$EXTERNALSYM D3DFMT_A16B16G16R16F}
  2644.  
  2645.   // IEEE s23e8 formats (32-bits per channel)
  2646.   D3DFMT_R32F                 = 114;
  2647.   {$EXTERNALSYM D3DFMT_R32F}
  2648.   D3DFMT_G32R32F              = 115;
  2649.   {$EXTERNALSYM D3DFMT_G32R32F}
  2650.   D3DFMT_A32B32G32R32F        = 116;
  2651.   {$EXTERNALSYM D3DFMT_A32B32G32R32F}
  2652.  
  2653.   D3DFMT_CxV8U8               = 117;
  2654.   {$EXTERNALSYM D3DFMT_CxV8U8}
  2655.  
  2656.  
  2657.   D3DFMT_FORCE_DWORD          = $7fffffff;
  2658.   {$EXTERNALSYM D3DFMT_FORCE_DWORD}
  2659.  
  2660. type
  2661.   _D3DFORMAT = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2662. {$ELSE}
  2663. type
  2664.   _D3DFORMAT = (
  2665.   {$IFDEF BCB}
  2666.     D3DFMT_DUMMY
  2667.   {$ELSE}
  2668.     D3DFMT_UNKNOWN              =  0,
  2669.  
  2670.     D3DFMT_R8G8B8               = 20,
  2671.     D3DFMT_A8R8G8B8             = 21,
  2672.     D3DFMT_X8R8G8B8             = 22,
  2673.     D3DFMT_R5G6B5               = 23,
  2674.     D3DFMT_X1R5G5B5             = 24,
  2675.     D3DFMT_A1R5G5B5             = 25,
  2676.     D3DFMT_A4R4G4B4             = 26,
  2677.     D3DFMT_R3G3B2               = 27,
  2678.     D3DFMT_A8                   = 28,
  2679.     D3DFMT_A8R3G3B2             = 29,
  2680.     D3DFMT_X4R4G4B4             = 30,
  2681.     D3DFMT_A2B10G10R10          = 31,
  2682.     D3DFMT_A8B8G8R8             = 32,
  2683.     D3DFMT_X8B8G8R8             = 33,
  2684.     D3DFMT_G16R16               = 34,
  2685.     D3DFMT_A2R10G10B10          = 35,
  2686.     D3DFMT_A16B16G16R16         = 36,
  2687.  
  2688.     D3DFMT_A8P8                 = 40,
  2689.     D3DFMT_P8                   = 41,
  2690.  
  2691.     D3DFMT_L8                   = 50,
  2692.     D3DFMT_A8L8                 = 51,
  2693.     D3DFMT_A4L4                 = 52,
  2694.  
  2695.     D3DFMT_V8U8                 = 60,
  2696.     D3DFMT_L6V5U5               = 61,
  2697.     D3DFMT_X8L8V8U8             = 62,
  2698.     D3DFMT_Q8W8V8U8             = 63,
  2699.     D3DFMT_V16U16               = 64,
  2700.     D3DFMT_A2W10V10U10          = 67,
  2701.     D3DFMT_A8X8V8U8             = 68,
  2702.     D3DFMT_L8X8V8U8             = 69,
  2703.  
  2704.     // D3DFMT_UYVY                 = MAKEFOURCC('U', 'Y', 'V', 'Y'),
  2705.     D3DFMT_UYVY                 = Byte('U') or (Byte('Y') shl 8) or (Byte('V') shl 16) or (Byte('Y') shl 24),
  2706.     // D3DFMT_RGBG                 = MAKEFOURCC('R', 'G', 'B', 'G'),
  2707.     D3DFMT_RGBG                 = Byte('R') or (Byte('G') shl 8) or (Byte('B') shl 16) or (Byte('G') shl 24),
  2708.     // D3DFMT_YUY2                 = MAKEFOURCC('Y', 'U', 'Y', '2'),
  2709.     D3DFMT_YUY2                 = Byte('Y') or (Byte('U') shl 8) or (Byte('Y') shl 16) or (Byte('2') shl 24),
  2710.     // D3DFMT_GRGB                 = MAKEFOURCC('G', 'R', 'G', 'B'),
  2711.     D3DFMT_GRGB                 = Byte('G') or (Byte('R') shl 8) or (Byte('G') shl 16) or (Byte('B') shl 24),
  2712.     // D3DFMT_DXT1                 = MAKEFOURCC('D', 'X', 'T', '1'),
  2713.     D3DFMT_DXT1                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('1') shl 24),
  2714.     // D3DFMT_DXT2                 = MAKEFOURCC('D', 'X', 'T', '2'),
  2715.     D3DFMT_DXT2                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('2') shl 24),
  2716.     // D3DFMT_DXT3                 = MAKEFOURCC('D', 'X', 'T', '3'),
  2717.     D3DFMT_DXT3                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('3') shl 24),
  2718.     // D3DFMT_DXT4                 = MAKEFOURCC('D', 'X', 'T', '4'),
  2719.     D3DFMT_DXT4                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('4') shl 24),
  2720.     // D3DFMT_DXT5                 = MAKEFOURCC('D', 'X', 'T', '5'),
  2721.     D3DFMT_DXT5                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('5') shl 24),
  2722.  
  2723.     D3DFMT_D16_LOCKABLE         = 70,
  2724.     D3DFMT_D32                  = 71,
  2725.     D3DFMT_D15S1                = 73,
  2726.     D3DFMT_D24S8                = 75,
  2727.     D3DFMT_D24X8                = 77,
  2728.     D3DFMT_D24X4S4              = 79,
  2729.     D3DFMT_D16                  = 80,
  2730.  
  2731.     D3DFMT_D32F_LOCKABLE        = 82,
  2732.     D3DFMT_D24FS8               = 83,
  2733.  
  2734.  
  2735.     D3DFMT_L16                  = 81,
  2736.  
  2737.     D3DFMT_VERTEXDATA           =100,
  2738.     D3DFMT_INDEX16              =101,
  2739.     D3DFMT_INDEX32              =102,
  2740.  
  2741.     D3DFMT_Q16W16V16U16         =110,
  2742.  
  2743.     // D3DFMT_MULTI2_ARGB8         = MAKEFOURCC('M','E','T','1'),
  2744.     D3DFMT_MULTI2_ARGB8         = Byte('M') or (Byte('E') shl 8) or (Byte('T') shl 16) or (Byte('1') shl 24),
  2745.  
  2746.     // Floating point surface formats
  2747.  
  2748.     // s10e5 formats (16-bits per channel)
  2749.     D3DFMT_R16F                 = 111,
  2750.     D3DFMT_G16R16F              = 112,
  2751.     D3DFMT_A16B16G16R16F        = 113,
  2752.  
  2753.     // IEEE s23e8 formats (32-bits per channel)
  2754.     D3DFMT_R32F                 = 114,
  2755.     D3DFMT_G32R32F              = 115,
  2756.     D3DFMT_A32B32G32R32F        = 116,
  2757.  
  2758.     D3DFMT_CxV8U8               = 117,
  2759.  
  2760.  
  2761.     D3DFMT_FORCE_DWORD          = $7fffffff
  2762.   {$ENDIF}
  2763.   );
  2764. {$ENDIF}
  2765.   {$EXTERNALSYM _D3DFORMAT}
  2766.   D3DFORMAT = _D3DFORMAT;
  2767.   {$EXTERNALSYM D3DFORMAT}
  2768.   PD3DFormat = ^TD3DFormat;
  2769.   TD3DFormat = _D3DFORMAT;
  2770.  
  2771.   { Display Modes }
  2772.   PD3DDisplayMode = ^TD3DDisplayMode;
  2773.   _D3DDISPLAYMODE = packed record
  2774.     Width: LongWord;
  2775.     Height: LongWord;
  2776.     RefreshRate: LongWord;
  2777.     Format: TD3DFormat;
  2778.   end {_D3DDISPLAYMODE};
  2779.   {$EXTERNALSYM _D3DDISPLAYMODE}
  2780.   D3DDISPLAYMODE = _D3DDISPLAYMODE;
  2781.   {$EXTERNALSYM D3DDISPLAYMODE}
  2782.   TD3DDisplayMode = _D3DDISPLAYMODE;
  2783.  
  2784.   { Creation Parameters }
  2785.   PD3DDeviceCreationParameters = ^TD3DDeviceCreationParameters;
  2786.   _D3DDEVICE_CREATION_PARAMETERS = packed record
  2787.     AdapterOrdinal: LongWord;
  2788.     DeviceType: TD3DDevType;
  2789.     hFocusWindow: HWND;
  2790.     BehaviorFlags: LongInt;
  2791.   end {_D3DDEVICE_CREATION_PARAMETERS};
  2792.   {$EXTERNALSYM _D3DDEVICE_CREATION_PARAMETERS}
  2793.   D3DDEVICE_CREATION_PARAMETERS = _D3DDEVICE_CREATION_PARAMETERS;
  2794.   {$EXTERNALSYM D3DDEVICE_CREATION_PARAMETERS}
  2795.   TD3DDeviceCreationParameters = _D3DDEVICE_CREATION_PARAMETERS;
  2796.  
  2797.  
  2798.   { SwapEffects }
  2799.   _D3DSWAPEFFECT = (
  2800.   {$IFNDEF COMPILER6_UP}
  2801.     D3DSWAPEFFECT_INVALID_0     {= 0},
  2802.     D3DSWAPEFFECT_DISCARD       {= 1},
  2803.     D3DSWAPEFFECT_FLIP          {= 2},
  2804.     D3DSWAPEFFECT_COPY          {= 3}
  2805.   {$ELSE}
  2806.     D3DSWAPEFFECT_DISCARD       = 1,
  2807.     D3DSWAPEFFECT_FLIP          = 2,
  2808.     D3DSWAPEFFECT_COPY          = 3
  2809.   {$ENDIF}
  2810.   );
  2811.   {$EXTERNALSYM _D3DSWAPEFFECT}
  2812.   D3DSWAPEFFECT = _D3DSWAPEFFECT;
  2813.   {$EXTERNALSYM D3DSWAPEFFECT}
  2814.   TD3DSwapEffect = _D3DSWAPEFFECT;
  2815.  
  2816.   { Pool types }
  2817.   _D3DPOOL = (
  2818.     D3DPOOL_DEFAULT     {= 0},
  2819.     D3DPOOL_MANAGED     {= 1},
  2820.     D3DPOOL_SYSTEMMEM   {= 2},
  2821.     D3DPOOL_SCRATCH     {= 3}
  2822.   );
  2823.   {$EXTERNALSYM _D3DPOOL}
  2824.   D3DPOOL = _D3DPOOL;
  2825.   {$EXTERNALSYM D3DPOOL}
  2826.   TD3DPool = _D3DPOOL;
  2827.  
  2828.  
  2829. const
  2830.   { RefreshRate pre-defines }
  2831.   D3DPRESENT_RATE_DEFAULT         = $00000000;
  2832.   {$EXTERNALSYM D3DPRESENT_RATE_DEFAULT}
  2833.  
  2834. type
  2835.   { Resize Optional Parameters }
  2836.   PD3DPresentParameters = ^TD3DPresentParameters;
  2837.   _D3DPRESENT_PARAMETERS_ = packed record
  2838.     BackBufferWidth:                    LongWord;
  2839.     BackBufferHeight:                   LongWord;
  2840.     BackBufferFormat:                   TD3DFormat;
  2841.     BackBufferCount:                    LongWord;
  2842.  
  2843.     MultiSampleType:                    TD3DMultiSampleType;
  2844.     MultiSampleQuality:                 DWORD;
  2845.  
  2846.     SwapEffect:                         TD3DSwapEffect;
  2847.     hDeviceWindow:                      HWND;
  2848.     Windowed:                           Bool;
  2849.     EnableAutoDepthStencil:             Bool;
  2850.     AutoDepthStencilFormat:             TD3DFormat;
  2851.     Flags: LongInt;
  2852.  
  2853.     { FullScreen_RefreshRateInHz must be zero for Windowed mode }
  2854.     FullScreen_RefreshRateInHz:         LongWord;
  2855.     PresentationInterval:               LongWord;
  2856.   end {_D3DPRESENT_PARAMETERS_};
  2857.   {$EXTERNALSYM _D3DPRESENT_PARAMETERS_}
  2858.   D3DPRESENT_PARAMETERS = _D3DPRESENT_PARAMETERS_;
  2859.   {$EXTERNALSYM D3DPRESENT_PARAMETERS}
  2860.   TD3DPresentParameters = _D3DPRESENT_PARAMETERS_;
  2861.  
  2862.   // Values for D3DPRESENT_PARAMETERS.Flags
  2863.  
  2864. const
  2865.   D3DPRESENTFLAG_LOCKABLE_BACKBUFFER  = $00000001;
  2866.   {$EXTERNALSYM D3DPRESENTFLAG_LOCKABLE_BACKBUFFER}
  2867.   D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL = $00000002;
  2868.   {$EXTERNALSYM D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL}
  2869.   D3DPRESENTFLAG_DEVICECLIP           = $00000004;
  2870.   {$EXTERNALSYM D3DPRESENTFLAG_DEVICECLIP}
  2871.   D3DPRESENTFLAG_VIDEO                = $00000010;
  2872.   {$EXTERNALSYM D3DPRESENTFLAG_VIDEO}
  2873.  
  2874.   { Gamma Ramp: Same as DX7 }
  2875.  
  2876. type
  2877.   PD3DGammaRamp = ^TD3DGammaRamp;
  2878.   _D3DGAMMARAMP = packed record
  2879.     red   : array [0..255] of Word;
  2880.     green : array [0..255] of Word;
  2881.     blue  : array [0..255] of Word;
  2882.   end;
  2883.   {$EXTERNALSYM _D3DGAMMARAMP}
  2884.   D3DGAMMARAMP = _D3DGAMMARAMP;
  2885.   {$EXTERNALSYM D3DGAMMARAMP}
  2886.   TD3DGammaRamp = _D3DGAMMARAMP;
  2887.  
  2888.   { Back buffer types }
  2889.   _D3DBACKBUFFER_TYPE = (
  2890.     D3DBACKBUFFER_TYPE_MONO         {= 0},
  2891.     D3DBACKBUFFER_TYPE_LEFT         {= 1},
  2892.     D3DBACKBUFFER_TYPE_RIGHT        {= 2}
  2893.   );
  2894.   {$EXTERNALSYM _D3DBACKBUFFER_TYPE}
  2895.   D3DBACKBUFFER_TYPE = _D3DBACKBUFFER_TYPE;
  2896.   {$EXTERNALSYM D3DBACKBUFFER_TYPE}
  2897.   TD3DBackbufferType = _D3DBACKBUFFER_TYPE;
  2898.  
  2899.  
  2900.   { Types }
  2901.   _D3DRESOURCETYPE = (
  2902.   {$IFNDEF COMPILER6_UP}
  2903.     D3DRTYPE_INVALID_0              {=  0},
  2904.     D3DRTYPE_SURFACE                {=  1},
  2905.     D3DRTYPE_VOLUME                 {=  2},
  2906.     D3DRTYPE_TEXTURE                {=  3},
  2907.     D3DRTYPE_VOLUMETEXTURE          {=  4},
  2908.     D3DRTYPE_CUBETEXTURE            {=  5},
  2909.     D3DRTYPE_VERTEXBUFFER           {=  6},
  2910.     D3DRTYPE_INDEXBUFFER            {=  7}
  2911.   {$ELSE}
  2912.     D3DRTYPE_SURFACE                =  1,
  2913.     D3DRTYPE_VOLUME                 =  2,
  2914.     D3DRTYPE_TEXTURE                =  3,
  2915.     D3DRTYPE_VOLUMETEXTURE          =  4,
  2916.     D3DRTYPE_CUBETEXTURE            =  5,
  2917.     D3DRTYPE_VERTEXBUFFER           =  6,
  2918.     D3DRTYPE_INDEXBUFFER            =  7
  2919.   {$ENDIF}
  2920.   );
  2921.   {$EXTERNALSYM _D3DRESOURCETYPE}
  2922.   D3DRESOURCETYPE = _D3DRESOURCETYPE;
  2923.   {$EXTERNALSYM D3DRESOURCETYPE}
  2924.   TD3DResourceType = _D3DRESOURCETYPE;
  2925.  
  2926. const
  2927.   { Usages }
  2928.   D3DUSAGE_RENDERTARGET       = $00000001;
  2929.   {$EXTERNALSYM D3DUSAGE_RENDERTARGET}
  2930.   D3DUSAGE_DEPTHSTENCIL       = $00000002;
  2931.   {$EXTERNALSYM D3DUSAGE_DEPTHSTENCIL}
  2932.   D3DUSAGE_DYNAMIC            = $00000200;
  2933.   {$EXTERNALSYM D3DUSAGE_DYNAMIC}
  2934.  
  2935.   // When passed to CheckDeviceFormat, D3DUSAGE_AUTOGENMIPMAP may return
  2936.   // D3DOK_NOAUTOGEN if the device doesn't support autogeneration for that format.
  2937.   // D3DOK_NOAUTOGEN is a success code, not a failure code... the SUCCEEDED and FAILED macros
  2938.   // will return true and false respectively for this code.
  2939.   D3DUSAGE_AUTOGENMIPMAP      = $00000400;
  2940.   {$EXTERNALSYM D3DUSAGE_AUTOGENMIPMAP}
  2941.   D3DUSAGE_DMAP               = $00004000;
  2942.   {$EXTERNALSYM D3DUSAGE_DMAP}
  2943.  
  2944.   // The following usages are valid only for querying CheckDeviceFormat
  2945.   D3DUSAGE_QUERY_LEGACYBUMPMAP            = $00008000;
  2946.   {$EXTERNALSYM D3DUSAGE_QUERY_LEGACYBUMPMAP}
  2947.   D3DUSAGE_QUERY_SRGBREAD                 = $00010000;
  2948.   {$EXTERNALSYM D3DUSAGE_QUERY_SRGBREAD}
  2949.   D3DUSAGE_QUERY_FILTER                   = $00020000;
  2950.   {$EXTERNALSYM D3DUSAGE_QUERY_FILTER}
  2951.   D3DUSAGE_QUERY_SRGBWRITE                = $00040000;
  2952.   {$EXTERNALSYM D3DUSAGE_QUERY_SRGBWRITE}
  2953.   D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING = $00080000;
  2954.   {$EXTERNALSYM D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING}
  2955.   D3DUSAGE_QUERY_VERTEXTEXTURE            = $00100000;
  2956.   {$EXTERNALSYM D3DUSAGE_QUERY_VERTEXTEXTURE}
  2957.  
  2958.  
  2959.   { Usages for Vertex/Index buffers }
  2960.   D3DUSAGE_WRITEONLY          = $00000008;
  2961.   {$EXTERNALSYM D3DUSAGE_WRITEONLY}
  2962.   D3DUSAGE_SOFTWAREPROCESSING = $00000010;
  2963.   {$EXTERNALSYM D3DUSAGE_SOFTWAREPROCESSING}
  2964.   D3DUSAGE_DONOTCLIP          = $00000020;
  2965.   {$EXTERNALSYM D3DUSAGE_DONOTCLIP}
  2966.   D3DUSAGE_POINTS             = $00000040;
  2967.   {$EXTERNALSYM D3DUSAGE_POINTS}
  2968.   D3DUSAGE_RTPATCHES          = $00000080;
  2969.   {$EXTERNALSYM D3DUSAGE_RTPATCHES}
  2970.   D3DUSAGE_NPATCHES           = $00000100;
  2971.   {$EXTERNALSYM D3DUSAGE_NPATCHES}
  2972.  
  2973.  
  2974.  
  2975.  
  2976.  
  2977.  
  2978.  
  2979.  
  2980. type
  2981.   { CubeMap Face identifiers }
  2982.   _D3DCUBEMAP_FACES = (
  2983.     D3DCUBEMAP_FACE_POSITIVE_X     {= 0},
  2984.     D3DCUBEMAP_FACE_NEGATIVE_X     {= 1},
  2985.     D3DCUBEMAP_FACE_POSITIVE_Y     {= 2},
  2986.     D3DCUBEMAP_FACE_NEGATIVE_Y     {= 3},
  2987.     D3DCUBEMAP_FACE_POSITIVE_Z     {= 4},
  2988.     D3DCUBEMAP_FACE_NEGATIVE_Z     {= 5}
  2989.   );
  2990.   {$EXTERNALSYM _D3DCUBEMAP_FACES}
  2991.   D3DCUBEMAP_FACES = _D3DCUBEMAP_FACES;
  2992.   {$EXTERNALSYM D3DCUBEMAP_FACES}
  2993.   TD3DCubemapFaces = _D3DCUBEMAP_FACES;
  2994.  
  2995.  
  2996. const
  2997.   { Lock flags }
  2998.   D3DLOCK_READONLY         = $00000010;
  2999.   {$EXTERNALSYM D3DLOCK_READONLY}
  3000.   D3DLOCK_DISCARD          = $00002000;
  3001.   {$EXTERNALSYM D3DLOCK_DISCARD}
  3002.   D3DLOCK_NOOVERWRITE      = $00001000;
  3003.   {$EXTERNALSYM D3DLOCK_NOOVERWRITE}
  3004.   D3DLOCK_NOSYSLOCK        = $00000800;
  3005.   {$EXTERNALSYM D3DLOCK_NOSYSLOCK}
  3006.   D3DLOCK_DONOTWAIT        = $00004000;
  3007.   {$EXTERNALSYM D3DLOCK_DONOTWAIT}
  3008.  
  3009.   D3DLOCK_NO_DIRTY_UPDATE  = $00008000;
  3010.   {$EXTERNALSYM D3DLOCK_NO_DIRTY_UPDATE}
  3011.  
  3012.  
  3013.  
  3014.  
  3015.  
  3016.  
  3017. type
  3018.   { Vertex Buffer Description }
  3019.   PD3DVertexBufferDesc = ^TD3DVertexBufferDesc;
  3020.   _D3DVERTEXBUFFER_DESC = packed record
  3021.     Format : TD3DFormat;
  3022.     _Type  : TD3DResourceType;
  3023.     Usage  : DWord;
  3024.     Pool   : TD3DPool;
  3025.     Size   : LongWord;
  3026.  
  3027.     FVF    : DWord;
  3028.   end;
  3029.   {$EXTERNALSYM _D3DVERTEXBUFFER_DESC}
  3030.   D3DVERTEXBUFFER_DESC = _D3DVERTEXBUFFER_DESC;
  3031.   {$EXTERNALSYM D3DVERTEXBUFFER_DESC}
  3032.   TD3DVertexBufferDesc = _D3DVERTEXBUFFER_DESC;
  3033.  
  3034.   { Index Buffer Description }
  3035.   PD3DIndexBufferDesc = ^TD3DIndexBufferDesc;
  3036.   _D3DINDEXBUFFER_DESC = packed record
  3037.     Format : TD3DFormat;
  3038.     _Type  : TD3DResourceType;
  3039.     Usage  : DWord;
  3040.     Pool   : TD3DPool;
  3041.     Size   : LongWord;
  3042.   end {_D3DINDEXBUFFER_DESC};
  3043.   {$EXTERNALSYM _D3DINDEXBUFFER_DESC}
  3044.   D3DINDEXBUFFER_DESC = _D3DINDEXBUFFER_DESC;
  3045.   {$EXTERNALSYM D3DINDEXBUFFER_DESC}
  3046.   TD3DIndexBufferDesc = _D3DINDEXBUFFER_DESC;
  3047.  
  3048.  
  3049.  { Surface Description }
  3050.   PD3DSurfaceDesc = ^TD3DSurfaceDesc;
  3051.   _D3DSURFACE_DESC = packed record
  3052.     Format : TD3DFormat;
  3053.     _Type  : TD3DResourceType;
  3054.     Usage  : DWord;
  3055.     Pool   : TD3DPool;
  3056.  
  3057.     MultiSampleType: TD3DMultiSampleType;
  3058.     MultiSampleQuality: DWORD;
  3059.     Width  : LongWord;
  3060.     Height : LongWord;
  3061.   end {_D3DSURFACE_DESC};
  3062.   {$EXTERNALSYM _D3DSURFACE_DESC}
  3063.   D3DSURFACE_DESC = _D3DSURFACE_DESC;
  3064.   {$EXTERNALSYM D3DSURFACE_DESC}
  3065.   TD3DSurfaceDesc = _D3DSURFACE_DESC;
  3066.  
  3067.   PD3DVolumeDesc = ^TD3DVolumeDesc;
  3068.   _D3DVOLUME_DESC = packed record
  3069.     Format : TD3DFormat;
  3070.     _Type  : TD3DResourceType;
  3071.     Usage  : DWord;
  3072.     Pool   : TD3DPool;
  3073.  
  3074.     Width  : LongWord;
  3075.     Height : LongWord;
  3076.     Depth  : LongWord;
  3077.   end {_D3DVOLUME_DESC};
  3078.   {$EXTERNALSYM _D3DVOLUME_DESC}
  3079.   D3DVOLUME_DESC = _D3DVOLUME_DESC;
  3080.   {$EXTERNALSYM D3DVOLUME_DESC}
  3081.   TD3DVolumeDesc = _D3DVOLUME_DESC;
  3082.  
  3083.   { Structure for LockRect }
  3084.   PD3DLockedRect = ^TD3DLockedRect;
  3085.   _D3DLOCKED_RECT = packed record
  3086.     Pitch: Integer;
  3087.     pBits: Pointer; // void*
  3088.   end {_D3DLOCKED_RECT};
  3089.   {$EXTERNALSYM _D3DLOCKED_RECT}
  3090.   D3DLOCKED_RECT = _D3DLOCKED_RECT;
  3091.   {$EXTERNALSYM D3DLOCKED_RECT}
  3092.   TD3DLockedRect = _D3DLOCKED_RECT;
  3093.  
  3094.   { Structures for LockBox }
  3095.   PD3DBox = ^TD3DBox;
  3096.   _D3DBOX = packed record
  3097.     Left        : LongWord;
  3098.     Top         : LongWord;
  3099.     Right       : LongWord;
  3100.     Bottom      : LongWord;
  3101.     Front       : LongWord;
  3102.     Back        : LongWord;
  3103.   end {_D3DBOX};
  3104.   {$EXTERNALSYM _D3DBOX}
  3105.   D3DBOX = _D3DBOX;
  3106.   {$EXTERNALSYM D3DBOX}
  3107.   TD3DBox = _D3DBOX;
  3108.  
  3109.   PD3DLockedBox = ^TD3DLockedBox;
  3110.   _D3DLOCKED_BOX = packed record
  3111.     RowPitch    : Integer;
  3112.     SlicePitch  : Integer;
  3113.     pBits       : Pointer; // void*
  3114.   end {_D3DLOCKED_BOX};
  3115.   {$EXTERNALSYM _D3DLOCKED_BOX}
  3116.   D3DLOCKED_BOX = _D3DLOCKED_BOX;
  3117.   {$EXTERNALSYM D3DLOCKED_BOX}
  3118.   TD3DLockedBox = _D3DLOCKED_BOX;
  3119.  
  3120.   { Structures for LockRange }
  3121.   PD3DRange = ^TD3DRange;
  3122.   _D3DRANGE = packed record
  3123.     Offset      : LongWord;
  3124.     Size        : LongWord;
  3125.   end {_D3DRANGE};
  3126.   {$EXTERNALSYM _D3DRANGE}
  3127.   D3DRANGE = _D3DRANGE;
  3128.   {$EXTERNALSYM D3DRANGE}
  3129.   TD3DRange = _D3DRANGE;
  3130.  
  3131.   { Structures for high order primitives }
  3132.   PD3DRectPatchInfo = ^TD3DRectPatchInfo;
  3133.   _D3DRECTPATCH_INFO = packed record
  3134.     StartVertexOffsetWidth  : LongWord;
  3135.     StartVertexOffsetHeight : LongWord;
  3136.     Width                   : LongWord;
  3137.     Height                  : LongWord;
  3138.     Stride                  : LongWord;
  3139.     Basis                   : TD3DBasisType;
  3140.     Degree                  : TD3DDegreeType;
  3141.   end;
  3142.   {$EXTERNALSYM _D3DRECTPATCH_INFO}
  3143.   D3DRECTPATCH_INFO = _D3DRECTPATCH_INFO;
  3144.   {$EXTERNALSYM D3DRECTPATCH_INFO}
  3145.   TD3DRectPatchInfo = _D3DRECTPATCH_INFO;
  3146.  
  3147.   PD3DTriPatchInfo = ^TD3DTriPatchInfo;
  3148.   _D3DTRIPATCH_INFO = packed record
  3149.     StartVertexOffset : LongWord;
  3150.     NumVertices       : LongWord;
  3151.     Basis             : TD3DBasisType;
  3152.     Degree            : TD3DDegreeType;
  3153.   end;
  3154.   {$EXTERNALSYM _D3DTRIPATCH_INFO}
  3155.   D3DTRIPATCH_INFO = _D3DTRIPATCH_INFO;
  3156.   {$EXTERNALSYM D3DTRIPATCH_INFO}
  3157.   TD3DTriPatchInfo = _D3DTRIPATCH_INFO;
  3158.  
  3159. const
  3160.   { Adapter Identifier }
  3161.   MAX_DEVICE_IDENTIFIER_STRING  = 512;
  3162.   {$EXTERNALSYM MAX_DEVICE_IDENTIFIER_STRING}
  3163. type
  3164.   PD3DAdapterIdentifier9 = ^TD3DAdapterIdentifier9;
  3165.   _D3DADAPTER_IDENTIFIER9 = packed record
  3166.     Driver      : array [0..MAX_DEVICE_IDENTIFIER_STRING-1] of Char;
  3167.     Description : array [0..MAX_DEVICE_IDENTIFIER_STRING-1] of Char;
  3168.     DeviceName  : array [0..31] of Char;   { Device name for GDI (ex. \\.\DISPLAY1) }
  3169.  
  3170. {$IFDEF WIN32}
  3171.     DriverVersion               : Int64;   { Defined for 32 bit components }
  3172. {$ELSE}
  3173.     DriverVersionLowPart        : DWord;   { Defined for 16 bit driver components }
  3174.     DriverVersionHighPart       : DWord;
  3175. {$ENDIF}
  3176.  
  3177.     VendorId    : DWord;
  3178.     DeviceId    : DWord;
  3179.     SubSysId    : DWord;
  3180.     Revision    : DWord;
  3181.  
  3182.     DeviceIdentifier : TGUID;
  3183.  
  3184.     WHQLLevel   : DWord;
  3185.  
  3186.   end;
  3187.   {$EXTERNALSYM _D3DADAPTER_IDENTIFIER9}
  3188.   D3DADAPTER_IDENTIFIER9 = _D3DADAPTER_IDENTIFIER9;
  3189.   {$EXTERNALSYM D3DADAPTER_IDENTIFIER9}
  3190.   TD3DAdapterIdentifier9 = _D3DADAPTER_IDENTIFIER9;
  3191.  
  3192.  
  3193.   { Raster Status structure returned by GetRasterStatus }
  3194.   PD3DRasterStatus = ^TD3DRasterStatus;
  3195.   _D3DRASTER_STATUS = packed record
  3196.     InVBlank : Bool;
  3197.     ScanLine : LongWord;
  3198.   end;
  3199.   {$EXTERNALSYM _D3DRASTER_STATUS}
  3200.   D3DRASTER_STATUS = _D3DRASTER_STATUS;
  3201.   {$EXTERNALSYM D3DRASTER_STATUS}
  3202.   TD3DRasterStatus = _D3DRASTER_STATUS;
  3203.  
  3204.  
  3205.  
  3206. { Debug monitor tokens (DEBUG only)
  3207.  
  3208.    Note that if D3DRS_DEBUGMONITORTOKEN is set, the call is treated as
  3209.    passing a token to the debug monitor.  For example, if, after passing
  3210.    D3DDMT_ENABLE/DISABLE to D3DRS_DEBUGMONITORTOKEN other token values
  3211.    are passed in, the enabled/disabled state of the debug
  3212.    monitor will still persist.
  3213.  
  3214.    The debug monitor defaults to enabled.
  3215.  
  3216.    Calling GetRenderState on D3DRS_DEBUGMONITORTOKEN is not of any use.
  3217. }
  3218.   _D3DDEBUGMONITORTOKENS = DWord;
  3219.   {$EXTERNALSYM _D3DDEBUGMONITORTOKENS}
  3220.   D3DDEBUGMONITORTOKENS = _D3DDEBUGMONITORTOKENS;
  3221.   {$EXTERNALSYM D3DDEBUGMONITORTOKENS}
  3222.   TD3DDebugMonitorTokens = _D3DDEBUGMONITORTOKENS;
  3223.  
  3224. const
  3225.   D3DDMT_ENABLE            = 0;    // enable debug monitor
  3226.   {$EXTERNALSYM D3DDMT_ENABLE}
  3227.   D3DDMT_DISABLE           = 1;    // disable debug monitor
  3228.   {$EXTERNALSYM D3DDMT_DISABLE}
  3229.  
  3230. {$IFNDEF COMPILER6_UP}
  3231. const
  3232.   // Async feedback
  3233.   D3DQUERYTYPE_VCACHE                 = 4; { D3DISSUE_END }
  3234.   {$EXTERNALSYM D3DQUERYTYPE_VCACHE}
  3235.   D3DQUERYTYPE_RESOURCEMANAGER        = 5; { D3DISSUE_END }
  3236.   {$EXTERNALSYM D3DQUERYTYPE_RESOURCEMANAGER}
  3237.   D3DQUERYTYPE_VERTEXSTATS            = 6; { D3DISSUE_END }
  3238.   {$EXTERNALSYM D3DQUERYTYPE_VERTEXSTATS}
  3239.   D3DQUERYTYPE_EVENT                  = 8; { D3DISSUE_END }
  3240.   {$EXTERNALSYM D3DQUERYTYPE_EVENT}
  3241.   D3DQUERYTYPE_OCCLUSION              = 9; { D3DISSUE_BEGIN, D3DISSUE_END }
  3242.   {$EXTERNALSYM D3DQUERYTYPE_OCCLUSION}
  3243. type
  3244.   _D3DQUERYTYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  3245. {$ELSE}
  3246. type
  3247.   // Async feedback
  3248.   {$MINENUMSIZE 1} // Forces TD3DQueryType be 1 byte enum
  3249.   _D3DQUERYTYPE = (
  3250.     D3DQUERYTYPE_VCACHE                 = 4, { D3DISSUE_END }
  3251.     D3DQUERYTYPE_RESOURCEMANAGER        = 5, { D3DISSUE_END }
  3252.     D3DQUERYTYPE_VERTEXSTATS            = 6, { D3DISSUE_END }
  3253.     D3DQUERYTYPE_EVENT                  = 8, { D3DISSUE_END }
  3254.     D3DQUERYTYPE_OCCLUSION              = 9  { D3DISSUE_BEGIN, D3DISSUE_END }
  3255.   );
  3256.   {$MINENUMSIZE 4} // Restores enums to be 4 byte in size
  3257. {$ENDIF}
  3258.   {$EXTERNALSYM _D3DQUERYTYPE}
  3259.   D3DQUERYTYPE = _D3DQUERYTYPE;
  3260.   {$EXTERNALSYM D3DQUERYTYPE}
  3261.   TD3DQueryType = _D3DQUERYTYPE;
  3262.  
  3263. const
  3264.   // Flags field for Issue
  3265.   D3DISSUE_END     = (1 shl 0); // Tells the runtime to issue the end of a query, changing it's state to "non-signaled".
  3266.   {$EXTERNALSYM D3DISSUE_END}
  3267.   D3DISSUE_BEGIN   = (1 shl 1); // Tells the runtime to issue the beginng of a query.
  3268.   {$EXTERNALSYM D3DISSUE_BEGIN}
  3269.  
  3270.  
  3271.   // Flags field for GetData
  3272.   D3DGETDATA_FLUSH = (1 shl 0); // Tells the runtime to flush if the query is outstanding.
  3273.   {$EXTERNALSYM D3DGETDATA_FLUSH}
  3274.  
  3275. type
  3276.   PD3DResourceStats = ^TD3DResourceStats;
  3277.   _D3DRESOURCESTATS = packed record
  3278.   // Data collected since last Present()
  3279.     bThrashing                  : BOOL;  (* indicates if thrashing *)
  3280.     ApproxBytesDownloaded       : DWORD; (* Approximate number of bytes downloaded by resource manager *)
  3281.     NumEvicts                   : DWORD; (* number of objects evicted *)
  3282.     NumVidCreates               : DWORD; (* number of objects created in video memory *)
  3283.     LastPri                     : DWORD; (* priority of last object evicted *)
  3284.     NumUsed                     : DWORD; (* number of objects set to the device *)
  3285.     NumUsedInVidMem             : DWORD; (* number of objects set to the device, which are already in video memory *)
  3286.   // Persistent data
  3287.     WorkingSet                  : DWORD; (* number of objects in video memory *)
  3288.     WorkingSetBytes             : DWORD; (* number of bytes in video memory *)
  3289.     TotalManaged                : DWORD; (* total number of managed objects *)
  3290.     TotalBytes                  : DWORD; (* total number of bytes of managed objects *)
  3291.   end;
  3292.   {$EXTERNALSYM _D3DRESOURCESTATS}
  3293.   D3DRESOURCESTATS = _D3DRESOURCESTATS;
  3294.   {$EXTERNALSYM D3DRESOURCESTATS}
  3295.   TD3DResourceStats = _D3DRESOURCESTATS;
  3296.  
  3297. const
  3298.   D3DRTYPECOUNT = (DWORD(D3DRTYPE_INDEXBUFFER) + 1);
  3299.   {$EXTERNALSYM D3DRTYPECOUNT}
  3300.  
  3301. type
  3302.   PD3DDevInfoResourceManager = ^TD3DDevInfoResourceManager;
  3303.   _D3DDEVINFO_RESOURCEMANAGER = packed record
  3304.     stats: array [0..D3DRTYPECOUNT-1] of TD3DResourceStats;
  3305.   end;
  3306.   {$EXTERNALSYM _D3DDEVINFO_RESOURCEMANAGER}
  3307.   D3DDEVINFO_RESOURCEMANAGER = _D3DDEVINFO_RESOURCEMANAGER;
  3308.   {$EXTERNALSYM D3DDEVINFO_RESOURCEMANAGER}
  3309.   TD3DDevInfoResourceManager = _D3DDEVINFO_RESOURCEMANAGER;
  3310.  
  3311.   PD3DDevInfoD3DVertexStats = ^TD3DDevInfoD3DVertexStats;
  3312.   _D3DDEVINFO_D3DVERTEXSTATS = packed record
  3313.     NumRenderedTriangles        : DWORD; (* total number of triangles that are not clipped in this frame *)
  3314.     NumExtraClippingTriangles   : DWORD; (* Number of new triangles generated by clipping *)
  3315.   end;
  3316.   {$EXTERNALSYM _D3DDEVINFO_D3DVERTEXSTATS}
  3317.   D3DDEVINFO_D3DVERTEXSTATS = _D3DDEVINFO_D3DVERTEXSTATS;
  3318.   {$EXTERNALSYM D3DDEVINFO_D3DVERTEXSTATS}
  3319.   TD3DDevInfoD3DVertexStats = _D3DDEVINFO_D3DVERTEXSTATS;
  3320.  
  3321. type
  3322.   PD3DDevInfoVCache = ^TD3DDevInfoVCache;
  3323.   _D3DDEVINFO_VCACHE = packed record
  3324.     Pattern     : DWORD;        (* bit pattern, return value must be FOUR_CC('C', 'A', 'C', 'H') *)
  3325.     OptMethod   : DWORD;        (* optimization method 0 means longest strips, 1 means vertex cache based *)
  3326.     CacheSize   : DWORD;        (* cache size to optimize for  (only required if type is 1) *)
  3327.     MagicNumber : DWORD;        (* used to determine when to restart strips (only required if type is 1)*)
  3328.   end;
  3329.   {$EXTERNALSYM _D3DDEVINFO_VCACHE}
  3330.   D3DDEVINFO_VCACHE = _D3DDEVINFO_VCACHE;
  3331.   {$EXTERNALSYM D3DDEVINFO_VCACHE}
  3332.   TD3DDevInfoVCache = _D3DDEVINFO_VCACHE;
  3333.  
  3334.  
  3335.  
  3336.  
  3337.  
  3338. (*==========================================================================;
  3339.  *
  3340.  *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  3341.  *
  3342.  *  File:       d3d9caps.h
  3343.  *  Content:    Direct3D capabilities include file
  3344.  *
  3345.  ***************************************************************************)
  3346.  
  3347. type
  3348.   PD3DVShaderCaps2_0 = ^TD3DVShaderCaps2_0;
  3349.   _D3DVSHADERCAPS2_0 = packed record
  3350.     Caps:                     DWORD;
  3351.     DynamicFlowControlDepth:  Integer;
  3352.     NumTemps:                 Integer;
  3353.     StaticFlowControlDepth:   Integer;
  3354.   end;
  3355.   {$EXTERNALSYM _D3DVSHADERCAPS2_0}
  3356.   D3DVSHADERCAPS2_0 = _D3DVSHADERCAPS2_0;
  3357.   {$EXTERNALSYM D3DVSHADERCAPS2_0}
  3358.   TD3DVShaderCaps2_0 = _D3DVSHADERCAPS2_0;
  3359.  
  3360. const
  3361.   D3DVS20CAPS_PREDICATION              = (1 shl 0);
  3362.   {$EXTERNALSYM D3DVS20CAPS_PREDICATION}
  3363.  
  3364.   D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH  = 24;
  3365.   {$EXTERNALSYM D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH}
  3366.   D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH  = 0;
  3367.   {$EXTERNALSYM D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH}
  3368.   D3DVS20_MAX_NUMTEMPS                 = 32;
  3369.   {$EXTERNALSYM D3DVS20_MAX_NUMTEMPS}
  3370.   D3DVS20_MIN_NUMTEMPS                 = 12;
  3371.   {$EXTERNALSYM D3DVS20_MIN_NUMTEMPS}
  3372.   D3DVS20_MAX_STATICFLOWCONTROLDEPTH   = 4;
  3373.   {$EXTERNALSYM D3DVS20_MAX_STATICFLOWCONTROLDEPTH}
  3374.   D3DVS20_MIN_STATICFLOWCONTROLDEPTH   = 1;
  3375.   {$EXTERNALSYM D3DVS20_MIN_STATICFLOWCONTROLDEPTH}
  3376.  
  3377. type
  3378.   PD3DPShaderCaps2_0 = ^TD3DPShaderCaps2_0;
  3379.   _D3DPSHADERCAPS2_0 = packed record
  3380.     Caps:                     DWORD;
  3381.     DynamicFlowControlDepth:  Integer;
  3382.     NumTemps:                 Integer;
  3383.     StaticFlowControlDepth:   Integer;
  3384.     NumInstructionSlots:      Integer;
  3385.   end;
  3386.   {$EXTERNALSYM _D3DPSHADERCAPS2_0}
  3387.   D3DPSHADERCAPS2_0 = _D3DPSHADERCAPS2_0;
  3388.   {$EXTERNALSYM D3DPSHADERCAPS2_0}
  3389.   TD3DPShaderCaps2_0 = _D3DPSHADERCAPS2_0;
  3390.  
  3391. const
  3392.   D3DPS20CAPS_ARBITRARYSWIZZLE         = (1 shl 0);
  3393.   {$EXTERNALSYM D3DPS20CAPS_ARBITRARYSWIZZLE}
  3394.   D3DPS20CAPS_GRADIENTINSTRUCTIONS     = (1 shl 1);
  3395.   {$EXTERNALSYM D3DPS20CAPS_GRADIENTINSTRUCTIONS}
  3396.   D3DPS20CAPS_PREDICATION              = (1 shl 2);
  3397.   {$EXTERNALSYM D3DPS20CAPS_PREDICATION}
  3398.   D3DPS20CAPS_NODEPENDENTREADLIMIT     = (1 shl 3);
  3399.   {$EXTERNALSYM D3DPS20CAPS_NODEPENDENTREADLIMIT}
  3400.   D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT    = (1 shl 4);
  3401.   {$EXTERNALSYM D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT}
  3402.  
  3403.   D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH  = 24;
  3404.   {$EXTERNALSYM D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH}
  3405.   D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH  = 0;
  3406.   {$EXTERNALSYM D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH}
  3407.   D3DPS20_MAX_NUMTEMPS                 = 32;
  3408.   {$EXTERNALSYM D3DPS20_MAX_NUMTEMPS}
  3409.   D3DPS20_MIN_NUMTEMPS                 = 12;
  3410.   {$EXTERNALSYM D3DPS20_MIN_NUMTEMPS}
  3411.   D3DPS20_MAX_STATICFLOWCONTROLDEPTH   = 4;
  3412.   {$EXTERNALSYM D3DPS20_MAX_STATICFLOWCONTROLDEPTH}
  3413.   D3DPS20_MIN_STATICFLOWCONTROLDEPTH   = 0;
  3414.   {$EXTERNALSYM D3DPS20_MIN_STATICFLOWCONTROLDEPTH}
  3415.   D3DPS20_MAX_NUMINSTRUCTIONSLOTS      = 512;
  3416.   {$EXTERNALSYM D3DPS20_MAX_NUMINSTRUCTIONSLOTS}
  3417.   D3DPS20_MIN_NUMINSTRUCTIONSLOTS      = 96;
  3418.   {$EXTERNALSYM D3DPS20_MIN_NUMINSTRUCTIONSLOTS}
  3419.  
  3420.   D3DMIN30SHADERINSTRUCTIONS           = 512;
  3421.   {$EXTERNALSYM D3DMIN30SHADERINSTRUCTIONS}
  3422.   D3DMAX30SHADERINSTRUCTIONS           = 32768;
  3423.   {$EXTERNALSYM D3DMAX30SHADERINSTRUCTIONS}
  3424.  
  3425. type
  3426.   PD3DCaps9 = ^TD3DCaps9;
  3427.   _D3DCAPS9 = record
  3428.     (* Device Info *)
  3429.     DeviceType: TD3DDevType;
  3430.     AdapterOrdinal: DWord;
  3431.  
  3432.     (* Caps from DX7 Draw *)
  3433.     Caps: DWord;
  3434.     Caps2: DWord;
  3435.     Caps3: DWord;
  3436.     PresentationIntervals: DWord;
  3437.  
  3438.     (* Cursor Caps *)
  3439.     CursorCaps: DWORD;
  3440.  
  3441.     (* 3D Device Caps *)
  3442.     DevCaps: DWord;
  3443.     PrimitiveMiscCaps: DWord;
  3444.     RasterCaps: DWord;
  3445.     ZCmpCaps: DWord;
  3446.     SrcBlendCaps: DWord;
  3447.     DestBlendCaps: DWord;
  3448.     AlphaCmpCaps: DWord;
  3449.     ShadeCaps: DWord;
  3450.     TextureCaps: DWord;
  3451.     TextureFilterCaps: DWord;           // D3DPTFILTERCAPS for IDirect3DTexture9's
  3452.     CubeTextureFilterCaps: DWord;       // D3DPTFILTERCAPS for IDirect3DCubeTexture9's
  3453.     VolumeTextureFilterCaps: DWord;     // D3DPTFILTERCAPS for IDirect3DVolumeTexture9's
  3454.     TextureAddressCaps: DWord;          // D3DPTADDRESSCAPS for IDirect3DTexture9's
  3455.     VolumeTextureAddressCaps: DWord;    // D3DPTADDRESSCAPS for IDirect3DVolumeTexture9's
  3456.  
  3457.     LineCaps: DWord;                    // D3DLINECAPS
  3458.  
  3459.     MaxTextureWidth, MaxTextureHeight: DWord;
  3460.     MaxVolumeExtent: DWord;
  3461.  
  3462.     MaxTextureRepeat: DWord;
  3463.     MaxTextureAspectRatio: DWord;
  3464.     MaxAnisotropy: DWord;
  3465.     MaxVertexW: Single;
  3466.  
  3467.     GuardBandLeft: Single;
  3468.     GuardBandTop: Single;
  3469.     GuardBandRight: Single;
  3470.     GuardBandBottom: Single;
  3471.  
  3472.     ExtentsAdjust: Single;
  3473.     StencilCaps: DWord;
  3474.  
  3475.     FVFCaps: DWord;
  3476.     TextureOpCaps: DWord;
  3477.     MaxTextureBlendStages: DWord;
  3478.     MaxSimultaneousTextures: DWord;
  3479.  
  3480.     VertexProcessingCaps: DWord;
  3481.     MaxActiveLights: DWord;
  3482.     MaxUserClipPlanes: DWord;
  3483.     MaxVertexBlendMatrices: DWord;
  3484.     MaxVertexBlendMatrixIndex: DWord;
  3485.  
  3486.     MaxPointSize: Single;
  3487.  
  3488.     MaxPrimitiveCount: DWord;           // max number of primitives per DrawPrimitive call
  3489.     MaxVertexIndex: DWord;
  3490.     MaxStreams: DWord;
  3491.     MaxStreamStride: DWord;             // max stride for SetStreamSource
  3492.  
  3493.     VertexShaderVersion: DWord;
  3494.     MaxVertexShaderConst: DWord;        // number of vertex shader constant registers
  3495.  
  3496.     PixelShaderVersion: DWord;
  3497.     PixelShader1xMaxValue: Single;      // max value storable in registers of ps.1.x shaders
  3498.  
  3499.     // Here are the DX9 specific ones
  3500.     DevCaps2: DWORD;
  3501.  
  3502.     MaxNpatchTessellationLevel: Single;
  3503.     Reserved5: DWORD;
  3504.  
  3505.     MasterAdapterOrdinal: LongWord;     // ordinal of master adaptor for adapter group
  3506.     AdapterOrdinalInGroup: LongWord;    // ordinal inside the adapter group
  3507.     NumberOfAdaptersInGroup: LongWord;  // number of adapters in this adapter group (only if master)
  3508.     DeclTypes: DWORD;                   // Data types, supported in vertex declarations
  3509.     NumSimultaneousRTs: DWORD;          // Will be at least 1
  3510.     StretchRectFilterCaps: DWORD;       // Filter caps supported by StretchRect
  3511.     VS20Caps: TD3DVShaderCaps2_0;
  3512.     PS20Caps: TD3DPShaderCaps2_0;
  3513.     VertexTextureFilterCaps: DWORD;     // D3DPTFILTERCAPS for IDirect3DTexture9's for texture, used in vertex shaders
  3514.     MaxVShaderInstructionsExecuted: DWORD; // maximum number of vertex shader instructions that can be executed
  3515.     MaxPShaderInstructionsExecuted: DWORD; // maximum number of pixel shader instructions that can be executed
  3516.     MaxVertexShader30InstructionSlots: DWORD;
  3517.     MaxPixelShader30InstructionSlots: DWORD;
  3518.   end {D3DCAPS9};
  3519.   {$EXTERNALSYM _D3DCAPS9}
  3520.   D3DCAPS9 = _D3DCAPS9;
  3521.   {$EXTERNALSYM D3DCAPS9}
  3522.   TD3DCaps9 = _D3DCAPS9;
  3523.  
  3524.   //
  3525.   // BIT DEFINES FOR D3DCAPS9 DWORD MEMBERS
  3526.   //
  3527.  
  3528. const
  3529.   //
  3530.   // Caps
  3531.   //
  3532.   D3DCAPS_READ_SCANLINE         = $00020000;
  3533.   {$EXTERNALSYM D3DCAPS_READ_SCANLINE}
  3534.  
  3535.   //
  3536.   // Caps2
  3537.   //
  3538.   D3DCAPS2_FULLSCREENGAMMA      = $00020000;
  3539.   {$EXTERNALSYM D3DCAPS2_FULLSCREENGAMMA}
  3540.   D3DCAPS2_CANCALIBRATEGAMMA    = $00100000;
  3541.   {$EXTERNALSYM D3DCAPS2_CANCALIBRATEGAMMA}
  3542.   D3DCAPS2_RESERVED             = $02000000;
  3543.   {$EXTERNALSYM D3DCAPS2_RESERVED}
  3544.   D3DCAPS2_CANMANAGERESOURCE    = $10000000;
  3545.   {$EXTERNALSYM D3DCAPS2_CANMANAGERESOURCE}
  3546.   D3DCAPS2_DYNAMICTEXTURES      = $20000000;
  3547.   {$EXTERNALSYM D3DCAPS2_DYNAMICTEXTURES}
  3548.   D3DCAPS2_CANAUTOGENMIPMAP     = $40000000;
  3549.   {$EXTERNALSYM D3DCAPS2_CANAUTOGENMIPMAP}
  3550.  
  3551.   //
  3552.   // Caps3
  3553.   //
  3554.   D3DCAPS3_RESERVED             = $8000001F;
  3555.   {$EXTERNALSYM D3DCAPS3_RESERVED}
  3556.  
  3557.   // Indicates that the device can respect the ALPHABLENDENABLE render state
  3558.   // when fullscreen while using the FLIP or DISCARD swap effect.
  3559.   // COPY and COPYVSYNC swap effects work whether or not this flag is set.
  3560.   D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD     = $00000020;
  3561.   {$EXTERNALSYM D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD}
  3562.  
  3563.   // Indicates that the device can perform a gamma correction from
  3564.   // a windowed back buffer containing linear content to the sRGB desktop.
  3565.   D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION  = $00000080;
  3566.   {$EXTERNALSYM D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION}
  3567.  
  3568.   D3DCAPS3_COPY_TO_VIDMEM         = $00000100; { Device can acclerate copies from sysmem to local vidmem }
  3569.   {$EXTERNALSYM D3DCAPS3_COPY_TO_VIDMEM}
  3570.   D3DCAPS3_COPY_TO_SYSTEMMEM      = $00000200; { Device can acclerate copies from local vidmem to sysmem }
  3571.   {$EXTERNALSYM D3DCAPS3_COPY_TO_SYSTEMMEM}
  3572.  
  3573.  
  3574.   //
  3575.   // PresentationIntervals
  3576.   //
  3577.   D3DPRESENT_INTERVAL_DEFAULT   = $00000000;
  3578.   {$EXTERNALSYM D3DPRESENT_INTERVAL_DEFAULT}
  3579.   D3DPRESENT_INTERVAL_ONE       = $00000001;
  3580.   {$EXTERNALSYM D3DPRESENT_INTERVAL_ONE}
  3581.   D3DPRESENT_INTERVAL_TWO       = $00000002;
  3582.   {$EXTERNALSYM D3DPRESENT_INTERVAL_TWO}
  3583.   D3DPRESENT_INTERVAL_THREE     = $00000004;
  3584.   {$EXTERNALSYM D3DPRESENT_INTERVAL_THREE}
  3585.   D3DPRESENT_INTERVAL_FOUR      = $00000008;
  3586.   {$EXTERNALSYM D3DPRESENT_INTERVAL_FOUR}
  3587.   D3DPRESENT_INTERVAL_IMMEDIATE = $80000000;
  3588.   {$EXTERNALSYM D3DPRESENT_INTERVAL_IMMEDIATE}
  3589.  
  3590.   //
  3591.   // CursorCaps
  3592.   //
  3593.   // Driver supports HW color cursor in at least hi-res modes(height >=400)
  3594.   D3DCURSORCAPS_COLOR           = $00000001;
  3595.   {$EXTERNALSYM D3DCURSORCAPS_COLOR}
  3596.   // Driver supports HW cursor also in low-res modes(height < 400)
  3597.   D3DCURSORCAPS_LOWRES          = $00000002;
  3598.   {$EXTERNALSYM D3DCURSORCAPS_LOWRES}
  3599.  
  3600.   //
  3601.   // DevCaps
  3602.   //
  3603.   D3DDEVCAPS_EXECUTESYSTEMMEMORY        = $00000010; { Device can use execute buffers from system memory }
  3604.   {$EXTERNALSYM D3DDEVCAPS_EXECUTESYSTEMMEMORY}
  3605.   D3DDEVCAPS_EXECUTEVIDEOMEMORY         = $00000020; { Device can use execute buffers from video memory }
  3606.   {$EXTERNALSYM D3DDEVCAPS_EXECUTEVIDEOMEMORY}
  3607.   D3DDEVCAPS_TLVERTEXSYSTEMMEMORY       = $00000040; { Device can use TL buffers from system memory }
  3608.   {$EXTERNALSYM D3DDEVCAPS_TLVERTEXSYSTEMMEMORY}
  3609.   D3DDEVCAPS_TLVERTEXVIDEOMEMORY        = $00000080; { Device can use TL buffers from video memory }
  3610.   {$EXTERNALSYM D3DDEVCAPS_TLVERTEXVIDEOMEMORY}
  3611.   D3DDEVCAPS_TEXTURESYSTEMMEMORY        = $00000100; { Device can texture from system memory }
  3612.   {$EXTERNALSYM D3DDEVCAPS_TEXTURESYSTEMMEMORY}
  3613.   D3DDEVCAPS_TEXTUREVIDEOMEMORY         = $00000200; { Device can texture from device memory }
  3614.   {$EXTERNALSYM D3DDEVCAPS_TEXTUREVIDEOMEMORY}
  3615.   D3DDEVCAPS_DRAWPRIMTLVERTEX           = $00000400; { Device can draw TLVERTEX primitives }
  3616.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMTLVERTEX}
  3617.   D3DDEVCAPS_CANRENDERAFTERFLIP         = $00000800; { Device can render without waiting for flip to complete }
  3618.   {$EXTERNALSYM D3DDEVCAPS_CANRENDERAFTERFLIP}
  3619.   D3DDEVCAPS_TEXTURENONLOCALVIDMEM      = $00001000; { Device can texture from nonlocal video memory }
  3620.   {$EXTERNALSYM D3DDEVCAPS_TEXTURENONLOCALVIDMEM}
  3621.   D3DDEVCAPS_DRAWPRIMITIVES2            = $00002000; { Device can support DrawPrimitives2 }
  3622.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMITIVES2}
  3623.   D3DDEVCAPS_SEPARATETEXTUREMEMORIES    = $00004000; { Device is texturing from separate memory pools }
  3624.   {$EXTERNALSYM D3DDEVCAPS_SEPARATETEXTUREMEMORIES}
  3625.   D3DDEVCAPS_DRAWPRIMITIVES2EX          = $00008000; { Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver }
  3626.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMITIVES2EX}
  3627.   D3DDEVCAPS_HWTRANSFORMANDLIGHT        = $00010000; { Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also }
  3628.   {$EXTERNALSYM D3DDEVCAPS_HWTRANSFORMANDLIGHT}
  3629.   D3DDEVCAPS_CANBLTSYSTONONLOCAL        = $00020000; { Device supports a Tex Blt from system memory to non-local vidmem }
  3630.   {$EXTERNALSYM D3DDEVCAPS_CANBLTSYSTONONLOCAL}
  3631.   D3DDEVCAPS_HWRASTERIZATION            = $00080000; { Device has HW acceleration for rasterization }
  3632.   {$EXTERNALSYM D3DDEVCAPS_HWRASTERIZATION}
  3633.   D3DDEVCAPS_PUREDEVICE                 = $00100000; { Device supports D3DCREATE_PUREDEVICE }
  3634.   {$EXTERNALSYM D3DDEVCAPS_PUREDEVICE}
  3635.   D3DDEVCAPS_QUINTICRTPATCHES           = $00200000; { Device supports quintic Beziers and BSplines }
  3636.   {$EXTERNALSYM D3DDEVCAPS_QUINTICRTPATCHES}
  3637.   D3DDEVCAPS_RTPATCHES                  = $00400000; { Device supports Rect and Tri patches }
  3638.   {$EXTERNALSYM D3DDEVCAPS_RTPATCHES}
  3639.   D3DDEVCAPS_RTPATCHHANDLEZERO          = $00800000; { Indicates that RT Patches may be drawn efficiently using handle 0 }
  3640.   {$EXTERNALSYM D3DDEVCAPS_RTPATCHHANDLEZERO}
  3641.   D3DDEVCAPS_NPATCHES                   = $01000000; { Device supports N-Patches }
  3642.   {$EXTERNALSYM D3DDEVCAPS_NPATCHES}
  3643.  
  3644.   //
  3645.   // PrimitiveMiscCaps
  3646.   //
  3647.   D3DPMISCCAPS_MASKZ                    = $00000002;
  3648.   {$EXTERNALSYM D3DPMISCCAPS_MASKZ}
  3649.   D3DPMISCCAPS_CULLNONE                 = $00000010;
  3650.   {$EXTERNALSYM D3DPMISCCAPS_CULLNONE}
  3651.   D3DPMISCCAPS_CULLCW                   = $00000020;
  3652.   {$EXTERNALSYM D3DPMISCCAPS_CULLCW}
  3653.   D3DPMISCCAPS_CULLCCW                  = $00000040;
  3654.   {$EXTERNALSYM D3DPMISCCAPS_CULLCCW}
  3655.   D3DPMISCCAPS_COLORWRITEENABLE         = $00000080;
  3656.   {$EXTERNALSYM D3DPMISCCAPS_COLORWRITEENABLE}
  3657.   D3DPMISCCAPS_CLIPPLANESCALEDPOINTS    = $00000100; { Device correctly clips scaled points to clip planes }
  3658.   {$EXTERNALSYM D3DPMISCCAPS_CLIPPLANESCALEDPOINTS}
  3659.   D3DPMISCCAPS_CLIPTLVERTS              = $00000200; { device will clip post-transformed vertex primitives }
  3660.   {$EXTERNALSYM D3DPMISCCAPS_CLIPTLVERTS}
  3661.   D3DPMISCCAPS_TSSARGTEMP               = $00000400; { device supports D3DTA_TEMP for temporary register }
  3662.   {$EXTERNALSYM D3DPMISCCAPS_TSSARGTEMP}
  3663.   D3DPMISCCAPS_BLENDOP                  = $00000800; { device supports D3DRS_BLENDOP }
  3664.   {$EXTERNALSYM D3DPMISCCAPS_BLENDOP}
  3665.   D3DPMISCCAPS_NULLREFERENCE            = $00001000; { Reference Device that doesnt render }
  3666.   {$EXTERNALSYM D3DPMISCCAPS_NULLREFERENCE}
  3667.   D3DPMISCCAPS_INDEPENDENTWRITEMASKS    = $00004000; { Device supports independent write masks for MET or MRT }
  3668.   {$EXTERNALSYM D3DPMISCCAPS_INDEPENDENTWRITEMASKS}
  3669.   D3DPMISCCAPS_PERSTAGECONSTANT         = $00008000; { Device supports per-stage constants }
  3670.   {$EXTERNALSYM D3DPMISCCAPS_PERSTAGECONSTANT}
  3671.   D3DPMISCCAPS_FOGANDSPECULARALPHA      = $00010000; { Device supports separate fog and specular alpha (many devices
  3672.                                                        use the specular alpha channel to store fog factor) }
  3673.   {$EXTERNALSYM D3DPMISCCAPS_FOGANDSPECULARALPHA}
  3674.   D3DPMISCCAPS_SEPARATEALPHABLEND       = $00020000; { Device supports separate blend settings for the alpha channel }
  3675.   {$EXTERNALSYM D3DPMISCCAPS_SEPARATEALPHABLEND}
  3676.   D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS    = $00040000; { Device supports different bit depths for MRT }
  3677.   {$EXTERNALSYM D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS}
  3678.   D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING = $00080000; { Device supports post-pixel shader operations for MRT }
  3679.   {$EXTERNALSYM D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING}
  3680.   D3DPMISCCAPS_FOGVERTEXCLAMPED           = $00100000; { Device clamps fog blend factor per vertex }
  3681.   {$EXTERNALSYM D3DPMISCCAPS_FOGVERTEXCLAMPED}
  3682.  
  3683.   //
  3684.   // LineCaps
  3685.   //
  3686.   D3DLINECAPS_TEXTURE                   = $00000001;
  3687.   {$EXTERNALSYM D3DLINECAPS_TEXTURE}
  3688.   D3DLINECAPS_ZTEST                     = $00000002;
  3689.   {$EXTERNALSYM D3DLINECAPS_ZTEST}
  3690.   D3DLINECAPS_BLEND                     = $00000004;
  3691.   {$EXTERNALSYM D3DLINECAPS_BLEND}
  3692.   D3DLINECAPS_ALPHACMP                  = $00000008;
  3693.   {$EXTERNALSYM D3DLINECAPS_ALPHACMP}
  3694.   D3DLINECAPS_FOG                       = $00000010;
  3695.   {$EXTERNALSYM D3DLINECAPS_FOG}
  3696.   D3DLINECAPS_ANTIALIAS                 = $00000020;
  3697.   {$EXTERNALSYM D3DLINECAPS_ANTIALIAS}
  3698.  
  3699.   //
  3700.   // RasterCaps
  3701.   //
  3702.   D3DPRASTERCAPS_DITHER                 = $00000001;
  3703.   {$EXTERNALSYM D3DPRASTERCAPS_DITHER}
  3704.   D3DPRASTERCAPS_ZTEST                  = $00000010;
  3705.   {$EXTERNALSYM D3DPRASTERCAPS_ZTEST}
  3706.   D3DPRASTERCAPS_FOGVERTEX              = $00000080;
  3707.   {$EXTERNALSYM D3DPRASTERCAPS_FOGVERTEX}
  3708.   D3DPRASTERCAPS_FOGTABLE               = $00000100;
  3709.   {$EXTERNALSYM D3DPRASTERCAPS_FOGTABLE}
  3710.   D3DPRASTERCAPS_MIPMAPLODBIAS          = $00002000;
  3711.   {$EXTERNALSYM D3DPRASTERCAPS_MIPMAPLODBIAS}
  3712.   D3DPRASTERCAPS_ZBUFFERLESSHSR         = $00008000;
  3713.   {$EXTERNALSYM D3DPRASTERCAPS_ZBUFFERLESSHSR}
  3714.   D3DPRASTERCAPS_FOGRANGE               = $00010000;
  3715.   {$EXTERNALSYM D3DPRASTERCAPS_FOGRANGE}
  3716.   D3DPRASTERCAPS_ANISOTROPY             = $00020000;
  3717.   {$EXTERNALSYM D3DPRASTERCAPS_ANISOTROPY}
  3718.   D3DPRASTERCAPS_WBUFFER                = $00040000;
  3719.   {$EXTERNALSYM D3DPRASTERCAPS_WBUFFER}
  3720.   D3DPRASTERCAPS_WFOG                   = $00100000;
  3721.   {$EXTERNALSYM D3DPRASTERCAPS_WFOG}
  3722.   D3DPRASTERCAPS_ZFOG                   = $00200000;
  3723.   {$EXTERNALSYM D3DPRASTERCAPS_ZFOG}
  3724.   D3DPRASTERCAPS_COLORPERSPECTIVE       = $00400000; { Device iterates colors perspective correct }
  3725.   {$EXTERNALSYM D3DPRASTERCAPS_COLORPERSPECTIVE}
  3726.   D3DPRASTERCAPS_SCISSORTEST            = $01000000;
  3727.   {$EXTERNALSYM D3DPRASTERCAPS_SCISSORTEST}
  3728.   D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS    = $02000000;
  3729.   {$EXTERNALSYM D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS}
  3730.   D3DPRASTERCAPS_DEPTHBIAS              = $04000000;
  3731.   {$EXTERNALSYM D3DPRASTERCAPS_DEPTHBIAS}
  3732.   D3DPRASTERCAPS_MULTISAMPLE_TOGGLE     = $08000000;
  3733.   {$EXTERNALSYM D3DPRASTERCAPS_MULTISAMPLE_TOGGLE}
  3734.  
  3735.   //
  3736.   // ZCmpCaps, AlphaCmpCaps
  3737.   //
  3738.   D3DPCMPCAPS_NEVER                     = $00000001;
  3739.   {$EXTERNALSYM D3DPCMPCAPS_NEVER}
  3740.   D3DPCMPCAPS_LESS                      = $00000002;
  3741.   {$EXTERNALSYM D3DPCMPCAPS_LESS}
  3742.   D3DPCMPCAPS_EQUAL                     = $00000004;
  3743.   {$EXTERNALSYM D3DPCMPCAPS_EQUAL}
  3744.   D3DPCMPCAPS_LESSEQUAL                 = $00000008;
  3745.   {$EXTERNALSYM D3DPCMPCAPS_LESSEQUAL}
  3746.   D3DPCMPCAPS_GREATER                   = $00000010;
  3747.   {$EXTERNALSYM D3DPCMPCAPS_GREATER}
  3748.   D3DPCMPCAPS_NOTEQUAL                  = $00000020;
  3749.   {$EXTERNALSYM D3DPCMPCAPS_NOTEQUAL}
  3750.   D3DPCMPCAPS_GREATEREQUAL              = $00000040;
  3751.   {$EXTERNALSYM D3DPCMPCAPS_GREATEREQUAL}
  3752.   D3DPCMPCAPS_ALWAYS                    = $00000080;
  3753.   {$EXTERNALSYM D3DPCMPCAPS_ALWAYS}
  3754.  
  3755.   //
  3756.   // SourceBlendCaps, DestBlendCaps
  3757.   //
  3758.   D3DPBLENDCAPS_ZERO                    = $00000001;
  3759.   {$EXTERNALSYM D3DPBLENDCAPS_ZERO}
  3760.   D3DPBLENDCAPS_ONE                     = $00000002;
  3761.   {$EXTERNALSYM D3DPBLENDCAPS_ONE}
  3762.   D3DPBLENDCAPS_SRCCOLOR                = $00000004;
  3763.   {$EXTERNALSYM D3DPBLENDCAPS_SRCCOLOR}
  3764.   D3DPBLENDCAPS_INVSRCCOLOR             = $00000008;
  3765.   {$EXTERNALSYM D3DPBLENDCAPS_INVSRCCOLOR}
  3766.   D3DPBLENDCAPS_SRCALPHA                = $00000010;
  3767.   {$EXTERNALSYM D3DPBLENDCAPS_SRCALPHA}
  3768.   D3DPBLENDCAPS_INVSRCALPHA             = $00000020;
  3769.   {$EXTERNALSYM D3DPBLENDCAPS_INVSRCALPHA}
  3770.   D3DPBLENDCAPS_DESTALPHA               = $00000040;
  3771.   {$EXTERNALSYM D3DPBLENDCAPS_DESTALPHA}
  3772.   D3DPBLENDCAPS_INVDESTALPHA            = $00000080;
  3773.   {$EXTERNALSYM D3DPBLENDCAPS_INVDESTALPHA}
  3774.   D3DPBLENDCAPS_DESTCOLOR               = $00000100;
  3775.   {$EXTERNALSYM D3DPBLENDCAPS_DESTCOLOR}
  3776.   D3DPBLENDCAPS_INVDESTCOLOR            = $00000200;
  3777.   {$EXTERNALSYM D3DPBLENDCAPS_INVDESTCOLOR}
  3778.   D3DPBLENDCAPS_SRCALPHASAT             = $00000400;
  3779.   {$EXTERNALSYM D3DPBLENDCAPS_SRCALPHASAT}
  3780.   D3DPBLENDCAPS_BOTHSRCALPHA            = $00000800;
  3781.   {$EXTERNALSYM D3DPBLENDCAPS_BOTHSRCALPHA}
  3782.   D3DPBLENDCAPS_BOTHINVSRCALPHA         = $00001000;
  3783.   {$EXTERNALSYM D3DPBLENDCAPS_BOTHINVSRCALPHA}
  3784.   D3DPBLENDCAPS_BLENDFACTOR             = $00002000; { Supports both D3DBLEND_BLENDFACTOR and D3DBLEND_INVBLENDFACTOR }
  3785.   {$EXTERNALSYM D3DPBLENDCAPS_BLENDFACTOR}
  3786.  
  3787.   //
  3788.   // ShadeCaps
  3789.   //
  3790.   D3DPSHADECAPS_COLORGOURAUDRGB         = $00000008;
  3791.   {$EXTERNALSYM D3DPSHADECAPS_COLORGOURAUDRGB}
  3792.   D3DPSHADECAPS_SPECULARGOURAUDRGB      = $00000200;
  3793.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARGOURAUDRGB}
  3794.   D3DPSHADECAPS_ALPHAGOURAUDBLEND       = $00004000;
  3795.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAGOURAUDBLEND}
  3796.   D3DPSHADECAPS_FOGGOURAUD              = $00080000;
  3797.   {$EXTERNALSYM D3DPSHADECAPS_FOGGOURAUD}
  3798.  
  3799.   //
  3800.   // TextureCaps
  3801.   //
  3802.   D3DPTEXTURECAPS_PERSPECTIVE           = $00000001; { Perspective-correct texturing is supported }
  3803.   {$EXTERNALSYM D3DPTEXTURECAPS_PERSPECTIVE}
  3804.   D3DPTEXTURECAPS_POW2                  = $00000002; { Power-of-2 texture dimensions are required - applies to non-Cube/Volume textures only. }
  3805.   {$EXTERNALSYM D3DPTEXTURECAPS_POW2}
  3806.   D3DPTEXTURECAPS_ALPHA                 = $00000004; { Alpha in texture pixels is supported }
  3807.   {$EXTERNALSYM D3DPTEXTURECAPS_ALPHA}
  3808.   D3DPTEXTURECAPS_SQUAREONLY            = $00000020; { Only square textures are supported }
  3809.   {$EXTERNALSYM D3DPTEXTURECAPS_SQUAREONLY}
  3810.   D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE = $00000040; { Texture indices are not scaled by the texture size prior to interpolation }
  3811.   {$EXTERNALSYM D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE}
  3812.   D3DPTEXTURECAPS_ALPHAPALETTE          = $00000080; { Device can draw alpha from texture palettes }
  3813.   {$EXTERNALSYM D3DPTEXTURECAPS_ALPHAPALETTE}
  3814.   // Device can use non-POW2 textures if:
  3815.   //  1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage
  3816.   //  2) D3DRS_WRAP(N) is zero for this texture's coordinates
  3817.   //  3) mip mapping is not enabled (use magnification filter only)
  3818.   D3DPTEXTURECAPS_NONPOW2CONDITIONAL    = $00000100;
  3819.   {$EXTERNALSYM D3DPTEXTURECAPS_NONPOW2CONDITIONAL}
  3820.   D3DPTEXTURECAPS_PROJECTED             = $00000400; { Device can do D3DTTFF_PROJECTED }
  3821.   {$EXTERNALSYM D3DPTEXTURECAPS_PROJECTED}
  3822.   D3DPTEXTURECAPS_CUBEMAP               = $00000800; { Device can do cubemap textures }
  3823.   {$EXTERNALSYM D3DPTEXTURECAPS_CUBEMAP}
  3824.   D3DPTEXTURECAPS_VOLUMEMAP             = $00002000; { Device can do volume textures }
  3825.   {$EXTERNALSYM D3DPTEXTURECAPS_VOLUMEMAP}
  3826.   D3DPTEXTURECAPS_MIPMAP                = $00004000; { Device can do mipmapped textures }
  3827.   {$EXTERNALSYM D3DPTEXTURECAPS_MIPMAP}
  3828.   D3DPTEXTURECAPS_MIPVOLUMEMAP          = $00008000; { Device can do mipmapped volume textures }
  3829.   {$EXTERNALSYM D3DPTEXTURECAPS_MIPVOLUMEMAP}
  3830.   D3DPTEXTURECAPS_MIPCUBEMAP            = $00010000; { Device can do mipmapped cube maps }
  3831.   {$EXTERNALSYM D3DPTEXTURECAPS_MIPCUBEMAP}
  3832.   D3DPTEXTURECAPS_CUBEMAP_POW2          = $00020000; { Device requires that cubemaps be power-of-2 dimension }
  3833.   {$EXTERNALSYM D3DPTEXTURECAPS_CUBEMAP_POW2}
  3834.   D3DPTEXTURECAPS_VOLUMEMAP_POW2        = $00040000; { Device requires that volume maps be power-of-2 dimension }
  3835.   {$EXTERNALSYM D3DPTEXTURECAPS_VOLUMEMAP_POW2}
  3836.   D3DPTEXTURECAPS_NOPROJECTEDBUMPENV    = $00200000; { Device does not support projected bump env lookup operation
  3837.                                                        in programmable and fixed function pixel shaders }
  3838.   {$EXTERNALSYM D3DPTEXTURECAPS_NOPROJECTEDBUMPENV}
  3839.  
  3840.   //
  3841.   // TextureFilterCaps, StretchRectFilterCaps
  3842.   //
  3843.   D3DPTFILTERCAPS_MINFPOINT             = $00000100; { Min Filter }
  3844.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFPOINT}
  3845.   D3DPTFILTERCAPS_MINFLINEAR            = $00000200;
  3846.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFLINEAR}
  3847.   D3DPTFILTERCAPS_MINFANISOTROPIC       = $00000400;
  3848.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFANISOTROPIC}
  3849.   D3DPTFILTERCAPS_MINFPYRAMIDALQUAD     = $00000800;
  3850.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFPYRAMIDALQUAD}
  3851.   D3DPTFILTERCAPS_MINFGAUSSIANQUAD      = $00001000;
  3852.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFGAUSSIANQUAD}
  3853.   D3DPTFILTERCAPS_MIPFPOINT             = $00010000; { Mip Filter }
  3854.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPFPOINT}
  3855.   D3DPTFILTERCAPS_MIPFLINEAR            = $00020000;
  3856.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPFLINEAR}
  3857.   D3DPTFILTERCAPS_MAGFPOINT             = $01000000; { Mag Filter }
  3858.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFPOINT}
  3859.   D3DPTFILTERCAPS_MAGFLINEAR            = $02000000;
  3860.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFLINEAR}
  3861.   D3DPTFILTERCAPS_MAGFANISOTROPIC       = $04000000;
  3862.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFANISOTROPIC}
  3863.   D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD     = $08000000;
  3864.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD}
  3865.   D3DPTFILTERCAPS_MAGFGAUSSIANQUAD      = $10000000;
  3866.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFGAUSSIANQUAD}
  3867.  
  3868.   //
  3869.   // TextureAddressCaps
  3870.   //
  3871.   D3DPTADDRESSCAPS_WRAP                 = $00000001;
  3872.   {$EXTERNALSYM D3DPTADDRESSCAPS_WRAP}
  3873.   D3DPTADDRESSCAPS_MIRROR               = $00000002;
  3874.   {$EXTERNALSYM D3DPTADDRESSCAPS_MIRROR}
  3875.   D3DPTADDRESSCAPS_CLAMP                = $00000004;
  3876.   {$EXTERNALSYM D3DPTADDRESSCAPS_CLAMP}
  3877.   D3DPTADDRESSCAPS_BORDER               = $00000008;
  3878.   {$EXTERNALSYM D3DPTADDRESSCAPS_BORDER}
  3879.   D3DPTADDRESSCAPS_INDEPENDENTUV        = $00000010;
  3880.   {$EXTERNALSYM D3DPTADDRESSCAPS_INDEPENDENTUV}
  3881.   D3DPTADDRESSCAPS_MIRRORONCE           = $00000020;
  3882.   {$EXTERNALSYM D3DPTADDRESSCAPS_MIRRORONCE}
  3883.  
  3884.   //
  3885.   // StencilCaps
  3886.   //
  3887.   D3DSTENCILCAPS_KEEP                   = $00000001;
  3888.   {$EXTERNALSYM D3DSTENCILCAPS_KEEP}
  3889.   D3DSTENCILCAPS_ZERO                   = $00000002;
  3890.   {$EXTERNALSYM D3DSTENCILCAPS_ZERO}
  3891.   D3DSTENCILCAPS_REPLACE                = $00000004;
  3892.   {$EXTERNALSYM D3DSTENCILCAPS_REPLACE}
  3893.   D3DSTENCILCAPS_INCRSAT                = $00000008;
  3894.   {$EXTERNALSYM D3DSTENCILCAPS_INCRSAT}
  3895.   D3DSTENCILCAPS_DECRSAT                = $00000010;
  3896.   {$EXTERNALSYM D3DSTENCILCAPS_DECRSAT}
  3897.   D3DSTENCILCAPS_INVERT                 = $00000020;
  3898.   {$EXTERNALSYM D3DSTENCILCAPS_INVERT}
  3899.   D3DSTENCILCAPS_INCR                   = $00000040;
  3900.   {$EXTERNALSYM D3DSTENCILCAPS_INCR}
  3901.   D3DSTENCILCAPS_DECR                   = $00000080;
  3902.   {$EXTERNALSYM D3DSTENCILCAPS_DECR}
  3903.   D3DSTENCILCAPS_TWOSIDED               = $00000100;
  3904.   {$EXTERNALSYM D3DSTENCILCAPS_TWOSIDED}
  3905.  
  3906.   //
  3907.   // TextureOpCaps
  3908.   //
  3909.   D3DTEXOPCAPS_DISABLE                          = $00000001;
  3910.   {$EXTERNALSYM D3DTEXOPCAPS_DISABLE}
  3911.   D3DTEXOPCAPS_SELECTARG1                       = $00000002;
  3912.   {$EXTERNALSYM D3DTEXOPCAPS_SELECTARG1}
  3913.   D3DTEXOPCAPS_SELECTARG2                       = $00000004;
  3914.   {$EXTERNALSYM D3DTEXOPCAPS_SELECTARG2}
  3915.   D3DTEXOPCAPS_MODULATE                         = $00000008;
  3916.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE}
  3917.   D3DTEXOPCAPS_MODULATE2X                       = $00000010;
  3918.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE2X}
  3919.   D3DTEXOPCAPS_MODULATE4X                       = $00000020;
  3920.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE4X}
  3921.   D3DTEXOPCAPS_ADD                              = $00000040;
  3922.   {$EXTERNALSYM D3DTEXOPCAPS_ADD}
  3923.   D3DTEXOPCAPS_ADDSIGNED                        = $00000080;
  3924.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSIGNED}
  3925.   D3DTEXOPCAPS_ADDSIGNED2X                      = $00000100;
  3926.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSIGNED2X}
  3927.   D3DTEXOPCAPS_SUBTRACT                         = $00000200;
  3928.   {$EXTERNALSYM D3DTEXOPCAPS_SUBTRACT}
  3929.   D3DTEXOPCAPS_ADDSMOOTH                        = $00000400;
  3930.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSMOOTH}
  3931.   D3DTEXOPCAPS_BLENDDIFFUSEALPHA                = $00000800;
  3932.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDDIFFUSEALPHA}
  3933.   D3DTEXOPCAPS_BLENDTEXTUREALPHA                = $00001000;
  3934.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDTEXTUREALPHA}
  3935.   D3DTEXOPCAPS_BLENDFACTORALPHA                 = $00002000;
  3936.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDFACTORALPHA}
  3937.   D3DTEXOPCAPS_BLENDTEXTUREALPHAPM              = $00004000;
  3938.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDTEXTUREALPHAPM}
  3939.   D3DTEXOPCAPS_BLENDCURRENTALPHA                = $00008000;
  3940.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDCURRENTALPHA}
  3941.   D3DTEXOPCAPS_PREMODULATE                      = $00010000;
  3942.   {$EXTERNALSYM D3DTEXOPCAPS_PREMODULATE}
  3943.   D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR           = $00020000;
  3944.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR}
  3945.   D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA           = $00040000;
  3946.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA}
  3947.   D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR        = $00080000;
  3948.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR}
  3949.   D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA        = $00100000;
  3950.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA}
  3951.   D3DTEXOPCAPS_BUMPENVMAP                       = $00200000;
  3952.   {$EXTERNALSYM D3DTEXOPCAPS_BUMPENVMAP}
  3953.   D3DTEXOPCAPS_BUMPENVMAPLUMINANCE              = $00400000;
  3954.   {$EXTERNALSYM D3DTEXOPCAPS_BUMPENVMAPLUMINANCE}
  3955.   D3DTEXOPCAPS_DOTPRODUCT3                      = $00800000;
  3956.   {$EXTERNALSYM D3DTEXOPCAPS_DOTPRODUCT3}
  3957.   D3DTEXOPCAPS_MULTIPLYADD                      = $01000000;
  3958.   {$EXTERNALSYM D3DTEXOPCAPS_MULTIPLYADD}
  3959.   D3DTEXOPCAPS_LERP                             = $02000000;
  3960.   {$EXTERNALSYM D3DTEXOPCAPS_LERP}
  3961.  
  3962.   //
  3963.   // FVFCaps
  3964.   //
  3965.   D3DFVFCAPS_TEXCOORDCOUNTMASK  = $0000ffff; { mask for texture coordinate count field }
  3966.   {$EXTERNALSYM D3DFVFCAPS_TEXCOORDCOUNTMASK}
  3967.   D3DFVFCAPS_DONOTSTRIPELEMENTS = $00080000; { Device prefers that vertex elements not be stripped }
  3968.   {$EXTERNALSYM D3DFVFCAPS_DONOTSTRIPELEMENTS}
  3969.   D3DFVFCAPS_PSIZE              = $00100000; { Device can receive point size }
  3970.   {$EXTERNALSYM D3DFVFCAPS_PSIZE}
  3971.  
  3972.   //
  3973.   // VertexProcessingCaps
  3974.   //
  3975.   D3DVTXPCAPS_TEXGEN            = $00000001; { device can do texgen }
  3976.   {$EXTERNALSYM D3DVTXPCAPS_TEXGEN}
  3977.   D3DVTXPCAPS_MATERIALSOURCE7   = $00000002; { device can do DX7-level colormaterialsource ops }
  3978.   {$EXTERNALSYM D3DVTXPCAPS_MATERIALSOURCE7}
  3979.   D3DVTXPCAPS_DIRECTIONALLIGHTS = $00000008; { device can do directional lights }
  3980.   {$EXTERNALSYM D3DVTXPCAPS_DIRECTIONALLIGHTS}
  3981.   D3DVTXPCAPS_POSITIONALLIGHTS  = $00000010; { device can do positional lights (includes point and spot) }
  3982.   {$EXTERNALSYM D3DVTXPCAPS_POSITIONALLIGHTS}
  3983.   D3DVTXPCAPS_LOCALVIEWER       = $00000020; { device can do local viewer }
  3984.   {$EXTERNALSYM D3DVTXPCAPS_LOCALVIEWER}
  3985.   D3DVTXPCAPS_TWEENING          = $00000040; { device can do vertex tweening }
  3986.   {$EXTERNALSYM D3DVTXPCAPS_TWEENING}
  3987.   D3DVTXPCAPS_TEXGEN_SPHEREMAP  = $00000100; { device supports D3DTSS_TCI_SPHEREMAP }
  3988.   {$EXTERNALSYM D3DVTXPCAPS_TEXGEN_SPHEREMAP}
  3989.   D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER = $00000200; { device does not support TexGen in non-local
  3990.                                                       viewer mode }
  3991.   {$EXTERNALSYM D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER}
  3992.  
  3993.   //
  3994.   // DevCaps2
  3995.   //
  3996.   D3DDEVCAPS2_STREAMOFFSET                        = $00000001; { Device supports offsets in streams. Must be set by DX9 drivers }
  3997.   {$EXTERNALSYM D3DDEVCAPS2_STREAMOFFSET}
  3998.   D3DDEVCAPS2_DMAPNPATCH                          = $00000002; { Device supports displacement maps for N-Patches}
  3999.   {$EXTERNALSYM D3DDEVCAPS2_DMAPNPATCH}
  4000.   D3DDEVCAPS2_ADAPTIVETESSRTPATCH                 = $00000004; { Device supports adaptive tesselation of RT-patches}
  4001.   {$EXTERNALSYM D3DDEVCAPS2_ADAPTIVETESSRTPATCH}
  4002.   D3DDEVCAPS2_ADAPTIVETESSNPATCH                  = $00000008; { Device supports adaptive tesselation of N-patches}
  4003.   {$EXTERNALSYM D3DDEVCAPS2_ADAPTIVETESSNPATCH}
  4004.   D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES       = $00000010; { Device supports StretchRect calls with a texture as the source}
  4005.   {$EXTERNALSYM D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES}
  4006.   D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH                = $00000020; { Device supports presampled displacement maps for N-Patches }
  4007.   {$EXTERNALSYM D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH}
  4008.   D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET  = $00000040; { Vertex elements in a vertex declaration can share the same stream offset }
  4009.   {$EXTERNALSYM D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET}
  4010.  
  4011.   //
  4012.   // DeclTypes
  4013.   //
  4014.   D3DDTCAPS_UBYTE4     = $00000001;
  4015.   {$EXTERNALSYM D3DDTCAPS_UBYTE4}
  4016.   D3DDTCAPS_UBYTE4N    = $00000002;
  4017.   {$EXTERNALSYM D3DDTCAPS_UBYTE4N}
  4018.   D3DDTCAPS_SHORT2N    = $00000004;
  4019.   {$EXTERNALSYM D3DDTCAPS_SHORT2N}
  4020.   D3DDTCAPS_SHORT4N    = $00000008;
  4021.   {$EXTERNALSYM D3DDTCAPS_SHORT4N}
  4022.   D3DDTCAPS_USHORT2N   = $00000010;
  4023.   {$EXTERNALSYM D3DDTCAPS_USHORT2N}
  4024.   D3DDTCAPS_USHORT4N   = $00000020;
  4025.   {$EXTERNALSYM D3DDTCAPS_USHORT4N}
  4026.   D3DDTCAPS_UDEC3      = $00000040;
  4027.   {$EXTERNALSYM D3DDTCAPS_UDEC3}
  4028.   D3DDTCAPS_DEC3N      = $00000080;
  4029.   {$EXTERNALSYM D3DDTCAPS_DEC3N}
  4030.   D3DDTCAPS_FLOAT16_2  = $00000100;
  4031.   {$EXTERNALSYM D3DDTCAPS_FLOAT16_2}
  4032.   D3DDTCAPS_FLOAT16_4  = $00000200;
  4033.   {$EXTERNALSYM D3DDTCAPS_FLOAT16_4}
  4034.  
  4035.  
  4036.  
  4037.  
  4038. (*==========================================================================;
  4039.  *
  4040.  *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  4041.  *
  4042.  *  File:   d3d9.h
  4043.  *  Content:    Direct3D include file
  4044.  *
  4045.  ****************************************************************************)
  4046.  
  4047. (* This identifier is passed to Direct3DCreate9 in order to ensure that an
  4048.  * application was built against the correct header files. This number is
  4049.  * incremented whenever a header (or other) change would require applications
  4050.  * to be rebuilt. If the version doesn't match, Direct3DCreate9 will fail.
  4051.  * (The number itself has no meaning.)*)
  4052.  
  4053. const
  4054.   D3D_SDK_VERSION = DWORD(31);
  4055.   {$EXTERNALSYM D3D_SDK_VERSION}
  4056.  
  4057. type
  4058.   HMONITOR = THandle;
  4059.   {$EXTERNALSYM HMONITOR}
  4060.  
  4061. (*
  4062.  * Direct3D interfaces
  4063.  *)
  4064.  
  4065.   // forward interfaces declaration
  4066.   IDirect3D9 = interface;
  4067.   IDirect3DDevice9 = interface;
  4068.   IDirect3DStateBlock9 = interface;
  4069.   IDirect3DVertexDeclaration9 = interface;
  4070.   IDirect3DVertexShader9 = interface;
  4071.   IDirect3DPixelShader9 = interface;
  4072.   IDirect3DResource9 = interface;
  4073.   IDirect3DBaseTexture9 = interface;
  4074.   IDirect3DTexture9 = interface;
  4075.   IDirect3DVolumeTexture9 = interface;
  4076.   IDirect3DCubeTexture9 = interface;
  4077.   IDirect3DVertexBuffer9 = interface;
  4078.   IDirect3DIndexBuffer9 = interface;
  4079.   IDirect3DSurface9 = interface;
  4080.   IDirect3DVolume9 = interface;
  4081.   IDirect3DSwapChain9 = interface;
  4082.   IDirect3DQuery9 = interface;
  4083.  
  4084.   
  4085.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3D9);'}
  4086.   {$EXTERNALSYM IDirect3D9}
  4087.   IDirect3D9 = interface(IUnknown)
  4088.     ['{81BDCBCA-64D4-426d-AE8D-AD0147F4275C}']
  4089.     (*** IDirect3D9 methods ***)
  4090.     function RegisterSoftwareDevice(pInitializeFunction: Pointer): HResult; stdcall;
  4091.     function GetAdapterCount: LongWord; stdcall;
  4092.     function GetAdapterIdentifier(Adapter: LongWord; Flags: DWord; out pIdentifier: TD3DAdapterIdentifier9): HResult; stdcall;
  4093.     function GetAdapterModeCount(Adapter: LongWord; Format: TD3DFormat): LongWord; stdcall;
  4094.     function EnumAdapterModes(Adapter: LongWord; Format: TD3DFormat; Mode: LongWord; out pMode: TD3DDisplayMode): HResult; stdcall;
  4095.     function GetAdapterDisplayMode(Adapter: LongWord; out pMode: TD3DDisplayMode): HResult; stdcall;
  4096.     function CheckDeviceType(Adapter: LongWord; CheckType: TD3DDevType; DisplayFormat, BackBufferFormat: TD3DFormat; Windowed: BOOL): HResult; stdcall;
  4097.     function CheckDeviceFormat(Adapter: LongWord; DeviceType: TD3DDevType; AdapterFormat: TD3DFormat; Usage: DWord; RType: TD3DResourceType; CheckFormat: TD3DFormat): HResult; stdcall;
  4098.     function CheckDeviceMultiSampleType(Adapter: LongWord; DeviceType: TD3DDevType; SurfaceFormat: TD3DFormat; Windowed: BOOL; MultiSampleType: TD3DMultiSampleType; pQualityLevels: PDWORD): HResult; stdcall;
  4099.     function CheckDepthStencilMatch(Adapter: LongWord; DeviceType: TD3DDevType; AdapterFormat, RenderTargetFormat, DepthStencilFormat: TD3DFormat): HResult; stdcall;
  4100.     function CheckDeviceFormatConversion(Adapter: LongWord; DeviceType: TD3DDevType; SourceFormat, TargetFormat: TD3DFormat): HResult; stdcall;
  4101.     function GetDeviceCaps(Adapter: LongWord; DeviceType: TD3DDevType; out pCaps: TD3DCaps9): HResult; stdcall;
  4102.     function GetAdapterMonitor(Adapter: LongWord): HMONITOR; stdcall;
  4103.     function CreateDevice(Adapter: LongWord; DeviceType: TD3DDevType; hFocusWindow: HWND; BehaviorFlags: DWord; pPresentationParameters: PD3DPresentParameters; out ppReturnedDeviceInterface: IDirect3DDevice9): HResult; stdcall;
  4104.   end;
  4105.  
  4106.  
  4107.  
  4108. { SwapChain }
  4109.  
  4110.  
  4111.  
  4112.  
  4113.  
  4114.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DDevice9);'}
  4115.   {$EXTERNALSYM IDirect3DDevice9}
  4116.   IDirect3DDevice9 = interface(IUnknown)
  4117.     ['{D0223B96-BF7A-43fd-92BD-A43B0D82B9EB}']
  4118.     (*** IDirect3DDevice9 methods ***)
  4119.     function TestCooperativeLevel: HResult; stdcall;
  4120.     function GetAvailableTextureMem: LongWord; stdcall;
  4121.     function EvictManagedResources: HResult; stdcall;
  4122.     function GetDirect3D(out ppD3D9: IDirect3D9): HResult; stdcall;
  4123.     function GetDeviceCaps(out pCaps: TD3DCaps9): HResult; stdcall;
  4124.     function GetDisplayMode(iSwapChain: LongWord; out pMode: TD3DDisplayMode): HResult; stdcall;
  4125.     function GetCreationParameters(out pParameters: TD3DDeviceCreationParameters): HResult; stdcall;
  4126.     function SetCursorProperties(XHotSpot, YHotSpot: LongWord; pCursorBitmap: IDirect3DSurface9): HResult; stdcall;
  4127.     procedure SetCursorPosition(XScreenSpace, YScreenSpace: LongWord; Flags: DWord); stdcall;
  4128.     function ShowCursor(bShow: BOOL): BOOL; stdcall;
  4129.     function CreateAdditionalSwapChain(const pPresentationParameters: TD3DPresentParameters; out pSwapChain: IDirect3DSwapChain9): HResult; stdcall;
  4130.     function GetSwapChain(iSwapChain: LongWord; out pSwapChain: IDirect3DSwapChain9): HResult; stdcall;
  4131.     function GetNumberOfSwapChains: LongWord; stdcall;
  4132.     function Reset(const pPresentationParameters: TD3DPresentParameters): HResult; stdcall;
  4133.     function Present(pSourceRect, pDestRect: PRect; hDestWindowOverride: HWND; pDirtyRegion: PRgnData): HResult; stdcall;
  4134.     function GetBackBuffer(iSwapChain: LongWord; iBackBuffer: LongWord; _Type: TD3DBackBufferType; out ppBackBuffer: IDirect3DSurface9): HResult; stdcall;
  4135.     function GetRasterStatus(iSwapChain: LongWord; out pRasterStatus: TD3DRasterStatus): HResult; stdcall;
  4136.     function SetDialogBoxMode(bEnableDialogs: BOOL): HResult; stdcall;
  4137.     procedure SetGammaRamp(iSwapChain: LongWord; Flags: DWord; const pRamp: TD3DGammaRamp); stdcall;
  4138.     procedure GetGammaRamp(iSwapChain: LongWord; out pRamp: TD3DGammaRamp); stdcall;
  4139.     function CreateTexture(Width, Height, Levels: LongWord; Usage: DWord; Format: TD3DFormat; Pool: TD3DPool; out ppTexture: IDirect3DTexture9; pSharedHandle: PHandle): HResult; stdcall;
  4140.     function CreateVolumeTexture(Width, Height, Depth, Levels: LongWord; Usage: DWord; Format: TD3DFormat; Pool: TD3DPool; out ppVolumeTexture: IDirect3DVolumeTexture9; pSharedHandle: PHandle): HResult; stdcall;
  4141.     function CreateCubeTexture(EdgeLength, Levels: LongWord; Usage: DWord; Format: TD3DFormat; Pool: TD3DPool; out ppCubeTexture: IDirect3DCubeTexture9; pSharedHandle: PHandle): HResult; stdcall;
  4142.     function CreateVertexBuffer(Length: LongWord; Usage, FVF: DWord; Pool: TD3DPool; out ppVertexBuffer: IDirect3DVertexBuffer9; pSharedHandle: PHandle): HResult; stdcall;
  4143.     function CreateIndexBuffer(Length: LongWord; Usage: DWord; Format: TD3DFormat; Pool: TD3DPool; out ppIndexBuffer: IDirect3DIndexBuffer9; pSharedHandle: PHandle): HResult; stdcall;
  4144.     function CreateRenderTarget(Width, Height: LongWord; Format: TD3DFormat; MultiSample: TD3DMultiSampleType; MultisampleQuality: DWORD; Lockable: BOOL; out ppSurface: IDirect3DSurface9; pSharedHandle: PHandle): HResult; stdcall;
  4145.     function CreateDepthStencilSurface(Width, Height: LongWord; Format: TD3DFormat; MultiSample: TD3DMultiSampleType; MultisampleQuality: DWORD; Discard: BOOL; out ppSurface: IDirect3DSurface9; pSharedHandle: PHandle): HResult; stdcall;
  4146.     function UpdateSurface(pSourceSurface: IDirect3DSurface9; pSourceRect: PRect; pDestinationSurface: IDirect3DSurface9; pDestPoint: PPoint): HResult; stdcall;
  4147.     function UpdateTexture(pSourceTexture, pDestinationTexture: IDirect3DBaseTexture9): HResult; stdcall;
  4148.     function GetRenderTargetData(pRenderTarget, pDestSurface: IDirect3DSurface9): HResult; stdcall;
  4149.     function GetFrontBufferData(iSwapChain: LongWord; pDestSurface: IDirect3DSurface9): HResult; stdcall;
  4150.     function StretchRect(pSourceSurface: IDirect3DSurface9; pSourceRect: PRect; pDestSurface: IDirect3DSurface9; pDestRect: PRect; Filter: TD3DTextureFilterType): HResult; stdcall;
  4151.     function ColorFill(pSurface: IDirect3DSurface9; pRect: PRect; color: TD3DColor): HResult; stdcall;
  4152.     function CreateOffscreenPlainSurface(Width, Height: LongWord; Format: TD3DFormat; Pool: TD3DPool; out ppSurface: IDirect3DSurface9; pSharedHandle: PHandle): HResult; stdcall;
  4153.     function SetRenderTarget(RenderTargetIndex: DWORD; pRenderTarget: IDirect3DSurface9): HResult; stdcall;
  4154.     function GetRenderTarget(RenderTargetIndex: DWORD; out ppRenderTarget: IDirect3DSurface9): HResult; stdcall;
  4155.     function SetDepthStencilSurface(pNewZStencil: IDirect3DSurface9): HResult; stdcall;
  4156.     function GetDepthStencilSurface(out ppZStencilSurface: IDirect3DSurface9): HResult; stdcall;
  4157.     function BeginScene: HResult; stdcall;
  4158.     function EndScene: HResult; stdcall;
  4159.     function Clear(Count: DWord; pRects: PD3DRect; Flags: DWord; Color: TD3DColor; Z: Single; Stencil: DWord): HResult; stdcall;
  4160.     function SetTransform(State: TD3DTransformStateType; const pMatrix: TD3DMatrix): HResult; stdcall;
  4161.     function GetTransform(State: TD3DTransformStateType; out pMatrix: TD3DMatrix): HResult; stdcall;
  4162.     function MultiplyTransform(State: TD3DTransformStateType; const pMatrix: TD3DMatrix): HResult; stdcall;
  4163.     function SetViewport(const pViewport: TD3DViewport9): HResult; stdcall;
  4164.     function GetViewport(out pViewport: TD3DViewport9): HResult; stdcall;
  4165.     function SetMaterial(const pMaterial: TD3DMaterial9): HResult; stdcall;
  4166.     function GetMaterial(out pMaterial: TD3DMaterial9): HResult; stdcall;
  4167.     function SetLight(Index: DWord; const pLight: TD3DLight9): HResult; stdcall;
  4168.     function GetLight(Index: DWord; out pLight: TD3DLight9): HResult; stdcall;
  4169.     function LightEnable(Index: DWord; Enable: BOOL): HResult; stdcall;
  4170.     function GetLightEnable(Index: DWord; out pEnable: BOOL): HResult; stdcall;
  4171.     function SetClipPlane(Index: DWord; pPlane: PSingle): HResult; stdcall;
  4172.     function GetClipPlane(Index: DWord; pPlane: PSingle): HResult; stdcall;
  4173.     function SetRenderState(State: TD3DRenderStateType; Value: DWord): HResult; stdcall;
  4174.     function GetRenderState(State: TD3DRenderStateType; out pValue: DWord): HResult; stdcall;
  4175.     function CreateStateBlock(_Type: TD3DStateBlockType; out ppSB: IDirect3DStateBlock9): HResult; stdcall;
  4176.     function BeginStateBlock: HResult; stdcall;
  4177.     function EndStateBlock(out ppSB: IDirect3DStateBlock9): HResult; stdcall;
  4178.     function SetClipStatus(const pClipStatus: TD3DClipStatus9): HResult; stdcall;
  4179.     function GetClipStatus(out pClipStatus: TD3DClipStatus9): HResult; stdcall;
  4180.     function GetTexture(Stage: DWord; out ppTexture: IDirect3DBaseTexture9): HResult; stdcall;
  4181.     function SetTexture(Stage: DWord; pTexture: IDirect3DBaseTexture9): HResult; stdcall;
  4182.     function GetTextureStageState(Stage: DWord; _Type: TD3DTextureStageStateType; out pValue: DWord): HResult; stdcall;
  4183.     function SetTextureStageState(Stage: DWord; _Type: TD3DTextureStageStateType; Value: DWord): HResult; stdcall;
  4184.     function GetSamplerState(Sampler: DWORD; _Type: TD3DSamplerStateType; out pValue: DWORD): HResult; stdcall;
  4185.     function SetSamplerState(Sampler: DWORD; _Type: TD3DSamplerStateType; Value: DWORD): HResult; stdcall;
  4186.     function ValidateDevice(out pNumPasses: DWord): HResult; stdcall;
  4187.     function SetPaletteEntries(PaletteNumber: LongWord; pEntries: pPaletteEntry): HResult; stdcall;
  4188.     function GetPaletteEntries(PaletteNumber: LongWord; pEntries: pPaletteEntry): HResult; stdcall;
  4189.     function SetCurrentTexturePalette(PaletteNumber: LongWord): HResult; stdcall;
  4190.     function GetCurrentTexturePalette(out PaletteNumber: LongWord): HResult; stdcall;
  4191.     function SetScissorRect(pRect: PRect): HResult; stdcall;
  4192.     function GetScissorRect(out pRect: TRect): HResult; stdcall;
  4193.     function SetSoftwareVertexProcessing(bSoftware: BOOL): HResult; stdcall;
  4194.     function GetSoftwareVertexProcessing: BOOL; stdcall;
  4195.     function SetNPatchMode(nSegments: Single): HResult; stdcall;
  4196.     function GetNPatchMode: Single; stdcall;
  4197.     function DrawPrimitive(PrimitiveType: TD3DPrimitiveType; StartVertex, PrimitiveCount: LongWord): HResult; stdcall;
  4198.     function DrawIndexedPrimitive(_Type: TD3DPrimitiveType; BaseVertexIndex: Integer; MinVertexIndex, NumVertices, startIndex, primCount: LongWord): HResult; stdcall;
  4199.     function DrawPrimitiveUP(PrimitiveType: TD3DPrimitiveType; PrimitiveCount: LongWord; const pVertexStreamZeroData; VertexStreamZeroStride: LongWord): HResult; stdcall;
  4200.     function DrawIndexedPrimitiveUP(PrimitiveType: TD3DPrimitiveType; MinVertexIndex, NumVertice, PrimitiveCount: LongWord; const pIndexData; IndexDataFormat: TD3DFormat; const pVertexStreamZeroData; VertexStreamZeroStride: LongWord): HResult; stdcall;
  4201.     function ProcessVertices(SrcStartIndex, DestIndex, VertexCount: LongWord; pDestBuffer: IDirect3DVertexBuffer9; pVertexDecl: IDirect3DVertexDeclaration9; Flags: DWord): HResult; stdcall;
  4202.     function CreateVertexDeclaration(pVertexElements: PD3DVertexElement9; out ppDecl: IDirect3DVertexDeclaration9): HResult; stdcall;
  4203.     function SetVertexDeclaration(pDecl: IDirect3DVertexDeclaration9): HResult; stdcall;
  4204.     function GetVertexDeclaration(out ppDecl: IDirect3DVertexDeclaration9): HResult; stdcall;
  4205.     function SetFVF(FVF: DWORD): HResult; stdcall;
  4206.     function GetFVF(out FVF: DWORD): HResult; stdcall;
  4207.     function CreateVertexShader(pFunction: PDWord; out ppShader: IDirect3DVertexShader9): HResult; stdcall;
  4208.     function SetVertexShader(pShader: IDirect3DVertexShader9): HResult; stdcall;
  4209.     function GetVertexShader(out ppShader: IDirect3DVertexShader9): HResult; stdcall;
  4210.     function SetVertexShaderConstantF(StartRegister: LongWord; pConstantData: PSingle; Vector4fCount: LongWord): HResult; stdcall;
  4211.     function GetVertexShaderConstantF(StartRegister: LongWord; pConstantData: PSingle; Vector4fCount: LongWord): HResult; stdcall;
  4212.     function SetVertexShaderConstantI(StartRegister: LongWord; pConstantData: PInteger; Vector4iCount: LongWord): HResult; stdcall;
  4213.     function GetVertexShaderConstantI(StartRegister: LongWord; pConstantData: PInteger; Vector4iCount: LongWord): HResult; stdcall;
  4214.     function SetVertexShaderConstantB(StartRegister: LongWord; pConstantData: PBOOL; BoolCount: LongWord): HResult; stdcall;
  4215.     function GetVertexShaderConstantB(StartRegister: LongWord; pConstantData: PBOOL; BoolCount: LongWord): HResult; stdcall;
  4216.     function SetStreamSource(StreamNumber: LongWord; pStreamData: IDirect3DVertexBuffer9; OffsetInBytes, Stride: LongWord): HResult; stdcall;
  4217.     function GetStreamSource(StreamNumber: LongWord; out ppStreamData: IDirect3DVertexBuffer9; out OffsetInBytes, pStride: LongWord): HResult; stdcall;
  4218.     function SetStreamSourceFreq(StreamNumber: LongWord; Divider: LongWord): HResult; stdcall;
  4219.     function GetStreamSourceFreq(StreamNumber: LongWord; out Divider: LongWord): HResult; stdcall;
  4220.     function SetIndices(pIndexData: IDirect3DIndexBuffer9): HResult; stdcall;
  4221.     function GetIndices(out ppIndexData: IDirect3DIndexBuffer9): HResult; stdcall;
  4222.     function CreatePixelShader(pFunction: PDWord; out ppShader: IDirect3DPixelShader9): HResult; stdcall;
  4223.     function SetPixelShader(pShader: IDirect3DPixelShader9): HResult; stdcall;
  4224.     function GetPixelShader(out ppShader: IDirect3DPixelShader9): HResult; stdcall;
  4225.     function SetPixelShaderConstantF(StartRegister: LongWord; pConstantData: PSingle; Vector4fCount: LongWord): HResult; stdcall;
  4226.     function GetPixelShaderConstantF(StartRegister: LongWord; pConstantData: PSingle; Vector4fCount: LongWord): HResult; stdcall;
  4227.     function SetPixelShaderConstantI(StartRegister: LongWord; pConstantData: PInteger; Vector4iCount: LongWord): HResult; stdcall;
  4228.     function GetPixelShaderConstantI(StartRegister: LongWord; pConstantData: PInteger; Vector4iCount: LongWord): HResult; stdcall;
  4229.     function SetPixelShaderConstantB(StartRegister: LongWord; pConstantData: PBOOL; BoolCount: LongWord): HResult; stdcall;
  4230.     function GetPixelShaderConstantB(StartRegister: LongWord; pConstantData: PBOOL; BoolCount: LongWord): HResult; stdcall;
  4231.     function DrawRectPatch(Handle: LongWord; pNumSegs: PSingle; pTriPatchInfo: PD3DRectPatchInfo): HResult; stdcall;
  4232.     function DrawTriPatch(Handle: LongWord; pNumSegs: PSingle; pTriPatchInfo: PD3DTriPatchInfo): HResult; stdcall;
  4233.     function DeletePatch(Handle: LongWord): HResult; stdcall;
  4234.     function CreateQuery(_Type: TD3DQueryType; out ppQuery: IDirect3DQuery9): HResult; stdcall;
  4235.   end;
  4236.  
  4237.  
  4238.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DStateBlock9);'}
  4239.   {$EXTERNALSYM IDirect3DStateBlock9}
  4240.   IDirect3DStateBlock9 = interface(IUnknown)
  4241.     ['{B07C4FE5-310D-4ba8-A23C-4F0F206F218B}']
  4242.      (*** IDirect3DStateBlock9 methods ***)
  4243.     function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
  4244.     function Capture: HResult; stdcall;
  4245.     function Apply: HResult; stdcall;
  4246.   end;
  4247.  
  4248.  
  4249.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DSwapChain9);'}
  4250.   {$EXTERNALSYM IDirect3DSwapChain9}
  4251.   IDirect3DSwapChain9 = interface(IUnknown)
  4252.     ['{794950F2-ADFC-458a-905E-10A10B0B503B}']
  4253.     (*** IDirect3DSwapChain9 methods ***)
  4254.     function Present(pSourceRect, pDestRect: PRect; hDestWindowOverride: HWND; pDirtyRegion: PRgnData; dwFlags: DWORD): HResult; stdcall;
  4255.     function GetFrontBufferData(pDestSurface: IDirect3DSurface9): HResult; stdcall;
  4256.     function GetBackBuffer(iBackBuffer: LongWord; _Type: TD3DBackBufferType; out ppBackBuffer: IDirect3DSurface9): HResult; stdcall;
  4257.     function GetRasterStatus(out pRasterStatus: TD3DRasterStatus): HResult; stdcall;
  4258.     function GetDisplayMode(out pMode: TD3DDisplayMode): HResult; stdcall;
  4259.     function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
  4260.     function GetPresentParameters(out pPresentationParameters: TD3DPresentParameters): HResult; stdcall;
  4261.   end;
  4262.  
  4263.  
  4264.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DResource9);'}
  4265.   {$EXTERNALSYM IDirect3DResource9}
  4266.   IDirect3DResource9 = interface(IUnknown)
  4267.     ['{05EEC05D-8F7D-4362-B999-D1BAF357C704}']
  4268.     (*** IDirect3DResource9 methods ***)
  4269.     function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
  4270.     function SetPrivateData(const refguid: TGUID; const pData; SizeOfData, Flags: DWord): HResult; stdcall;
  4271.     function GetPrivateData(const refguid: TGUID; pData: Pointer; out pSizeOfData: DWord): HResult; stdcall;
  4272.     function FreePrivateData(const refguid: TGUID): HResult; stdcall;
  4273.     function SetPriority(PriorityNew: DWord): DWord; stdcall;
  4274.     function GetPriority: DWord; stdcall;
  4275.     procedure PreLoad; stdcall;
  4276.     function GetType: TD3DResourceType; stdcall;
  4277.   end;
  4278.  
  4279.  
  4280.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVertexDeclaration9);'}
  4281.   {$EXTERNALSYM IDirect3DVertexDeclaration9}
  4282.   IDirect3DVertexDeclaration9 = interface(IUnknown)
  4283.     ['{DD13C59C-36FA-4098-A8FB-C7ED39DC8546}']
  4284.     (*** IDirect3DVertexDeclaration9 methods ***)
  4285.     function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
  4286.     function GetDeclaration(pDecl: PD3DVertexElement9; out pNumElements: LongWord): HResult; stdcall;
  4287.   end;
  4288.  
  4289.  
  4290.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVertexShader9);'}
  4291.   {$EXTERNALSYM IDirect3DVertexShader9}
  4292.   IDirect3DVertexShader9 = interface(IUnknown)
  4293.     ['{EFC5557E-6265-4613-8A94-43857889EB36}']
  4294.     (*** IDirect3DVertexShader9 methods ***)
  4295.     function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
  4296.     function GetFunction(pData: Pointer; out pSizeOfData: LongWord): HResult; stdcall;
  4297.   end;
  4298.  
  4299.  
  4300.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DPixelShader9);'}
  4301.   {$EXTERNALSYM IDirect3DPixelShader9}
  4302.   IDirect3DPixelShader9 = interface(IUnknown)
  4303.     ['{6D3BDBDC-5B02-4415-B852-CE5E8BCCB289}']
  4304.     (*** IDirect3DPixelShader9 methods ***)
  4305.     function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
  4306.     function GetFunction(pData: Pointer; out pSizeOfData: LongWord): HResult; stdcall;
  4307.   end;
  4308.  
  4309.  
  4310.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DBaseTexture9);'}
  4311.   {$EXTERNALSYM IDirect3DBaseTexture9}
  4312.   IDirect3DBaseTexture9 = interface(IDirect3DResource9)
  4313.     ['{580CA87E-1D3C-4d54-991D-B7D3E3C298CE}']
  4314.     (*** IDirect3DBaseTexture9 methods ***)
  4315.     function SetLOD(LODNew: DWord): DWord; stdcall;
  4316.     function GetLOD: DWord; stdcall;
  4317.     function GetLevelCount: DWord; stdcall;
  4318.     function SetAutoGenFilterType(FilterType: TD3DTextureFilterType): HResult; stdcall;
  4319.     function GetAutoGenFilterType: TD3DTextureFilterType; stdcall;
  4320.     procedure GenerateMipSubLevels;
  4321.   end;
  4322.  
  4323.  
  4324.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DTexture9);'}
  4325.   {$EXTERNALSYM IDirect3DTexture9}
  4326.   IDirect3DTexture9 = interface(IDirect3DBaseTexture9)
  4327.     ['{85C31227-3DE5-4f00-9B3A-F11AC38C18B5}']
  4328.     (*** IDirect3DTexture9 methods ***)
  4329.     function GetLevelDesc(Level: LongWord; out pDesc: TD3DSurfaceDesc): HResult; stdcall;
  4330.     function GetSurfaceLevel(Level: LongWord; out ppSurfaceLevel: IDirect3DSurface9): HResult; stdcall;
  4331.     function LockRect(Level: LongWord; out pLockedRect: TD3DLockedRect; pRect: PRect; Flags: DWord): HResult; stdcall;
  4332.     function UnlockRect(Level: LongWord): HResult; stdcall;
  4333.     function AddDirtyRect(pDirtyRect: PRect): HResult; stdcall;
  4334.   end;
  4335.  
  4336.  
  4337.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVolumeTexture9);'}
  4338.   {$EXTERNALSYM IDirect3DVolumeTexture9}
  4339.   IDirect3DVolumeTexture9 = interface(IDirect3DBaseTexture9)
  4340.     ['{2518526C-E789-4111-A7B9-47EF328D13E6}']
  4341.     (*** IDirect3DVolumeTexture9 methods ***)
  4342.     function GetLevelDesc(Level: LongWord; out pDesc: TD3DVolumeDesc): HResult; stdcall;
  4343.     function GetVolumeLevel(Level: LongWord; out ppVolumeLevel: IDirect3DVolume9): HResult; stdcall;
  4344.     function LockBox(Level: LongWord; out pLockedVolume: TD3DLockedBox; pBox: PD3DBox; Flags: DWord): HResult; stdcall;
  4345.     function UnlockBox(Level: LongWord): HResult; stdcall;
  4346.     function AddDirtyBox(pDirtyBox: PD3DBox): HResult; stdcall;
  4347.   end;
  4348.  
  4349.  
  4350.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DCubeTexture9);'}
  4351.   {$EXTERNALSYM IDirect3DCubeTexture9}
  4352.   IDirect3DCubeTexture9 = interface(IDirect3DBaseTexture9)
  4353.     ['{FFF32F81-D953-473a-9223-93D652ABA93F}']
  4354.     (*** IDirect3DCubeTexture9 methods ***)
  4355.     function GetLevelDesc(Level: LongWord; out pDesc: TD3DSurfaceDesc): HResult; stdcall;
  4356.     function GetCubeMapSurface(FaceType: TD3DCubeMapFaces; Level: LongWord; out ppCubeMapSurface: IDirect3DSurface9): HResult; stdcall;
  4357.     function LockRect(FaceType: TD3DCubeMapFaces; Level: LongWord; out pLockedRect: TD3DLockedRect; pRect: PRect; Flags: DWord): HResult; stdcall;
  4358.     function UnlockRect(FaceType: TD3DCubeMapFaces; Level: LongWord): HResult; stdcall;
  4359.     function AddDirtyRect(FaceType: TD3DCubeMapFaces; pDirtyRect: PRect): HResult; stdcall;
  4360.   end;
  4361.  
  4362.  
  4363.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVertexBuffer9);'}
  4364.   {$EXTERNALSYM IDirect3DVertexBuffer9}
  4365.   IDirect3DVertexBuffer9 = interface(IDirect3DResource9)
  4366.     ['{B64BB1B5-FD70-4df6-BF91-19D0A12455E3}']
  4367.     (*** IDirect3DVertexBuffer9 methods ***)
  4368.     function Lock(OffsetToLock, SizeToLock: LongWord; out ppbData: Pointer; Flags: DWord): HResult; stdcall;
  4369.     function Unlock: HResult; stdcall;
  4370.     function GetDesc(out pDesc: TD3DVertexBufferDesc): HResult; stdcall;
  4371.   end;
  4372.  
  4373.  
  4374.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DIndexBuffer9);'}
  4375.   {$EXTERNALSYM IDirect3DIndexBuffer9}
  4376.   IDirect3DIndexBuffer9 = interface(IDirect3DResource9)
  4377.     ['{7C9DD65E-D3F7-4529-ACEE-785830ACDE35}']
  4378.     (*** IDirect3DIndexBuffer9 methods ***)
  4379.     function Lock(OffsetToLock, SizeToLock: DWord; out ppbData: Pointer; Flags: DWord): HResult; stdcall;
  4380.     function Unlock: HResult; stdcall;
  4381.     function GetDesc(out pDesc: TD3DIndexBufferDesc): HResult; stdcall;
  4382.   end;
  4383.  
  4384.  
  4385.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DSurface9);'}
  4386.   {$EXTERNALSYM IDirect3DSurface9}
  4387.   IDirect3DSurface9 = interface(IDirect3DResource9)
  4388.     ['{0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B}']
  4389.     (*** IDirect3DSurface9 methods ***)
  4390.     function GetContainer(const riid: TGUID; out ppContainer: Pointer): HResult; stdcall;
  4391.     function GetDesc(out pDesc: TD3DSurfaceDesc): HResult; stdcall;
  4392.     function LockRect(out pLockedRect: TD3DLockedRect; pRect: PRect; Flags: DWord): HResult; stdcall;
  4393.     function UnlockRect: HResult; stdcall;
  4394.     function GetDC(out phdc: HDC): HResult; stdcall;
  4395.     function ReleaseDC(hdc: HDC): HResult; stdcall;
  4396.   end;
  4397.  
  4398.  
  4399.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVolume9);'}
  4400.   {$EXTERNALSYM IDirect3DVolume9}
  4401.   IDirect3DVolume9 = interface (IUnknown)
  4402.     ['{24F416E6-1F67-4aa7-B88E-D33F6F3128A1}']
  4403.     (*** IDirect3DVolume9 methods ***)
  4404.     function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
  4405.     function SetPrivateData(const refguid: TGUID; const pData; SizeOfData, Flags: DWord): HResult; stdcall;
  4406.     function GetPrivateData(const refguid: TGUID; pData: Pointer; out pSizeOfData: DWord): HResult; stdcall;
  4407.     function FreePrivateData(const refguid: TGUID): HResult; stdcall;
  4408.     function GetContainer(const riid: TGUID; var ppContainer: Pointer): HResult; stdcall;
  4409.     function GetDesc(out pDesc: TD3DVolumeDesc): HResult; stdcall;
  4410.     function LockBox(out pLockedVolume: TD3DLockedBox; pBox: PD3DBox; Flags: DWord): HResult; stdcall;
  4411.     function UnlockBox: HResult; stdcall;
  4412.   end;
  4413.  
  4414.  
  4415.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DQuery9);'}
  4416.   {$EXTERNALSYM IDirect3DQuery9}
  4417.   IDirect3DQuery9 = interface(IUnknown)
  4418.     ['{d9771460-a695-4f26-bbd3-27b840b541cc}']
  4419.     (*** IDirect3DQuery9 methods ***)
  4420.     function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
  4421.     function GetType: TD3DQueryType; stdcall;
  4422.     function GetDataSize: DWORD; stdcall;
  4423.     function Issue(dwIssueFlags: DWORD): HResult; stdcall;
  4424.     function GetData(pData: Pointer; dwSize: DWORD; dwGetDataFlags: DWORD): HResult; stdcall;
  4425.   end;
  4426.  
  4427.  
  4428.  
  4429. (*
  4430.  * Interface IID's
  4431.  *)
  4432. type
  4433.   IID_IDirect3D9              = IDirect3D9;
  4434.   {$EXTERNALSYM IID_IDirect3D9}
  4435.   IID_IDirect3DDevice9        = IDirect3DDevice9;
  4436.   {$EXTERNALSYM IID_IDirect3DDevice9}
  4437.   IID_IDirect3DResource9      = IDirect3DResource9;
  4438.   {$EXTERNALSYM IID_IDirect3DResource9}
  4439.   IID_IDirect3DBaseTexture9   = IDirect3DBaseTexture9;
  4440.   {$EXTERNALSYM IID_IDirect3DBaseTexture9}
  4441.   IID_IDirect3DTexture9       = IDirect3DTexture9;
  4442.   {$EXTERNALSYM IID_IDirect3DTexture9}
  4443.   IID_IDirect3DCubeTexture9   = IDirect3DCubeTexture9;
  4444.   {$EXTERNALSYM IID_IDirect3DCubeTexture9}
  4445.   IID_IDirect3DVolumeTexture9 = IDirect3DVolumeTexture9;
  4446.   {$EXTERNALSYM IID_IDirect3DVolumeTexture9}
  4447.   IID_IDirect3DVertexBuffer9  = IDirect3DVertexBuffer9;
  4448.   {$EXTERNALSYM IID_IDirect3DVertexBuffer9}
  4449.   IID_IDirect3DIndexBuffer9   = IDirect3DIndexBuffer9;
  4450.   {$EXTERNALSYM IID_IDirect3DIndexBuffer9}
  4451.   IID_IDirect3DSurface9       = IDirect3DSurface9;
  4452.   {$EXTERNALSYM IID_IDirect3DSurface9}
  4453.   IID_IDirect3DVolume9        = IDirect3DVolume9;
  4454.   {$EXTERNALSYM IID_IDirect3DVolume9}
  4455.   IID_IDirect3DSwapChain9     = IDirect3DSwapChain9;
  4456.   {$EXTERNALSYM IID_IDirect3DSwapChain9}
  4457.   IID_IDirect3DVertexDeclaration9 = IDirect3DVertexDeclaration9;
  4458.   {$EXTERNALSYM IID_IDirect3DVertexDeclaration9}
  4459.   IID_IDirect3DVertexShader9  = IDirect3DVertexShader9;
  4460.   {$EXTERNALSYM IID_IDirect3DVertexShader9}
  4461.   IID_IDirect3DPixelShader9   = IDirect3DPixelShader9;
  4462.   {$EXTERNALSYM IID_IDirect3DPixelShader9}
  4463.   IID_IDirect3DStateBlock9    = IDirect3DStateBlock9;
  4464.   {$EXTERNALSYM IID_IDirect3DStateBlock9}
  4465.   IID_IDirect3DQuery9         = IDirect3DQuery9;
  4466.   {$EXTERNALSYM IID_IDirect3DQuery9}
  4467.  
  4468.  
  4469.  
  4470. const
  4471. {****************************************************************************
  4472.  * Flags for SetPrivateData method on all D3D9 interfaces
  4473.  *
  4474.  * The passed pointer is an IUnknown ptr. The SizeOfData argument to SetPrivateData
  4475.  * must be set to sizeof(IUnknown*). Direct3D will call AddRef through this
  4476.  * pointer and Release when the private data is destroyed. The data will be
  4477.  * destroyed when another SetPrivateData with the same GUID is set, when
  4478.  * FreePrivateData is called, or when the D3D9 object is freed.
  4479.  ****************************************************************************}
  4480.   D3DSPD_IUNKNOWN                         = $00000001;
  4481.   {$EXTERNALSYM D3DSPD_IUNKNOWN}
  4482.  
  4483. (****************************************************************************
  4484.  *
  4485.  * Flags for IDirect3D9::CreateDevice's BehaviorFlags
  4486.  *
  4487.  ****************************************************************************)
  4488.  
  4489.   D3DCREATE_FPU_PRESERVE                  = $00000002;
  4490.   {$EXTERNALSYM D3DCREATE_FPU_PRESERVE}
  4491.   D3DCREATE_MULTITHREADED                 = $00000004;
  4492.   {$EXTERNALSYM D3DCREATE_MULTITHREADED}
  4493.  
  4494.   D3DCREATE_PUREDEVICE                    = $00000010;
  4495.   {$EXTERNALSYM D3DCREATE_PUREDEVICE}
  4496.   D3DCREATE_SOFTWARE_VERTEXPROCESSING     = $00000020;
  4497.   {$EXTERNALSYM D3DCREATE_SOFTWARE_VERTEXPROCESSING}
  4498.   D3DCREATE_HARDWARE_VERTEXPROCESSING     = $00000040;
  4499.   {$EXTERNALSYM D3DCREATE_HARDWARE_VERTEXPROCESSING}
  4500.   D3DCREATE_MIXED_VERTEXPROCESSING        = $00000080;
  4501.   {$EXTERNALSYM D3DCREATE_MIXED_VERTEXPROCESSING}
  4502.  
  4503.   D3DCREATE_DISABLE_DRIVER_MANAGEMENT     = $00000100;
  4504.   {$EXTERNALSYM D3DCREATE_DISABLE_DRIVER_MANAGEMENT}
  4505.   D3DCREATE_ADAPTERGROUP_DEVICE           = $00000200;
  4506.   {$EXTERNALSYM D3DCREATE_ADAPTERGROUP_DEVICE}
  4507.  
  4508.  
  4509. (****************************************************************************
  4510.  *
  4511.  * Parameter for IDirect3D9::CreateDevice's iAdapter
  4512.  *
  4513.  ****************************************************************************)
  4514.  
  4515.   D3DADAPTER_DEFAULT                      = 0;
  4516.   {$EXTERNALSYM D3DADAPTER_DEFAULT}
  4517.  
  4518. (****************************************************************************
  4519.  *
  4520.  * Flags for IDirect3D9::EnumAdapters
  4521.  *
  4522.  ****************************************************************************)
  4523.  
  4524.   D3DENUM_WHQL_LEVEL                       = $00000002;
  4525.   {$EXTERNALSYM D3DENUM_WHQL_LEVEL}
  4526.  
  4527. (****************************************************************************
  4528.  *
  4529.  * Maximum number of back-buffers supported in DX8
  4530.  *
  4531.  ****************************************************************************)
  4532.  
  4533.   D3DPRESENT_BACK_BUFFERS_MAX             = 3;
  4534.   {$EXTERNALSYM D3DPRESENT_BACK_BUFFERS_MAX}
  4535.  
  4536. (****************************************************************************
  4537.  *
  4538.  * Flags for IDirect3DDevice9::SetGammaRamp
  4539.  *
  4540.  ****************************************************************************)
  4541.  
  4542.   D3DSGR_NO_CALIBRATION                  = $00000000;
  4543.   {$EXTERNALSYM D3DSGR_NO_CALIBRATION}
  4544.   D3DSGR_CALIBRATE                       = $00000001;
  4545.   {$EXTERNALSYM D3DSGR_CALIBRATE}
  4546.  
  4547. (****************************************************************************
  4548.  *
  4549.  * Flags for IDirect3DDevice9::SetCursorPosition
  4550.  *
  4551.  ****************************************************************************)
  4552.  
  4553.   D3DCURSOR_IMMEDIATE_UPDATE             = $00000001;
  4554.   {$EXTERNALSYM D3DCURSOR_IMMEDIATE_UPDATE}
  4555.  
  4556. (****************************************************************************
  4557.  *
  4558.  * Flags for IDirect3DSwapChain9::Present
  4559.  *
  4560.  ****************************************************************************)
  4561.  
  4562.   D3DPRESENT_DONOTWAIT                   = $00000001;
  4563.   {$EXTERNALSYM D3DPRESENT_DONOTWAIT}
  4564.   D3DPRESENT_LINEAR_CONTENT              = $00000002;
  4565.   {$EXTERNALSYM D3DPRESENT_LINEAR_CONTENT}
  4566.  
  4567. (****************************************************************************
  4568.  *
  4569.  * Flags for DrawPrimitive/DrawIndexedPrimitive
  4570.  *   Also valid for Begin/BeginIndexed
  4571.  *   Also valid for VertexBuffer::CreateVertexBuffer
  4572.  ****************************************************************************)
  4573.  
  4574.  
  4575. (*
  4576.  *  DirectDraw error codes
  4577.  *)
  4578.   _FACD3D = $876;
  4579.   {$EXTERNALSYM _FACD3D}
  4580.  
  4581. //#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )
  4582. function MAKE_D3DHRESULT(Code: DWord): DWord;
  4583. {$EXTERNALSYM MAKE_D3DHRESULT}
  4584. //#define MAKE_D3DSTATUS( code )  MAKE_HRESULT( 0, _FACD3D, code )
  4585. function MAKE_D3DSTATUS(Code: DWord): DWord;
  4586. {$EXTERNALSYM MAKE_D3DSTATUS}
  4587.  
  4588. const
  4589.   MAKE_D3DHRESULT_R     = (1 shl 31) or (_FACD3D shl 16);
  4590.   MAKE_D3DSTATUS_R      = (0 shl 31) or (_FACD3D shl 16);
  4591.  
  4592. (*
  4593.  * Direct3D Errors
  4594.  *)
  4595.   D3D_OK                                  = S_OK;
  4596.   {$EXTERNALSYM D3D_OK}
  4597.  
  4598.   D3DERR_WRONGTEXTUREFORMAT               = HResult(MAKE_D3DHRESULT_R or 2072);
  4599.   {$EXTERNALSYM D3DERR_WRONGTEXTUREFORMAT}
  4600.   D3DERR_UNSUPPORTEDCOLOROPERATION        = HResult(MAKE_D3DHRESULT_R or 2073);
  4601.   {$EXTERNALSYM D3DERR_UNSUPPORTEDCOLOROPERATION}
  4602.   D3DERR_UNSUPPORTEDCOLORARG              = HResult(MAKE_D3DHRESULT_R or 2074);
  4603.   {$EXTERNALSYM D3DERR_UNSUPPORTEDCOLORARG}
  4604.   D3DERR_UNSUPPORTEDALPHAOPERATION        = HResult(MAKE_D3DHRESULT_R or 2075);
  4605.   {$EXTERNALSYM D3DERR_UNSUPPORTEDALPHAOPERATION}
  4606.   D3DERR_UNSUPPORTEDALPHAARG              = HResult(MAKE_D3DHRESULT_R or 2076);
  4607.   {$EXTERNALSYM D3DERR_UNSUPPORTEDALPHAARG}
  4608.   D3DERR_TOOMANYOPERATIONS                = HResult(MAKE_D3DHRESULT_R or 2077);
  4609.   {$EXTERNALSYM D3DERR_TOOMANYOPERATIONS}
  4610.   D3DERR_CONFLICTINGTEXTUREFILTER         = HResult(MAKE_D3DHRESULT_R or 2078);
  4611.   {$EXTERNALSYM D3DERR_CONFLICTINGTEXTUREFILTER}
  4612.   D3DERR_UNSUPPORTEDFACTORVALUE           = HResult(MAKE_D3DHRESULT_R or 2079);
  4613.   {$EXTERNALSYM D3DERR_UNSUPPORTEDFACTORVALUE}
  4614.   D3DERR_CONFLICTINGRENDERSTATE           = HResult(MAKE_D3DHRESULT_R or 2081);
  4615.   {$EXTERNALSYM D3DERR_CONFLICTINGRENDERSTATE}
  4616.   D3DERR_UNSUPPORTEDTEXTUREFILTER         = HResult(MAKE_D3DHRESULT_R or 2082);
  4617.   {$EXTERNALSYM D3DERR_UNSUPPORTEDTEXTUREFILTER}
  4618.   D3DERR_CONFLICTINGTEXTUREPALETTE        = HResult(MAKE_D3DHRESULT_R or 2086);
  4619.   {$EXTERNALSYM D3DERR_CONFLICTINGTEXTUREPALETTE}
  4620.   D3DERR_DRIVERINTERNALERROR              = HResult(MAKE_D3DHRESULT_R or 2087);
  4621.   {$EXTERNALSYM D3DERR_DRIVERINTERNALERROR}
  4622.  
  4623.   D3DERR_NOTFOUND                         = HResult(MAKE_D3DHRESULT_R or 2150);
  4624.   {$EXTERNALSYM D3DERR_NOTFOUND}
  4625.   D3DERR_MOREDATA                         = HResult(MAKE_D3DHRESULT_R or 2151);
  4626.   {$EXTERNALSYM D3DERR_MOREDATA}
  4627.   D3DERR_DEVICELOST                       = HResult(MAKE_D3DHRESULT_R or 2152);
  4628.   {$EXTERNALSYM D3DERR_DEVICELOST}
  4629.   D3DERR_DEVICENOTRESET                   = HResult(MAKE_D3DHRESULT_R or 2153);
  4630.   {$EXTERNALSYM D3DERR_DEVICENOTRESET}
  4631.   D3DERR_NOTAVAILABLE                     = HResult(MAKE_D3DHRESULT_R or 2154);
  4632.   {$EXTERNALSYM D3DERR_NOTAVAILABLE}
  4633.   D3DERR_OUTOFVIDEOMEMORY                 = HResult(MAKE_D3DHRESULT_R or 380);
  4634.   {$EXTERNALSYM D3DERR_OUTOFVIDEOMEMORY}
  4635.   D3DERR_INVALIDDEVICE                    = HResult(MAKE_D3DHRESULT_R or 2155);
  4636.   {$EXTERNALSYM D3DERR_INVALIDDEVICE}
  4637.   D3DERR_INVALIDCALL                      = HResult(MAKE_D3DHRESULT_R or 2156);
  4638.   {$EXTERNALSYM D3DERR_INVALIDCALL}
  4639.   D3DERR_DRIVERINVALIDCALL                = HResult(MAKE_D3DHRESULT_R or 2157);
  4640.   {$EXTERNALSYM D3DERR_DRIVERINVALIDCALL}
  4641.   D3DERR_WASSTILLDRAWING                  = HResult(MAKE_D3DHRESULT_R or 540);
  4642.   {$EXTERNALSYM D3DERR_WASSTILLDRAWING}
  4643.   D3DOK_NOAUTOGEN                         = HResult(MAKE_D3DSTATUS_R or 2159);
  4644.   {$EXTERNALSYM D3DOK_NOAUTOGEN}
  4645.  
  4646.  
  4647.  
  4648. (*
  4649.  * DLL Function for creating a Direct3D9 object. This object supports
  4650.  * enumeration and allows the creation of Direct3DDevice9 objects.
  4651.  * Pass the value of the constant D3D_SDK_VERSION to this function, so
  4652.  * that the run-time can validate that your application was compiled
  4653.  * against the right headers.
  4654.  *)
  4655.  
  4656.  
  4657. function Direct3D9Loaded: Boolean;
  4658. function LoadDirect3D9: Boolean;
  4659. function UnLoadDirect3D9: Boolean;
  4660.  
  4661. // Due to the way Object Pascal handles functions resulting in 'native' interface
  4662. // pointer we should declare result not as interface but as usial pointer
  4663.  
  4664. {$IFDEF DIRECT3D9_DYNAMIC_LINK}
  4665. type
  4666.   TDirect3DCreate9 = function (SDKVersion: LongWord): Pointer; stdcall;
  4667.  
  4668. var
  4669.   _Direct3DCreate9: TDirect3DCreate9 = nil;
  4670.  
  4671. {$ELSE}
  4672. function _Direct3DCreate9(SDKVersion: LongWord): Pointer; stdcall;
  4673. {$ENDIF}
  4674.  
  4675. function Direct3DCreate9(SDKVersion: LongWord): IDirect3D9; stdcall;
  4676. {$EXTERNALSYM Direct3DCreate9}
  4677.  
  4678.  
  4679. //********************************************************************
  4680. // Introduced types for compatibility with non-Borland compliant translation
  4681. // by Ampaze (Tim Baumgarten) from http://www.crazyentertainment.net
  4682. type
  4683.   PD3DAdapter_Identifier9               = PD3DAdapterIdentifier9;
  4684.   PD3DDevice_Creation_Parameters        = PD3DDeviceCreationParameters;
  4685.   PD3DDevInfo_D3DVertexStats            = PD3DDevInfoD3DVertexStats;
  4686.   PD3DDevInfo_ResourceManager           = PD3DDevInfoResourceManager;
  4687.   PD3DDevInfo_VCache                    = PD3DDevInfoVCache;
  4688.   PD3DIndexBuffer_Desc                  = PD3DIndexBufferDesc;
  4689.   PD3DLocked_Box                        = PD3DLockedBox;
  4690.   PD3DLocked_Rect                       = PD3DLockedRect;
  4691.   PD3DPresent_Parameters                = PD3DPresentParameters;
  4692.   PD3DRaster_Status                     = PD3DRasterStatus;
  4693.   PD3DRectPatch_Info                    = PD3DRectPatchInfo;
  4694.   PD3DSurface_Desc                      = PD3DSurfaceDesc;
  4695.   PD3DTriPatch_Info                     = PD3DTriPatchInfo;
  4696.   PD3DVertexBuffer_Desc                 = PD3DVertexBufferDesc;
  4697.   PD3DVolume_Desc                       = PD3DVolumeDesc;
  4698.  
  4699.   TD3DAdapter_Identifier9               = TD3DAdapterIdentifier9;
  4700.   TD3DBackBuffer_Type                   = TD3DBackBufferType;
  4701.   TD3DCubeMap_Faces                     = TD3DCubeMapFaces;
  4702.   TD3DDevice_Creation_Parameters        = TD3DDeviceCreationParameters;
  4703.   TD3DDevInfo_D3DVertexStats            = TD3DDevInfoD3DVertexStats;
  4704.   TD3DDevInfo_ResourceManager           = TD3DDevInfoResourceManager;
  4705.   TD3DDevInfo_VCache                    = TD3DDevInfoVCache;
  4706.   TD3DIndexBuffer_Desc                  = TD3DIndexBufferDesc;
  4707.   TD3DLocked_Box                        = TD3DLockedBox;
  4708.   TD3DLocked_Rect                       = TD3DLockedRect;
  4709.   TD3DMultiSample_Type                  = TD3DMultiSampleType;
  4710.   TD3DPresent_Parameters                = TD3DPresentParameters;
  4711.   TD3DRaster_Status                     = TD3DRasterStatus;
  4712.   TD3DRectPatch_Info                    = TD3DRectPatchInfo;
  4713.   TD3DSampler_Texture_Type              = TD3DSamplerTextureType;
  4714.   TD3DShader_AddressMode_Type           = TD3DShaderAddressModeType;
  4715.   TD3DShader_Comparison                 = TD3DShaderComparison;
  4716.   TD3DShader_Instruction_Opcode_Type    = TD3DShaderInstructionOpcodeType;
  4717.   TD3DShader_MiscType_Offsets           = TD3DShaderMiscTypeOffsets;
  4718.   TD3DShader_Param_Register_Type        = TD3DShaderParamRegisterType;
  4719.   TD3DShader_Param_SRCMod_Type          = TD3DShaderParamSRCModType;
  4720.   TD3DSurface_Desc                      = TD3DSurfaceDesc;
  4721.   TD3DTriPatch_Info                     = TD3DTriPatchInfo;
  4722.   TD3DVertexBuffer_Desc                 = TD3DVertexBufferDesc;
  4723.   TD3DVolume_Desc                       = TD3DVolumeDesc;
  4724.   TD3DVS_AddressMode_Type               = TD3DVSAddressModeType;
  4725.   TD3DVS_RastOut_Offsets                = TD3DVSRastOutOffsets;
  4726.  
  4727.  
  4728. implementation
  4729.  
  4730. (*==========================================================================;
  4731.  *  File:       d3d9types.h
  4732.  *  Content:    Direct3D capabilities include file
  4733.  ***************************************************************************)
  4734.  
  4735. // #define D3DCOLOR_ARGB(a,r,g,b) \
  4736. //     ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
  4737. function D3DCOLOR_ARGB(a,r,g,b: DWord): TD3DColor;
  4738. begin
  4739.   Result := (a shl 24) or (r shl 16) or (g shl 8) or b;
  4740. end;
  4741.  
  4742. // #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
  4743. function D3DCOLOR_RGBA(r,g,b,a: DWord): TD3DColor;
  4744. begin
  4745.   Result := (a shl 24) or (r shl 16) or (g shl 8) or b;
  4746. end;
  4747.  
  4748. // #define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)
  4749. function D3DCOLOR_XRGB(r,g,b: DWord): TD3DColor;
  4750. begin
  4751.   Result := DWORD($FF shl 24) or (r shl 16) or (g shl 8) or b;
  4752. end;
  4753.  
  4754. // #define D3DCOLOR_XYUV(y,u,v)   D3DCOLOR_ARGB(0xff,y,u,v)
  4755. function D3DCOLOR_XYUV(y,u,v: DWord): TD3DColor;
  4756. begin
  4757.   Result := DWORD($FF shl 24) or (y shl 16) or (u shl 8) or v;
  4758. end;
  4759.  
  4760. // #define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v)
  4761. function D3DCOLOR_AYUV(a,y,u,v: DWord): TD3DColor;
  4762. begin
  4763.   Result := (a shl 24) or (y shl 16) or (u shl 8) or v;
  4764. end;
  4765.  
  4766. // #define D3DCOLOR_COLORVALUE(r,g,b,a) \
  4767. //     D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
  4768. function D3DCOLOR_COLORVALUE(r,g,b,a: Single): TD3DColor;
  4769. begin
  4770.   Result := (round(a * 255) shl 24) or
  4771.     (round(r * 255) shl 16) or
  4772.     (round(g * 255) shl 8) or
  4773.     (round(b * 255));
  4774. end;
  4775.  
  4776. // #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
  4777. function D3DTS_WORLDMATRIX(index: Byte): TD3DTransformStateType;
  4778. begin
  4779.   Result:= TD3DTransformStateType(index + 256);
  4780. end;
  4781.  
  4782. //#define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor))
  4783. function D3DPS_VERSION(_Major, _Minor : Cardinal) : Cardinal;
  4784. begin
  4785.   Result:= $FFFF0000 or (_Major shl 8 ) or _Minor;
  4786. end;
  4787.  
  4788. //#define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor))
  4789. function D3DVS_VERSION(_Major, _Minor : Cardinal) : Cardinal;
  4790. begin
  4791.   Result:= $FFFE0000 or (_Major shl 8 ) or _Minor;
  4792. end;
  4793.  
  4794. //#define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)
  4795. function D3DSHADER_VERSION_MAJOR(_Version : Cardinal) : Cardinal;
  4796. begin
  4797.   Result:= (_Version shr 8 ) and $FF;
  4798. end;
  4799.  
  4800. //#define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)
  4801. function D3DSHADER_VERSION_MINOR(_Version : Cardinal) : Cardinal;
  4802. begin
  4803.   Result:= (_Version shr 0) and $FF;
  4804. end;
  4805.  
  4806. //#define D3DSHADER_COMMENT(_DWordSize) \
  4807. //    ((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COMMENT)
  4808. function D3DSHADER_COMMENT(_DWordSize: DWord) : DWord;
  4809. begin
  4810.   Result:= ((_DWordSize shl D3DSI_COMMENTSIZE_SHIFT) and D3DSI_COMMENTSIZE_MASK) or D3DSIO_COMMENT;
  4811. end;
  4812.  
  4813. //#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
  4814. function D3DFVF_TEXCOORDSIZE3(CoordIndex: DWord): DWord;
  4815. begin
  4816.   Result:= D3DFVF_TEXTUREFORMAT3 shl (CoordIndex * 2 + 16)
  4817. end;
  4818.  
  4819. //#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
  4820. function D3DFVF_TEXCOORDSIZE2(CoordIndex: DWord): DWord;
  4821. begin
  4822.   Result:= D3DFVF_TEXTUREFORMAT2;
  4823. end;
  4824.  
  4825. //#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
  4826. function D3DFVF_TEXCOORDSIZE4(CoordIndex: DWord): DWord;
  4827. begin
  4828.   Result:= D3DFVF_TEXTUREFORMAT4 shl (CoordIndex * 2 + 16)
  4829. end;
  4830.  
  4831. //#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
  4832. function D3DFVF_TEXCOORDSIZE1(CoordIndex: DWord): DWord;
  4833. begin
  4834.   Result:= D3DFVF_TEXTUREFORMAT1 shl (CoordIndex * 2 + 16)
  4835. end;
  4836.  
  4837. //#ifndef MAKEFOURCC
  4838. //    #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
  4839. //                ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |       \
  4840. //                ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
  4841. //#endif /* defined(MAKEFOURCC) */
  4842. function MAKEFOURCC(ch0, ch1, ch2, ch3: Char): DWord;
  4843. begin
  4844.   Result:= Byte(ch0) or (Byte(ch1) shl 8) or (Byte(ch2) shl 16) or (Byte(ch3) shl 24 );
  4845. end;
  4846.  
  4847. (*==========================================================================;
  4848.  *  File:   d3d9.h
  4849.  *  Content:    Direct3D include file
  4850.  ****************************************************************************)
  4851.  
  4852. //#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )
  4853. function MAKE_D3DHRESULT(Code: DWord): DWord;
  4854. begin
  4855.   Result:= DWord((1 shl 31) or (_FACD3D shl 16)) or Code;
  4856. end;
  4857.  
  4858. //#define MAKE_D3DSTATUS( code )  MAKE_HRESULT( 0, _FACD3D, code )
  4859. function MAKE_D3DSTATUS(Code: DWord): DWord;
  4860. begin
  4861.   Result:= DWord((0 shl 31) or (_FACD3D shl 16)) or Code;
  4862. end;
  4863.  
  4864. const
  4865.   Direct3D9dll = 'd3d9.dll';
  4866.  
  4867. {$IFDEF DIRECT3D9_DYNAMIC_LINK}
  4868. var
  4869.   Direct3D9Lib: THandle = 0;
  4870.  
  4871. function Direct3D9Loaded: Boolean;
  4872. begin
  4873.   Result:= Direct3D9Lib <> 0;
  4874. end;
  4875.  
  4876. function UnLoadDirect3D9: Boolean;
  4877. begin
  4878.   Result:= True;
  4879.   if Direct3D9Loaded then
  4880.   begin
  4881.     Result:= FreeLibrary(Direct3D9Lib);
  4882.     _Direct3DCreate9:= nil;
  4883.     Direct3D9Lib:= 0;
  4884.   end;
  4885. end;
  4886.  
  4887. function LoadDirect3D9: Boolean;
  4888. const
  4889.   ProcName = 'Direct3DCreate9';
  4890. begin
  4891.   Result:= Direct3D9Loaded;
  4892.   if (not Result) then
  4893.   begin
  4894.     Direct3D9Lib:= LoadLibrary(Direct3D9dll);
  4895.     if Direct3D9Loaded then
  4896.     begin
  4897.       _Direct3DCreate9:= GetProcAddress(Direct3D9Lib, ProcName);
  4898.       Result:= Assigned(_Direct3DCreate9);
  4899.       if not Result then UnLoadDirect3D9;
  4900.     end;
  4901.   end;
  4902. end;
  4903. {$ELSE}
  4904. function Direct3D9Loaded: Boolean;
  4905. begin // Stub function for static linking
  4906.   Result:= True;
  4907. end;
  4908.  
  4909. function UnLoadDirect3D9: Boolean;
  4910. begin // Stub function for static linking
  4911.   Result:= True; // should emulate "normal" behaviour
  4912. end;
  4913.  
  4914. function LoadDirect3D9: Boolean;
  4915. begin // Stub function for static linking
  4916.   Result:= True;
  4917. end;
  4918.  
  4919. function _Direct3DCreate9(SDKVersion: LongWord): Pointer; external Direct3D9dll name 'Direct3DCreate9';
  4920. {$ENDIF}
  4921.  
  4922. function Direct3DCreate9(SDKVersion: LongWord): IDirect3D9;
  4923. begin
  4924. {$IFDEF DIRECT3D9_DYNAMIC_LINK}
  4925. {$IFDEF DIRECT3D9_DYNAMIC_LINK_EXPLICIT}
  4926.   LoadDirect3D9;
  4927.  
  4928. {$ENDIF}
  4929. {$ENDIF}
  4930.   Result:= IDirect3D9(_Direct3DCreate9(SDKVersion));
  4931.   if Assigned(Result) then Result._Release; // Delphi autoincrement reference count
  4932. end;
  4933.  
  4934. {$IFDEF DIRECT3D9_DYNAMIC_LINK}
  4935. initialization
  4936. {$IFNDEF DIRECT3D9_DYNAMIC_LINK_EXPLICIT}
  4937.   LoadDirect3D9;
  4938. {$ENDIF}
  4939. finalization
  4940.   UnLoadDirect3D9;
  4941. {$ENDIF}
  4942. end.
  4943.  
  4944.