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

  1. {******************************************************************************}
  2. {*                                                                            *}
  3. {*  Copyright (C) Microsoft Corporation.  All Rights Reserved.                *}
  4. {*                                                                            *}
  5. {*  Files:      d3d8types.h d3d8caps.h d3d8.h                                 *}
  6. {*  Content:    Direct3D8 include files                                       *}
  7. {*                                                                            *}
  8. {*  DirectX 8.1 Delphi adaptation by Alexey Barkovoy                          *}
  9. {*  E-Mail: clootie@reactor.ru                                                *}
  10. {*                                                                            *}
  11. {*  Modified: 27-Apr-2003                                                     *}
  12. {*                                                                            *}
  13. {*  Partly based upon :                                                       *}
  14. {*    DirectX 7.0 Object Pascal adaptation by                                 *}
  15. {*      Erik Unger, e-Mail: DelphiDirectX@next-reality.com                    *}
  16. {*    DirectXGraphics 8.0 ObjectPascal adaptation by                          *}
  17. {*      Tim Baumgarten, e-Mail: ampaze@gmx.net                                *}
  18. {*                                                                            *}
  19. {*  Latest version can be downloaded from:                                    *}
  20. {*     http://clootie.narod.ru/delphi                                         *}
  21. {*                                                                            *}
  22. {*  This File contains only Direct3D 8.x definitions.                         *}
  23. {*  If you want to use older versions of D3D use Direct3D.pas from Erik Unger *}
  24. {*                                                                            *}
  25. {******************************************************************************}
  26. {                                                                              }
  27. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  28. {                                                                              }
  29. { The contents of this file are used with permission, subject to the Mozilla   }
  30. { Public License Version 1.1 (the "License"); you may not use this file except }
  31. { in compliance with the License. You may obtain a copy of the License at      }
  32. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  33. {                                                                              }
  34. { Software distributed under the License is distributed on an "AS IS" basis,   }
  35. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  36. { the specific language governing rights and limitations under the License.    }
  37. {                                                                              }
  38. { Alternatively, the contents of this file may be used under the terms of the  }
  39. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  40. { provisions of the LGPL License are applicable instead of those above.        }
  41. { If you wish to allow use of your version of this file only under the terms   }
  42. { of the LGPL License and not to allow others to use your version of this file }
  43. { under the MPL, indicate your decision by deleting  the provisions above and  }
  44. { replace  them with the notice and other provisions required by the LGPL      }
  45. { License.  If you do not delete the provisions above, a recipient may use     }
  46. { your version of this file under either the MPL or the LGPL License.          }
  47. {                                                                              }
  48. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  49. {                                                                              }
  50. {******************************************************************************}
  51.  
  52. {$I DirectX.inc}
  53.  
  54. unit Direct3D8;
  55.  
  56. interface
  57.  
  58. // Global level dynamic loading support    
  59. {$IFDEF DYNAMIC_LINK_ALL}
  60.   {$DEFINE DIRECT3D8_DYNAMIC_LINK}
  61. {$ENDIF}
  62. {$IFDEF DYNAMIC_LINK_EXPLICIT_ALL}
  63.   {$DEFINE DIRECT3D8_DYNAMIC_LINK_EXPLICIT}
  64. {$ENDIF}
  65.  
  66. // Remove "dots" below to force some kind of dynamic linking
  67. {.$DEFINE DIRECT3D8_DYNAMIC_LINK}
  68. {.$DEFINE DIRECT3D8_DYNAMIC_LINK_EXPLICIT}
  69.  
  70. {$NOINCLUDE DXTypes}
  71. (*$HPPEMIT '#include <d3d8types.h>' *)
  72. (*$HPPEMIT '#include <d3d8caps.h>' *)
  73. (*$HPPEMIT '#include <d3d8.h>' *)
  74.  
  75. uses Windows, DXTypes;
  76.  
  77. ///// Helper constants (for use in SetRenderState) /////
  78. const
  79.   iTrue  = DWORD(True);
  80.   iFalse = DWORD(False);
  81.  
  82. (*==========================================================================;
  83.  *
  84.  *  Copyright (C) 1995-2000 Microsoft Corporation.  All Rights Reserved.
  85.  *
  86.  *  File:       d3d8types.h
  87.  *  Content:    Direct3D capabilities include file
  88.  *
  89.  ***************************************************************************)
  90.  
  91. type
  92.   // D3DCOLOR is equivalent to D3DFMT_A8R8G8B8
  93.   D3DCOLOR = DXTypes.D3DCOLOR;
  94.   {$EXTERNALSYM D3DCOLOR}
  95.   TD3DColor = DXTypes.TD3DColor;
  96.   {$NODEFINE TD3DColor}
  97.   {$HPPEMIT 'typedef D3DCOLOR TD3DColor;'}
  98.  
  99. // maps unsigned 8 bits/channel to D3DCOLOR
  100. // #define D3DCOLOR_ARGB(a,r,g,b) \
  101. //     ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
  102. function D3DCOLOR_ARGB(a,r,g,b: DWord): TD3DColor;
  103. {$EXTERNALSYM D3DCOLOR_ARGB}
  104. // #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
  105. function D3DCOLOR_RGBA(r,g,b,a: DWord): TD3DColor;
  106. {$EXTERNALSYM D3DCOLOR_RGBA}
  107. // #define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)
  108. function D3DCOLOR_XRGB(r,g,b: DWord): TD3DColor;
  109. {$EXTERNALSYM D3DCOLOR_XRGB}
  110.  
  111. // maps floating point channels (0.f to 1.f range) to D3DCOLOR
  112. // #define D3DCOLOR_COLORVALUE(r,g,b,a) \
  113. //     D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
  114. function D3DCOLOR_COLORVALUE(r,g,b,a: Single): TD3DColor;
  115. {$EXTERNALSYM D3DCOLOR_COLORVALUE}
  116.  
  117. type
  118.   _D3DVECTOR = DXTypes._D3DVECTOR;
  119.   {$EXTERNALSYM _D3DVECTOR}
  120.   D3DVECTOR = DXTypes.D3DVECTOR;
  121.   {$EXTERNALSYM D3DVECTOR}
  122.   TD3DVector = DXTypes.TD3DVector;
  123.   {$NODEFINE TD3DVector}
  124.   PD3DVector = DXTypes.PD3DVector;
  125.   {$NODEFINE PD3DVector}
  126.   {$HPPEMIT 'typedef _D3DVECTOR TD3DVector;'}
  127.   {$HPPEMIT 'typedef _D3DVECTOR *PD3DVector;'}
  128.  
  129.   PD3DColorValue = ^TD3DColorValue;
  130.   _D3DCOLORVALUE = packed record
  131.     r: Single;
  132.     g: Single;
  133.     b: Single;
  134.     a: Single;
  135.   end {_D3DCOLORVALUE};
  136.   {$EXTERNALSYM _D3DCOLORVALUE}
  137.   D3DCOLORVALUE = _D3DCOLORVALUE;
  138.   {$EXTERNALSYM D3DCOLORVALUE}
  139.   TD3DColorValue = _D3DCOLORVALUE;
  140.  
  141.   PD3DRect = ^TD3DRect;
  142.   _D3DRECT = packed record
  143.     x1: LongInt;
  144.     y1: LongInt;
  145.     x2: LongInt;
  146.     y2: LongInt;
  147.   end {_D3DRECT};
  148.   {$EXTERNALSYM _D3DRECT}
  149.   D3DRECT = _D3DRECT;
  150.   {$EXTERNALSYM D3DRECT}
  151.   TD3DRect = _D3DRECT;
  152.  
  153.   PD3DMatrix = ^TD3DMatrix;
  154.   _D3DMATRIX = packed record
  155.     case integer of
  156.       0 : (_11, _12, _13, _14: Single;
  157.            _21, _22, _23, _24: Single;
  158.            _31, _32, _33, _34: Single;
  159.            _41, _42, _43, _44: Single);
  160.       1 : (m : array [0..3, 0..3] of Single);
  161.   end {_D3DMATRIX};
  162.   {$EXTERNALSYM _D3DMATRIX}
  163.   D3DMATRIX = _D3DMATRIX;
  164.   {$EXTERNALSYM D3DMATRIX}
  165.   TD3DMatrix = _D3DMATRIX;
  166.  
  167.   PD3DViewport8 = ^TD3DViewport8;
  168.   _D3DVIEWPORT8 = packed record
  169.     X: DWord;
  170.     Y: DWord;         { Viewport Top left }
  171.     Width: DWord;
  172.     Height: DWord;    { Viewport Dimensions }
  173.     MinZ: Single;       { Min/max of clip Volume }
  174.     MaxZ: Single;
  175.   end {_D3DVIEWPORT8};
  176.   {$EXTERNALSYM _D3DVIEWPORT8}
  177.   D3DVIEWPORT8 = _D3DVIEWPORT8;
  178.   {$EXTERNALSYM D3DVIEWPORT8}
  179.   TD3DViewport8 = _D3DVIEWPORT8;
  180.  
  181. (*
  182.  * Values for clip fields.
  183.  *)
  184.  
  185. const
  186.   // Max number of user clipping planes, supported in D3D.
  187.   D3DMAXUSERCLIPPLANES = 32;
  188.   {$EXTERNALSYM D3DMAXUSERCLIPPLANES}
  189.  
  190.   // These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE
  191.   //
  192.   D3DCLIPPLANE0 = (1 shl 0);
  193.   {$EXTERNALSYM D3DCLIPPLANE0}
  194.   D3DCLIPPLANE1 = (1 shl 1);
  195.   {$EXTERNALSYM D3DCLIPPLANE1}
  196.   D3DCLIPPLANE2 = (1 shl 2);
  197.   {$EXTERNALSYM D3DCLIPPLANE2}
  198.   D3DCLIPPLANE3 = (1 shl 3);
  199.   {$EXTERNALSYM D3DCLIPPLANE3}
  200.   D3DCLIPPLANE4 = (1 shl 4);
  201.   {$EXTERNALSYM D3DCLIPPLANE4}
  202.   D3DCLIPPLANE5 = (1 shl 5);
  203.   {$EXTERNALSYM D3DCLIPPLANE5}
  204.  
  205.   // The following bits are used in the ClipUnion and ClipIntersection
  206.   // members of the D3DCLIPSTATUS8
  207.   //
  208.   D3DCS_LEFT    = $00000001;
  209.   {$EXTERNALSYM D3DCS_LEFT}
  210.   D3DCS_RIGHT   = $00000002;
  211.   {$EXTERNALSYM D3DCS_RIGHT}
  212.   D3DCS_TOP     = $00000004;
  213.   {$EXTERNALSYM D3DCS_TOP}
  214.   D3DCS_BOTTOM  = $00000008;
  215.   {$EXTERNALSYM D3DCS_BOTTOM}
  216.   D3DCS_FRONT   = $00000010;
  217.   {$EXTERNALSYM D3DCS_FRONT}
  218.   D3DCS_BACK    = $00000020;
  219.   {$EXTERNALSYM D3DCS_BACK}
  220.   D3DCS_PLANE0  = $00000040;
  221.   {$EXTERNALSYM D3DCS_PLANE0}
  222.   D3DCS_PLANE1  = $00000080;
  223.   {$EXTERNALSYM D3DCS_PLANE1}
  224.   D3DCS_PLANE2  = $00000100;
  225.   {$EXTERNALSYM D3DCS_PLANE2}
  226.   D3DCS_PLANE3  = $00000200;
  227.   {$EXTERNALSYM D3DCS_PLANE3}
  228.   D3DCS_PLANE4  = $00000400;
  229.   {$EXTERNALSYM D3DCS_PLANE4}
  230.   D3DCS_PLANE5  = $00000800;
  231.   {$EXTERNALSYM D3DCS_PLANE5}
  232.  
  233.   D3DCS_ALL     = D3DCS_LEFT   or
  234.                   D3DCS_RIGHT  or
  235.                   D3DCS_TOP    or
  236.                   D3DCS_BOTTOM or
  237.                   D3DCS_FRONT  or
  238.                   D3DCS_BACK   or
  239.                   D3DCS_PLANE0 or
  240.                   D3DCS_PLANE1 or
  241.                   D3DCS_PLANE2 or
  242.                   D3DCS_PLANE3 or
  243.                   D3DCS_PLANE4 or
  244.                   D3DCS_PLANE5;
  245.   {$EXTERNALSYM D3DCS_ALL}
  246.  
  247. type
  248.   PD3DClipStatus8 = ^TD3DClipStatus8;
  249.   _D3DCLIPSTATUS8 = packed record
  250.     ClipUnion: DWord;
  251.     ClipIntersection: DWord;
  252.   end {_D3DCLIPSTATUS8};
  253.   {$EXTERNALSYM _D3DCLIPSTATUS8}
  254.   D3DCLIPSTATUS8 = _D3DCLIPSTATUS8;
  255.   {$EXTERNALSYM D3DCLIPSTATUS8}
  256.   TD3DClipStatus8 = _D3DCLIPSTATUS8;
  257.  
  258.   PD3DMaterial8 = ^TD3DMaterial8;
  259.   _D3DMATERIAL8 = packed record
  260.     Diffuse: TD3DColorValue;   { Diffuse color RGBA }
  261.     Ambient: TD3DColorValue;   { Ambient color RGB }
  262.     Specular: TD3DColorValue;  { Specular 'shininess' }
  263.     Emissive: TD3DColorValue;  { Emissive color RGB }
  264.     Power: Single;             { Sharpness if specular highlight }
  265.   end {_D3DMATERIAL8};
  266.   {$EXTERNALSYM _D3DMATERIAL8}
  267.   D3DMATERIAL8 = _D3DMATERIAL8;
  268.   {$EXTERNALSYM D3DMATERIAL8}
  269.   TD3DMaterial8 = _D3DMATERIAL8;
  270.  
  271.   _D3DLIGHTTYPE = (
  272.   {$IFNDEF COMPILER6_UP}
  273.     D3DLIGHT_INVALID_0, {= 0}
  274.     D3DLIGHT_POINT,     {= 1}
  275.     D3DLIGHT_SPOT,      {= 2}
  276.     D3DLIGHT_DIRECTIONAL{= 3}
  277.   {$ELSE}
  278.     D3DLIGHT_POINT       = 1,
  279.     D3DLIGHT_SPOT        = 2,
  280.     D3DLIGHT_DIRECTIONAL = 3
  281.   {$ENDIF}
  282.   );
  283.   {$EXTERNALSYM _D3DLIGHTTYPE}
  284.   D3DLIGHTTYPE = _D3DLIGHTTYPE;
  285.   {$EXTERNALSYM D3DLIGHTTYPE}
  286.   TD3DLightType = _D3DLIGHTTYPE;
  287.  
  288.   PD3DLight8 = ^TD3DLight8;
  289.   _D3DLIGHT8 = packed record
  290.     _Type: TD3DLightType;       { Type of light source }
  291.     Diffuse: TD3DColorValue;    { Diffuse color of light }
  292.     Specular: TD3DColorValue;   { Specular color of light }
  293.     Ambient: TD3DColorValue;    { Ambient color of light }
  294.     Position: TD3DVector;       { Position in world space }
  295.     Direction: TD3DVector;      { Direction in world space }
  296.     Range: Single;              { Cutoff range }
  297.     Falloff: Single;            { Falloff }
  298.     Attenuation0: Single;       { Constant attenuation }
  299.     Attenuation1: Single;       { Linear attenuation }
  300.     Attenuation2: Single;       { Quadratic attenuation }
  301.     Theta: Single;              { Inner angle of spotlight cone }
  302.     Phi: Single;                { Outer angle of spotlight cone }
  303.   end {_D3DLIGHT8};
  304.   {$EXTERNALSYM _D3DLIGHT8}
  305.   D3DLIGHT8 = _D3DLIGHT8;
  306.   {$EXTERNALSYM D3DLIGHT8}
  307.   TD3DLight8 = _D3DLIGHT8;
  308.  
  309. (*
  310.  * Options for clearing
  311.  *)
  312. const
  313.   D3DCLEAR_TARGET       = $00000001; { Clear target surface }
  314.   {$EXTERNALSYM D3DCLEAR_TARGET}
  315.   D3DCLEAR_ZBUFFER      = $00000002; { Clear target z buffer }
  316.   {$EXTERNALSYM D3DCLEAR_ZBUFFER}
  317.   D3DCLEAR_STENCIL      = $00000004; { Clear stencil planes }
  318.   {$EXTERNALSYM D3DCLEAR_STENCIL}
  319.  
  320. (*
  321.  * The following defines the rendering states
  322.  *)
  323. type
  324.   _D3DSHADEMODE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  325.   {$EXTERNALSYM _D3DSHADEMODE}
  326.   D3DSHADEMODE = _D3DSHADEMODE;
  327.   {$EXTERNALSYM D3DSHADEMODE}
  328.   TD3DShadeMode = _D3DSHADEMODE;
  329.  
  330. const
  331.   D3DSHADE_FLAT      = 1;
  332.   {$EXTERNALSYM D3DSHADE_FLAT}
  333.   D3DSHADE_GOURAUD   = 2;
  334.   {$EXTERNALSYM D3DSHADE_GOURAUD}
  335.   D3DSHADE_PHONG     = 3;
  336.   {$EXTERNALSYM D3DSHADE_PHONG}
  337.  
  338. type
  339.   _D3DFILLMODE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  340.   {$EXTERNALSYM _D3DFILLMODE}
  341.   D3DFILLMODE = _D3DFILLMODE;
  342.   {$EXTERNALSYM D3DFILLMODE}
  343.   TD3DFillMode = _D3DFILLMODE;
  344.  
  345. const
  346.   D3DFILL_POINT      = 1;
  347.   {$EXTERNALSYM D3DFILL_POINT}
  348.   D3DFILL_WIREFRAME  = 2;
  349.   {$EXTERNALSYM D3DFILL_WIREFRAME}
  350.   D3DFILL_SOLID      = 3;
  351.   {$EXTERNALSYM D3DFILL_SOLID}
  352.  
  353. type
  354.   PD3DLinePattern = ^TD3DLinePattern;
  355.   _D3DLINEPATTERN = packed record
  356.     wRepeatFactor: Word;
  357.     wLinePattern: Word;
  358.   end {_D3DLINEPATTERN};
  359.   {$EXTERNALSYM _D3DLINEPATTERN}
  360.   D3DLINEPATTERN = _D3DLINEPATTERN;
  361.   {$EXTERNALSYM D3DLINEPATTERN}
  362.   TD3DLinePattern = _D3DLINEPATTERN;
  363.  
  364. type
  365.   _D3DBLEND = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  366.   {$EXTERNALSYM _D3DBLEND}
  367.   D3DBLEND = _D3DBLEND;
  368.   {$EXTERNALSYM D3DBLEND}
  369.   TD3DBlend = _D3DBLEND;
  370.  
  371. const
  372.   D3DBLEND_ZERO              = 1;
  373.   {$EXTERNALSYM D3DBLEND_ZERO}
  374.   D3DBLEND_ONE               = 2;
  375.   {$EXTERNALSYM D3DBLEND_ONE}
  376.   D3DBLEND_SRCCOLOR          = 3;
  377.   {$EXTERNALSYM D3DBLEND_SRCCOLOR}
  378.   D3DBLEND_INVSRCCOLOR       = 4;
  379.   {$EXTERNALSYM D3DBLEND_INVSRCCOLOR}
  380.   D3DBLEND_SRCALPHA          = 5;
  381.   {$EXTERNALSYM D3DBLEND_SRCALPHA}
  382.   D3DBLEND_INVSRCALPHA       = 6;
  383.   {$EXTERNALSYM D3DBLEND_INVSRCALPHA}
  384.   D3DBLEND_DESTALPHA         = 7;
  385.   {$EXTERNALSYM D3DBLEND_DESTALPHA}
  386.   D3DBLEND_INVDESTALPHA      = 8;
  387.   {$EXTERNALSYM D3DBLEND_INVDESTALPHA}
  388.   D3DBLEND_DESTCOLOR         = 9;
  389.   {$EXTERNALSYM D3DBLEND_DESTCOLOR}
  390.   D3DBLEND_INVDESTCOLOR      = 10;
  391.   {$EXTERNALSYM D3DBLEND_INVDESTCOLOR}
  392.   D3DBLEND_SRCALPHASAT       = 11;
  393.   {$EXTERNALSYM D3DBLEND_SRCALPHASAT}
  394.   D3DBLEND_BOTHSRCALPHA      = 12;
  395.   {$EXTERNALSYM D3DBLEND_BOTHSRCALPHA}
  396.   D3DBLEND_BOTHINVSRCALPHA   = 13;
  397.   {$EXTERNALSYM D3DBLEND_BOTHINVSRCALPHA}
  398.  
  399. type
  400.   _D3DBLENDOP = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  401.   {$EXTERNALSYM _D3DBLENDOP}
  402.   D3DBLENDOP = _D3DBLENDOP;
  403.   {$EXTERNALSYM D3DBLENDOP}
  404.   TD3DBlendOp = _D3DBLENDOP;
  405.  
  406. const
  407.   D3DBLENDOP_ADD             = 1;
  408.   {$EXTERNALSYM D3DBLENDOP_ADD}
  409.   D3DBLENDOP_SUBTRACT        = 2;
  410.   {$EXTERNALSYM D3DBLENDOP_SUBTRACT}
  411.   D3DBLENDOP_REVSUBTRACT     = 3;
  412.   {$EXTERNALSYM D3DBLENDOP_REVSUBTRACT}
  413.   D3DBLENDOP_MIN             = 4;
  414.   {$EXTERNALSYM D3DBLENDOP_MIN}
  415.   D3DBLENDOP_MAX             = 5;
  416.   {$EXTERNALSYM D3DBLENDOP_MAX}
  417.  
  418. type
  419.   _D3DTEXTUREADDRESS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  420.   {$EXTERNALSYM _D3DTEXTUREADDRESS}
  421.   D3DTEXTUREADDRESS = _D3DTEXTUREADDRESS;
  422.   {$EXTERNALSYM D3DTEXTUREADDRESS}
  423.   TD3DTextureAddress = _D3DTEXTUREADDRESS;
  424.  
  425. const
  426.   D3DTADDRESS_WRAP           = 1;
  427.   {$EXTERNALSYM D3DTADDRESS_WRAP}
  428.   D3DTADDRESS_MIRROR         = 2;
  429.   {$EXTERNALSYM D3DTADDRESS_MIRROR}
  430.   D3DTADDRESS_CLAMP          = 3;
  431.   {$EXTERNALSYM D3DTADDRESS_CLAMP}
  432.   D3DTADDRESS_BORDER         = 4;
  433.   {$EXTERNALSYM D3DTADDRESS_BORDER}
  434.   D3DTADDRESS_MIRRORONCE     = 5;
  435.   {$EXTERNALSYM D3DTADDRESS_MIRRORONCE}
  436.  
  437. type
  438.   _D3DCULL = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  439.   {$EXTERNALSYM _D3DCULL}
  440.   D3DCULL = _D3DCULL;
  441.   {$EXTERNALSYM D3DCULL}
  442.   TD3DCull = _D3DCULL;
  443.  
  444. const
  445.   D3DCULL_NONE       = 1;
  446.   {$EXTERNALSYM D3DCULL_NONE}
  447.   D3DCULL_CW         = 2;
  448.   {$EXTERNALSYM D3DCULL_CW}
  449.   D3DCULL_CCW        = 3;
  450.   {$EXTERNALSYM D3DCULL_CCW}
  451.  
  452. type
  453.   _D3DCMPFUNC = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  454.   {$EXTERNALSYM _D3DCMPFUNC}
  455.   D3DCMPFUNC = _D3DCMPFUNC;
  456.   {$EXTERNALSYM D3DCMPFUNC}
  457.   TD3DCmpFunc = _D3DCMPFUNC;
  458.  
  459. const
  460.   D3DCMP_NEVER          = 1;
  461.   {$EXTERNALSYM D3DCMP_NEVER}
  462.   D3DCMP_LESS           = 2;
  463.   {$EXTERNALSYM D3DCMP_LESS}
  464.   D3DCMP_EQUAL          = 3;
  465.   {$EXTERNALSYM D3DCMP_EQUAL}
  466.   D3DCMP_LESSEQUAL      = 4;
  467.   {$EXTERNALSYM D3DCMP_LESSEQUAL}
  468.   D3DCMP_GREATER        = 5;
  469.   {$EXTERNALSYM D3DCMP_GREATER}
  470.   D3DCMP_NOTEQUAL       = 6;
  471.   {$EXTERNALSYM D3DCMP_NOTEQUAL}
  472.   D3DCMP_GREATEREQUAL   = 7;
  473.   {$EXTERNALSYM D3DCMP_GREATEREQUAL}
  474.   D3DCMP_ALWAYS         = 8;
  475.   {$EXTERNALSYM D3DCMP_ALWAYS}
  476.  
  477. type
  478.   _D3DSTENCILOP = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  479.   {$EXTERNALSYM _D3DSTENCILOP}
  480.   D3DSTENCILOP = _D3DSTENCILOP;
  481.   {$EXTERNALSYM D3DSTENCILOP}
  482.   TD3DStencilOp = _D3DSTENCILOP;
  483.  
  484. const
  485.   D3DSTENCILOP_KEEP     = 1;
  486.   {$EXTERNALSYM D3DSTENCILOP_KEEP}
  487.   D3DSTENCILOP_ZERO     = 2;
  488.   {$EXTERNALSYM D3DSTENCILOP_ZERO}
  489.   D3DSTENCILOP_REPLACE  = 3;
  490.   {$EXTERNALSYM D3DSTENCILOP_REPLACE}
  491.   D3DSTENCILOP_INCRSAT  = 4;
  492.   {$EXTERNALSYM D3DSTENCILOP_INCRSAT}
  493.   D3DSTENCILOP_DECRSAT  = 5;
  494.   {$EXTERNALSYM D3DSTENCILOP_DECRSAT}
  495.   D3DSTENCILOP_INVERT   = 6;
  496.   {$EXTERNALSYM D3DSTENCILOP_INVERT}
  497.   D3DSTENCILOP_INCR     = 7;
  498.   {$EXTERNALSYM D3DSTENCILOP_INCR}
  499.   D3DSTENCILOP_DECR     = 8;
  500.   {$EXTERNALSYM D3DSTENCILOP_DECR}
  501.  
  502. type
  503.   _D3DFOGMODE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  504.   {$EXTERNALSYM _D3DFOGMODE}
  505.   D3DFOGMODE = _D3DFOGMODE;
  506.   {$EXTERNALSYM D3DFOGMODE}
  507.   TD3DFogMode = _D3DFOGMODE;
  508.  
  509. const
  510.   D3DFOG_NONE   = 0;
  511.   {$EXTERNALSYM D3DFOG_NONE}
  512.   D3DFOG_EXP    = 1;
  513.   {$EXTERNALSYM D3DFOG_EXP}
  514.   D3DFOG_EXP2   = 2;
  515.   {$EXTERNALSYM D3DFOG_EXP2}
  516.   D3DFOG_LINEAR = 3;
  517.   {$EXTERNALSYM D3DFOG_LINEAR}
  518.  
  519. type
  520.   _D3DZBUFFERTYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  521.   {$EXTERNALSYM _D3DZBUFFERTYPE}
  522.   D3DZBUFFERTYPE = _D3DZBUFFERTYPE;
  523.   {$EXTERNALSYM D3DZBUFFERTYPE}
  524.   TD3DZBufferType = _D3DZBUFFERTYPE;
  525.  
  526. const
  527.   D3DZB_FALSE   = 0;
  528.   {$EXTERNALSYM D3DZB_FALSE}
  529.   D3DZB_TRUE    = 1;
  530.   {$EXTERNALSYM D3DZB_TRUE}
  531.   D3DZB_USEW    = 2;
  532.   {$EXTERNALSYM D3DZB_USEW}
  533.  
  534. type
  535.   // Primitives supported by draw-primitive API
  536.   _D3DPRIMITIVETYPE = (
  537.   {$IFNDEF COMPILER6_UP}
  538.     D3DPT_INVALID_0    {= 0},
  539.     D3DPT_POINTLIST    {= 1},
  540.     D3DPT_LINELIST     {= 2},
  541.     D3DPT_LINESTRIP    {= 3},
  542.     D3DPT_TRIANGLELIST {= 4},
  543.     D3DPT_TRIANGLESTRIP{= 5},
  544.     D3DPT_TRIANGLEFAN  {= 6}
  545.   {$ELSE}
  546.     D3DPT_POINTLIST     = 1,
  547.     D3DPT_LINELIST      = 2,
  548.     D3DPT_LINESTRIP     = 3,
  549.     D3DPT_TRIANGLELIST  = 4,
  550.     D3DPT_TRIANGLESTRIP = 5,
  551.     D3DPT_TRIANGLEFAN   = 6
  552.   {$ENDIF}
  553.   );
  554.   {$EXTERNALSYM _D3DPRIMITIVETYPE}
  555.   D3DPRIMITIVETYPE = _D3DPRIMITIVETYPE;
  556.   {$EXTERNALSYM D3DPRIMITIVETYPE}
  557.   TD3DPrimitiveType = _D3DPRIMITIVETYPE;
  558.  
  559. {$IFNDEF COMPILER6_UP}
  560. const
  561.   D3DTS_VIEW          = 2;
  562.   {$EXTERNALSYM D3DTS_VIEW}
  563.   D3DTS_PROJECTION    = 3;
  564.   {$EXTERNALSYM D3DTS_PROJECTION}
  565.   D3DTS_TEXTURE0      = 16;
  566.   {$EXTERNALSYM D3DTS_TEXTURE0}
  567.   D3DTS_TEXTURE1      = 17;
  568.   {$EXTERNALSYM D3DTS_TEXTURE1}
  569.   D3DTS_TEXTURE2      = 18;
  570.   {$EXTERNALSYM D3DTS_TEXTURE2}
  571.   D3DTS_TEXTURE3      = 19;
  572.   {$EXTERNALSYM D3DTS_TEXTURE3}
  573.   D3DTS_TEXTURE4      = 20;
  574.   {$EXTERNALSYM D3DTS_TEXTURE4}
  575.   D3DTS_TEXTURE5      = 21;
  576.   {$EXTERNALSYM D3DTS_TEXTURE5}
  577.   D3DTS_TEXTURE6      = 22;
  578.   {$EXTERNALSYM D3DTS_TEXTURE6}
  579.   D3DTS_TEXTURE7      = 23;
  580.   {$EXTERNALSYM D3DTS_TEXTURE7}
  581.   D3DTS_FORCE_DWORD   = $7fffffff; (* force 32-bit size enum *)
  582.   {$EXTERNALSYM D3DTS_FORCE_DWORD}
  583.  
  584. type
  585.   _D3DTRANSFORMSTATETYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  586. {$ELSE}
  587. type
  588.   _D3DTRANSFORMSTATETYPE = (
  589.   {$IFDEF BCB}
  590.     D3DTS_DUMMY
  591.   {$ELSE}
  592.     D3DTS_VIEW          = 2,
  593.     D3DTS_PROJECTION    = 3,
  594.     D3DTS_TEXTURE0      = 16,
  595.     D3DTS_TEXTURE1      = 17,
  596.     D3DTS_TEXTURE2      = 18,
  597.     D3DTS_TEXTURE3      = 19,
  598.     D3DTS_TEXTURE4      = 20,
  599.     D3DTS_TEXTURE5      = 21,
  600.     D3DTS_TEXTURE6      = 22,
  601.     D3DTS_TEXTURE7      = 23,
  602.     D3DTS_FORCE_DWORD   = $7fffffff (* force 32-bit size enum *)
  603.   {$ENDIF}
  604.   );
  605. {$ENDIF}
  606.   {$EXTERNALSYM _D3DTRANSFORMSTATETYPE}
  607.   D3DTRANSFORMSTATETYPE = _D3DTRANSFORMSTATETYPE;
  608.   {$EXTERNALSYM D3DTRANSFORMSTATETYPE}
  609.   TD3DTransformStateType = _D3DTRANSFORMSTATETYPE;
  610.  
  611. // #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
  612. function D3DTS_WORLDMATRIX(index: Byte): TD3DTransformStateType;
  613. {$EXTERNALSYM D3DTS_WORLDMATRIX}
  614.  
  615. const
  616.   D3DTS_WORLD   =  TD3DTransformStateType(0 + 256); // #define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)
  617.   {$EXTERNALSYM D3DTS_WORLD}
  618.   D3DTS_WORLD1  =  TD3DTransformStateType(1 + 256); // #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
  619.   {$EXTERNALSYM D3DTS_WORLD1}
  620.   D3DTS_WORLD2  =  TD3DTransformStateType(2 + 256); // #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
  621.   {$EXTERNALSYM D3DTS_WORLD2}
  622.   D3DTS_WORLD3  =  TD3DTransformStateType(3 + 256); // #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
  623.   {$EXTERNALSYM D3DTS_WORLD3}
  624.  
  625. {$IFNDEF COMPILER6_UP}
  626. type
  627.   _D3DRENDERSTATETYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  628.   {$EXTERNALSYM _D3DRENDERSTATETYPE}
  629.   D3DRENDERSTATETYPE = _D3DRENDERSTATETYPE;
  630.   {$EXTERNALSYM D3DRENDERSTATETYPE}
  631.   TD3DRenderStateType = _D3DRENDERSTATETYPE;
  632.  
  633. const
  634.   D3DRS_ZENABLE                   = TD3DRenderStateType(7);    { D3DZBUFFERTYPE (or TRUE/FALSE for legacy) }
  635.   {$EXTERNALSYM D3DRS_ZENABLE}
  636.   D3DRS_FILLMODE                  = TD3DRenderStateType(8);    { D3DFILLMODE }
  637.   {$EXTERNALSYM D3DRS_FILLMODE}
  638.   D3DRS_SHADEMODE                 = TD3DRenderStateType(9);    { D3DSHADEMODE }
  639.   {$EXTERNALSYM D3DRS_SHADEMODE}
  640.   D3DRS_LINEPATTERN               = TD3DRenderStateType(10);   { D3DLINEPATTERN }
  641.   {$EXTERNALSYM D3DRS_LINEPATTERN}
  642.   D3DRS_ZWRITEENABLE              = TD3DRenderStateType(14);   { TRUE to enable z writes }
  643.   {$EXTERNALSYM D3DRS_ZWRITEENABLE}
  644.   D3DRS_ALPHATESTENABLE           = TD3DRenderStateType(15);   { TRUE to enable alpha tests }
  645.   {$EXTERNALSYM D3DRS_ALPHATESTENABLE}
  646.   D3DRS_LASTPIXEL                 = TD3DRenderStateType(16);   { TRUE for last-pixel on lines }
  647.   {$EXTERNALSYM D3DRS_LASTPIXEL}
  648.   D3DRS_SRCBLEND                  = TD3DRenderStateType(19);   { D3DBLEND }
  649.   {$EXTERNALSYM D3DRS_SRCBLEND}
  650.   D3DRS_DESTBLEND                 = TD3DRenderStateType(20);   { D3DBLEND }
  651.   {$EXTERNALSYM D3DRS_DESTBLEND}
  652.   D3DRS_CULLMODE                  = TD3DRenderStateType(22);   { D3DCULL }
  653.   {$EXTERNALSYM D3DRS_CULLMODE}
  654.   D3DRS_ZFUNC                     = TD3DRenderStateType(23);   { D3DCMPFUNC }
  655.   {$EXTERNALSYM D3DRS_ZFUNC}
  656.   D3DRS_ALPHAREF                  = TD3DRenderStateType(24);   { D3DFIXED }
  657.   {$EXTERNALSYM D3DRS_ALPHAREF}
  658.   D3DRS_ALPHAFUNC                 = TD3DRenderStateType(25);   { D3DCMPFUNC }
  659.   {$EXTERNALSYM D3DRS_ALPHAFUNC}
  660.   D3DRS_DITHERENABLE              = TD3DRenderStateType(26);   { TRUE to enable dithering }
  661.   {$EXTERNALSYM D3DRS_DITHERENABLE}
  662.   D3DRS_ALPHABLENDENABLE          = TD3DRenderStateType(27);   { TRUE to enable alpha blending }
  663.   {$EXTERNALSYM D3DRS_ALPHABLENDENABLE}
  664.   D3DRS_FOGENABLE                 = TD3DRenderStateType(28);   { TRUE to enable fog blending }
  665.   {$EXTERNALSYM D3DRS_FOGENABLE}
  666.   D3DRS_SPECULARENABLE            = TD3DRenderStateType(29);   { TRUE to enable specular }
  667.   {$EXTERNALSYM D3DRS_SPECULARENABLE}
  668.   D3DRS_ZVISIBLE                  = TD3DRenderStateType(30);   { TRUE to enable z checking }
  669.   {$EXTERNALSYM D3DRS_ZVISIBLE}
  670.   D3DRS_FOGCOLOR                  = TD3DRenderStateType(34);   { D3DCOLOR }
  671.   {$EXTERNALSYM D3DRS_FOGCOLOR}
  672.   D3DRS_FOGTABLEMODE              = TD3DRenderStateType(35);   { D3DFOGMODE }
  673.   {$EXTERNALSYM D3DRS_FOGTABLEMODE}
  674.   D3DRS_FOGSTART                  = TD3DRenderStateType(36);   { Fog start (for both vertex and pixel fog) }
  675.   {$EXTERNALSYM D3DRS_FOGSTART}
  676.   D3DRS_FOGEND                    = TD3DRenderStateType(37);   { Fog end      }
  677.   {$EXTERNALSYM D3DRS_FOGEND}
  678.   D3DRS_FOGDENSITY                = TD3DRenderStateType(38);   { Fog density  }
  679.   {$EXTERNALSYM D3DRS_FOGDENSITY}
  680.   D3DRS_EDGEANTIALIAS             = TD3DRenderStateType(40);   { TRUE to enable edge antialiasing }
  681.   {$EXTERNALSYM D3DRS_EDGEANTIALIAS}
  682.   D3DRS_ZBIAS                     = TD3DRenderStateType(47);   { LONG Z bias }
  683.   {$EXTERNALSYM D3DRS_ZBIAS}
  684.   D3DRS_RANGEFOGENABLE            = TD3DRenderStateType(48);   { Enables range-based fog }
  685.   {$EXTERNALSYM D3DRS_RANGEFOGENABLE}
  686.   D3DRS_STENCILENABLE             = TD3DRenderStateType(52);   { BOOL enable/disable stenciling }
  687.   {$EXTERNALSYM D3DRS_STENCILENABLE}
  688.   D3DRS_STENCILFAIL               = TD3DRenderStateType(53);   { D3DSTENCILOP to do if stencil test fails }
  689.   {$EXTERNALSYM D3DRS_STENCILFAIL}
  690.   D3DRS_STENCILZFAIL              = TD3DRenderStateType(54);   { D3DSTENCILOP to do if stencil test passes and Z test fails }
  691.   {$EXTERNALSYM D3DRS_STENCILZFAIL}
  692.   D3DRS_STENCILPASS               = TD3DRenderStateType(55);   { D3DSTENCILOP to do if both stencil and Z tests pass }
  693.   {$EXTERNALSYM D3DRS_STENCILPASS}
  694.   D3DRS_STENCILFUNC               = TD3DRenderStateType(56);   { D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true }
  695.   {$EXTERNALSYM D3DRS_STENCILFUNC}
  696.   D3DRS_STENCILREF                = TD3DRenderStateType(57);   { Reference value used in stencil test }
  697.   {$EXTERNALSYM D3DRS_STENCILREF}
  698.   D3DRS_STENCILMASK               = TD3DRenderStateType(58);   { Mask value used in stencil test }
  699.   {$EXTERNALSYM D3DRS_STENCILMASK}
  700.   D3DRS_STENCILWRITEMASK          = TD3DRenderStateType(59);   { Write mask applied to values written to stencil buffer }
  701.   {$EXTERNALSYM D3DRS_STENCILWRITEMASK}
  702.   D3DRS_TEXTUREFACTOR             = TD3DRenderStateType(60);   { D3DCOLOR used for multi-texture blend }
  703.   {$EXTERNALSYM D3DRS_TEXTUREFACTOR}
  704.   D3DRS_WRAP0                     = TD3DRenderStateType(128);  { wrap for 1st texture coord. set }
  705.   {$EXTERNALSYM D3DRS_WRAP0}
  706.   D3DRS_WRAP1                     = TD3DRenderStateType(129);  { wrap for 2nd texture coord. set }
  707.   {$EXTERNALSYM D3DRS_WRAP1}
  708.   D3DRS_WRAP2                     = TD3DRenderStateType(130);  { wrap for 3rd texture coord. set }
  709.   {$EXTERNALSYM D3DRS_WRAP2}
  710.   D3DRS_WRAP3                     = TD3DRenderStateType(131);  { wrap for 4th texture coord. set }
  711.   {$EXTERNALSYM D3DRS_WRAP3}
  712.   D3DRS_WRAP4                     = TD3DRenderStateType(132);  { wrap for 5th texture coord. set }
  713.   {$EXTERNALSYM D3DRS_WRAP4}
  714.   D3DRS_WRAP5                     = TD3DRenderStateType(133);  { wrap for 6th texture coord. set }
  715.   {$EXTERNALSYM D3DRS_WRAP5}
  716.   D3DRS_WRAP6                     = TD3DRenderStateType(134);  { wrap for 7th texture coord. set }
  717.   {$EXTERNALSYM D3DRS_WRAP6}
  718.   D3DRS_WRAP7                     = TD3DRenderStateType(135);  { wrap for 8th texture coord. set }
  719.   {$EXTERNALSYM D3DRS_WRAP7}
  720.   D3DRS_CLIPPING                  = TD3DRenderStateType(136);
  721.   {$EXTERNALSYM D3DRS_CLIPPING}
  722.   D3DRS_LIGHTING                  = TD3DRenderStateType(137);
  723.   {$EXTERNALSYM D3DRS_LIGHTING}
  724.   D3DRS_AMBIENT                   = TD3DRenderStateType(139);
  725.   {$EXTERNALSYM D3DRS_AMBIENT}
  726.   D3DRS_FOGVERTEXMODE             = TD3DRenderStateType(140);
  727.   {$EXTERNALSYM D3DRS_FOGVERTEXMODE}
  728.   D3DRS_COLORVERTEX               = TD3DRenderStateType(141);
  729.   {$EXTERNALSYM D3DRS_COLORVERTEX}
  730.   D3DRS_LOCALVIEWER               = TD3DRenderStateType(142);
  731.   {$EXTERNALSYM D3DRS_LOCALVIEWER}
  732.   D3DRS_NORMALIZENORMALS          = TD3DRenderStateType(143);
  733.   {$EXTERNALSYM D3DRS_NORMALIZENORMALS}
  734.   D3DRS_DIFFUSEMATERIALSOURCE     = TD3DRenderStateType(145);
  735.   {$EXTERNALSYM D3DRS_DIFFUSEMATERIALSOURCE}
  736.   D3DRS_SPECULARMATERIALSOURCE    = TD3DRenderStateType(146);
  737.   {$EXTERNALSYM D3DRS_SPECULARMATERIALSOURCE}
  738.   D3DRS_AMBIENTMATERIALSOURCE     = TD3DRenderStateType(147);
  739.   {$EXTERNALSYM D3DRS_AMBIENTMATERIALSOURCE}
  740.   D3DRS_EMISSIVEMATERIALSOURCE    = TD3DRenderStateType(148);
  741.   {$EXTERNALSYM D3DRS_EMISSIVEMATERIALSOURCE}
  742.   D3DRS_VERTEXBLEND               = TD3DRenderStateType(151);
  743.   {$EXTERNALSYM D3DRS_VERTEXBLEND}
  744.   D3DRS_CLIPPLANEENABLE           = TD3DRenderStateType(152);
  745.   {$EXTERNALSYM D3DRS_CLIPPLANEENABLE}
  746.   D3DRS_SOFTWAREVERTEXPROCESSING  = TD3DRenderStateType(153);
  747.   {$EXTERNALSYM D3DRS_SOFTWAREVERTEXPROCESSING}
  748.   D3DRS_POINTSIZE                 = TD3DRenderStateType(154);   { float point size }
  749.   {$EXTERNALSYM D3DRS_POINTSIZE}
  750.   D3DRS_POINTSIZE_MIN             = TD3DRenderStateType(155);   { float point size min threshold }
  751.   {$EXTERNALSYM D3DRS_POINTSIZE_MIN}
  752.   D3DRS_POINTSPRITEENABLE         = TD3DRenderStateType(156);   { BOOL point texture coord control }
  753.   {$EXTERNALSYM D3DRS_POINTSPRITEENABLE}
  754.   D3DRS_POINTSCALEENABLE          = TD3DRenderStateType(157);   { BOOL point size scale enable }
  755.   {$EXTERNALSYM D3DRS_POINTSCALEENABLE}
  756.   D3DRS_POINTSCALE_A              = TD3DRenderStateType(158);   { float point attenuation A value }
  757.   {$EXTERNALSYM D3DRS_POINTSCALE_A}
  758.   D3DRS_POINTSCALE_B              = TD3DRenderStateType(159);   { float point attenuation B value }
  759.   {$EXTERNALSYM D3DRS_POINTSCALE_B}
  760.   D3DRS_POINTSCALE_C              = TD3DRenderStateType(160);   { float point attenuation C value }
  761.   {$EXTERNALSYM D3DRS_POINTSCALE_C}
  762.   D3DRS_MULTISAMPLEANTIALIAS      = TD3DRenderStateType(161);  // BOOL - set to do FSAA with multisample buffer
  763.   {$EXTERNALSYM D3DRS_MULTISAMPLEANTIALIAS}
  764.   D3DRS_MULTISAMPLEMASK           = TD3DRenderStateType(162);  // DWORD - per-sample enable/disable
  765.   {$EXTERNALSYM D3DRS_MULTISAMPLEMASK}
  766.   D3DRS_PATCHEDGESTYLE            = TD3DRenderStateType(163);  // Sets whether patch edges will use float style tessellation
  767.   {$EXTERNALSYM D3DRS_PATCHEDGESTYLE}
  768.   D3DRS_PATCHSEGMENTS             = TD3DRenderStateType(164);  // Number of segments per edge when drawing patches
  769.   {$EXTERNALSYM D3DRS_PATCHSEGMENTS}
  770.   D3DRS_DEBUGMONITORTOKEN         = TD3DRenderStateType(165);  // DEBUG ONLY - token to debug monitor
  771.   {$EXTERNALSYM D3DRS_DEBUGMONITORTOKEN}
  772.   D3DRS_POINTSIZE_MAX             = TD3DRenderStateType(166);   { float point size max threshold }
  773.   {$EXTERNALSYM D3DRS_POINTSIZE_MAX}
  774.   D3DRS_INDEXEDVERTEXBLENDENABLE  = TD3DRenderStateType(167);
  775.   {$EXTERNALSYM D3DRS_INDEXEDVERTEXBLENDENABLE}
  776.   D3DRS_COLORWRITEENABLE          = TD3DRenderStateType(168);  // per-channel write enable
  777.   {$EXTERNALSYM D3DRS_COLORWRITEENABLE}
  778.   D3DRS_TWEENFACTOR               = TD3DRenderStateType(170);   // float tween factor
  779.   {$EXTERNALSYM D3DRS_TWEENFACTOR}
  780.   D3DRS_BLENDOP                   = TD3DRenderStateType(171);   // D3DBLENDOP setting
  781.   {$EXTERNALSYM D3DRS_BLENDOP}
  782.   D3DRS_POSITIONORDER             = TD3DRenderStateType(172);   // NPatch position interpolation order. D3DORDER_LINEAR or D3DORDER_CUBIC (default)
  783.   {$EXTERNALSYM D3DRS_POSITIONORDER}
  784.   D3DRS_NORMALORDER               = TD3DRenderStateType(173);   // NPatch normal interpolation order. D3DORDER_LINEAR (default) or D3DORDER_QUADRATIC
  785.   {$EXTERNALSYM D3DRS_NORMALORDER}
  786.  
  787.   D3DRS_FORCE_DWORD               = TD3DRenderStateType($7fffffff); { force 32-bit size enum }
  788.   {$EXTERNALSYM D3DRS_FORCE_DWORD}
  789. {$ELSE}
  790. type
  791.   _D3DRENDERSTATETYPE = (
  792.   {$IFDEF BCB}
  793.     D3DRS_DUMMY
  794.   {$ELSE}
  795.     D3DRS_ZENABLE                   = 7,    (* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) *)
  796.     D3DRS_FILLMODE                  = 8,    (* D3DFILLMODE *)
  797.     D3DRS_SHADEMODE                 = 9,    (* D3DSHADEMODE *)
  798.     D3DRS_LINEPATTERN               = 10,   (* D3DLINEPATTERN *)
  799.     D3DRS_ZWRITEENABLE              = 14,   (* TRUE to enable z writes *)
  800.     D3DRS_ALPHATESTENABLE           = 15,   (* TRUE to enable alpha tests *)
  801.     D3DRS_LASTPIXEL                 = 16,   (* TRUE for last-pixel on lines *)
  802.     D3DRS_SRCBLEND                  = 19,   (* D3DBLEND *)
  803.     D3DRS_DESTBLEND                 = 20,   (* D3DBLEND *)
  804.     D3DRS_CULLMODE                  = 22,   (* D3DCULL *)
  805.     D3DRS_ZFUNC                     = 23,   (* D3DCMPFUNC *)
  806.     D3DRS_ALPHAREF                  = 24,   (* D3DFIXED *)
  807.     D3DRS_ALPHAFUNC                 = 25,   (* D3DCMPFUNC *)
  808.     D3DRS_DITHERENABLE              = 26,   (* TRUE to enable dithering *)
  809.     D3DRS_ALPHABLENDENABLE          = 27,   (* TRUE to enable alpha blending *)
  810.     D3DRS_FOGENABLE                 = 28,   (* TRUE to enable fog blending *)
  811.     D3DRS_SPECULARENABLE            = 29,   (* TRUE to enable specular *)
  812.     D3DRS_ZVISIBLE                  = 30,   (* TRUE to enable z checking *)
  813.     D3DRS_FOGCOLOR                  = 34,   (* D3DCOLOR *)
  814.     D3DRS_FOGTABLEMODE              = 35,   (* D3DFOGMODE *)
  815.     D3DRS_FOGSTART                  = 36,   (* Fog start (for both vertex and pixel fog) *)
  816.     D3DRS_FOGEND                    = 37,   (* Fog end      *)
  817.     D3DRS_FOGDENSITY                = 38,   (* Fog density  *)
  818.     D3DRS_EDGEANTIALIAS             = 40,   (* TRUE to enable edge antialiasing *)
  819.     D3DRS_ZBIAS                     = 47,   (* LONG Z bias *)
  820.     D3DRS_RANGEFOGENABLE            = 48,   (* Enables range-based fog *)
  821.     D3DRS_STENCILENABLE             = 52,   (* BOOL enable/disable stenciling *)
  822.     D3DRS_STENCILFAIL               = 53,   (* D3DSTENCILOP to do if stencil test fails *)
  823.     D3DRS_STENCILZFAIL              = 54,   (* D3DSTENCILOP to do if stencil test passes and Z test fails *)
  824.     D3DRS_STENCILPASS               = 55,   (* D3DSTENCILOP to do if both stencil and Z tests pass *)
  825.     D3DRS_STENCILFUNC               = 56,   (* D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true *)
  826.     D3DRS_STENCILREF                = 57,   (* Reference value used in stencil test *)
  827.     D3DRS_STENCILMASK               = 58,   (* Mask value used in stencil test *)
  828.     D3DRS_STENCILWRITEMASK          = 59,   (* Write mask applied to values written to stencil buffer *)
  829.     D3DRS_TEXTUREFACTOR             = 60,   (* D3DCOLOR used for multi-texture blend *)
  830.     D3DRS_WRAP0                     = 128,  (* wrap for 1st texture coord. set *)
  831.     D3DRS_WRAP1                     = 129,  (* wrap for 2nd texture coord. set *)
  832.     D3DRS_WRAP2                     = 130,  (* wrap for 3rd texture coord. set *)
  833.     D3DRS_WRAP3                     = 131,  (* wrap for 4th texture coord. set *)
  834.     D3DRS_WRAP4                     = 132,  (* wrap for 5th texture coord. set *)
  835.     D3DRS_WRAP5                     = 133,  (* wrap for 6th texture coord. set *)
  836.     D3DRS_WRAP6                     = 134,  (* wrap for 7th texture coord. set *)
  837.     D3DRS_WRAP7                     = 135,  (* wrap for 8th texture coord. set *)
  838.     D3DRS_CLIPPING                  = 136,
  839.     D3DRS_LIGHTING                  = 137,
  840.     D3DRS_AMBIENT                   = 139,
  841.     D3DRS_FOGVERTEXMODE             = 140,
  842.     D3DRS_COLORVERTEX               = 141,
  843.     D3DRS_LOCALVIEWER               = 142,
  844.     D3DRS_NORMALIZENORMALS          = 143,
  845.     D3DRS_DIFFUSEMATERIALSOURCE     = 145,
  846.     D3DRS_SPECULARMATERIALSOURCE    = 146,
  847.     D3DRS_AMBIENTMATERIALSOURCE     = 147,
  848.     D3DRS_EMISSIVEMATERIALSOURCE    = 148,
  849.     D3DRS_VERTEXBLEND               = 151,
  850.     D3DRS_CLIPPLANEENABLE           = 152,
  851.     D3DRS_SOFTWAREVERTEXPROCESSING  = 153,
  852.     D3DRS_POINTSIZE                 = 154,   (* float point size *)
  853.     D3DRS_POINTSIZE_MIN             = 155,   (* float point size min threshold *)
  854.     D3DRS_POINTSPRITEENABLE         = 156,   (* BOOL point texture coord control *)
  855.     D3DRS_POINTSCALEENABLE          = 157,   (* BOOL point size scale enable *)
  856.     D3DRS_POINTSCALE_A              = 158,   (* float point attenuation A value *)
  857.     D3DRS_POINTSCALE_B              = 159,   (* float point attenuation B value *)
  858.     D3DRS_POINTSCALE_C              = 160,   (* float point attenuation C value *)
  859.     D3DRS_MULTISAMPLEANTIALIAS      = 161,  // BOOL - set to do FSAA with multisample buffer
  860.     D3DRS_MULTISAMPLEMASK           = 162,  // DWORD - per-sample enable/disable
  861.     D3DRS_PATCHEDGESTYLE            = 163,  // Sets whether patch edges will use float style tessellation
  862.     D3DRS_PATCHSEGMENTS             = 164,  // Number of segments per edge when drawing patches
  863.     D3DRS_DEBUGMONITORTOKEN         = 165,  // DEBUG ONLY - token to debug monitor
  864.     D3DRS_POINTSIZE_MAX             = 166,   (* float point size max threshold *)
  865.     D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,
  866.     D3DRS_COLORWRITEENABLE          = 168,  // per-channel write enable
  867.     D3DRS_TWEENFACTOR               = 170,   // float tween factor
  868.     D3DRS_BLENDOP                   = 171,   // D3DBLENDOP setting
  869.     D3DRS_POSITIONORDER             = 172,   // NPatch position interpolation order. D3DORDER_LINEAR or D3DORDER_CUBIC (default)
  870.     D3DRS_NORMALORDER               = 173,   // NPatch normal interpolation order. D3DORDER_LINEAR (default) or D3DORDER_QUADRATIC
  871.  
  872.     D3DRS_FORCE_DWORD               = $7fffffff (* force 32-bit size enum *)
  873.   {$ENDIF}
  874.   );
  875.   {$EXTERNALSYM _D3DRENDERSTATETYPE}
  876.   D3DRENDERSTATETYPE = _D3DRENDERSTATETYPE;
  877.   {$EXTERNALSYM D3DRENDERSTATETYPE}
  878.   TD3DRenderStateType = _D3DRENDERSTATETYPE;
  879. {$ENDIF}
  880.  
  881. type
  882.   // Values for material source
  883.   _D3DMATERIALCOLORSOURCE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  884.   {$EXTERNALSYM _D3DMATERIALCOLORSOURCE}
  885.   D3DMATERIALCOLORSOURCE = _D3DMATERIALCOLORSOURCE;
  886.   {$EXTERNALSYM D3DMATERIALCOLORSOURCE}
  887.   TD3DMaterialSource = _D3DMATERIALCOLORSOURCE;
  888.  
  889. const
  890.   D3DMCS_MATERIAL       = TD3DMaterialSource(0);         // Color from material is used
  891.   {$EXTERNALSYM D3DMCS_MATERIAL}
  892.   D3DMCS_COLOR1         = TD3DMaterialSource(1);         // Diffuse vertex color is used
  893.   {$EXTERNALSYM D3DMCS_COLOR1}
  894.   D3DMCS_COLOR2         = TD3DMaterialSource(2);         // Specular vertex color is used
  895.   {$EXTERNALSYM D3DMCS_COLOR2}
  896.   D3DMCS_FORCE_DWORD    = TD3DMaterialSource($7fffffff); // force 32-bit size enum
  897.   {$EXTERNALSYM D3DMCS_FORCE_DWORD}
  898.  
  899.   // Bias to apply to the texture coordinate set to apply a wrap to.
  900.   D3DRENDERSTATE_WRAPBIAS                = DWORD(128);
  901.   {$EXTERNALSYM D3DRENDERSTATE_WRAPBIAS}
  902.  
  903.   { Flags to construct the WRAP render states }
  904.   D3DWRAP_U             = $00000001;
  905.   {$EXTERNALSYM D3DWRAP_U}
  906.   D3DWRAP_V             = $00000002;
  907.   {$EXTERNALSYM D3DWRAP_V}
  908.   D3DWRAP_W             = $00000004;
  909.   {$EXTERNALSYM D3DWRAP_W}
  910.  
  911.   { Flags to construct the WRAP render states for 1D thru 4D texture coordinates }
  912.   D3DWRAPCOORD_0        = $00000001;    // same as D3DWRAP_U
  913.   {$EXTERNALSYM D3DWRAPCOORD_0}
  914.   D3DWRAPCOORD_1        = $00000002;    // same as D3DWRAP_V
  915.   {$EXTERNALSYM D3DWRAPCOORD_1}
  916.   D3DWRAPCOORD_2        = $00000004;    // same as D3DWRAP_W
  917.   {$EXTERNALSYM D3DWRAPCOORD_2}
  918.   D3DWRAPCOORD_3        = $00000008;
  919.   {$EXTERNALSYM D3DWRAPCOORD_3}
  920.  
  921.   { Flags to construct D3DRS_COLORWRITEENABLE }
  922.   D3DCOLORWRITEENABLE_RED       = (1 shl 0);
  923.   {$EXTERNALSYM D3DCOLORWRITEENABLE_RED}
  924.   D3DCOLORWRITEENABLE_GREEN     = (1 shl 1);
  925.   {$EXTERNALSYM D3DCOLORWRITEENABLE_GREEN}
  926.   D3DCOLORWRITEENABLE_BLUE      = (1 shl 2);
  927.   {$EXTERNALSYM D3DCOLORWRITEENABLE_BLUE}
  928.   D3DCOLORWRITEENABLE_ALPHA     = (1 shl 3);
  929.   {$EXTERNALSYM D3DCOLORWRITEENABLE_ALPHA}
  930.  
  931. (*
  932.  * State enumerants for per-stage texture processing.
  933.  *)
  934. type
  935.   _D3DTEXTURESTAGESTATETYPE = (
  936.   {$IFNDEF COMPILER6_UP}
  937.     D3DTSS_INVALID_0      {= 0 }, // Invalid value
  938.     D3DTSS_COLOROP        {=  1}, { D3DTEXTUREOP - per-stage blending controls for color channels }
  939.     D3DTSS_COLORARG1      {=  2}, { D3DTA_* (texture arg) }
  940.     D3DTSS_COLORARG2      {=  3}, { D3DTA_* (texture arg) }
  941.     D3DTSS_ALPHAOP        {=  4}, { D3DTEXTUREOP - per-stage blending controls for alpha channel }
  942.     D3DTSS_ALPHAARG1      {=  5}, { D3DTA_* (texture arg) }
  943.     D3DTSS_ALPHAARG2      {=  6}, { D3DTA_* (texture arg) }
  944.     D3DTSS_BUMPENVMAT00   {=  7}, { float (bump mapping matrix) }
  945.     D3DTSS_BUMPENVMAT01   {=  8}, { float (bump mapping matrix) }
  946.     D3DTSS_BUMPENVMAT10   {=  9}, { float (bump mapping matrix) }
  947.     D3DTSS_BUMPENVMAT11   {= 10}, { float (bump mapping matrix) }
  948.     D3DTSS_TEXCOORDINDEX  {= 11}, { identifies which set of texture coordinates index this texture }
  949.     D3DTSS_invalid_12           , // invalid value of 12
  950.     D3DTSS_ADDRESSU       {= 13}, { D3DTEXTUREADDRESS for U coordinate }
  951.     D3DTSS_ADDRESSV       {= 14}, { D3DTEXTUREADDRESS for V coordinate }
  952.     D3DTSS_BORDERCOLOR    {= 15}, { D3DCOLOR }
  953.     D3DTSS_MAGFILTER      {= 16}, { D3DTEXTUREFILTER filter to use for magnification }
  954.     D3DTSS_MINFILTER      {= 17}, { D3DTEXTUREFILTER filter to use for minification }
  955.     D3DTSS_MIPFILTER      {= 18}, { D3DTEXTUREFILTER filter to use between mipmaps during minification }
  956.     D3DTSS_MIPMAPLODBIAS  {= 19}, { float Mipmap LOD bias }
  957.     D3DTSS_MAXMIPLEVEL    {= 20}, { DWORD 0..(n-1) LOD index of largest map to use (0 == largest) }
  958.     D3DTSS_MAXANISOTROPY  {= 21}, { DWORD maximum anisotropy }
  959.     D3DTSS_BUMPENVLSCALE  {= 22}, { float scale for bump map luminance }
  960.     D3DTSS_BUMPENVLOFFSET {= 23}, { float offset for bump map luminance }
  961.     D3DTSS_TEXTURETRANSFORMFLAGS {= 24}, { D3DTEXTURETRANSFORMFLAGS controls texture transform }
  962.     D3DTSS_ADDRESSW       {= 25}, { D3DTEXTUREADDRESS for W coordinate }
  963.     D3DTSS_COLORARG0      {= 26}, { D3DTA_* third arg for triadic ops }
  964.     D3DTSS_ALPHAARG0      {= 27}, { D3DTA_* third arg for triadic ops }
  965.     D3DTSS_RESULTARG      {= 28}  { D3DTA_* arg for result (CURRENT or TEMP) }
  966.   {$ELSE}
  967.     D3DTSS_COLOROP        =  1, { D3DTEXTUREOP - per-stage blending controls for color channels }
  968.     D3DTSS_COLORARG1      =  2, { D3DTA_* (texture arg) }
  969.     D3DTSS_COLORARG2      =  3, { D3DTA_* (texture arg) }
  970.     D3DTSS_ALPHAOP        =  4, { D3DTEXTUREOP - per-stage blending controls for alpha channel }
  971.     D3DTSS_ALPHAARG1      =  5, { D3DTA_* (texture arg) }
  972.     D3DTSS_ALPHAARG2      =  6, { D3DTA_* (texture arg) }
  973.     D3DTSS_BUMPENVMAT00   =  7, { float (bump mapping matrix) }
  974.     D3DTSS_BUMPENVMAT01   =  8, { float (bump mapping matrix) }
  975.     D3DTSS_BUMPENVMAT10   =  9, { float (bump mapping matrix) }
  976.     D3DTSS_BUMPENVMAT11   = 10, { float (bump mapping matrix) }
  977.     D3DTSS_TEXCOORDINDEX  = 11, { identifies which set of texture coordinates index this texture }
  978.     D3DTSS_ADDRESSU       = 13, { D3DTEXTUREADDRESS for U coordinate }
  979.     D3DTSS_ADDRESSV       = 14, { D3DTEXTUREADDRESS for V coordinate }
  980.     D3DTSS_BORDERCOLOR    = 15, { D3DCOLOR }
  981.     D3DTSS_MAGFILTER      = 16, { D3DTEXTUREFILTER filter to use for magnification }
  982.     D3DTSS_MINFILTER      = 17, { D3DTEXTUREFILTER filter to use for minification }
  983.     D3DTSS_MIPFILTER      = 18, { D3DTEXTUREFILTER filter to use between mipmaps during minification }
  984.     D3DTSS_MIPMAPLODBIAS  = 19, { float Mipmap LOD bias }
  985.     D3DTSS_MAXMIPLEVEL    = 20, { DWORD 0..(n-1) LOD index of largest map to use (0 == largest) }
  986.     D3DTSS_MAXANISOTROPY  = 21, { DWORD maximum anisotropy }
  987.     D3DTSS_BUMPENVLSCALE  = 22, { float scale for bump map luminance }
  988.     D3DTSS_BUMPENVLOFFSET = 23, { float offset for bump map luminance }
  989.     D3DTSS_TEXTURETRANSFORMFLAGS = 24, { D3DTEXTURETRANSFORMFLAGS controls texture transform }
  990.     D3DTSS_ADDRESSW       = 25, { D3DTEXTUREADDRESS for W coordinate }
  991.     D3DTSS_COLORARG0      = 26, { D3DTA_* third arg for triadic ops }
  992.     D3DTSS_ALPHAARG0      = 27, { D3DTA_* third arg for triadic ops }
  993.     D3DTSS_RESULTARG      = 28  { D3DTA_* arg for result (CURRENT or TEMP) }
  994.   {$ENDIF}
  995.   );
  996.   {$EXTERNALSYM _D3DTEXTURESTAGESTATETYPE}
  997.   D3DTEXTURESTAGESTATETYPE = _D3DTEXTURESTAGESTATETYPE;
  998.   {$EXTERNALSYM D3DTEXTURESTAGESTATETYPE}
  999.   TD3DTextureStageStateType = _D3DTEXTURESTAGESTATETYPE;
  1000.  
  1001. const
  1002.   // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position
  1003.   // and normal in the camera space) should be taken as texture coordinates
  1004.   // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from
  1005.   //
  1006.   D3DTSS_TCI_PASSTHRU                           = $00000000;
  1007.   {$EXTERNALSYM D3DTSS_TCI_PASSTHRU}
  1008.   D3DTSS_TCI_CAMERASPACENORMAL                  = $00010000;
  1009.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACENORMAL}
  1010.   D3DTSS_TCI_CAMERASPACEPOSITION                = $00020000;
  1011.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACEPOSITION}
  1012.   D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR        = $00030000;
  1013.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR}
  1014.  
  1015. (*
  1016.  * Enumerations for COLOROP and ALPHAOP texture blending operations set in
  1017.  * texture processing stage controls in D3DTSS.
  1018.  *)
  1019. type
  1020.   _D3DTEXTUREOP = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1021.   {$EXTERNALSYM _D3DTEXTUREOP}
  1022.   D3DTEXTUREOP = _D3DTEXTUREOP;
  1023.   {$EXTERNALSYM D3DTEXTUREOP}
  1024.   TD3DTextureOp = _D3DTEXTUREOP;
  1025.  
  1026. const
  1027.   // Control
  1028.   D3DTOP_DISABLE              = 1;      // disables stage
  1029.   {$EXTERNALSYM D3DTOP_DISABLE}
  1030.   D3DTOP_SELECTARG1           = 2;      // the default
  1031.   {$EXTERNALSYM D3DTOP_SELECTARG1}
  1032.   D3DTOP_SELECTARG2           = 3;
  1033.   {$EXTERNALSYM D3DTOP_SELECTARG2}
  1034.  
  1035.   // Modulate
  1036.   D3DTOP_MODULATE             = 4;      // multiply args together
  1037.   {$EXTERNALSYM D3DTOP_MODULATE}
  1038.   D3DTOP_MODULATE2X           = 5;      // multiply and  1 bit
  1039.   {$EXTERNALSYM D3DTOP_MODULATE2X}
  1040.   D3DTOP_MODULATE4X           = 6;      // multiply and  2 bits
  1041.   {$EXTERNALSYM D3DTOP_MODULATE4X}
  1042.  
  1043.   // Add
  1044.   D3DTOP_ADD                  =  7;   // add arguments together
  1045.   {$EXTERNALSYM D3DTOP_ADD}
  1046.   D3DTOP_ADDSIGNED            =  8;   // add with -0.5 bias
  1047.   {$EXTERNALSYM D3DTOP_ADDSIGNED}
  1048.   D3DTOP_ADDSIGNED2X          =  9;   // as above but left  1 bit
  1049.   {$EXTERNALSYM D3DTOP_ADDSIGNED2X}
  1050.   D3DTOP_SUBTRACT             = 10;   // Arg1 - Arg2, with no saturation
  1051.   {$EXTERNALSYM D3DTOP_SUBTRACT}
  1052.   D3DTOP_ADDSMOOTH            = 11;   // add 2 args, subtract product
  1053.                                       // Arg1 + Arg2 - Arg1*Arg2
  1054.                                       // = Arg1 + (1-Arg1)*Arg2
  1055.   {$EXTERNALSYM D3DTOP_ADDSMOOTH}
  1056.  
  1057.   // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
  1058.   D3DTOP_BLENDDIFFUSEALPHA    = 12; // iterated alpha
  1059.   {$EXTERNALSYM D3DTOP_BLENDDIFFUSEALPHA}
  1060.   D3DTOP_BLENDTEXTUREALPHA    = 13; // texture alpha
  1061.   {$EXTERNALSYM D3DTOP_BLENDTEXTUREALPHA}
  1062.   D3DTOP_BLENDFACTORALPHA     = 14; // alpha from D3DRS_TEXTUREFACTOR
  1063.   {$EXTERNALSYM D3DTOP_BLENDFACTORALPHA}
  1064.  
  1065.   // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)
  1066.   D3DTOP_BLENDTEXTUREALPHAPM  = 15; // texture alpha
  1067.   {$EXTERNALSYM D3DTOP_BLENDTEXTUREALPHAPM}
  1068.   D3DTOP_BLENDCURRENTALPHA    = 16; // by alpha of current color
  1069.   {$EXTERNALSYM D3DTOP_BLENDCURRENTALPHA}
  1070.  
  1071.   // Specular mapping
  1072.   D3DTOP_PREMODULATE            = 17;     // modulate with next texture before use
  1073.   {$EXTERNALSYM D3DTOP_PREMODULATE}
  1074.   D3DTOP_MODULATEALPHA_ADDCOLOR = 18;     // Arg1.RGB + Arg1.A*Arg2.RGB
  1075.                                           // COLOROP only
  1076.   {$EXTERNALSYM D3DTOP_MODULATEALPHA_ADDCOLOR}
  1077.   D3DTOP_MODULATECOLOR_ADDALPHA = 19;     // Arg1.RGB*Arg2.RGB + Arg1.A
  1078.                                           // COLOROP only
  1079.   {$EXTERNALSYM D3DTOP_MODULATECOLOR_ADDALPHA}
  1080.   D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20;  // (1-Arg1.A)*Arg2.RGB + Arg1.RGB
  1081.                                           // COLOROP only
  1082.   {$EXTERNALSYM D3DTOP_MODULATEINVALPHA_ADDCOLOR}
  1083.   D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21;  // (1-Arg1.RGB)*Arg2.RGB + Arg1.A
  1084.                                           // COLOROP only
  1085.   {$EXTERNALSYM D3DTOP_MODULATEINVCOLOR_ADDALPHA}
  1086.  
  1087.   // Bump mapping
  1088.   D3DTOP_BUMPENVMAP           = 22; // per pixel env map perturbation
  1089.   {$EXTERNALSYM D3DTOP_BUMPENVMAP}
  1090.   D3DTOP_BUMPENVMAPLUMINANCE  = 23; // with luminance channel
  1091.   {$EXTERNALSYM D3DTOP_BUMPENVMAPLUMINANCE}
  1092.  
  1093.   // This can do either diffuse or specular bump mapping with correct input.
  1094.   // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)
  1095.   // where each component has been scaled and offset to make it signed.
  1096.   // The result is replicated into all four (including alpha) channels.
  1097.   // This is a valid COLOROP only.
  1098.   D3DTOP_DOTPRODUCT3          = 24;
  1099.   {$EXTERNALSYM D3DTOP_DOTPRODUCT3}
  1100.  
  1101.   // Triadic ops
  1102.   D3DTOP_MULTIPLYADD          = 25; // Arg0 + Arg1*Arg2
  1103.   {$EXTERNALSYM D3DTOP_MULTIPLYADD}
  1104.   D3DTOP_LERP                 = 26; // (Arg0)*Arg1 + (1-Arg0)*Arg2
  1105.   {$EXTERNALSYM D3DTOP_LERP}
  1106.  
  1107. (*
  1108.  * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending
  1109.  * operations set in texture processing stage controls in D3DRENDERSTATE.
  1110.  *)
  1111. const
  1112.   D3DTA_SELECTMASK        = $0000000f;  // mask for arg selector
  1113.   {$EXTERNALSYM D3DTA_SELECTMASK}
  1114.   D3DTA_DIFFUSE           = $00000000;  // select diffuse color (read only)
  1115.   {$EXTERNALSYM D3DTA_DIFFUSE}
  1116.   D3DTA_CURRENT           = $00000001;  // select stage destination register (read/write)
  1117.   {$EXTERNALSYM D3DTA_CURRENT}
  1118.   D3DTA_TEXTURE           = $00000002;  // select texture color (read only)
  1119.   {$EXTERNALSYM D3DTA_TEXTURE}
  1120.   D3DTA_TFACTOR           = $00000003;  // select D3DRS_TEXTUREFACTOR (read only)
  1121.   {$EXTERNALSYM D3DTA_TFACTOR}
  1122.   D3DTA_SPECULAR          = $00000004;  // select specular color (read only)
  1123.   {$EXTERNALSYM D3DTA_SPECULAR}
  1124.   D3DTA_TEMP              = $00000005;  // select temporary register color (read/write)
  1125.   {$EXTERNALSYM D3DTA_TEMP}
  1126.   D3DTA_COMPLEMENT        = $00000010;  // take 1.0 - x (read modifier)
  1127.   {$EXTERNALSYM D3DTA_COMPLEMENT}
  1128.   D3DTA_ALPHAREPLICATE    = $00000020;  // replicate alpha to color components (read modifier)
  1129.   {$EXTERNALSYM D3DTA_ALPHAREPLICATE}
  1130.  
  1131. type
  1132.   //
  1133.   // Values for D3DTSS_***FILTER texture stage states
  1134.   //
  1135.   _D3DTEXTUREFILTERTYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1136.   {$EXTERNALSYM _D3DTEXTUREFILTERTYPE}
  1137.   D3DTEXTUREFILTERTYPE = _D3DTEXTUREFILTERTYPE;
  1138.   {$EXTERNALSYM D3DTEXTUREFILTERTYPE}
  1139.   TD3DTextureFilterType = _D3DTEXTUREFILTERTYPE;
  1140.  
  1141. const
  1142.   D3DTEXF_NONE            = 0;    // filtering disabled (valid for mip filter only)
  1143.   {$EXTERNALSYM D3DTEXF_NONE}
  1144.   D3DTEXF_POINT           = 1;    // nearest
  1145.   {$EXTERNALSYM D3DTEXF_POINT}
  1146.   D3DTEXF_LINEAR          = 2;    // linear interpolation
  1147.   {$EXTERNALSYM D3DTEXF_LINEAR}
  1148.   D3DTEXF_ANISOTROPIC     = 3;    // anisotropic
  1149.   {$EXTERNALSYM D3DTEXF_ANISOTROPIC}
  1150.   D3DTEXF_FLATCUBIC       = 4;    // cubic
  1151.   {$EXTERNALSYM D3DTEXF_FLATCUBIC}
  1152.   D3DTEXF_GAUSSIANCUBIC   = 5;    // different cubic kernel
  1153.   {$EXTERNALSYM D3DTEXF_GAUSSIANCUBIC}
  1154.  
  1155. const
  1156.   { Bits for Flags in ProcessVertices call }
  1157.   D3DPV_DONOTCOPYDATA        = (1 shl 0);
  1158.   {$EXTERNALSYM D3DPV_DONOTCOPYDATA}
  1159.  
  1160. //-------------------------------------------------------------------
  1161.  
  1162.   // Flexible vertex format bits
  1163.   //
  1164.   D3DFVF_RESERVED0        = $001;
  1165.   {$EXTERNALSYM D3DFVF_RESERVED0}
  1166.   D3DFVF_POSITION_MASK    = $00E;
  1167.   {$EXTERNALSYM D3DFVF_POSITION_MASK}
  1168.   D3DFVF_XYZ              = $002;
  1169.   {$EXTERNALSYM D3DFVF_XYZ}
  1170.   D3DFVF_XYZRHW           = $004;
  1171.   {$EXTERNALSYM D3DFVF_XYZRHW}
  1172.   D3DFVF_XYZB1            = $006;
  1173.   {$EXTERNALSYM D3DFVF_XYZB1}
  1174.   D3DFVF_XYZB2            = $008;
  1175.   {$EXTERNALSYM D3DFVF_XYZB2}
  1176.   D3DFVF_XYZB3            = $00a;
  1177.   {$EXTERNALSYM D3DFVF_XYZB3}
  1178.   D3DFVF_XYZB4            = $00c;
  1179.   {$EXTERNALSYM D3DFVF_XYZB4}
  1180.   D3DFVF_XYZB5            = $00e;
  1181.   {$EXTERNALSYM D3DFVF_XYZB5}
  1182.  
  1183.   D3DFVF_NORMAL           = $010;
  1184.   {$EXTERNALSYM D3DFVF_NORMAL}
  1185.   D3DFVF_PSIZE            = $020;
  1186.   {$EXTERNALSYM D3DFVF_PSIZE}
  1187.   D3DFVF_DIFFUSE          = $040;
  1188.   {$EXTERNALSYM D3DFVF_DIFFUSE}
  1189.   D3DFVF_SPECULAR         = $080;
  1190.   {$EXTERNALSYM D3DFVF_SPECULAR}
  1191.  
  1192.   D3DFVF_TEXCOUNT_MASK    = $f00;
  1193.   {$EXTERNALSYM D3DFVF_TEXCOUNT_MASK}
  1194.   D3DFVF_TEXCOUNT_SHIFT   = 8;
  1195.   {$EXTERNALSYM D3DFVF_TEXCOUNT_SHIFT}
  1196.   D3DFVF_TEX0             = $000;
  1197.   {$EXTERNALSYM D3DFVF_TEX0}
  1198.   D3DFVF_TEX1             = $100;
  1199.   {$EXTERNALSYM D3DFVF_TEX1}
  1200.   D3DFVF_TEX2             = $200;
  1201.   {$EXTERNALSYM D3DFVF_TEX2}
  1202.   D3DFVF_TEX3             = $300;
  1203.   {$EXTERNALSYM D3DFVF_TEX3}
  1204.   D3DFVF_TEX4             = $400;
  1205.   {$EXTERNALSYM D3DFVF_TEX4}
  1206.   D3DFVF_TEX5             = $500;
  1207.   {$EXTERNALSYM D3DFVF_TEX5}
  1208.   D3DFVF_TEX6             = $600;
  1209.   {$EXTERNALSYM D3DFVF_TEX6}
  1210.   D3DFVF_TEX7             = $700;
  1211.   {$EXTERNALSYM D3DFVF_TEX7}
  1212.   D3DFVF_TEX8             = $800;
  1213.   {$EXTERNALSYM D3DFVF_TEX8}
  1214.  
  1215.   D3DFVF_LASTBETA_UBYTE4  = $1000;
  1216.   {$EXTERNALSYM D3DFVF_LASTBETA_UBYTE4}
  1217.  
  1218.   D3DFVF_RESERVED2        = $E000;  // 4 reserved bits
  1219.   {$EXTERNALSYM D3DFVF_RESERVED2}
  1220.  
  1221.   //---------------------------------------------------------------------
  1222.   // Vertex Shaders
  1223.   //
  1224.  
  1225. {
  1226.  
  1227. Vertex Shader Declaration
  1228.  
  1229. The declaration portion of a vertex shader defines the static external
  1230. interface of the shader.  The information in the declaration includes:
  1231.  
  1232. - Assignments of vertex shader input registers to data streams.  These
  1233. assignments bind a specific vertex register to a single component within a
  1234. vertex stream.  A vertex stream element is identified by a byte offset
  1235. within the stream and a type.  The type specifies the arithmetic data type
  1236. plus the dimensionality (1, 2, 3, or 4 values).  Stream data which is
  1237. less than 4 values are always expanded out to 4 values with zero or more
  1238. 0.F values and one 1.F value.
  1239.  
  1240. - Assignment of vertex shader input registers to implicit data from the
  1241. primitive tessellator.  This controls the loading of vertex data which is
  1242. not loaded from a stream, but rather is generated during primitive
  1243. tessellation prior to the vertex shader.
  1244.  
  1245. - Loading data into the constant memory at the time a shader is set as the
  1246. current shader.  Each token specifies values for one or more contiguous 4
  1247. DWORD constant registers.  This allows the shader to update an arbitrary
  1248. subset of the constant memory, overwriting the device state (which
  1249. contains the current values of the constant memory).  Note that these
  1250. values can be subsequently overwritten (between DrawPrimitive calls)
  1251. during the time a shader is bound to a device via the
  1252. SetVertexShaderConstant method.
  1253.  
  1254.  
  1255. Declaration arrays are single-dimensional arrays of DWORDs composed of
  1256. multiple tokens each of which is one or more DWORDs.  The single-DWORD
  1257. token value 0xFFFFFFFF is a special token used to indicate the end of the
  1258. declaration array.  The single DWORD token value 0x00000000 is a NOP token
  1259. with is ignored during the declaration parsing.  Note that 0x00000000 is a
  1260. valid value for DWORDs following the first DWORD for multiple word tokens.
  1261.  
  1262. [31:29] TokenType
  1263.     0x0 - NOP (requires all DWORD bits to be zero)
  1264.     0x1 - stream selector
  1265.     0x2 - stream data definition (map to vertex input memory)
  1266.     0x3 - vertex input memory from tessellator
  1267.     0x4 - constant memory from shader
  1268.     0x5 - extension
  1269.     0x6 - reserved
  1270.     0x7 - end-of-array (requires all DWORD bits to be 1)
  1271.  
  1272. NOP Token (single DWORD token)
  1273.     [31:29] 0x0
  1274.     [28:00] 0x0
  1275.  
  1276. Stream Selector (single DWORD token)
  1277.     [31:29] 0x1
  1278.     [28]    indicates whether this is a tessellator stream
  1279.     [27:04] 0x0
  1280.     [03:00] stream selector (0..15)
  1281.  
  1282. Stream Data Definition (single DWORD token)
  1283.     Vertex Input Register Load
  1284.       [31:29] 0x2
  1285.       [28]    0x0
  1286.       [27:20] 0x0
  1287.       [19:16] type (dimensionality and data type)
  1288.       [15:04] 0x0
  1289.       [03:00] vertex register address (0..15)
  1290.     Data Skip (no register load)
  1291.       [31:29] 0x2
  1292.       [28]    0x1
  1293.       [27:20] 0x0
  1294.       [19:16] count of DWORDS to skip over (0..15)
  1295.       [15:00] 0x0
  1296.     Vertex Input Memory from Tessellator Data (single DWORD token)
  1297.       [31:29] 0x3
  1298.       [28]    indicates whether data is normals or u/v
  1299.       [27:24] 0x0
  1300.       [23:20] vertex register address (0..15)
  1301.       [19:16] type (dimensionality)
  1302.       [15:04] 0x0
  1303.       [03:00] vertex register address (0..15)
  1304.  
  1305. Constant Memory from Shader (multiple DWORD token)
  1306.     [31:29] 0x4
  1307.     [28:25] count of 4*DWORD constants to load (0..15)
  1308.     [24:07] 0x0
  1309.     [06:00] constant memory address (0..95)
  1310.  
  1311. Extension Token (single or multiple DWORD token)
  1312.     [31:29] 0x5
  1313.     [28:24] count of additional DWORDs in token (0..31)
  1314.     [23:00] extension-specific information
  1315.  
  1316. End-of-array token (single DWORD token)
  1317.     [31:29] 0x7
  1318.     [28:00] 0x1fffffff
  1319.  
  1320. The stream selector token must be immediately followed by a contiguous set of stream data definition tokens.  This token sequence fully defines that stream, including the set of elements within the stream, the order in which the elements appear, the type of each element, and the vertex register into which to load an element.
  1321. Streams are allowed to include data which is not loaded into a vertex register, thus allowing data which is not used for this shader to exist in the vertex stream.  This skipped data is defined only by a count of DWORDs to skip over, since the type information is irrelevant.
  1322. The token sequence:
  1323. Stream Select: stream=0
  1324. Stream Data Definition (Load): type=FLOAT3; register=3
  1325. Stream Data Definition (Load): type=FLOAT3; register=4
  1326. Stream Data Definition (Skip): count=2
  1327. Stream Data Definition (Load): type=FLOAT2; register=7
  1328.  
  1329. defines stream zero to consist of 4 elements, 3 of which are loaded into registers and the fourth skipped over.  Register 3 is loaded with the first three DWORDs in each vertex interpreted as FLOAT data.  Register 4 is loaded with the 4th, 5th, and 6th DWORDs interpreted as FLOAT data.  The next two DWORDs (7th and 8th) are skipped over and not loaded into any vertex input register.   Register 7 is loaded with the 9th and 10th DWORDS interpreted as FLOAT data.
  1330. Placing of tokens other than NOPs between the Stream Selector and Stream Data Definition tokens is disallowed.
  1331.  
  1332. }
  1333.  
  1334. type
  1335.   _D3DVSD_TOKENTYPE = (
  1336.   {$IFNDEF COMPILER6_UP}
  1337.     D3DVSD_TOKEN_NOP        {= 0},  // NOP or extension
  1338.     D3DVSD_TOKEN_STREAM,            // stream selector
  1339.     D3DVSD_TOKEN_STREAMDATA,        // stream data definition (map to vertex input memory)
  1340.     D3DVSD_TOKEN_TESSELLATOR,       // vertex input memory from tessellator
  1341.     D3DVSD_TOKEN_CONSTMEM,          // constant memory from shader
  1342.     D3DVSD_TOKEN_EXT,               // extension
  1343.     D3DVSD_INVALID_6,               // Invalid token inserted to fill the gap (in Object Pascal translation)
  1344.     D3DVSD_TOKEN_END        {= 7}   // end-of-array (requires all DWORD bits to be 1)
  1345.   {$ELSE}
  1346.     D3DVSD_TOKEN_NOP        = 0,    // NOP or extension
  1347.     D3DVSD_TOKEN_STREAM,            // stream selector
  1348.     D3DVSD_TOKEN_STREAMDATA,        // stream data definition (map to vertex input memory)
  1349.     D3DVSD_TOKEN_TESSELLATOR,       // vertex input memory from tessellator
  1350.     D3DVSD_TOKEN_CONSTMEM,          // constant memory from shader
  1351.     D3DVSD_TOKEN_EXT,               // extension
  1352.     D3DVSD_TOKEN_END        = 7     // end-of-array (requires all DWORD bits to be 1)
  1353.   {$ENDIF}
  1354.   );
  1355.   {$EXTERNALSYM _D3DVSD_TOKENTYPE}
  1356.   D3DVSD_TOKENTYPE = _D3DVSD_TOKENTYPE;
  1357.   {$EXTERNALSYM D3DVSD_TOKENTYPE}
  1358.   TD3DVSDTokenType = _D3DVSD_TOKENTYPE;
  1359.  
  1360. const
  1361.   D3DVSD_TOKENTYPESHIFT         = 29;
  1362.   {$EXTERNALSYM D3DVSD_TOKENTYPESHIFT}
  1363.   D3DVSD_TOKENTYPEMASK          = (7 shl D3DVSD_TOKENTYPESHIFT);
  1364.   {$EXTERNALSYM D3DVSD_TOKENTYPEMASK}
  1365.  
  1366.   D3DVSD_STREAMNUMBERSHIFT      = 0;
  1367.   {$EXTERNALSYM D3DVSD_STREAMNUMBERSHIFT}
  1368.   D3DVSD_STREAMNUMBERMASK       = ($F shl D3DVSD_STREAMNUMBERSHIFT);
  1369.   {$EXTERNALSYM D3DVSD_STREAMNUMBERMASK}
  1370.  
  1371.   D3DVSD_DATALOADTYPESHIFT      = 28;
  1372.   {$EXTERNALSYM D3DVSD_DATALOADTYPESHIFT}
  1373.   D3DVSD_DATALOADTYPEMASK       = ($1 shl D3DVSD_DATALOADTYPESHIFT);
  1374.   {$EXTERNALSYM D3DVSD_DATALOADTYPEMASK}
  1375.  
  1376.   D3DVSD_DATATYPESHIFT          = 16;
  1377.   {$EXTERNALSYM D3DVSD_DATATYPESHIFT}
  1378.   D3DVSD_DATATYPEMASK           = ($F shl D3DVSD_DATATYPESHIFT);
  1379.   {$EXTERNALSYM D3DVSD_DATATYPEMASK}
  1380.  
  1381.   D3DVSD_SKIPCOUNTSHIFT         = 16;
  1382.   {$EXTERNALSYM D3DVSD_SKIPCOUNTSHIFT}
  1383.   D3DVSD_SKIPCOUNTMASK          = ($F shl D3DVSD_SKIPCOUNTSHIFT);
  1384.   {$EXTERNALSYM D3DVSD_SKIPCOUNTMASK}
  1385.  
  1386.   D3DVSD_VERTEXREGSHIFT         = 0;
  1387.   {$EXTERNALSYM D3DVSD_VERTEXREGSHIFT}
  1388.   D3DVSD_VERTEXREGMASK          = ($1F shl D3DVSD_VERTEXREGSHIFT);
  1389.   {$EXTERNALSYM D3DVSD_VERTEXREGMASK}
  1390.  
  1391.   {$EXTERNALSYM D3DVSD_VERTEXREGMASK}
  1392.   D3DVSD_VERTEXREGINSHIFT       = 20;
  1393.   {$EXTERNALSYM D3DVSD_VERTEXREGINSHIFT}
  1394.   D3DVSD_VERTEXREGINMASK        = ($F shl D3DVSD_VERTEXREGINSHIFT);
  1395.   {$EXTERNALSYM D3DVSD_VERTEXREGINMASK}
  1396.  
  1397.   D3DVSD_CONSTCOUNTSHIFT        = 25;
  1398.   {$EXTERNALSYM D3DVSD_CONSTCOUNTSHIFT}
  1399.   D3DVSD_CONSTCOUNTMASK         = ($F shl D3DVSD_CONSTCOUNTSHIFT);
  1400.   {$EXTERNALSYM D3DVSD_CONSTCOUNTMASK}
  1401.  
  1402.   D3DVSD_CONSTADDRESSSHIFT      = 0;
  1403.   {$EXTERNALSYM D3DVSD_CONSTADDRESSSHIFT}
  1404.   D3DVSD_CONSTADDRESSMASK       = ($7F shl D3DVSD_CONSTADDRESSSHIFT);
  1405.   {$EXTERNALSYM D3DVSD_CONSTADDRESSMASK}
  1406.  
  1407.   D3DVSD_CONSTRSSHIFT           = 16;
  1408.   {$EXTERNALSYM D3DVSD_CONSTRSSHIFT}
  1409.   D3DVSD_CONSTRSMASK            = ($1FFF shl D3DVSD_CONSTRSSHIFT);
  1410.   {$EXTERNALSYM D3DVSD_CONSTRSMASK}
  1411.  
  1412.   D3DVSD_EXTCOUNTSHIFT          = 24;
  1413.   {$EXTERNALSYM D3DVSD_EXTCOUNTSHIFT}
  1414.   D3DVSD_EXTCOUNTMASK           = ($1F shl D3DVSD_EXTCOUNTSHIFT);
  1415.   {$EXTERNALSYM D3DVSD_EXTCOUNTMASK}
  1416.  
  1417.   D3DVSD_EXTINFOSHIFT           = 0;
  1418.   {$EXTERNALSYM D3DVSD_EXTINFOSHIFT}
  1419.   D3DVSD_EXTINFOMASK            = ($FFFFFF shl D3DVSD_EXTINFOSHIFT);
  1420.   {$EXTERNALSYM D3DVSD_EXTINFOMASK}
  1421.  
  1422. // D3DVSD_MAKETOKENTYPE(tokenType) ((tokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)
  1423. function D3DVSD_MAKETOKENTYPE(tokenType: TD3DVSDTokenType): DWord;
  1424. {$EXTERNALSYM D3DVSD_MAKETOKENTYPE}
  1425.  
  1426. // macros for generation of CreateVertexShader Declaration token array
  1427.  
  1428. // Set current stream
  1429. // _StreamNumber [0..(MaxStreams-1)] stream to get data from
  1430. //
  1431. //#define D3DVSD_STREAM( _StreamNumber ) \
  1432. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (_StreamNumber))
  1433. function D3DVSD_STREAM(_StreamNumber: DWord): DWord;
  1434. {$EXTERNALSYM D3DVSD_STREAM}
  1435.  
  1436. const
  1437.   // Set tessellator stream
  1438.   //
  1439.   D3DVSD_STREAMTESSSHIFT        = 28;
  1440.   {$EXTERNALSYM D3DVSD_STREAMTESSSHIFT}
  1441.   D3DVSD_STREAMTESSMASK         = (1 shl D3DVSD_STREAMTESSSHIFT);
  1442.   {$EXTERNALSYM D3DVSD_STREAMTESSMASK}
  1443.  
  1444.   // #define D3DVSD_STREAM_TESS( ) \
  1445.   //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK))
  1446.   // !!! - macro just rolled out in pascal (not converted to function)
  1447.   D3DVSD_STREAM_TESS = ((DWord(D3DVSD_TOKEN_STREAM) shl D3DVSD_TOKENTYPESHIFT) and
  1448.                         D3DVSD_TOKENTYPEMASK) or D3DVSD_STREAMTESSMASK;
  1449.   {$EXTERNALSYM D3DVSD_STREAM_TESS}
  1450.  
  1451. // bind single vertex register to vertex element from vertex stream
  1452. //
  1453. // _VertexRegister [0..15] address of the vertex register
  1454. // _Type [D3DVSDT_*] dimensionality and arithmetic data type
  1455.  
  1456. //#define D3DVSD_REG( _VertexRegister, _Type ) \
  1457. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) |            \
  1458. //     ((_Type) << D3DVSD_DATATYPESHIFT) | (_VertexRegister))
  1459. function D3DVSD_REG(_VertexRegister, _Type: DWord): DWord;
  1460. {$EXTERNALSYM D3DVSD_REG}
  1461.  
  1462. // Skip _DWORDCount DWORDs in vertex
  1463. //
  1464. //#define D3DVSD_SKIP( _DWORDCount ) \
  1465. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | \
  1466. //     ((_DWORDCount) << D3DVSD_SKIPCOUNTSHIFT))
  1467. function D3DVSD_SKIP(_DWORDCount: DWord): DWord;
  1468. {$EXTERNALSYM D3DVSD_SKIP}
  1469.  
  1470. // load data into vertex shader constant memory
  1471. //
  1472. // _ConstantAddress [0..95] - address of constant array to begin filling data
  1473. // _Count [0..15] - number of constant vectors to load (4 DWORDs each)
  1474. // followed by 4*_Count DWORDS of data
  1475. //
  1476. //#define D3DVSD_CONST( _ConstantAddress, _Count ) \
  1477. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | \
  1478. //     ((_Count) << D3DVSD_CONSTCOUNTSHIFT) | (_ConstantAddress))
  1479. function D3DVSD_CONST(_ConstantAddress, _Count: DWord): DWord;
  1480. {$EXTERNALSYM D3DVSD_CONST}
  1481.  
  1482. // enable tessellator generated normals
  1483. //
  1484. // _VertexRegisterIn  [0..15] address of vertex register whose input stream
  1485. //                            will be used in normal computation
  1486. // _VertexRegisterOut [0..15] address of vertex register to output the normal to
  1487. //
  1488. //#define D3DVSD_TESSNORMAL( _VertexRegisterIn, _VertexRegisterOut ) \
  1489. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | \
  1490. //     ((_VertexRegisterIn) << D3DVSD_VERTEXREGINSHIFT) | \
  1491. //     ((0x02) << D3DVSD_DATATYPESHIFT) | (_VertexRegisterOut))
  1492. function D3DVSD_TESSNORMAL(_VertexRegisterIn, _VertexRegisterOut: DWord): DWord;
  1493. {$EXTERNALSYM D3DVSD_TESSNORMAL}
  1494.  
  1495. // enable tessellator generated surface parameters
  1496. //
  1497. // _VertexRegister [0..15] address of vertex register to output parameters
  1498. //
  1499. //#define D3DVSD_TESSUV( _VertexRegister ) \
  1500. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | \
  1501. //     ((0x01) << D3DVSD_DATATYPESHIFT) | (_VertexRegister))
  1502. function D3DVSD_TESSUV(_VertexRegister: DWord): DWord;
  1503. {$EXTERNALSYM D3DVSD_TESSUV}
  1504.  
  1505. const
  1506.   // Generates END token
  1507.   //
  1508.   D3DVSD_END    = $FFFFFFFF;
  1509.   {$EXTERNALSYM D3DVSD_END}
  1510.  
  1511.   // Generates NOP token
  1512.   D3DVSD_NOP    = $00000000;
  1513.   {$EXTERNALSYM D3DVSD_NOP}
  1514.  
  1515.   // bit declarations for _Type fields
  1516.   D3DVSDT_FLOAT1      = $00;    // 1D float expanded to (value; 0.; 0.; 1.)
  1517.   {$EXTERNALSYM D3DVSDT_FLOAT1}
  1518.   D3DVSDT_FLOAT2      = $01;    // 2D float expanded to (value; value; 0.; 1.)
  1519.   {$EXTERNALSYM D3DVSDT_FLOAT2}
  1520.   D3DVSDT_FLOAT3      = $02;    // 3D float expanded to (value; value; value; 1.)
  1521.   {$EXTERNALSYM D3DVSDT_FLOAT3}
  1522.   D3DVSDT_FLOAT4      = $03;    // 4D float
  1523.   {$EXTERNALSYM D3DVSDT_FLOAT4}
  1524.   D3DVSDT_D3DCOLOR    = $04;    // 4D packed unsigned bytes mapped to 0. to 1. range
  1525.   {$EXTERNALSYM D3DVSDT_D3DCOLOR}
  1526.                                 // Input is in D3DCOLOR format (ARGB) expanded to (R; G; B; A)
  1527.   D3DVSDT_UBYTE4      = $05;    // 4D unsigned byte
  1528.   {$EXTERNALSYM D3DVSDT_UBYTE4}
  1529.   D3DVSDT_SHORT2      = $06;    // 2D signed short expanded to (value; value; 0.; 1.)
  1530.   {$EXTERNALSYM D3DVSDT_SHORT2}
  1531.   D3DVSDT_SHORT4      = $07;    // 4D signed short
  1532.   {$EXTERNALSYM D3DVSDT_SHORT4}
  1533.  
  1534.   // assignments of vertex input registers for fixed function vertex shader
  1535.   //
  1536.   D3DVSDE_POSITION      = 0;
  1537.   {$EXTERNALSYM D3DVSDE_POSITION}
  1538.   D3DVSDE_BLENDWEIGHT   = 1;
  1539.   {$EXTERNALSYM D3DVSDE_BLENDWEIGHT}
  1540.   D3DVSDE_BLENDINDICES  = 2;
  1541.   {$EXTERNALSYM D3DVSDE_BLENDINDICES}
  1542.   D3DVSDE_NORMAL        = 3;
  1543.   {$EXTERNALSYM D3DVSDE_NORMAL}
  1544.   D3DVSDE_PSIZE         = 4;
  1545.   {$EXTERNALSYM D3DVSDE_PSIZE}
  1546.   D3DVSDE_DIFFUSE       = 5;
  1547.   {$EXTERNALSYM D3DVSDE_DIFFUSE}
  1548.   D3DVSDE_SPECULAR      = 6;
  1549.   {$EXTERNALSYM D3DVSDE_SPECULAR}
  1550.   D3DVSDE_TEXCOORD0     = 7;
  1551.   {$EXTERNALSYM D3DVSDE_TEXCOORD0}
  1552.   D3DVSDE_TEXCOORD1     = 8;
  1553.   {$EXTERNALSYM D3DVSDE_TEXCOORD1}
  1554.   D3DVSDE_TEXCOORD2     = 9;
  1555.   {$EXTERNALSYM D3DVSDE_TEXCOORD2}
  1556.   D3DVSDE_TEXCOORD3     = 10;
  1557.   {$EXTERNALSYM D3DVSDE_TEXCOORD3}
  1558.   D3DVSDE_TEXCOORD4     = 11;
  1559.   {$EXTERNALSYM D3DVSDE_TEXCOORD4}
  1560.   D3DVSDE_TEXCOORD5     = 12;
  1561.   {$EXTERNALSYM D3DVSDE_TEXCOORD5}
  1562.   D3DVSDE_TEXCOORD6     = 13;
  1563.   {$EXTERNALSYM D3DVSDE_TEXCOORD6}
  1564.   D3DVSDE_TEXCOORD7     = 14;
  1565.   {$EXTERNALSYM D3DVSDE_TEXCOORD7}
  1566.   D3DVSDE_POSITION2     = 15;
  1567.   {$EXTERNALSYM D3DVSDE_POSITION2}
  1568.   D3DVSDE_NORMAL2       = 16;
  1569.   {$EXTERNALSYM D3DVSDE_NORMAL2}
  1570.  
  1571.   // Maximum supported number of texture coordinate sets
  1572.   D3DDP_MAXTEXCOORD = 8;
  1573.   {$EXTERNALSYM D3DDP_MAXTEXCOORD}
  1574.  
  1575.   //
  1576.   // Instruction Token Bit Definitions
  1577.   //
  1578.   D3DSI_OPCODE_MASK       = $0000FFFF;
  1579.   {$EXTERNALSYM D3DSI_OPCODE_MASK}
  1580.  
  1581. type
  1582.   _D3DSHADER_INSTRUCTION_OPCODE_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1583.   {$EXTERNALSYM _D3DSHADER_INSTRUCTION_OPCODE_TYPE}
  1584.   D3DSHADER_INSTRUCTION_OPCODE_TYPE = _D3DSHADER_INSTRUCTION_OPCODE_TYPE;
  1585.   {$EXTERNALSYM D3DSHADER_INSTRUCTION_OPCODE_TYPE}
  1586.   TD3DShaderInstructionOpcodeType = _D3DSHADER_INSTRUCTION_OPCODE_TYPE;
  1587.  
  1588. const
  1589.   D3DSIO_NOP          = 0;      // PS/VS
  1590.   {$EXTERNALSYM D3DSIO_NOP}
  1591.   D3DSIO_MOV          = 1;      // PS/VS
  1592.   {$EXTERNALSYM D3DSIO_MOV}
  1593.   D3DSIO_ADD          = 2;      // PS/VS
  1594.   {$EXTERNALSYM D3DSIO_ADD}
  1595.   D3DSIO_SUB          = 3;      // PS
  1596.   {$EXTERNALSYM D3DSIO_SUB}
  1597.   D3DSIO_MAD          = 4;      // PS/VS
  1598.   {$EXTERNALSYM D3DSIO_MAD}
  1599.   D3DSIO_MUL          = 5;      // PS/VS
  1600.   {$EXTERNALSYM D3DSIO_MUL}
  1601.   D3DSIO_RCP          = 6;      // VS
  1602.   {$EXTERNALSYM D3DSIO_RCP}
  1603.   D3DSIO_RSQ          = 7;      // VS
  1604.   {$EXTERNALSYM D3DSIO_RSQ}
  1605.   D3DSIO_DP3          = 8;      // PS/VS
  1606.   {$EXTERNALSYM D3DSIO_DP3}
  1607.   D3DSIO_DP4          = 9;      // PS/VS
  1608.   {$EXTERNALSYM D3DSIO_DP4}
  1609.   D3DSIO_MIN          = 10;     // VS
  1610.   {$EXTERNALSYM D3DSIO_MIN}
  1611.   D3DSIO_MAX          = 11;     // VS
  1612.   {$EXTERNALSYM D3DSIO_MAX}
  1613.   D3DSIO_SLT          = 12;     // VS
  1614.   {$EXTERNALSYM D3DSIO_SLT}
  1615.   D3DSIO_SGE          = 13;     // VS
  1616.   {$EXTERNALSYM D3DSIO_SGE}
  1617.   D3DSIO_EXP          = 14;     // VS
  1618.   {$EXTERNALSYM D3DSIO_EXP}
  1619.   D3DSIO_LOG          = 15;     // VS
  1620.   {$EXTERNALSYM D3DSIO_LOG}
  1621.   D3DSIO_LIT          = 16;     // VS
  1622.   {$EXTERNALSYM D3DSIO_LIT}
  1623.   D3DSIO_DST          = 17;     // VS
  1624.   {$EXTERNALSYM D3DSIO_DST}
  1625.   D3DSIO_LRP          = 18;     // PS
  1626.   {$EXTERNALSYM D3DSIO_LRP}
  1627.   D3DSIO_FRC          = 19;     // VS
  1628.   {$EXTERNALSYM D3DSIO_FRC}
  1629.   D3DSIO_M4x4         = 20;     // VS
  1630.   {$EXTERNALSYM D3DSIO_M4x4}
  1631.   D3DSIO_M4x3         = 21;     // VS
  1632.   {$EXTERNALSYM D3DSIO_M4x3}
  1633.   D3DSIO_M3x4         = 22;     // VS
  1634.   {$EXTERNALSYM D3DSIO_M3x4}
  1635.   D3DSIO_M3x3         = 23;     // VS
  1636.   {$EXTERNALSYM D3DSIO_M3x3}
  1637.   D3DSIO_M3x2         = 24;     // VS
  1638.   {$EXTERNALSYM D3DSIO_M3x2}
  1639.  
  1640.   D3DSIO_TEXCOORD     = 64;     // PS
  1641.   {$EXTERNALSYM D3DSIO_TEXCOORD}
  1642.   D3DSIO_TEXKILL      = 65;     // PS
  1643.   {$EXTERNALSYM D3DSIO_TEXKILL}
  1644.   D3DSIO_TEX          = 66;     // PS
  1645.   {$EXTERNALSYM D3DSIO_TEX}
  1646.   D3DSIO_TEXBEM       = 67;     // PS
  1647.   {$EXTERNALSYM D3DSIO_TEXBEM}
  1648.   D3DSIO_TEXBEML      = 68;     // PS
  1649.   {$EXTERNALSYM D3DSIO_TEXBEML}
  1650.   D3DSIO_TEXREG2AR    = 69;     // PS
  1651.   {$EXTERNALSYM D3DSIO_TEXREG2AR}
  1652.   D3DSIO_TEXREG2GB    = 70;     // PS
  1653.   {$EXTERNALSYM D3DSIO_TEXREG2GB}
  1654.   D3DSIO_TEXM3x2PAD   = 71;     // PS
  1655.   {$EXTERNALSYM D3DSIO_TEXM3x2PAD}
  1656.   D3DSIO_TEXM3x2TEX   = 72;     // PS
  1657.   {$EXTERNALSYM D3DSIO_TEXM3x2TEX}
  1658.   D3DSIO_TEXM3x3PAD   = 73;     // PS
  1659.   {$EXTERNALSYM D3DSIO_TEXM3x3PAD}
  1660.   D3DSIO_TEXM3x3TEX   = 74;     // PS
  1661.   {$EXTERNALSYM D3DSIO_TEXM3x3TEX}
  1662.   D3DSIO_TEXM3x3DIFF  = 75;     // PS
  1663.   {$EXTERNALSYM D3DSIO_TEXM3x3DIFF}
  1664.   D3DSIO_TEXM3x3SPEC  = 76;     // PS
  1665.   {$EXTERNALSYM D3DSIO_TEXM3x3SPEC}
  1666.   D3DSIO_TEXM3x3VSPEC = 77;     // PS
  1667.   {$EXTERNALSYM D3DSIO_TEXM3x3VSPEC}
  1668.   D3DSIO_EXPP         = 78;     // VS
  1669.   {$EXTERNALSYM D3DSIO_EXPP}
  1670.   D3DSIO_LOGP         = 79;     // VS
  1671.   {$EXTERNALSYM D3DSIO_LOGP}
  1672.   D3DSIO_CND          = 80;     // PS
  1673.   {$EXTERNALSYM D3DSIO_CND}
  1674.   D3DSIO_DEF          = 81;     // PS
  1675.   {$EXTERNALSYM D3DSIO_DEF}
  1676.   D3DSIO_TEXREG2RGB   = 82;     // PS
  1677.   {$EXTERNALSYM D3DSIO_TEXREG2RGB}
  1678.   D3DSIO_TEXDP3TEX    = 83;     // PS
  1679.   {$EXTERNALSYM D3DSIO_TEXDP3TEX}
  1680.   D3DSIO_TEXM3x2DEPTH = 84;     // PS
  1681.   {$EXTERNALSYM D3DSIO_TEXM3x2DEPTH}
  1682.   D3DSIO_TEXDP3       = 85;     // PS
  1683.   {$EXTERNALSYM D3DSIO_TEXDP3}
  1684.   D3DSIO_TEXM3x3      = 86;     // PS
  1685.   {$EXTERNALSYM D3DSIO_TEXM3x3}
  1686.   D3DSIO_TEXDEPTH     = 87;     // PS
  1687.   {$EXTERNALSYM D3DSIO_TEXDEPTH}
  1688.   D3DSIO_CMP          = 88;     // PS
  1689.   {$EXTERNALSYM D3DSIO_CMP}
  1690.   D3DSIO_BEM          = 89;     // PS
  1691.   {$EXTERNALSYM D3DSIO_BEM}
  1692.  
  1693.   D3DSIO_PHASE        = $FFFD;
  1694.   {$EXTERNALSYM D3DSIO_PHASE}
  1695.   D3DSIO_COMMENT      = $FFFE;
  1696.   {$EXTERNALSYM D3DSIO_COMMENT}
  1697.   D3DSIO_END          = $FFFF;
  1698.   {$EXTERNALSYM D3DSIO_END}
  1699.  
  1700.   //
  1701.   // Co-Issue Instruction Modifier - if set then this instruction is to be
  1702.   // issued in parallel with the previous instruction(s) for which this bit
  1703.   // is not set.
  1704.   //
  1705.   D3DSI_COISSUE           = $40000000;
  1706.   {$EXTERNALSYM D3DSI_COISSUE}
  1707.  
  1708.   //
  1709.   // Parameter Token Bit Definitions
  1710.   //
  1711.   D3DSP_REGNUM_MASK       = $00001FFF;
  1712.   {$EXTERNALSYM D3DSP_REGNUM_MASK}
  1713.  
  1714.   // destination parameter write mask
  1715.   D3DSP_WRITEMASK_0       = $00010000;  // Component 0 (X;Red)
  1716.   {$EXTERNALSYM D3DSP_WRITEMASK_0}
  1717.   D3DSP_WRITEMASK_1       = $00020000;  // Component 1 (Y;Green)
  1718.   {$EXTERNALSYM D3DSP_WRITEMASK_1}
  1719.   D3DSP_WRITEMASK_2       = $00040000;  // Component 2 (Z;Blue)
  1720.   {$EXTERNALSYM D3DSP_WRITEMASK_2}
  1721.   D3DSP_WRITEMASK_3       = $00080000;  // Component 3 (W;Alpha)
  1722.   {$EXTERNALSYM D3DSP_WRITEMASK_3}
  1723.   D3DSP_WRITEMASK_ALL     = $000F0000;  // All Components
  1724.   {$EXTERNALSYM D3DSP_WRITEMASK_ALL}
  1725.  
  1726.   // destination parameter modifiers
  1727.   D3DSP_DSTMOD_SHIFT      = 20;
  1728.   {$EXTERNALSYM D3DSP_DSTMOD_SHIFT}
  1729.   D3DSP_DSTMOD_MASK       = $00F00000;
  1730.   {$EXTERNALSYM D3DSP_DSTMOD_MASK}
  1731.  
  1732. type
  1733.   _D3DSHADER_PARAM_DSTMOD_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1734.   {$EXTERNALSYM _D3DSHADER_PARAM_DSTMOD_TYPE}
  1735.   D3DSHADER_PARAM_DSTMOD_TYPE = _D3DSHADER_PARAM_DSTMOD_TYPE;
  1736.   {$EXTERNALSYM D3DSHADER_PARAM_DSTMOD_TYPE}
  1737.   TD3DShaderParamDSTModType = _D3DSHADER_PARAM_DSTMOD_TYPE;
  1738.  
  1739. const
  1740.   D3DSPDM_NONE        = 0 shl D3DSP_DSTMOD_SHIFT; // nop
  1741.   {$EXTERNALSYM D3DSPDM_NONE}
  1742.   D3DSPDM_SATURATE    = 1 shl D3DSP_DSTMOD_SHIFT; // clamp to 0. to 1. range
  1743.   {$EXTERNALSYM D3DSPDM_SATURATE}
  1744.   D3DSPDM_FORCE_DWORD = $7fffffff;                // force 32-bit size enum
  1745.   {$EXTERNALSYM D3DSPDM_FORCE_DWORD}
  1746.  
  1747.   // destination parameter
  1748.   D3DSP_DSTSHIFT_SHIFT    = 24;
  1749.   {$EXTERNALSYM D3DSP_DSTSHIFT_SHIFT}
  1750.   D3DSP_DSTSHIFT_MASK     = $0F000000;
  1751.   {$EXTERNALSYM D3DSP_DSTSHIFT_MASK}
  1752.  
  1753.   // destination/source parameter register type
  1754.   D3DSP_REGTYPE_SHIFT     = 28;
  1755.   {$EXTERNALSYM D3DSP_REGTYPE_SHIFT}
  1756.   D3DSP_REGTYPE_MASK      = $70000000;
  1757.   {$EXTERNALSYM D3DSP_REGTYPE_MASK}
  1758.  
  1759. type
  1760.   _D3DSHADER_PARAM_REGISTER_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1761.   {$EXTERNALSYM _D3DSHADER_PARAM_REGISTER_TYPE}
  1762.   D3DSHADER_PARAM_REGISTER_TYPE = _D3DSHADER_PARAM_REGISTER_TYPE;
  1763.   {$EXTERNALSYM D3DSHADER_PARAM_REGISTER_TYPE}
  1764.   TD3DShaderParamRegisterType = _D3DSHADER_PARAM_REGISTER_TYPE;
  1765.  
  1766. const
  1767.   D3DSPR_TEMP        = 0 shl D3DSP_REGTYPE_SHIFT; // Temporary Register File
  1768.   {$EXTERNALSYM D3DSPR_TEMP}
  1769.   D3DSPR_INPUT       = 1 shl D3DSP_REGTYPE_SHIFT; // Input Register File
  1770.   {$EXTERNALSYM D3DSPR_INPUT}
  1771.   D3DSPR_CONST       = 2 shl D3DSP_REGTYPE_SHIFT; // Constant Register File
  1772.   {$EXTERNALSYM D3DSPR_CONST}
  1773.   D3DSPR_ADDR        = 3 shl D3DSP_REGTYPE_SHIFT; // Address Register (VS)
  1774.   {$EXTERNALSYM D3DSPR_ADDR}
  1775.   D3DSPR_TEXTURE     = 3 shl D3DSP_REGTYPE_SHIFT; // Texture Register File (PS)
  1776.   {$EXTERNALSYM D3DSPR_TEXTURE}
  1777.   D3DSPR_RASTOUT     = 4 shl D3DSP_REGTYPE_SHIFT; // Rasterizer Register File
  1778.   {$EXTERNALSYM D3DSPR_RASTOUT}
  1779.   D3DSPR_ATTROUT     = 5 shl D3DSP_REGTYPE_SHIFT; // Attribute Output Register File
  1780.   {$EXTERNALSYM D3DSPR_ATTROUT}
  1781.   D3DSPR_TEXCRDOUT   = 6 shl D3DSP_REGTYPE_SHIFT; // Texture Coordinate Output Register File
  1782.   {$EXTERNALSYM D3DSPR_TEXCRDOUT}
  1783.   D3DSPR_FORCE_DWORD = $7fffffff;                 // force 32-bit size enum
  1784.   {$EXTERNALSYM D3DSPR_FORCE_DWORD}
  1785.  
  1786.  
  1787. type
  1788.   // Register offsets in the Rasterizer Register File
  1789.   //
  1790.   _D3DVS_RASTOUT_OFFSETS = (
  1791.     D3DSRO_POSITION {= 0},
  1792.     D3DSRO_FOG,
  1793.     D3DSRO_POINT_SIZE
  1794.   );
  1795.   {$EXTERNALSYM _D3DVS_RASTOUT_OFFSETS}
  1796.   D3DVS_RASTOUT_OFFSETS = _D3DVS_RASTOUT_OFFSETS;
  1797.   {$EXTERNALSYM D3DVS_RASTOUT_OFFSETS}
  1798.   TD3DVSRastOutOffsets = _D3DVS_RASTOUT_OFFSETS;
  1799.  
  1800. // Source operand addressing modes
  1801.  
  1802. const
  1803.   D3DVS_ADDRESSMODE_SHIFT = 13;
  1804.   {$EXTERNALSYM D3DVS_ADDRESSMODE_SHIFT}
  1805.   D3DVS_ADDRESSMODE_MASK  = 1 shl D3DVS_ADDRESSMODE_SHIFT;
  1806.   {$EXTERNALSYM D3DVS_ADDRESSMODE_MASK}
  1807.  
  1808. type
  1809.   _D3DVS_ADDRESSMODE_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1810.   {$EXTERNALSYM _D3DVS_ADDRESSMODE_TYPE}
  1811.   D3DVS_ADDRESSMODE_TYPE = _D3DVS_ADDRESSMODE_TYPE;
  1812.   {$EXTERNALSYM D3DVS_ADDRESSMODE_TYPE}
  1813.   TD3DVSAddressModeType = _D3DVS_ADDRESSMODE_TYPE;
  1814.  
  1815. const
  1816.   D3DVS_ADDRMODE_ABSOLUTE    = 0 shl D3DVS_ADDRESSMODE_SHIFT;
  1817.   {$EXTERNALSYM D3DVS_ADDRMODE_ABSOLUTE}
  1818.   D3DVS_ADDRMODE_RELATIVE    = 1 shl D3DVS_ADDRESSMODE_SHIFT;  // Relative to register A0
  1819.   {$EXTERNALSYM D3DVS_ADDRMODE_RELATIVE}
  1820.   D3DVS_ADDRMODE_FORCE_DWORD = $7fffffff;                      // force 32-bit size enum
  1821.   {$EXTERNALSYM D3DVS_ADDRMODE_FORCE_DWORD}
  1822.  
  1823.   // Source operand swizzle definitions
  1824.   //
  1825.   D3DVS_SWIZZLE_SHIFT     = 16;
  1826.   {$EXTERNALSYM D3DVS_SWIZZLE_SHIFT}
  1827.   D3DVS_SWIZZLE_MASK      = $00FF0000;
  1828.   {$EXTERNALSYM D3DVS_SWIZZLE_MASK}
  1829.  
  1830.   // The following bits define where to take component X from:
  1831.  
  1832.   D3DVS_X_X = 0 shl D3DVS_SWIZZLE_SHIFT;
  1833.   {$EXTERNALSYM D3DVS_X_X}
  1834.   D3DVS_X_Y = 1 shl D3DVS_SWIZZLE_SHIFT;
  1835.   {$EXTERNALSYM D3DVS_X_Y}
  1836.   D3DVS_X_Z = 2 shl D3DVS_SWIZZLE_SHIFT;
  1837.   {$EXTERNALSYM D3DVS_X_Z}
  1838.   D3DVS_X_W = 3 shl D3DVS_SWIZZLE_SHIFT;
  1839.   {$EXTERNALSYM D3DVS_X_W}
  1840.  
  1841.   // The following bits define where to take component Y from:
  1842.  
  1843.   D3DVS_Y_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 2);
  1844.   {$EXTERNALSYM D3DVS_Y_X}
  1845.   D3DVS_Y_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 2);
  1846.   {$EXTERNALSYM D3DVS_Y_Y}
  1847.   D3DVS_Y_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 2);
  1848.   {$EXTERNALSYM D3DVS_Y_Z}
  1849.   D3DVS_Y_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 2);
  1850.   {$EXTERNALSYM D3DVS_Y_W}
  1851.  
  1852.   // The following bits define where to take component Z from:
  1853.  
  1854.   D3DVS_Z_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 4);
  1855.   {$EXTERNALSYM D3DVS_Z_X}
  1856.   D3DVS_Z_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 4);
  1857.   {$EXTERNALSYM D3DVS_Z_Y}
  1858.   D3DVS_Z_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 4);
  1859.   {$EXTERNALSYM D3DVS_Z_Z}
  1860.   D3DVS_Z_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 4);
  1861.   {$EXTERNALSYM D3DVS_Z_W}
  1862.  
  1863.   // The following bits define where to take component W from:
  1864.  
  1865.   D3DVS_W_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 6);
  1866.   {$EXTERNALSYM D3DVS_W_X}
  1867.   D3DVS_W_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 6);
  1868.   {$EXTERNALSYM D3DVS_W_Y}
  1869.   D3DVS_W_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 6);
  1870.   {$EXTERNALSYM D3DVS_W_Z}
  1871.   D3DVS_W_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 6);
  1872.   {$EXTERNALSYM D3DVS_W_W}
  1873.  
  1874.   // Value when there is no swizzle (X is taken from X, Y is taken from Y,
  1875.   // Z is taken from Z, W is taken from W
  1876.   //
  1877.   D3DVS_NOSWIZZLE = D3DVS_X_X or D3DVS_Y_Y or D3DVS_Z_Z or D3DVS_W_W;
  1878.   {$EXTERNALSYM D3DVS_NOSWIZZLE}
  1879.  
  1880.   // source parameter swizzle
  1881.   D3DSP_SWIZZLE_SHIFT = 16;
  1882.   {$EXTERNALSYM D3DSP_SWIZZLE_SHIFT}
  1883.   D3DSP_SWIZZLE_MASK  = $00FF0000;
  1884.   {$EXTERNALSYM D3DSP_SWIZZLE_MASK}
  1885.  
  1886.   D3DSP_NOSWIZZLE =
  1887.     (0 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  1888.     (1 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  1889.     (2 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  1890.     (3 shl (D3DSP_SWIZZLE_SHIFT + 6));
  1891.   {$EXTERNALSYM D3DSP_NOSWIZZLE}
  1892.  
  1893.   // pixel-shader swizzle ops
  1894.   D3DSP_REPLICATERED =
  1895.     (0 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  1896.     (0 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  1897.     (0 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  1898.     (0 shl (D3DSP_SWIZZLE_SHIFT + 6));
  1899.   {$EXTERNALSYM D3DSP_REPLICATERED}
  1900.  
  1901.   D3DSP_REPLICATEGREEN =
  1902.     (1 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  1903.     (1 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  1904.     (1 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  1905.     (1 shl (D3DSP_SWIZZLE_SHIFT + 6));
  1906.   {$EXTERNALSYM D3DSP_REPLICATEGREEN}
  1907.  
  1908.   D3DSP_REPLICATEBLUE =
  1909.     (2 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  1910.     (2 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  1911.     (2 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  1912.     (2 shl (D3DSP_SWIZZLE_SHIFT + 6));
  1913.   {$EXTERNALSYM D3DSP_REPLICATEBLUE}
  1914.  
  1915.   D3DSP_REPLICATEALPHA =
  1916.     (3 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  1917.     (3 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  1918.     (3 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  1919.     (3 shl (D3DSP_SWIZZLE_SHIFT + 6));
  1920.   {$EXTERNALSYM D3DSP_REPLICATEALPHA}
  1921.  
  1922.   // source parameter modifiers
  1923.   D3DSP_SRCMOD_SHIFT      = 24;
  1924.   {$EXTERNALSYM D3DSP_SRCMOD_SHIFT}
  1925.   D3DSP_SRCMOD_MASK       = $0F000000;
  1926.   {$EXTERNALSYM D3DSP_SRCMOD_MASK}
  1927.  
  1928. type
  1929.   _D3DSHADER_PARAM_SRCMOD_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1930.   {$EXTERNALSYM _D3DSHADER_PARAM_SRCMOD_TYPE}
  1931.   D3DSHADER_PARAM_SRCMOD_TYPE = _D3DSHADER_PARAM_SRCMOD_TYPE;
  1932.   {$EXTERNALSYM D3DSHADER_PARAM_SRCMOD_TYPE}
  1933.   TD3DShaderParamSRCModType = _D3DSHADER_PARAM_SRCMOD_TYPE;
  1934.  
  1935. const
  1936.   D3DSPSM_NONE        = 0 shl D3DSP_SRCMOD_SHIFT; // nop
  1937.   {$EXTERNALSYM D3DSPSM_NONE}
  1938.   D3DSPSM_NEG         = 1 shl D3DSP_SRCMOD_SHIFT; // negate
  1939.   {$EXTERNALSYM D3DSPSM_NEG}
  1940.   D3DSPSM_BIAS        = 2 shl D3DSP_SRCMOD_SHIFT; // bias
  1941.   {$EXTERNALSYM D3DSPSM_BIAS}
  1942.   D3DSPSM_BIASNEG     = 3 shl D3DSP_SRCMOD_SHIFT; // bias and negate
  1943.   {$EXTERNALSYM D3DSPSM_BIASNEG}
  1944.   D3DSPSM_SIGN        = 4 shl D3DSP_SRCMOD_SHIFT; // sign
  1945.   {$EXTERNALSYM D3DSPSM_SIGN}
  1946.   D3DSPSM_SIGNNEG     = 5 shl D3DSP_SRCMOD_SHIFT; // sign and negate
  1947.   {$EXTERNALSYM D3DSPSM_SIGNNEG}
  1948.   D3DSPSM_COMP        = 6 shl D3DSP_SRCMOD_SHIFT; // complement
  1949.   {$EXTERNALSYM D3DSPSM_COMP}
  1950.   D3DSPSM_X2          = 7 shl D3DSP_SRCMOD_SHIFT; // *2
  1951.   {$EXTERNALSYM D3DSPSM_X2}
  1952.   D3DSPSM_X2NEG       = 8 shl D3DSP_SRCMOD_SHIFT; // *2 and negate
  1953.   {$EXTERNALSYM D3DSPSM_X2NEG}
  1954.   D3DSPSM_DZ          = 9 shl D3DSP_SRCMOD_SHIFT; // divide through by z component
  1955.   {$EXTERNALSYM D3DSPSM_DZ}
  1956.   D3DSPSM_DW          = 10 shl D3DSP_SRCMOD_SHIFT; // divide through by w component
  1957.   {$EXTERNALSYM D3DSPSM_DW}
  1958.   D3DSPSM_FORCE_DWORD = $7fffffff;                // force 32-bit size enum
  1959.   {$EXTERNALSYM D3DSPSM_FORCE_DWORD}
  1960.  
  1961. // pixel shader version token
  1962. //#define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor))
  1963. function D3DPS_VERSION(_Major, _Minor: DWord): DWord;
  1964. {$EXTERNALSYM D3DPS_VERSION}
  1965.  
  1966. // vertex shader version token
  1967. //#define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor))
  1968. function D3DVS_VERSION(_Major, _Minor: DWord): DWord;
  1969. {$EXTERNALSYM D3DVS_VERSION}
  1970.  
  1971. // extract major/minor from version cap
  1972. //#define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)
  1973. function D3DSHADER_VERSION_MAJOR(_Version: DWord): DWord;
  1974. {$EXTERNALSYM D3DSHADER_VERSION_MAJOR}
  1975. //#define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)
  1976. function D3DSHADER_VERSION_MINOR(_Version: DWord): DWord;
  1977. {$EXTERNALSYM D3DSHADER_VERSION_MINOR}
  1978.  
  1979. const
  1980.   // destination/source parameter register type
  1981.   D3DSI_COMMENTSIZE_SHIFT = 16;
  1982.   {$EXTERNALSYM D3DSI_COMMENTSIZE_SHIFT}
  1983.   D3DSI_COMMENTSIZE_MASK  = $7FFF0000;
  1984.   {$EXTERNALSYM D3DSI_COMMENTSIZE_MASK}
  1985.  
  1986. //#define D3DSHADER_COMMENT(_DWordSize) \
  1987. //    ((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COMMENT)
  1988. function D3DSHADER_COMMENT(_DWordSize: DWord) : DWord;
  1989. {$EXTERNALSYM D3DSHADER_COMMENT}
  1990.  
  1991. const
  1992.   // pixel/vertex shader end token
  1993.   D3DPS_END  = $0000FFFF;
  1994.   {$EXTERNALSYM D3DPS_END}
  1995.   D3DVS_END  = $0000FFFF;
  1996.   {$EXTERNALSYM D3DVS_END}
  1997.  
  1998. //---------------------------------------------------------------------
  1999.  
  2000. type
  2001.   // High order surfaces
  2002.   //
  2003.   _D3DBASISTYPE = (
  2004.     D3DBASIS_BEZIER      {= 0},
  2005.     D3DBASIS_BSPLINE     {= 1},
  2006.     D3DBASIS_INTERPOLATE {= 2}
  2007.   );
  2008.   {$EXTERNALSYM _D3DBASISTYPE}
  2009.   D3DBASISTYPE = _D3DBASISTYPE;
  2010.   {$EXTERNALSYM D3DBASISTYPE}
  2011.   TD3DBasisType = _D3DBASISTYPE;
  2012.  
  2013.   _D3DORDERTYPE = (
  2014.   {$IFNDEF COMPILER6_UP}
  2015.     D3DORDER_invalid_0  {= 0},
  2016.     D3DORDER_LINEAR     {= 1},
  2017.     D3DORDER_QUADRATIC  {= 2},
  2018.     D3DORDER_CUBIC      {= 3},
  2019.     D3DORDER_invalid_4  {= 4},
  2020.     D3DORDER_QUINTIC    {= 5}
  2021.   {$ELSE}
  2022.     D3DORDER_LINEAR      = 1,
  2023.     D3DORDER_QUADRATIC   = 2,
  2024.     D3DORDER_CUBIC       = 3,
  2025.     D3DORDER_QUINTIC     = 5
  2026.   {$ENDIF}
  2027.   );
  2028.   {$EXTERNALSYM _D3DORDERTYPE}
  2029.   D3DORDERTYPE = _D3DORDERTYPE;
  2030.   {$EXTERNALSYM D3DORDERTYPE}
  2031.   TD3DOrderType = _D3DORDERTYPE;
  2032.  
  2033.   _D3DPATCHEDGESTYLE = (
  2034.     D3DPATCHEDGE_DISCRETE   {= 0},
  2035.     D3DPATCHEDGE_CONTINUOUS {= 1}
  2036.   );
  2037.   {$EXTERNALSYM _D3DPATCHEDGESTYLE}
  2038.   D3DPATCHEDGESTYLE = _D3DPATCHEDGESTYLE;
  2039.   {$EXTERNALSYM D3DPATCHEDGESTYLE}
  2040.   TD3DPatchEdgeStyle = _D3DPATCHEDGESTYLE;
  2041.  
  2042.   _D3DSTATEBLOCKTYPE = (
  2043.   {$IFNDEF COMPILER6_UP}
  2044.     D3DSBT_INVALID_0,
  2045.     D3DSBT_ALL          {= 1}, // capture all state
  2046.     D3DSBT_PIXELSTATE   {= 2}, // capture pixel state
  2047.     D3DSBT_VERTEXSTATE  {= 3}  // capture vertex state
  2048.   {$ELSE}
  2049.     D3DSBT_ALL          = 1, // capture all state
  2050.     D3DSBT_PIXELSTATE   = 2, // capture pixel state
  2051.     D3DSBT_VERTEXSTATE  = 3  // capture vertex state
  2052.   {$ENDIF}
  2053.   );
  2054.   {$EXTERNALSYM _D3DSTATEBLOCKTYPE}
  2055.   D3DSTATEBLOCKTYPE = _D3DSTATEBLOCKTYPE;
  2056.   {$EXTERNALSYM D3DSTATEBLOCKTYPE}
  2057.   TD3DStateBlockType = _D3DSTATEBLOCKTYPE;
  2058.  
  2059. type
  2060.   // The D3DVERTEXBLENDFLAGS type is used with D3DRS_VERTEXBLEND state.
  2061.   //
  2062.   _D3DVERTEXBLENDFLAGS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2063.   {$EXTERNALSYM _D3DVERTEXBLENDFLAGS}
  2064.   D3DVERTEXBLENDFLAGS = _D3DVERTEXBLENDFLAGS;
  2065.   {$EXTERNALSYM D3DVERTEXBLENDFLAGS}
  2066.   TD3DVertexBlendFlags = _D3DVERTEXBLENDFLAGS;
  2067.  
  2068. const
  2069.   D3DVBF_DISABLE  = 0;            // Disable vertex blending
  2070.   {$EXTERNALSYM D3DVBF_DISABLE}
  2071.   D3DVBF_1WEIGHTS = 1;            // 2 matrix blending
  2072.   {$EXTERNALSYM D3DVBF_1WEIGHTS}
  2073.   D3DVBF_2WEIGHTS = 2;            // 3 matrix blending
  2074.   {$EXTERNALSYM D3DVBF_2WEIGHTS}
  2075.   D3DVBF_3WEIGHTS = 3;            // 4 matrix blending
  2076.   {$EXTERNALSYM D3DVBF_3WEIGHTS}
  2077.   D3DVBF_TWEENING = 255;          // blending using D3DRS_TWEENFACTOR
  2078.   {$EXTERNALSYM D3DVBF_TWEENING}
  2079.   D3DVBF_0WEIGHTS = 256;          // one matrix is used with weight 1.0
  2080.   {$EXTERNALSYM D3DVBF_0WEIGHTS}
  2081.   D3DVBF_FORCE_DWORD = $7fffffff; // force 32-bit size enum
  2082.   {$EXTERNALSYM D3DVBF_FORCE_DWORD}
  2083.  
  2084. type
  2085.   _D3DTEXTURETRANSFORMFLAGS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2086.   {$EXTERNALSYM _D3DTEXTURETRANSFORMFLAGS}
  2087.   D3DTEXTURETRANSFORMFLAGS = _D3DTEXTURETRANSFORMFLAGS;
  2088.   {$EXTERNALSYM D3DTEXTURETRANSFORMFLAGS}
  2089.   TD3DTextureTransformFlags = _D3DTEXTURETRANSFORMFLAGS;
  2090.  
  2091. const
  2092.   D3DTTFF_DISABLE         = 0;    // texture coordinates are passed directly
  2093.   {$EXTERNALSYM D3DTTFF_DISABLE}
  2094.   D3DTTFF_COUNT1          = 1;    // rasterizer should expect 1-D texture coords
  2095.   {$EXTERNALSYM D3DTTFF_COUNT1}
  2096.   D3DTTFF_COUNT2          = 2;    // rasterizer should expect 2-D texture coords
  2097.   {$EXTERNALSYM D3DTTFF_COUNT2}
  2098.   D3DTTFF_COUNT3          = 3;    // rasterizer should expect 3-D texture coords
  2099.   {$EXTERNALSYM D3DTTFF_COUNT3}
  2100.   D3DTTFF_COUNT4          = 4;    // rasterizer should expect 4-D texture coords
  2101.   {$EXTERNALSYM D3DTTFF_COUNT4}
  2102.   D3DTTFF_PROJECTED       = 256;  // texcoords to be divided by COUNTth element
  2103.   {$EXTERNALSYM D3DTTFF_PROJECTED}
  2104.   D3DTTFF_FORCE_DWORD     = $7fffffff;
  2105.   {$EXTERNALSYM D3DTTFF_FORCE_DWORD}
  2106.  
  2107. const
  2108.   // Macros to set texture coordinate format bits in the FVF id
  2109.  
  2110.   D3DFVF_TEXTUREFORMAT2 = 0;         // Two floating point values
  2111.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT2}
  2112.   D3DFVF_TEXTUREFORMAT1 = 3;         // One floating point value
  2113.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT1}
  2114.   D3DFVF_TEXTUREFORMAT3 = 1;         // Three floating point values
  2115.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT3}
  2116.   D3DFVF_TEXTUREFORMAT4 = 2;         // Four floating point values
  2117.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT4}
  2118.  
  2119. //#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
  2120. function D3DFVF_TEXCOORDSIZE3(CoordIndex: DWord): DWord;
  2121. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE3}
  2122. //#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
  2123. function D3DFVF_TEXCOORDSIZE2(CoordIndex: DWord): DWord;
  2124. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE2}
  2125. //#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
  2126. function D3DFVF_TEXCOORDSIZE4(CoordIndex: DWord): DWord;
  2127. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE4}
  2128. //#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
  2129. function D3DFVF_TEXCOORDSIZE1(CoordIndex: DWord): DWord;
  2130. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE1}
  2131.  
  2132.  
  2133. //---------------------------------------------------------------------
  2134.  
  2135. type
  2136.   { Direct3D8 Device types }
  2137.   _D3DDEVTYPE = (
  2138.   {$IFNDEF COMPILER6_UP}
  2139.     D3DDEVTYPE_INVALID_0,
  2140.     D3DDEVTYPE_HAL         {= 1},
  2141.     D3DDEVTYPE_REF         {= 2},
  2142.     D3DDEVTYPE_SW          {= 3}
  2143.   {$ELSE}
  2144.     D3DDEVTYPE_HAL         = 1,
  2145.     D3DDEVTYPE_REF         = 2,
  2146.     D3DDEVTYPE_SW          = 3
  2147.   {$ENDIF}
  2148.   );
  2149.   {$EXTERNALSYM _D3DDEVTYPE}
  2150.   D3DDEVTYPE = _D3DDEVTYPE;
  2151.   {$EXTERNALSYM D3DDEVTYPE}
  2152.   TD3DDevType = _D3DDEVTYPE;
  2153.  
  2154.   { Multi-Sample buffer types }
  2155.   _D3DMULTISAMPLE_TYPE = (
  2156.   {$IFNDEF COMPILER6_UP}
  2157.     D3DMULTISAMPLE_NONE            {=  0},
  2158.     D3DMULTISAMPLE_INVALID_1       {=  1},
  2159.     D3DMULTISAMPLE_2_SAMPLES       {=  2},
  2160.     D3DMULTISAMPLE_3_SAMPLES       {=  3},
  2161.     D3DMULTISAMPLE_4_SAMPLES       {=  4},
  2162.     D3DMULTISAMPLE_5_SAMPLES       {=  5},
  2163.     D3DMULTISAMPLE_6_SAMPLES       {=  6},
  2164.     D3DMULTISAMPLE_7_SAMPLES       {=  7},
  2165.     D3DMULTISAMPLE_8_SAMPLES       {=  8},
  2166.     D3DMULTISAMPLE_9_SAMPLES       {=  9},
  2167.     D3DMULTISAMPLE_10_SAMPLES      {= 10},
  2168.     D3DMULTISAMPLE_11_SAMPLES      {= 11},
  2169.     D3DMULTISAMPLE_12_SAMPLES      {= 12},
  2170.     D3DMULTISAMPLE_13_SAMPLES      {= 13},
  2171.     D3DMULTISAMPLE_14_SAMPLES      {= 14},
  2172.     D3DMULTISAMPLE_15_SAMPLES      {= 15},
  2173.     D3DMULTISAMPLE_16_SAMPLES      {= 16}
  2174.   {$ELSE}
  2175.     D3DMULTISAMPLE_NONE            =  0,
  2176.     D3DMULTISAMPLE_2_SAMPLES       =  2,
  2177.     D3DMULTISAMPLE_3_SAMPLES       =  3,
  2178.     D3DMULTISAMPLE_4_SAMPLES       =  4,
  2179.     D3DMULTISAMPLE_5_SAMPLES       =  5,
  2180.     D3DMULTISAMPLE_6_SAMPLES       =  6,
  2181.     D3DMULTISAMPLE_7_SAMPLES       =  7,
  2182.     D3DMULTISAMPLE_8_SAMPLES       =  8,
  2183.     D3DMULTISAMPLE_9_SAMPLES       =  9,
  2184.     D3DMULTISAMPLE_10_SAMPLES      = 10,
  2185.     D3DMULTISAMPLE_11_SAMPLES      = 11,
  2186.     D3DMULTISAMPLE_12_SAMPLES      = 12,
  2187.     D3DMULTISAMPLE_13_SAMPLES      = 13,
  2188.     D3DMULTISAMPLE_14_SAMPLES      = 14,
  2189.     D3DMULTISAMPLE_15_SAMPLES      = 15,
  2190.     D3DMULTISAMPLE_16_SAMPLES      = 16
  2191.   {$ENDIF}
  2192.   );
  2193.   {$EXTERNALSYM _D3DMULTISAMPLE_TYPE}
  2194.   D3DMULTISAMPLE_TYPE = _D3DMULTISAMPLE_TYPE;
  2195.   {$EXTERNALSYM D3DMULTISAMPLE_TYPE}
  2196.   TD3DMultiSampleType = _D3DMULTISAMPLE_TYPE;
  2197.  
  2198. (* Formats
  2199.  * Most of these names have the following convention:
  2200.  *      A = Alpha
  2201.  *      R = Red
  2202.  *      G = Green
  2203.  *      B = Blue
  2204.  *      X = Unused Bits
  2205.  *      P = Palette
  2206.  *      L = Luminance
  2207.  *      U = dU coordinate for BumpMap
  2208.  *      V = dV coordinate for BumpMap
  2209.  *      S = Stencil
  2210.  *      D = Depth (e.g. Z or W buffer)
  2211.  *
  2212.  *      Further, the order of the pieces are from MSB first; hence
  2213.  *      D3DFMT_A8L8 indicates that the high byte of this two byte
  2214.  *      format is alpha.
  2215.  *
  2216.  *      D16 indicates:
  2217.  *           - An integer 16-bit value.
  2218.  *           - An app-lockable surface.
  2219.  *
  2220.  *      All Depth/Stencil formats except D3DFMT_D16_LOCKABLE indicate:
  2221.  *          - no particular bit ordering per pixel, and
  2222.  *          - are not app lockable, and
  2223.  *          - the driver is allowed to consume more than the indicated
  2224.  *            number of bits per Depth channel (but not Stencil channel).
  2225.  *)
  2226. //#ifndef MAKEFOURCC
  2227. //    #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
  2228. //                ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |       \
  2229. //                ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
  2230. //#endif /* defined(MAKEFOURCC) */
  2231. function MAKEFOURCC(ch0, ch1, ch2, ch3: Char): DWord;
  2232. {$EXTERNALSYM MAKEFOURCC}
  2233.  
  2234.  
  2235. {$IFNDEF COMPILER6_UP}
  2236. const
  2237.   D3DFMT_UNKNOWN              =  0;
  2238.   {$EXTERNALSYM D3DFMT_UNKNOWN}
  2239.  
  2240.   D3DFMT_R8G8B8               = 20;
  2241.   {$EXTERNALSYM D3DFMT_R8G8B8}
  2242.   D3DFMT_A8R8G8B8             = 21;
  2243.   {$EXTERNALSYM D3DFMT_A8R8G8B8}
  2244.   D3DFMT_X8R8G8B8             = 22;
  2245.   {$EXTERNALSYM D3DFMT_X8R8G8B8}
  2246.   D3DFMT_R5G6B5               = 23;
  2247.   {$EXTERNALSYM D3DFMT_R5G6B5}
  2248.   D3DFMT_X1R5G5B5             = 24;
  2249.   {$EXTERNALSYM D3DFMT_X1R5G5B5}
  2250.   D3DFMT_A1R5G5B5             = 25;
  2251.   {$EXTERNALSYM D3DFMT_A1R5G5B5}
  2252.   D3DFMT_A4R4G4B4             = 26;
  2253.   {$EXTERNALSYM D3DFMT_A4R4G4B4}
  2254.   D3DFMT_R3G3B2               = 27;
  2255.   {$EXTERNALSYM D3DFMT_R3G3B2}
  2256.   D3DFMT_A8                   = 28;
  2257.   {$EXTERNALSYM D3DFMT_A8}
  2258.   D3DFMT_A8R3G3B2             = 29;
  2259.   {$EXTERNALSYM D3DFMT_A8R3G3B2}
  2260.   D3DFMT_X4R4G4B4             = 30;
  2261.   {$EXTERNALSYM D3DFMT_X4R4G4B4}
  2262.   D3DFMT_A2B10G10R10          = 31;
  2263.   {$EXTERNALSYM D3DFMT_A2B10G10R10}
  2264.   D3DFMT_G16R16               = 34;
  2265.   {$EXTERNALSYM D3DFMT_G16R16}
  2266.  
  2267.   D3DFMT_A8P8                 = 40;
  2268.   {$EXTERNALSYM D3DFMT_A8P8}
  2269.   D3DFMT_P8                   = 41;
  2270.   {$EXTERNALSYM D3DFMT_P8}
  2271.  
  2272.   D3DFMT_L8                   = 50;
  2273.   {$EXTERNALSYM D3DFMT_L8}
  2274.   D3DFMT_A8L8                 = 51;
  2275.   {$EXTERNALSYM D3DFMT_A8L8}
  2276.   D3DFMT_A4L4                 = 52;
  2277.   {$EXTERNALSYM D3DFMT_A4L4}
  2278.  
  2279.   D3DFMT_V8U8                 = 60;
  2280.   {$EXTERNALSYM D3DFMT_V8U8}
  2281.   D3DFMT_L6V5U5               = 61;
  2282.   {$EXTERNALSYM D3DFMT_L6V5U5}
  2283.   D3DFMT_X8L8V8U8             = 62;
  2284.   {$EXTERNALSYM D3DFMT_X8L8V8U8}
  2285.   D3DFMT_Q8W8V8U8             = 63;
  2286.   {$EXTERNALSYM D3DFMT_Q8W8V8U8}
  2287.   D3DFMT_V16U16               = 64;
  2288.   {$EXTERNALSYM D3DFMT_V16U16}
  2289.   D3DFMT_W11V11U10            = 65;
  2290.   {$EXTERNALSYM D3DFMT_W11V11U10}
  2291.   D3DFMT_A2W10V10U10          = 67;
  2292.   {$EXTERNALSYM D3DFMT_A2W10V10U10}
  2293.  
  2294.   // D3DFMT_UYVY                 = MAKEFOURCC('U', 'Y', 'V', 'Y');
  2295.   D3DFMT_UYVY                 = Byte('U') or (Byte('Y') shl 8) or (Byte('V') shl 16) or (Byte('Y') shl 24);
  2296.   {$EXTERNALSYM D3DFMT_UYVY}
  2297.   // D3DFMT_YUY2                 = MAKEFOURCC('Y', 'U', 'Y', '2'),
  2298.   D3DFMT_YUY2                 = Byte('Y') or (Byte('U') shl 8) or (Byte('Y') shl 16) or (Byte('2') shl 24);
  2299.   {$EXTERNALSYM D3DFMT_YUY2}
  2300.   // D3DFMT_DXT1                 = MAKEFOURCC('D', 'X', 'T', '1'),
  2301.   D3DFMT_DXT1                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('1') shl 24);
  2302.   {$EXTERNALSYM D3DFMT_DXT1}
  2303.   // D3DFMT_DXT2                 = MAKEFOURCC('D', 'X', 'T', '2'),
  2304.   D3DFMT_DXT2                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('2') shl 24);
  2305.   {$EXTERNALSYM D3DFMT_DXT2}
  2306.   // D3DFMT_DXT3                 = MAKEFOURCC('D', 'X', 'T', '3'),
  2307.   D3DFMT_DXT3                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('3') shl 24);
  2308.   {$EXTERNALSYM D3DFMT_DXT3}
  2309.   // D3DFMT_DXT4                 = MAKEFOURCC('D', 'X', 'T', '4'),
  2310.   D3DFMT_DXT4                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('4') shl 24);
  2311.   {$EXTERNALSYM D3DFMT_DXT4}
  2312.   // D3DFMT_DXT5                 = MAKEFOURCC('D', 'X', 'T', '5'),
  2313.   D3DFMT_DXT5                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('5') shl 24);
  2314.   {$EXTERNALSYM D3DFMT_DXT5}
  2315.  
  2316.   D3DFMT_D16_LOCKABLE         = 70;
  2317.   {$EXTERNALSYM D3DFMT_D16_LOCKABLE}
  2318.   D3DFMT_D32                  = 71;
  2319.   {$EXTERNALSYM D3DFMT_D32}
  2320.   D3DFMT_D15S1                = 73;
  2321.   {$EXTERNALSYM D3DFMT_D15S1}
  2322.   D3DFMT_D24S8                = 75;
  2323.   {$EXTERNALSYM D3DFMT_D24S8}
  2324.   D3DFMT_D16                  = 80;
  2325.   {$EXTERNALSYM D3DFMT_D16}
  2326.   D3DFMT_D24X8                = 77;
  2327.   {$EXTERNALSYM D3DFMT_D24X8}
  2328.   D3DFMT_D24X4S4              = 79;
  2329.   {$EXTERNALSYM D3DFMT_D24X4S4}
  2330.  
  2331.  
  2332.   D3DFMT_VERTEXDATA           =100;
  2333.   {$EXTERNALSYM D3DFMT_VERTEXDATA}
  2334.   D3DFMT_INDEX16              =101;
  2335.   {$EXTERNALSYM D3DFMT_INDEX16}
  2336.   D3DFMT_INDEX32              =102;
  2337.   {$EXTERNALSYM D3DFMT_INDEX32}
  2338.  
  2339.   D3DFMT_FORCE_DWORD          = $7fffffff;
  2340.   {$EXTERNALSYM D3DFMT_FORCE_DWORD}
  2341.  
  2342. type
  2343.   _D3DFORMAT = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2344. {$ELSE}
  2345. type
  2346.   _D3DFORMAT = (
  2347.   {$IFDEF BCB}
  2348.     D3DFMT_DUMMY
  2349.   {$ELSE}
  2350.     D3DFMT_UNKNOWN              =  0,
  2351.  
  2352.     D3DFMT_R8G8B8               = 20,
  2353.     D3DFMT_A8R8G8B8             = 21,
  2354.     D3DFMT_X8R8G8B8             = 22,
  2355.     D3DFMT_R5G6B5               = 23,
  2356.     D3DFMT_X1R5G5B5             = 24,
  2357.     D3DFMT_A1R5G5B5             = 25,
  2358.     D3DFMT_A4R4G4B4             = 26,
  2359.     D3DFMT_R3G3B2               = 27,
  2360.     D3DFMT_A8                   = 28,
  2361.     D3DFMT_A8R3G3B2             = 29,
  2362.     D3DFMT_X4R4G4B4             = 30,
  2363.     D3DFMT_A2B10G10R10          = 31,
  2364.     D3DFMT_G16R16               = 34,
  2365.  
  2366.     D3DFMT_A8P8                 = 40,
  2367.     D3DFMT_P8                   = 41,
  2368.  
  2369.     D3DFMT_L8                   = 50,
  2370.     D3DFMT_A8L8                 = 51,
  2371.     D3DFMT_A4L4                 = 52,
  2372.  
  2373.     D3DFMT_V8U8                 = 60,
  2374.     D3DFMT_L6V5U5               = 61,
  2375.     D3DFMT_X8L8V8U8             = 62,
  2376.     D3DFMT_Q8W8V8U8             = 63,
  2377.     D3DFMT_V16U16               = 64,
  2378.     D3DFMT_W11V11U10            = 65,
  2379.     D3DFMT_A2W10V10U10          = 67,
  2380.  
  2381.     // D3DFMT_UYVY                 = MAKEFOURCC('U', 'Y', 'V', 'Y'),
  2382.     D3DFMT_UYVY                 = Byte('U') or (Byte('Y') shl 8) or (Byte('V') shl 16) or (Byte('Y') shl 24),
  2383.     // D3DFMT_YUY2                 = MAKEFOURCC('Y', 'U', 'Y', '2'),
  2384.     D3DFMT_YUY2                 = Byte('Y') or (Byte('U') shl 8) or (Byte('Y') shl 16) or (Byte('2') shl 24),
  2385.     // D3DFMT_DXT1                 = MAKEFOURCC('D', 'X', 'T', '1'),
  2386.     D3DFMT_DXT1                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('1') shl 24),
  2387.     // D3DFMT_DXT2                 = MAKEFOURCC('D', 'X', 'T', '2'),
  2388.     D3DFMT_DXT2                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('2') shl 24),
  2389.     // D3DFMT_DXT3                 = MAKEFOURCC('D', 'X', 'T', '3'),
  2390.     D3DFMT_DXT3                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('3') shl 24),
  2391.     // D3DFMT_DXT4                 = MAKEFOURCC('D', 'X', 'T', '4'),
  2392.     D3DFMT_DXT4                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('4') shl 24),
  2393.     // D3DFMT_DXT5                 = MAKEFOURCC('D', 'X', 'T', '5'),
  2394.     D3DFMT_DXT5                 = Byte('D') or (Byte('X') shl 8) or (Byte('T') shl 16) or (Byte('5') shl 24),
  2395.  
  2396.     D3DFMT_D16_LOCKABLE         = 70,
  2397.     D3DFMT_D32                  = 71,
  2398.     D3DFMT_D15S1                = 73,
  2399.     D3DFMT_D24S8                = 75,
  2400.     D3DFMT_D16                  = 80,
  2401.     D3DFMT_D24X8                = 77,
  2402.     D3DFMT_D24X4S4              = 79,
  2403.  
  2404.  
  2405.     D3DFMT_VERTEXDATA           =100,
  2406.     D3DFMT_INDEX16              =101,
  2407.     D3DFMT_INDEX32              =102,
  2408.  
  2409.     D3DFMT_FORCE_DWORD          = $7fffffff
  2410.   {$ENDIF}
  2411.   );
  2412. {$ENDIF}
  2413.   {$EXTERNALSYM _D3DFORMAT}
  2414.   D3DFORMAT = _D3DFORMAT;
  2415.   {$EXTERNALSYM D3DFORMAT}
  2416.   PD3DFormat = ^TD3DFormat;
  2417.   TD3DFormat = _D3DFORMAT;
  2418.  
  2419.   { Display Modes }
  2420.   PD3DDisplayMode = ^TD3DDisplayMode;
  2421.   _D3DDISPLAYMODE = packed record
  2422.     Width: LongWord;
  2423.     Height: LongWord;
  2424.     RefreshRate: LongWord;
  2425.     Format: TD3DFormat;
  2426.   end {_D3DDISPLAYMODE};
  2427.   {$EXTERNALSYM _D3DDISPLAYMODE}
  2428.   D3DDISPLAYMODE = _D3DDISPLAYMODE;
  2429.   {$EXTERNALSYM D3DDISPLAYMODE}
  2430.   TD3DDisplayMode = _D3DDISPLAYMODE;
  2431.  
  2432.   { Creation Parameters }
  2433.   PD3DDeviceCreationParameters = ^TD3DDeviceCreationParameters;
  2434.   _D3DDEVICE_CREATION_PARAMETERS = packed record
  2435.     AdapterOrdinal: LongWord;
  2436.     DeviceType: TD3DDevType;
  2437.     hFocusWindow: HWND;
  2438.     BehaviorFlags: LongInt;
  2439.   end {_D3DDEVICE_CREATION_PARAMETERS};
  2440.   {$EXTERNALSYM _D3DDEVICE_CREATION_PARAMETERS}
  2441.   D3DDEVICE_CREATION_PARAMETERS = _D3DDEVICE_CREATION_PARAMETERS;
  2442.   {$EXTERNALSYM D3DDEVICE_CREATION_PARAMETERS}
  2443.   TD3DDeviceCreationParameters = _D3DDEVICE_CREATION_PARAMETERS;
  2444.  
  2445.  
  2446.   { SwapEffects }
  2447.   _D3DSWAPEFFECT = (
  2448.   {$IFNDEF COMPILER6_UP}
  2449.     D3DSWAPEFFECT_INVALID_0     {= 0},
  2450.     D3DSWAPEFFECT_DISCARD       {= 1},
  2451.     D3DSWAPEFFECT_FLIP          {= 2},
  2452.     D3DSWAPEFFECT_COPY          {= 3},
  2453.     D3DSWAPEFFECT_COPY_VSYNC    {= 4}
  2454.   {$ELSE}
  2455.     D3DSWAPEFFECT_DISCARD       = 1,
  2456.     D3DSWAPEFFECT_FLIP          = 2,
  2457.     D3DSWAPEFFECT_COPY          = 3,
  2458.     D3DSWAPEFFECT_COPY_VSYNC    = 4
  2459.   {$ENDIF}
  2460.   );
  2461.   {$EXTERNALSYM _D3DSWAPEFFECT}
  2462.   D3DSWAPEFFECT = _D3DSWAPEFFECT;
  2463.   {$EXTERNALSYM D3DSWAPEFFECT}
  2464.   TD3DSwapEffect = _D3DSWAPEFFECT;
  2465.  
  2466.   { Pool types }
  2467.   _D3DPOOL = (
  2468.     D3DPOOL_DEFAULT     {= 0},
  2469.     D3DPOOL_MANAGED     {= 1},
  2470.     D3DPOOL_SYSTEMMEM   {= 2},
  2471.     D3DPOOL_SCRATCH     {= 3}
  2472.   );
  2473.   {$EXTERNALSYM _D3DPOOL}
  2474.   D3DPOOL = _D3DPOOL;
  2475.   {$EXTERNALSYM D3DPOOL}
  2476.   TD3DPool = _D3DPOOL;
  2477.  
  2478.  
  2479. const
  2480.   { RefreshRate pre-defines }
  2481.   D3DPRESENT_RATE_DEFAULT         = $00000000;
  2482.   {$EXTERNALSYM D3DPRESENT_RATE_DEFAULT}
  2483.   D3DPRESENT_RATE_UNLIMITED       = $7fffffff;
  2484.   {$EXTERNALSYM D3DPRESENT_RATE_UNLIMITED}
  2485.  
  2486. type
  2487.   { Resize Optional Parameters }
  2488.   PD3DPresentParameters = ^TD3DPresentParameters;
  2489.   _D3DPRESENT_PARAMETERS_ = packed record
  2490.     BackBufferWidth:                    LongWord;
  2491.     BackBufferHeight:                   LongWord;
  2492.     BackBufferFormat:                   TD3DFormat;
  2493.     BackBufferCount:                    LongWord;
  2494.  
  2495.     MultiSampleType:                    TD3DMultiSampleType;
  2496.  
  2497.     SwapEffect:                         TD3DSwapEffect;
  2498.     hDeviceWindow:                      HWND;
  2499.     Windowed:                           Bool;
  2500.     EnableAutoDepthStencil:             Bool;
  2501.     AutoDepthStencilFormat:             TD3DFormat;
  2502.     Flags: LongInt;
  2503.  
  2504.     { Following elements must be zero for Windowed mode }
  2505.     FullScreen_RefreshRateInHz:         LongWord;
  2506.     FullScreen_PresentationInterval:    LongWord;
  2507.   end {_D3DPRESENT_PARAMETERS_};
  2508.   {$EXTERNALSYM _D3DPRESENT_PARAMETERS_}
  2509.   D3DPRESENT_PARAMETERS = _D3DPRESENT_PARAMETERS_;
  2510.   {$EXTERNALSYM D3DPRESENT_PARAMETERS}
  2511.   TD3DPresentParameters = _D3DPRESENT_PARAMETERS_;
  2512.  
  2513.   // Values for D3DPRESENT_PARAMETERS.Flags
  2514.  
  2515. const
  2516.   D3DPRESENTFLAG_LOCKABLE_BACKBUFFER  = $00000001;
  2517.   {$EXTERNALSYM D3DPRESENTFLAG_LOCKABLE_BACKBUFFER}
  2518.  
  2519.  
  2520.   { Gamma Ramp: Same as DX7 }
  2521.  
  2522. type
  2523.   PD3DGammaRamp = ^TD3DGammaRamp;
  2524.   _D3DGAMMARAMP = packed record
  2525.     red   : array [0..255] of Word;
  2526.     green : array [0..255] of Word;
  2527.     blue  : array [0..255] of Word;
  2528.   end;
  2529.   {$EXTERNALSYM _D3DGAMMARAMP}
  2530.   D3DGAMMARAMP = _D3DGAMMARAMP;
  2531.   {$EXTERNALSYM D3DGAMMARAMP}
  2532.   TD3DGammaRamp = _D3DGAMMARAMP;
  2533.  
  2534.   { Back buffer types }
  2535.   _D3DBACKBUFFER_TYPE = (
  2536.     D3DBACKBUFFER_TYPE_MONO         {= 0},
  2537.     D3DBACKBUFFER_TYPE_LEFT         {= 1},
  2538.     D3DBACKBUFFER_TYPE_RIGHT        {= 2}
  2539.   );
  2540.   {$EXTERNALSYM _D3DBACKBUFFER_TYPE}
  2541.   D3DBACKBUFFER_TYPE = _D3DBACKBUFFER_TYPE;
  2542.   {$EXTERNALSYM D3DBACKBUFFER_TYPE}
  2543.   TD3DBackbufferType = _D3DBACKBUFFER_TYPE;
  2544.  
  2545.  
  2546.   { Types }
  2547.   _D3DRESOURCETYPE = (
  2548.   {$IFNDEF COMPILER6_UP}
  2549.     D3DRTYPE_INVALID_0              {=  0},
  2550.     D3DRTYPE_SURFACE                {=  1},
  2551.     D3DRTYPE_VOLUME                 {=  2},
  2552.     D3DRTYPE_TEXTURE                {=  3},
  2553.     D3DRTYPE_VOLUMETEXTURE          {=  4},
  2554.     D3DRTYPE_CUBETEXTURE            {=  5},
  2555.     D3DRTYPE_VERTEXBUFFER           {=  6},
  2556.     D3DRTYPE_INDEXBUFFER            {=  7}
  2557.   {$ELSE}
  2558.     D3DRTYPE_SURFACE                =  1,
  2559.     D3DRTYPE_VOLUME                 =  2,
  2560.     D3DRTYPE_TEXTURE                =  3,
  2561.     D3DRTYPE_VOLUMETEXTURE          =  4,
  2562.     D3DRTYPE_CUBETEXTURE            =  5,
  2563.     D3DRTYPE_VERTEXBUFFER           =  6,
  2564.     D3DRTYPE_INDEXBUFFER            =  7
  2565.   {$ENDIF}
  2566.   );
  2567.   {$EXTERNALSYM _D3DRESOURCETYPE}
  2568.   D3DRESOURCETYPE = _D3DRESOURCETYPE;
  2569.   {$EXTERNALSYM D3DRESOURCETYPE}
  2570.   TD3DResourceType = _D3DRESOURCETYPE;
  2571.  
  2572. const
  2573.   { Usages }
  2574.   D3DUSAGE_RENDERTARGET       = $00000001;
  2575.   {$EXTERNALSYM D3DUSAGE_RENDERTARGET}
  2576.   D3DUSAGE_DEPTHSTENCIL       = $00000002;
  2577.   {$EXTERNALSYM D3DUSAGE_DEPTHSTENCIL}
  2578.  
  2579.   { Usages for Vertex/Index buffers }
  2580.   D3DUSAGE_WRITEONLY          = $00000008;
  2581.   {$EXTERNALSYM D3DUSAGE_WRITEONLY}
  2582.   D3DUSAGE_SOFTWAREPROCESSING = $00000010;
  2583.   {$EXTERNALSYM D3DUSAGE_SOFTWAREPROCESSING}
  2584.   D3DUSAGE_DONOTCLIP          = $00000020;
  2585.   {$EXTERNALSYM D3DUSAGE_DONOTCLIP}
  2586.   D3DUSAGE_POINTS             = $00000040;
  2587.   {$EXTERNALSYM D3DUSAGE_POINTS}
  2588.   D3DUSAGE_RTPATCHES          = $00000080;
  2589.   {$EXTERNALSYM D3DUSAGE_RTPATCHES}
  2590.   D3DUSAGE_NPATCHES           = $00000100;
  2591.   {$EXTERNALSYM D3DUSAGE_NPATCHES}
  2592.   D3DUSAGE_DYNAMIC            = $00000200;
  2593.   {$EXTERNALSYM D3DUSAGE_DYNAMIC}
  2594.  
  2595.  
  2596.  
  2597.  
  2598.  
  2599.  
  2600.  
  2601.  
  2602.  
  2603. type
  2604.   { CubeMap Face identifiers }
  2605.   _D3DCUBEMAP_FACES = (
  2606.     D3DCUBEMAP_FACE_POSITIVE_X     {= 0},
  2607.     D3DCUBEMAP_FACE_NEGATIVE_X     {= 1},
  2608.     D3DCUBEMAP_FACE_POSITIVE_Y     {= 2},
  2609.     D3DCUBEMAP_FACE_NEGATIVE_Y     {= 3},
  2610.     D3DCUBEMAP_FACE_POSITIVE_Z     {= 4},
  2611.     D3DCUBEMAP_FACE_NEGATIVE_Z     {= 5}
  2612.   );
  2613.   {$EXTERNALSYM _D3DCUBEMAP_FACES}
  2614.   D3DCUBEMAP_FACES = _D3DCUBEMAP_FACES;
  2615.   {$EXTERNALSYM D3DCUBEMAP_FACES}
  2616.   TD3DCubemapFaces = _D3DCUBEMAP_FACES;
  2617.  
  2618.  
  2619. const
  2620.   { Lock flags }
  2621.   D3DLOCK_READONLY         = $00000010;
  2622.   {$EXTERNALSYM D3DLOCK_READONLY}
  2623.   D3DLOCK_DISCARD          = $00002000;
  2624.   {$EXTERNALSYM D3DLOCK_DISCARD}
  2625.   D3DLOCK_NOOVERWRITE      = $00001000;
  2626.   {$EXTERNALSYM D3DLOCK_NOOVERWRITE}
  2627.   D3DLOCK_NOSYSLOCK        = $00000800;
  2628.   {$EXTERNALSYM D3DLOCK_NOSYSLOCK}
  2629.  
  2630.   D3DLOCK_NO_DIRTY_UPDATE  = $00008000;
  2631.   {$EXTERNALSYM D3DLOCK_NO_DIRTY_UPDATE}
  2632.  
  2633.  
  2634.  
  2635.  
  2636.  
  2637.  
  2638. type
  2639.   { Vertex Buffer Description }
  2640.   PD3DVertexBufferDesc = ^TD3DVertexBufferDesc;
  2641.   _D3DVERTEXBUFFER_DESC = packed record
  2642.     Format : TD3DFormat;
  2643.     _Type  : TD3DResourceType;
  2644.     Usage  : DWord;
  2645.     Pool   : TD3DPool;
  2646.     Size   : LongWord;
  2647.  
  2648.     FVF    : DWord;
  2649.   end;
  2650.   {$EXTERNALSYM _D3DVERTEXBUFFER_DESC}
  2651.   D3DVERTEXBUFFER_DESC = _D3DVERTEXBUFFER_DESC;
  2652.   {$EXTERNALSYM D3DVERTEXBUFFER_DESC}
  2653.   TD3DVertexBufferDesc = _D3DVERTEXBUFFER_DESC;
  2654.  
  2655.   { Index Buffer Description }
  2656.   PD3DIndexBufferDesc = ^TD3DIndexBufferDesc;
  2657.   _D3DINDEXBUFFER_DESC = packed record
  2658.     Format : TD3DFormat;
  2659.     _Type  : TD3DResourceType;
  2660.     Usage  : DWord;
  2661.     Pool   : TD3DPool;
  2662.     Size   : LongWord;
  2663.   end {_D3DINDEXBUFFER_DESC};
  2664.   {$EXTERNALSYM _D3DINDEXBUFFER_DESC}
  2665.   D3DINDEXBUFFER_DESC = _D3DINDEXBUFFER_DESC;
  2666.   {$EXTERNALSYM D3DINDEXBUFFER_DESC}
  2667.   TD3DIndexBufferDesc = _D3DINDEXBUFFER_DESC;
  2668.  
  2669.  
  2670.  { Surface Description }
  2671.   PD3DSurfaceDesc = ^TD3DSurfaceDesc;
  2672.   _D3DSURFACE_DESC = packed record
  2673.     Format : TD3DFormat;
  2674.     _Type  : TD3DResourceType;
  2675.     Usage  : DWord;
  2676.     Pool   : TD3DPool;
  2677.     Size   : LongWord;
  2678.  
  2679.     MultiSampleType: TD3DMultiSampleType;
  2680.     Width  : LongWord;
  2681.     Height : LongWord;
  2682.   end {_D3DSURFACE_DESC};
  2683.   {$EXTERNALSYM _D3DSURFACE_DESC}
  2684.   D3DSURFACE_DESC = _D3DSURFACE_DESC;
  2685.   {$EXTERNALSYM D3DSURFACE_DESC}
  2686.   TD3DSurfaceDesc = _D3DSURFACE_DESC;
  2687.  
  2688.   PD3DVolumeDesc = ^TD3DVolumeDesc;
  2689.   _D3DVOLUME_DESC = packed record
  2690.     Format : TD3DFormat;
  2691.     _Type  : TD3DResourceType;
  2692.     Usage  : DWord;
  2693.     Pool   : TD3DPool;
  2694.     Size   : LongWord;
  2695.  
  2696.     Width  : LongWord;
  2697.     Height : LongWord;
  2698.     Depth  : LongWord;
  2699.   end {_D3DVOLUME_DESC};
  2700.   {$EXTERNALSYM _D3DVOLUME_DESC}
  2701.   D3DVOLUME_DESC = _D3DVOLUME_DESC;
  2702.   {$EXTERNALSYM D3DVOLUME_DESC}
  2703.   TD3DVolumeDesc = _D3DVOLUME_DESC;
  2704.  
  2705.   { Structure for LockRect }
  2706.   PD3DLockedRect = ^TD3DLockedRect;
  2707.   _D3DLOCKED_RECT = packed record
  2708.     Pitch: Integer;
  2709.     pBits: Pointer; // void*
  2710.   end {_D3DLOCKED_RECT};
  2711.   {$EXTERNALSYM _D3DLOCKED_RECT}
  2712.   D3DLOCKED_RECT = _D3DLOCKED_RECT;
  2713.   {$EXTERNALSYM D3DLOCKED_RECT}
  2714.   TD3DLockedRect = _D3DLOCKED_RECT;
  2715.  
  2716.   { Structures for LockBox }
  2717.   PD3DBox = ^TD3DBox;
  2718.   _D3DBOX = packed record
  2719.     Left        : LongWord;
  2720.     Top         : LongWord;
  2721.     Right       : LongWord;
  2722.     Bottom      : LongWord;
  2723.     Front       : LongWord;
  2724.     Back        : LongWord;
  2725.   end {_D3DBOX};
  2726.   {$EXTERNALSYM _D3DBOX}
  2727.   D3DBOX = _D3DBOX;
  2728.   {$EXTERNALSYM D3DBOX}
  2729.   TD3DBox = _D3DBOX;
  2730.  
  2731.   PD3DLockedBox = ^TD3DLockedBox;
  2732.   _D3DLOCKED_BOX = packed record
  2733.     RowPitch    : Integer;
  2734.     SlicePitch  : Integer;
  2735.     pBits       : Pointer; // void*
  2736.   end {_D3DLOCKED_BOX};
  2737.   {$EXTERNALSYM _D3DLOCKED_BOX}
  2738.   D3DLOCKED_BOX = _D3DLOCKED_BOX;
  2739.   {$EXTERNALSYM D3DLOCKED_BOX}
  2740.   TD3DLockedBox = _D3DLOCKED_BOX;
  2741.  
  2742.   { Structures for LockRange }
  2743.   PD3DRange = ^TD3DRange;
  2744.   _D3DRANGE = packed record
  2745.     Offset      : LongWord;
  2746.     Size        : LongWord;
  2747.   end {_D3DRANGE};
  2748.   {$EXTERNALSYM _D3DRANGE}
  2749.   D3DRANGE = _D3DRANGE;
  2750.   {$EXTERNALSYM D3DRANGE}
  2751.   TD3DRange = _D3DRANGE;
  2752.  
  2753.   { Structures for high order primitives }
  2754.   PD3DRectPatchInfo = ^TD3DRectPatchInfo;
  2755.   _D3DRECTPATCH_INFO = packed record
  2756.     StartVertexOffsetWidth  : LongWord;
  2757.     StartVertexOffsetHeight : LongWord;
  2758.     Width                   : LongWord;
  2759.     Height                  : LongWord;
  2760.     Stride                  : LongWord;
  2761.     Basis                   : TD3DBasisType;
  2762.     Order                   : TD3DOrderType;
  2763.   end;
  2764.   {$EXTERNALSYM _D3DRECTPATCH_INFO}
  2765.   D3DRECTPATCH_INFO = _D3DRECTPATCH_INFO;
  2766.   {$EXTERNALSYM D3DRECTPATCH_INFO}
  2767.   TD3DRectPatchInfo = _D3DRECTPATCH_INFO;
  2768.  
  2769.   PD3DTriPatchInfo = ^TD3DTriPatchInfo;
  2770.   _D3DTRIPATCH_INFO = packed record
  2771.     StartVertexOffset : LongWord;
  2772.     NumVertices       : LongWord;
  2773.     Basis             : TD3DBasisType;
  2774.     Order             : TD3DOrderType;
  2775.   end;
  2776.   {$EXTERNALSYM _D3DTRIPATCH_INFO}
  2777.   D3DTRIPATCH_INFO = _D3DTRIPATCH_INFO;
  2778.   {$EXTERNALSYM D3DTRIPATCH_INFO}
  2779.   TD3DTriPatchInfo = _D3DTRIPATCH_INFO;
  2780.  
  2781. const
  2782.   { Adapter Identifier }
  2783.   MAX_DEVICE_IDENTIFIER_STRING  = 512;
  2784.   {$EXTERNALSYM MAX_DEVICE_IDENTIFIER_STRING}
  2785. type
  2786.   PD3DAdapterIdentifier8 = ^TD3DAdapterIdentifier8;
  2787.   _D3DADAPTER_IDENTIFIER8 = packed record
  2788.     Driver      : array [0..MAX_DEVICE_IDENTIFIER_STRING-1] of Char;
  2789.     Description : array [0..MAX_DEVICE_IDENTIFIER_STRING-1] of Char;
  2790.  
  2791. {$IFDEF WIN32}
  2792.     DriverVersion               : Int64;     { Defined for 32 bit components }
  2793. {$ELSE}
  2794.     DriverVersionLowPart        : DWord;     { Defined for 16 bit driver components }
  2795.     DriverVersionHighPart       : DWord;
  2796. {$ENDIF}
  2797.  
  2798.     VendorId    : DWord;
  2799.     DeviceId    : DWord;
  2800.     SubSysId    : DWord;
  2801.     Revision    : DWord;
  2802.  
  2803.     DeviceIdentifier : TGUID;
  2804.  
  2805.     WHQLLevel   : DWord;
  2806.  
  2807.   end;
  2808.   {$EXTERNALSYM _D3DADAPTER_IDENTIFIER8}
  2809.   D3DADAPTER_IDENTIFIER8 = _D3DADAPTER_IDENTIFIER8;
  2810.   {$EXTERNALSYM D3DADAPTER_IDENTIFIER8}
  2811.   TD3DAdapterIdentifier8 = _D3DADAPTER_IDENTIFIER8;
  2812.  
  2813.  
  2814.   { Raster Status structure returned by GetRasterStatus }
  2815.   PD3DRasterStatus = ^TD3DRasterStatus;
  2816.   _D3DRASTER_STATUS = packed record
  2817.     InVBlank : Bool;
  2818.     ScanLine : LongWord;
  2819.   end;
  2820.   {$EXTERNALSYM _D3DRASTER_STATUS}
  2821.   D3DRASTER_STATUS = _D3DRASTER_STATUS;
  2822.   {$EXTERNALSYM D3DRASTER_STATUS}
  2823.   TD3DRasterStatus = _D3DRASTER_STATUS;
  2824.  
  2825.  
  2826.  
  2827. { Debug monitor tokens (DEBUG only)
  2828.  
  2829.    Note that if D3DRS_DEBUGMONITORTOKEN is set, the call is treated as
  2830.    passing a token to the debug monitor.  For example, if, after passing
  2831.    D3DDMT_ENABLE/DISABLE to D3DRS_DEBUGMONITORTOKEN other token values
  2832.    are passed in, the enabled/disabled state of the debug
  2833.    monitor will still persist.
  2834.  
  2835.    The debug monitor defaults to enabled.
  2836.  
  2837.    Calling GetRenderState on D3DRS_DEBUGMONITORTOKEN is not of any use.
  2838. }
  2839.   _D3DDEBUGMONITORTOKENS = DWord;
  2840.   {$EXTERNALSYM _D3DDEBUGMONITORTOKENS}
  2841.   D3DDEBUGMONITORTOKENS = _D3DDEBUGMONITORTOKENS;
  2842.   {$EXTERNALSYM D3DDEBUGMONITORTOKENS}
  2843.   TD3DDebugMonitorTokens = _D3DDEBUGMONITORTOKENS;
  2844.  
  2845. const
  2846.   D3DDMT_ENABLE            = 0;    // enable debug monitor
  2847.   {$EXTERNALSYM D3DDMT_ENABLE}
  2848.   D3DDMT_DISABLE           = 1;    // disable debug monitor
  2849.   {$EXTERNALSYM D3DDMT_DISABLE}
  2850.  
  2851. const
  2852.   // GetInfo IDs
  2853.   D3DDEVINFOID_RESOURCEMANAGER  = 5; (* Used with D3DDEVINFO_RESOURCEMANAGER *)
  2854.   {$EXTERNALSYM D3DDEVINFOID_RESOURCEMANAGER}
  2855.   D3DDEVINFOID_VERTEXSTATS      = 6; (* Used with D3DDEVINFO_D3DVERTEXSTATS *)
  2856.   {$EXTERNALSYM D3DDEVINFOID_VERTEXSTATS}
  2857.  
  2858. type
  2859.   PD3DResourceStats = ^TD3DResourceStats;
  2860.   _D3DRESOURCESTATS = packed record
  2861.   // Data collected since last Present()
  2862.     bThrashing                  : BOOL;  (* indicates if thrashing *)
  2863.     ApproxBytesDownloaded       : DWORD; (* Approximate number of bytes downloaded by resource manager *)
  2864.     NumEvicts                   : DWORD; (* number of objects evicted *)
  2865.     NumVidCreates               : DWORD; (* number of objects created in video memory *)
  2866.     LastPri                     : DWORD; (* priority of last object evicted *)
  2867.     NumUsed                     : DWORD; (* number of objects set to the device *)
  2868.     NumUsedInVidMem             : DWORD; (* number of objects set to the device, which are already in video memory *)
  2869.   // Persistent data
  2870.     WorkingSet                  : DWORD; (* number of objects in video memory *)
  2871.     WorkingSetBytes             : DWORD; (* number of bytes in video memory *)
  2872.     TotalManaged                : DWORD; (* total number of managed objects *)
  2873.     TotalBytes                  : DWORD; (* total number of bytes of managed objects *)
  2874.   end;
  2875.   {$EXTERNALSYM _D3DRESOURCESTATS}
  2876.   D3DRESOURCESTATS = _D3DRESOURCESTATS;
  2877.   {$EXTERNALSYM D3DRESOURCESTATS}
  2878.   TD3DResourceStats = _D3DRESOURCESTATS;
  2879.  
  2880. const
  2881.   D3DRTYPECOUNT = (DWORD(D3DRTYPE_INDEXBUFFER) + 1);
  2882.   {$EXTERNALSYM D3DRTYPECOUNT}
  2883.  
  2884. type
  2885.   PD3DDevInfoResourceManager = ^TD3DDevInfoResourceManager;
  2886.   _D3DDEVINFO_RESOURCEMANAGER = packed record
  2887.     stats: array [0..D3DRTYPECOUNT-1] of TD3DResourceStats;
  2888.   end;
  2889.   {$EXTERNALSYM _D3DDEVINFO_RESOURCEMANAGER}
  2890.   D3DDEVINFO_RESOURCEMANAGER = _D3DDEVINFO_RESOURCEMANAGER;
  2891.   {$EXTERNALSYM D3DDEVINFO_RESOURCEMANAGER}
  2892.   TD3DDevInfoResourceManager = _D3DDEVINFO_RESOURCEMANAGER;
  2893.  
  2894.   PD3DDevInfoD3DVertexStats = ^TD3DDevInfoD3DVertexStats;
  2895.   _D3DDEVINFO_D3DVERTEXSTATS = packed record
  2896.     NumRenderedTriangles        : DWORD; (* total number of triangles that are not clipped in this frame *)
  2897.     NumExtraClippingTriangles   : DWORD; (* Number of new triangles generated by clipping *)
  2898.   end;
  2899.   {$EXTERNALSYM _D3DDEVINFO_D3DVERTEXSTATS}
  2900.   D3DDEVINFO_D3DVERTEXSTATS = _D3DDEVINFO_D3DVERTEXSTATS;
  2901.   {$EXTERNALSYM D3DDEVINFO_D3DVERTEXSTATS}
  2902.   TD3DDevInfoD3DVertexStats = _D3DDEVINFO_D3DVERTEXSTATS;
  2903.  
  2904.  
  2905. (*==========================================================================;
  2906.  *
  2907.  *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  2908.  *
  2909.  *  File:       d3d8caps.h
  2910.  *  Content:    Direct3D capabilities include file
  2911.  *
  2912.  ***************************************************************************)
  2913.  
  2914. type
  2915.   PD3DCaps8 = ^TD3DCaps8;
  2916.   _D3DCAPS8 = record
  2917.     (* Device Info *)
  2918.     DeviceType: TD3DDevType;
  2919.     AdapterOrdinal: DWord;
  2920.  
  2921.     (* Caps from DX7 Draw *)
  2922.     Caps: DWord;
  2923.     Caps2: DWord;
  2924.     Caps3: DWord;
  2925.     PresentationIntervals: DWord;
  2926.  
  2927.     (* Cursor Caps *)
  2928.     CursorCaps: DWORD;
  2929.  
  2930.     (* 3D Device Caps *)
  2931.     DevCaps: DWord;
  2932.     PrimitiveMiscCaps: DWord;
  2933.     RasterCaps: DWord;
  2934.     ZCmpCaps: DWord;
  2935.     SrcBlendCaps: DWord;
  2936.     DestBlendCaps: DWord;
  2937.     AlphaCmpCaps: DWord;
  2938.     ShadeCaps: DWord;
  2939.     TextureCaps: DWord;
  2940.     TextureFilterCaps: DWord;           // D3DPTFILTERCAPS for IDirect3DTexture8's
  2941.     CubeTextureFilterCaps: DWord;       // D3DPTFILTERCAPS for IDirect3DCubeTexture8's
  2942.     VolumeTextureFilterCaps: DWord;     // D3DPTFILTERCAPS for IDirect3DVolumeTexture8's
  2943.     TextureAddressCaps: DWord;          // D3DPTADDRESSCAPS for IDirect3DTexture8's
  2944.     VolumeTextureAddressCaps: DWord;    // D3DPTADDRESSCAPS for IDirect3DVolumeTexture8's
  2945.  
  2946.     LineCaps: DWord;                    // D3DLINECAPS
  2947.  
  2948.     MaxTextureWidth, MaxTextureHeight: DWord;
  2949.     MaxVolumeExtent: DWord;
  2950.  
  2951.     MaxTextureRepeat: DWord;
  2952.     MaxTextureAspectRatio: DWord;
  2953.     MaxAnisotropy: DWord;
  2954.     MaxVertexW: Single;
  2955.  
  2956.     GuardBandLeft: Single;
  2957.     GuardBandTop: Single;
  2958.     GuardBandRight: Single;
  2959.     GuardBandBottom: Single;
  2960.  
  2961.     ExtentsAdjust: Single;
  2962.     StencilCaps: DWord;
  2963.  
  2964.     FVFCaps: DWord;
  2965.     TextureOpCaps: DWord;
  2966.     MaxTextureBlendStages: DWord;
  2967.     MaxSimultaneousTextures: DWord;
  2968.  
  2969.     VertexProcessingCaps: DWord;
  2970.     MaxActiveLights: DWord;
  2971.     MaxUserClipPlanes: DWord;
  2972.     MaxVertexBlendMatrices: DWord;
  2973.     MaxVertexBlendMatrixIndex: DWord;
  2974.  
  2975.     MaxPointSize: Single;
  2976.  
  2977.     MaxPrimitiveCount: DWord;           // max number of primitives per DrawPrimitive call
  2978.     MaxVertexIndex: DWord;
  2979.     MaxStreams: DWord;
  2980.     MaxStreamStride: DWord;             // max stride for SetStreamSource
  2981.  
  2982.     VertexShaderVersion: DWord;
  2983.     MaxVertexShaderConst: DWord;        // number of vertex shader constant registers
  2984.  
  2985.     PixelShaderVersion: DWord;
  2986.     MaxPixelShaderValue: Single;        // max value of pixel shader arithmetic component
  2987.   end {D3DCAPS8};
  2988.   {$EXTERNALSYM _D3DCAPS8}
  2989.   D3DCAPS8 = _D3DCAPS8;
  2990.   {$EXTERNALSYM D3DCAPS8}
  2991.   TD3DCaps8 = _D3DCAPS8;
  2992.  
  2993.   //
  2994.   // BIT DEFINES FOR D3DCAPS8 DWORD MEMBERS
  2995.   //
  2996.  
  2997. const
  2998.   //
  2999.   // Caps
  3000.   //
  3001.   D3DCAPS_READ_SCANLINE         = $00020000;
  3002.   {$EXTERNALSYM D3DCAPS_READ_SCANLINE}
  3003.  
  3004.   //
  3005.   // Caps2
  3006.   //
  3007.   D3DCAPS2_NO2DDURING3DSCENE    = $00000002;
  3008.   {$EXTERNALSYM D3DCAPS2_NO2DDURING3DSCENE}
  3009.   D3DCAPS2_FULLSCREENGAMMA      = $00020000;
  3010.   {$EXTERNALSYM D3DCAPS2_FULLSCREENGAMMA}
  3011.   D3DCAPS2_CANRENDERWINDOWED    = $00080000;
  3012.   {$EXTERNALSYM D3DCAPS2_CANRENDERWINDOWED}
  3013.   D3DCAPS2_CANCALIBRATEGAMMA    = $00100000;
  3014.   {$EXTERNALSYM D3DCAPS2_CANCALIBRATEGAMMA}
  3015.   D3DCAPS2_RESERVED             = $02000000;
  3016.   {$EXTERNALSYM D3DCAPS2_RESERVED}
  3017.   D3DCAPS2_CANMANAGERESOURCE    = $10000000;
  3018.   {$EXTERNALSYM D3DCAPS2_CANMANAGERESOURCE}
  3019.   D3DCAPS2_DYNAMICTEXTURES      = $20000000;
  3020.   {$EXTERNALSYM D3DCAPS2_DYNAMICTEXTURES}
  3021.  
  3022.   //
  3023.   // Caps3
  3024.   //
  3025.   D3DCAPS3_RESERVED             = $8000001F;
  3026.   {$EXTERNALSYM D3DCAPS3_RESERVED}
  3027.  
  3028.   // Indicates that the device can respect the ALPHABLENDENABLE render state
  3029.   // when fullscreen while using the FLIP or DISCARD swap effect.
  3030.   // COPY and COPYVSYNC swap effects work whether or not this flag is set.
  3031.   D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD     = $00000020;
  3032.   {$EXTERNALSYM D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD}
  3033.  
  3034.   //
  3035.   // PresentationIntervals
  3036.   //
  3037.   D3DPRESENT_INTERVAL_DEFAULT   = $00000000;
  3038.   {$EXTERNALSYM D3DPRESENT_INTERVAL_DEFAULT}
  3039.   D3DPRESENT_INTERVAL_ONE       = $00000001;
  3040.   {$EXTERNALSYM D3DPRESENT_INTERVAL_ONE}
  3041.   D3DPRESENT_INTERVAL_TWO       = $00000002;
  3042.   {$EXTERNALSYM D3DPRESENT_INTERVAL_TWO}
  3043.   D3DPRESENT_INTERVAL_THREE     = $00000004;
  3044.   {$EXTERNALSYM D3DPRESENT_INTERVAL_THREE}
  3045.   D3DPRESENT_INTERVAL_FOUR      = $00000008;
  3046.   {$EXTERNALSYM D3DPRESENT_INTERVAL_FOUR}
  3047.   D3DPRESENT_INTERVAL_IMMEDIATE = $80000000;
  3048.   {$EXTERNALSYM D3DPRESENT_INTERVAL_IMMEDIATE}
  3049.  
  3050.   //
  3051.   // CursorCaps
  3052.   //
  3053.   // Driver supports HW color cursor in at least hi-res modes(height >=400)
  3054.   D3DCURSORCAPS_COLOR           = $00000001;
  3055.   {$EXTERNALSYM D3DCURSORCAPS_COLOR}
  3056.   // Driver supports HW cursor also in low-res modes(height < 400)
  3057.   D3DCURSORCAPS_LOWRES          = $00000002;
  3058.   {$EXTERNALSYM D3DCURSORCAPS_LOWRES}
  3059.  
  3060.   //
  3061.   // DevCaps
  3062.   //
  3063.   D3DDEVCAPS_EXECUTESYSTEMMEMORY        = $00000010; { Device can use execute buffers from system memory }
  3064.   {$EXTERNALSYM D3DDEVCAPS_EXECUTESYSTEMMEMORY}
  3065.   D3DDEVCAPS_EXECUTEVIDEOMEMORY         = $00000020; { Device can use execute buffers from video memory }
  3066.   {$EXTERNALSYM D3DDEVCAPS_EXECUTEVIDEOMEMORY}
  3067.   D3DDEVCAPS_TLVERTEXSYSTEMMEMORY       = $00000040; { Device can use TL buffers from system memory }
  3068.   {$EXTERNALSYM D3DDEVCAPS_TLVERTEXSYSTEMMEMORY}
  3069.   D3DDEVCAPS_TLVERTEXVIDEOMEMORY        = $00000080; { Device can use TL buffers from video memory }
  3070.   {$EXTERNALSYM D3DDEVCAPS_TLVERTEXVIDEOMEMORY}
  3071.   D3DDEVCAPS_TEXTURESYSTEMMEMORY        = $00000100; { Device can texture from system memory }
  3072.   {$EXTERNALSYM D3DDEVCAPS_TEXTURESYSTEMMEMORY}
  3073.   D3DDEVCAPS_TEXTUREVIDEOMEMORY         = $00000200; { Device can texture from device memory }
  3074.   {$EXTERNALSYM D3DDEVCAPS_TEXTUREVIDEOMEMORY}
  3075.   D3DDEVCAPS_DRAWPRIMTLVERTEX           = $00000400; { Device can draw TLVERTEX primitives }
  3076.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMTLVERTEX}
  3077.   D3DDEVCAPS_CANRENDERAFTERFLIP         = $00000800; { Device can render without waiting for flip to complete }
  3078.   {$EXTERNALSYM D3DDEVCAPS_CANRENDERAFTERFLIP}
  3079.   D3DDEVCAPS_TEXTURENONLOCALVIDMEM      = $00001000; { Device can texture from nonlocal video memory }
  3080.   {$EXTERNALSYM D3DDEVCAPS_TEXTURENONLOCALVIDMEM}
  3081.   D3DDEVCAPS_DRAWPRIMITIVES2            = $00002000; { Device can support DrawPrimitives2 }
  3082.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMITIVES2}
  3083.   D3DDEVCAPS_SEPARATETEXTUREMEMORIES    = $00004000; { Device is texturing from separate memory pools }
  3084.   {$EXTERNALSYM D3DDEVCAPS_SEPARATETEXTUREMEMORIES}
  3085.   D3DDEVCAPS_DRAWPRIMITIVES2EX          = $00008000; { Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver }
  3086.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMITIVES2EX}
  3087.   D3DDEVCAPS_HWTRANSFORMANDLIGHT        = $00010000; { Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also }
  3088.   {$EXTERNALSYM D3DDEVCAPS_HWTRANSFORMANDLIGHT}
  3089.   D3DDEVCAPS_CANBLTSYSTONONLOCAL        = $00020000; { Device supports a Tex Blt from system memory to non-local vidmem }
  3090.   {$EXTERNALSYM D3DDEVCAPS_CANBLTSYSTONONLOCAL}
  3091.   D3DDEVCAPS_HWRASTERIZATION            = $00080000; { Device has HW acceleration for rasterization }
  3092.   {$EXTERNALSYM D3DDEVCAPS_HWRASTERIZATION}
  3093.   D3DDEVCAPS_PUREDEVICE                 = $00100000; { Device supports D3DCREATE_PUREDEVICE }
  3094.   {$EXTERNALSYM D3DDEVCAPS_PUREDEVICE}
  3095.   D3DDEVCAPS_QUINTICRTPATCHES           = $00200000; { Device supports quintic Beziers and BSplines }
  3096.   {$EXTERNALSYM D3DDEVCAPS_QUINTICRTPATCHES}
  3097.   D3DDEVCAPS_RTPATCHES                  = $00400000; { Device supports Rect and Tri patches }
  3098.   {$EXTERNALSYM D3DDEVCAPS_RTPATCHES}
  3099.   D3DDEVCAPS_RTPATCHHANDLEZERO          = $00800000; { Indicates that RT Patches may be drawn efficiently using handle 0 }
  3100.   {$EXTERNALSYM D3DDEVCAPS_RTPATCHHANDLEZERO}
  3101.   D3DDEVCAPS_NPATCHES                   = $01000000; { Device supports N-Patches }
  3102.   {$EXTERNALSYM D3DDEVCAPS_NPATCHES}
  3103.  
  3104.   //
  3105.   // PrimitiveMiscCaps
  3106.   //
  3107.   D3DPMISCCAPS_MASKZ                    = $00000002;
  3108.   {$EXTERNALSYM D3DPMISCCAPS_MASKZ}
  3109.   D3DPMISCCAPS_LINEPATTERNREP           = $00000004;
  3110.   {$EXTERNALSYM D3DPMISCCAPS_LINEPATTERNREP}
  3111.   D3DPMISCCAPS_CULLNONE                 = $00000010;
  3112.   {$EXTERNALSYM D3DPMISCCAPS_CULLNONE}
  3113.   D3DPMISCCAPS_CULLCW                   = $00000020;
  3114.   {$EXTERNALSYM D3DPMISCCAPS_CULLCW}
  3115.   D3DPMISCCAPS_CULLCCW                  = $00000040;
  3116.   {$EXTERNALSYM D3DPMISCCAPS_CULLCCW}
  3117.   D3DPMISCCAPS_COLORWRITEENABLE         = $00000080;
  3118.   {$EXTERNALSYM D3DPMISCCAPS_COLORWRITEENABLE}
  3119.   D3DPMISCCAPS_CLIPPLANESCALEDPOINTS    = $00000100; { Device correctly clips scaled points to clip planes }
  3120.   {$EXTERNALSYM D3DPMISCCAPS_CLIPPLANESCALEDPOINTS}
  3121.   D3DPMISCCAPS_CLIPTLVERTS              = $00000200; { device will clip post-transformed vertex primitives }
  3122.   {$EXTERNALSYM D3DPMISCCAPS_CLIPTLVERTS}
  3123.   D3DPMISCCAPS_TSSARGTEMP               = $00000400; { device supports D3DTA_TEMP for temporary register }
  3124.   {$EXTERNALSYM D3DPMISCCAPS_TSSARGTEMP}
  3125.   D3DPMISCCAPS_BLENDOP                  = $00000800; { device supports D3DRS_BLENDOP }
  3126.   {$EXTERNALSYM D3DPMISCCAPS_BLENDOP}
  3127.   D3DPMISCCAPS_NULLREFERENCE            = $00001000; { Reference Device that doesnt render }
  3128.   {$EXTERNALSYM D3DPMISCCAPS_NULLREFERENCE}
  3129.  
  3130.   //
  3131.   // LineCaps
  3132.   //
  3133.   D3DLINECAPS_TEXTURE                   = $00000001;
  3134.   {$EXTERNALSYM D3DLINECAPS_TEXTURE}
  3135.   D3DLINECAPS_ZTEST                     = $00000002;
  3136.   {$EXTERNALSYM D3DLINECAPS_ZTEST}
  3137.   D3DLINECAPS_BLEND                     = $00000004;
  3138.   {$EXTERNALSYM D3DLINECAPS_BLEND}
  3139.   D3DLINECAPS_ALPHACMP                  = $00000008;
  3140.   {$EXTERNALSYM D3DLINECAPS_ALPHACMP}
  3141.   D3DLINECAPS_FOG                       = $00000010;
  3142.   {$EXTERNALSYM D3DLINECAPS_FOG}
  3143.  
  3144.   //
  3145.   // RasterCaps
  3146.   //
  3147.   D3DPRASTERCAPS_DITHER                 = $00000001;
  3148.   {$EXTERNALSYM D3DPRASTERCAPS_DITHER}
  3149.   D3DPRASTERCAPS_PAT                    = $00000008;
  3150.   {$EXTERNALSYM D3DPRASTERCAPS_PAT}
  3151.   D3DPRASTERCAPS_ZTEST                  = $00000010;
  3152.   {$EXTERNALSYM D3DPRASTERCAPS_ZTEST}
  3153.   D3DPRASTERCAPS_FOGVERTEX              = $00000080;
  3154.   {$EXTERNALSYM D3DPRASTERCAPS_FOGVERTEX}
  3155.   D3DPRASTERCAPS_FOGTABLE               = $00000100;
  3156.   {$EXTERNALSYM D3DPRASTERCAPS_FOGTABLE}
  3157.   D3DPRASTERCAPS_ANTIALIASEDGES         = $00001000;
  3158.   {$EXTERNALSYM D3DPRASTERCAPS_ANTIALIASEDGES}
  3159.   D3DPRASTERCAPS_MIPMAPLODBIAS          = $00002000;
  3160.   {$EXTERNALSYM D3DPRASTERCAPS_MIPMAPLODBIAS}
  3161.   D3DPRASTERCAPS_ZBIAS                  = $00004000;
  3162.   {$EXTERNALSYM D3DPRASTERCAPS_ZBIAS}
  3163.   D3DPRASTERCAPS_ZBUFFERLESSHSR         = $00008000;
  3164.   {$EXTERNALSYM D3DPRASTERCAPS_ZBUFFERLESSHSR}
  3165.   D3DPRASTERCAPS_FOGRANGE               = $00010000;
  3166.   {$EXTERNALSYM D3DPRASTERCAPS_FOGRANGE}
  3167.   D3DPRASTERCAPS_ANISOTROPY             = $00020000;
  3168.   {$EXTERNALSYM D3DPRASTERCAPS_ANISOTROPY}
  3169.   D3DPRASTERCAPS_WBUFFER                = $00040000;
  3170.   {$EXTERNALSYM D3DPRASTERCAPS_WBUFFER}
  3171.   D3DPRASTERCAPS_WFOG                   = $00100000;
  3172.   {$EXTERNALSYM D3DPRASTERCAPS_WFOG}
  3173.   D3DPRASTERCAPS_ZFOG                   = $00200000;
  3174.   {$EXTERNALSYM D3DPRASTERCAPS_ZFOG}
  3175.   D3DPRASTERCAPS_COLORPERSPECTIVE       = $00400000; { Device iterates colors perspective correct }
  3176.   {$EXTERNALSYM D3DPRASTERCAPS_COLORPERSPECTIVE}
  3177.   D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE  = $00800000;
  3178.   {$EXTERNALSYM D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE}
  3179.  
  3180.   //
  3181.   // ZCmpCaps, AlphaCmpCaps
  3182.   //
  3183.   D3DPCMPCAPS_NEVER                     = $00000001;
  3184.   {$EXTERNALSYM D3DPCMPCAPS_NEVER}
  3185.   D3DPCMPCAPS_LESS                      = $00000002;
  3186.   {$EXTERNALSYM D3DPCMPCAPS_LESS}
  3187.   D3DPCMPCAPS_EQUAL                     = $00000004;
  3188.   {$EXTERNALSYM D3DPCMPCAPS_EQUAL}
  3189.   D3DPCMPCAPS_LESSEQUAL                 = $00000008;
  3190.   {$EXTERNALSYM D3DPCMPCAPS_LESSEQUAL}
  3191.   D3DPCMPCAPS_GREATER                   = $00000010;
  3192.   {$EXTERNALSYM D3DPCMPCAPS_GREATER}
  3193.   D3DPCMPCAPS_NOTEQUAL                  = $00000020;
  3194.   {$EXTERNALSYM D3DPCMPCAPS_NOTEQUAL}
  3195.   D3DPCMPCAPS_GREATEREQUAL              = $00000040;
  3196.   {$EXTERNALSYM D3DPCMPCAPS_GREATEREQUAL}
  3197.   D3DPCMPCAPS_ALWAYS                    = $00000080;
  3198.   {$EXTERNALSYM D3DPCMPCAPS_ALWAYS}
  3199.  
  3200.   //
  3201.   // SourceBlendCaps, DestBlendCaps
  3202.   //
  3203.   D3DPBLENDCAPS_ZERO                    = $00000001;
  3204.   {$EXTERNALSYM D3DPBLENDCAPS_ZERO}
  3205.   D3DPBLENDCAPS_ONE                     = $00000002;
  3206.   {$EXTERNALSYM D3DPBLENDCAPS_ONE}
  3207.   D3DPBLENDCAPS_SRCCOLOR                = $00000004;
  3208.   {$EXTERNALSYM D3DPBLENDCAPS_SRCCOLOR}
  3209.   D3DPBLENDCAPS_INVSRCCOLOR             = $00000008;
  3210.   {$EXTERNALSYM D3DPBLENDCAPS_INVSRCCOLOR}
  3211.   D3DPBLENDCAPS_SRCALPHA                = $00000010;
  3212.   {$EXTERNALSYM D3DPBLENDCAPS_SRCALPHA}
  3213.   D3DPBLENDCAPS_INVSRCALPHA             = $00000020;
  3214.   {$EXTERNALSYM D3DPBLENDCAPS_INVSRCALPHA}
  3215.   D3DPBLENDCAPS_DESTALPHA               = $00000040;
  3216.   {$EXTERNALSYM D3DPBLENDCAPS_DESTALPHA}
  3217.   D3DPBLENDCAPS_INVDESTALPHA            = $00000080;
  3218.   {$EXTERNALSYM D3DPBLENDCAPS_INVDESTALPHA}
  3219.   D3DPBLENDCAPS_DESTCOLOR               = $00000100;
  3220.   {$EXTERNALSYM D3DPBLENDCAPS_DESTCOLOR}
  3221.   D3DPBLENDCAPS_INVDESTCOLOR            = $00000200;
  3222.   {$EXTERNALSYM D3DPBLENDCAPS_INVDESTCOLOR}
  3223.   D3DPBLENDCAPS_SRCALPHASAT             = $00000400;
  3224.   {$EXTERNALSYM D3DPBLENDCAPS_SRCALPHASAT}
  3225.   D3DPBLENDCAPS_BOTHSRCALPHA            = $00000800;
  3226.   {$EXTERNALSYM D3DPBLENDCAPS_BOTHSRCALPHA}
  3227.   D3DPBLENDCAPS_BOTHINVSRCALPHA         = $00001000;
  3228.   {$EXTERNALSYM D3DPBLENDCAPS_BOTHINVSRCALPHA}
  3229.  
  3230.   //
  3231.   // ShadeCaps
  3232.   //
  3233.   D3DPSHADECAPS_COLORGOURAUDRGB         = $00000008;
  3234.   {$EXTERNALSYM D3DPSHADECAPS_COLORGOURAUDRGB}
  3235.   D3DPSHADECAPS_SPECULARGOURAUDRGB      = $00000200;
  3236.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARGOURAUDRGB}
  3237.   D3DPSHADECAPS_ALPHAGOURAUDBLEND       = $00004000;
  3238.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAGOURAUDBLEND}
  3239.   D3DPSHADECAPS_FOGGOURAUD              = $00080000;
  3240.   {$EXTERNALSYM D3DPSHADECAPS_FOGGOURAUD}
  3241.  
  3242.   //
  3243.   // TextureCaps
  3244.   //
  3245.   D3DPTEXTURECAPS_PERSPECTIVE           = $00000001; { Perspective-correct texturing is supported }
  3246.   {$EXTERNALSYM D3DPTEXTURECAPS_PERSPECTIVE}
  3247.   D3DPTEXTURECAPS_POW2                  = $00000002; { Power-of-2 texture dimensions are required - applies to non-Cube/Volume textures only. }
  3248.   {$EXTERNALSYM D3DPTEXTURECAPS_POW2}
  3249.   D3DPTEXTURECAPS_ALPHA                 = $00000004; { Alpha in texture pixels is supported }
  3250.   {$EXTERNALSYM D3DPTEXTURECAPS_ALPHA}
  3251.   D3DPTEXTURECAPS_SQUAREONLY            = $00000020; { Only square textures are supported }
  3252.   {$EXTERNALSYM D3DPTEXTURECAPS_SQUAREONLY}
  3253.   D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE = $00000040; { Texture indices are not scaled by the texture size prior to interpolation }
  3254.   {$EXTERNALSYM D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE}
  3255.   D3DPTEXTURECAPS_ALPHAPALETTE          = $00000080; { Device can draw alpha from texture palettes }
  3256.   {$EXTERNALSYM D3DPTEXTURECAPS_ALPHAPALETTE}
  3257.   // Device can use non-POW2 textures if:
  3258.   //  1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage
  3259.   //  2) D3DRS_WRAP(N) is zero for this texture's coordinates
  3260.   //  3) mip mapping is not enabled (use magnification filter only)
  3261.   D3DPTEXTURECAPS_NONPOW2CONDITIONAL    = $00000100;
  3262.   {$EXTERNALSYM D3DPTEXTURECAPS_NONPOW2CONDITIONAL}
  3263.   D3DPTEXTURECAPS_PROJECTED             = $00000400; { Device can do D3DTTFF_PROJECTED }
  3264.   {$EXTERNALSYM D3DPTEXTURECAPS_PROJECTED}
  3265.   D3DPTEXTURECAPS_CUBEMAP               = $00000800; { Device can do cubemap textures }
  3266.   {$EXTERNALSYM D3DPTEXTURECAPS_CUBEMAP}
  3267.   D3DPTEXTURECAPS_VOLUMEMAP             = $00002000; { Device can do volume textures }
  3268.   {$EXTERNALSYM D3DPTEXTURECAPS_VOLUMEMAP}
  3269.   D3DPTEXTURECAPS_MIPMAP                = $00004000; { Device can do mipmapped textures }
  3270.   {$EXTERNALSYM D3DPTEXTURECAPS_MIPMAP}
  3271.   D3DPTEXTURECAPS_MIPVOLUMEMAP          = $00008000; { Device can do mipmapped volume textures }
  3272.   {$EXTERNALSYM D3DPTEXTURECAPS_MIPVOLUMEMAP}
  3273.   D3DPTEXTURECAPS_MIPCUBEMAP            = $00010000; { Device can do mipmapped cube maps }
  3274.   {$EXTERNALSYM D3DPTEXTURECAPS_MIPCUBEMAP}
  3275.   D3DPTEXTURECAPS_CUBEMAP_POW2          = $00020000; { Device requires that cubemaps be power-of-2 dimension }
  3276.   {$EXTERNALSYM D3DPTEXTURECAPS_CUBEMAP_POW2}
  3277.   D3DPTEXTURECAPS_VOLUMEMAP_POW2        = $00040000; { Device requires that volume maps be power-of-2 dimension }
  3278.   {$EXTERNALSYM D3DPTEXTURECAPS_VOLUMEMAP_POW2}
  3279.  
  3280.   //
  3281.   // TextureFilterCaps
  3282.   //
  3283.   D3DPTFILTERCAPS_MINFPOINT             = $00000100; { Min Filter }
  3284.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFPOINT}
  3285.   D3DPTFILTERCAPS_MINFLINEAR            = $00000200;
  3286.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFLINEAR}
  3287.   D3DPTFILTERCAPS_MINFANISOTROPIC       = $00000400;
  3288.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFANISOTROPIC}
  3289.   D3DPTFILTERCAPS_MIPFPOINT             = $00010000; { Mip Filter }
  3290.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPFPOINT}
  3291.   D3DPTFILTERCAPS_MIPFLINEAR            = $00020000;
  3292.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPFLINEAR}
  3293.   D3DPTFILTERCAPS_MAGFPOINT             = $01000000; { Mag Filter }
  3294.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFPOINT}
  3295.   D3DPTFILTERCAPS_MAGFLINEAR            = $02000000;
  3296.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFLINEAR}
  3297.   D3DPTFILTERCAPS_MAGFANISOTROPIC       = $04000000;
  3298.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFANISOTROPIC}
  3299.   D3DPTFILTERCAPS_MAGFAFLATCUBIC        = $08000000;
  3300.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFAFLATCUBIC}
  3301.   D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC     = $10000000;
  3302.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC}
  3303.  
  3304.   //
  3305.   // TextureAddressCaps
  3306.   //
  3307.   D3DPTADDRESSCAPS_WRAP                 = $00000001;
  3308.   {$EXTERNALSYM D3DPTADDRESSCAPS_WRAP}
  3309.   D3DPTADDRESSCAPS_MIRROR               = $00000002;
  3310.   {$EXTERNALSYM D3DPTADDRESSCAPS_MIRROR}
  3311.   D3DPTADDRESSCAPS_CLAMP                = $00000004;
  3312.   {$EXTERNALSYM D3DPTADDRESSCAPS_CLAMP}
  3313.   D3DPTADDRESSCAPS_BORDER               = $00000008;
  3314.   {$EXTERNALSYM D3DPTADDRESSCAPS_BORDER}
  3315.   D3DPTADDRESSCAPS_INDEPENDENTUV        = $00000010;
  3316.   {$EXTERNALSYM D3DPTADDRESSCAPS_INDEPENDENTUV}
  3317.   D3DPTADDRESSCAPS_MIRRORONCE           = $00000020;
  3318.   {$EXTERNALSYM D3DPTADDRESSCAPS_MIRRORONCE}
  3319.  
  3320.   //
  3321.   // StencilCaps
  3322.   //
  3323.   D3DSTENCILCAPS_KEEP                   = $00000001;
  3324.   {$EXTERNALSYM D3DSTENCILCAPS_KEEP}
  3325.   D3DSTENCILCAPS_ZERO                   = $00000002;
  3326.   {$EXTERNALSYM D3DSTENCILCAPS_ZERO}
  3327.   D3DSTENCILCAPS_REPLACE                = $00000004;
  3328.   {$EXTERNALSYM D3DSTENCILCAPS_REPLACE}
  3329.   D3DSTENCILCAPS_INCRSAT                = $00000008;
  3330.   {$EXTERNALSYM D3DSTENCILCAPS_INCRSAT}
  3331.   D3DSTENCILCAPS_DECRSAT                = $00000010;
  3332.   {$EXTERNALSYM D3DSTENCILCAPS_DECRSAT}
  3333.   D3DSTENCILCAPS_INVERT                 = $00000020;
  3334.   {$EXTERNALSYM D3DSTENCILCAPS_INVERT}
  3335.   D3DSTENCILCAPS_INCR                   = $00000040;
  3336.   {$EXTERNALSYM D3DSTENCILCAPS_INCR}
  3337.   D3DSTENCILCAPS_DECR                   = $00000080;
  3338.   {$EXTERNALSYM D3DSTENCILCAPS_DECR}
  3339.  
  3340.   //
  3341.   // TextureOpCaps
  3342.   //
  3343.   D3DTEXOPCAPS_DISABLE                          = $00000001;
  3344.   {$EXTERNALSYM D3DTEXOPCAPS_DISABLE}
  3345.   D3DTEXOPCAPS_SELECTARG1                       = $00000002;
  3346.   {$EXTERNALSYM D3DTEXOPCAPS_SELECTARG1}
  3347.   D3DTEXOPCAPS_SELECTARG2                       = $00000004;
  3348.   {$EXTERNALSYM D3DTEXOPCAPS_SELECTARG2}
  3349.   D3DTEXOPCAPS_MODULATE                         = $00000008;
  3350.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE}
  3351.   D3DTEXOPCAPS_MODULATE2X                       = $00000010;
  3352.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE2X}
  3353.   D3DTEXOPCAPS_MODULATE4X                       = $00000020;
  3354.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE4X}
  3355.   D3DTEXOPCAPS_ADD                              = $00000040;
  3356.   {$EXTERNALSYM D3DTEXOPCAPS_ADD}
  3357.   D3DTEXOPCAPS_ADDSIGNED                        = $00000080;
  3358.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSIGNED}
  3359.   D3DTEXOPCAPS_ADDSIGNED2X                      = $00000100;
  3360.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSIGNED2X}
  3361.   D3DTEXOPCAPS_SUBTRACT                         = $00000200;
  3362.   {$EXTERNALSYM D3DTEXOPCAPS_SUBTRACT}
  3363.   D3DTEXOPCAPS_ADDSMOOTH                        = $00000400;
  3364.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSMOOTH}
  3365.   D3DTEXOPCAPS_BLENDDIFFUSEALPHA                = $00000800;
  3366.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDDIFFUSEALPHA}
  3367.   D3DTEXOPCAPS_BLENDTEXTUREALPHA                = $00001000;
  3368.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDTEXTUREALPHA}
  3369.   D3DTEXOPCAPS_BLENDFACTORALPHA                 = $00002000;
  3370.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDFACTORALPHA}
  3371.   D3DTEXOPCAPS_BLENDTEXTUREALPHAPM              = $00004000;
  3372.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDTEXTUREALPHAPM}
  3373.   D3DTEXOPCAPS_BLENDCURRENTALPHA                = $00008000;
  3374.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDCURRENTALPHA}
  3375.   D3DTEXOPCAPS_PREMODULATE                      = $00010000;
  3376.   {$EXTERNALSYM D3DTEXOPCAPS_PREMODULATE}
  3377.   D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR           = $00020000;
  3378.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR}
  3379.   D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA           = $00040000;
  3380.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA}
  3381.   D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR        = $00080000;
  3382.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR}
  3383.   D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA        = $00100000;
  3384.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA}
  3385.   D3DTEXOPCAPS_BUMPENVMAP                       = $00200000;
  3386.   {$EXTERNALSYM D3DTEXOPCAPS_BUMPENVMAP}
  3387.   D3DTEXOPCAPS_BUMPENVMAPLUMINANCE              = $00400000;
  3388.   {$EXTERNALSYM D3DTEXOPCAPS_BUMPENVMAPLUMINANCE}
  3389.   D3DTEXOPCAPS_DOTPRODUCT3                      = $00800000;
  3390.   {$EXTERNALSYM D3DTEXOPCAPS_DOTPRODUCT3}
  3391.   D3DTEXOPCAPS_MULTIPLYADD                      = $01000000;
  3392.   {$EXTERNALSYM D3DTEXOPCAPS_MULTIPLYADD}
  3393.   D3DTEXOPCAPS_LERP                             = $02000000;
  3394.   {$EXTERNALSYM D3DTEXOPCAPS_LERP}
  3395.  
  3396.   //
  3397.   // FVFCaps
  3398.   //
  3399.   D3DFVFCAPS_TEXCOORDCOUNTMASK  = $0000ffff; { mask for texture coordinate count field }
  3400.   {$EXTERNALSYM D3DFVFCAPS_TEXCOORDCOUNTMASK}
  3401.   D3DFVFCAPS_DONOTSTRIPELEMENTS = $00080000; { Device prefers that vertex elements not be stripped }
  3402.   {$EXTERNALSYM D3DFVFCAPS_DONOTSTRIPELEMENTS}
  3403.   D3DFVFCAPS_PSIZE              = $00100000; { Device can receive point size }
  3404.   {$EXTERNALSYM D3DFVFCAPS_PSIZE}
  3405.  
  3406.   //
  3407.   // VertexProcessingCaps
  3408.   //
  3409.   D3DVTXPCAPS_TEXGEN            = $00000001; { device can do texgen }
  3410.   {$EXTERNALSYM D3DVTXPCAPS_TEXGEN}
  3411.   D3DVTXPCAPS_MATERIALSOURCE7   = $00000002; { device can do DX7-level colormaterialsource ops }
  3412.   {$EXTERNALSYM D3DVTXPCAPS_MATERIALSOURCE7}
  3413.   D3DVTXPCAPS_DIRECTIONALLIGHTS = $00000008; { device can do directional lights }
  3414.   {$EXTERNALSYM D3DVTXPCAPS_DIRECTIONALLIGHTS}
  3415.   D3DVTXPCAPS_POSITIONALLIGHTS  = $00000010; { device can do positional lights (includes point and spot) }
  3416.   {$EXTERNALSYM D3DVTXPCAPS_POSITIONALLIGHTS}
  3417.   D3DVTXPCAPS_LOCALVIEWER       = $00000020; { device can do local viewer }
  3418.   {$EXTERNALSYM D3DVTXPCAPS_LOCALVIEWER}
  3419.   D3DVTXPCAPS_TWEENING          = $00000040; { device can do vertex tweening }
  3420.   {$EXTERNALSYM D3DVTXPCAPS_TWEENING}
  3421.   D3DVTXPCAPS_NO_VSDT_UBYTE4    = $00000080; { device does not support D3DVSDT_UBYTE4 }
  3422.   {$EXTERNALSYM D3DVTXPCAPS_NO_VSDT_UBYTE4}
  3423.  
  3424.  
  3425.  
  3426.  
  3427. (*==========================================================================;
  3428.  *
  3429.  *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  3430.  *
  3431.  *  File:   d3d8.h
  3432.  *  Content:    Direct3D include file
  3433.  *
  3434.  ****************************************************************************)
  3435.  
  3436. (* This identifier is passed to Direct3DCreate8 in order to ensure that an
  3437.  * application was built against the correct header files. This number is
  3438.  * incremented whenever a header (or other) change would require applications
  3439.  * to be rebuilt. If the version doesn't match, Direct3DCreate8 will fail.
  3440.  * (The number itself has no meaning.)*)
  3441.  
  3442. const
  3443.   D3D_SDK_VERSION = DWord(220);
  3444.   {$EXTERNALSYM D3D_SDK_VERSION}
  3445.  
  3446. type
  3447.   HMONITOR = THandle;
  3448.   {$EXTERNALSYM HMONITOR}
  3449.  
  3450.  
  3451.  
  3452. (*
  3453.  * Direct3D interfaces
  3454.  *)
  3455.  
  3456.  
  3457.   // forward interfaces declaration
  3458.   IDirect3D8 = interface;
  3459.   IDirect3DDevice8 = interface;
  3460.   IDirect3DResource8 = interface;
  3461.   IDirect3DBaseTexture8 = interface;
  3462.   IDirect3DTexture8 = interface;
  3463.   IDirect3DVolumeTexture8 = interface;
  3464.   IDirect3DCubeTexture8 = interface;
  3465.   IDirect3DVertexBuffer8 = interface;
  3466.   IDirect3DIndexBuffer8 = interface;
  3467.   IDirect3DSurface8 = interface;
  3468.   IDirect3DVolume8 = interface;
  3469.   IDirect3DSwapChain8 = interface;
  3470.  
  3471.  
  3472.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3D8);'}
  3473.   {$EXTERNALSYM IDirect3D8}
  3474.   IDirect3D8 = interface(IUnknown)
  3475.     ['{1DD9E8DA-1C77-4d40-B0CF-98FEFDFF9512}']
  3476.     (*** IDirect3D8 methods ***)
  3477.     function RegisterSoftwareDevice(pInitializeFunction: Pointer): HResult; stdcall;
  3478.     function GetAdapterCount: LongWord; stdcall;
  3479.     function GetAdapterIdentifier(Adapter: LongWord; Flags: DWord; out pIdentifier: TD3DAdapterIdentifier8): HResult; stdcall;
  3480.     function GetAdapterModeCount (Adapter: LongWord): LongWord; stdcall;
  3481.     function EnumAdapterModes(Adapter, Mode: LongWord; out pMode: TD3DDisplayMode): HResult; stdcall;
  3482.     function GetAdapterDisplayMode(Adapter: LongWord; out pMode: TD3DDisplayMode): HResult; stdcall;
  3483.     function CheckDeviceType(Adapter: LongWord; CheckType: TD3DDevType; DisplayFormat, BackBufferFormat: TD3DFormat; Windowed: BOOL): HResult; stdcall;
  3484.     function CheckDeviceFormat(Adapter: LongWord; DeviceType: TD3DDevType; AdapterFormat: TD3DFormat; Usage: DWord; RType: TD3DResourceType; CheckFormat: TD3DFormat): HResult; stdcall;
  3485.     function CheckDeviceMultiSampleType(Adapter: LongWord; DeviceType: TD3DDevType; SurfaceFormat: TD3DFormat; Windowed: BOOL; MultiSampleType: TD3DMultiSampleType): HResult; stdcall;
  3486.     function CheckDepthStencilMatch(Adapter: LongWord; DeviceType: TD3DDevType; AdapterFormat, RenderTargetFormat, DepthStencilFormat: TD3DFormat): HResult; stdcall;
  3487.     function GetDeviceCaps(Adapter: LongWord; DeviceType: TD3DDevType; out pCaps: TD3DCaps8): HResult; stdcall;
  3488.     function GetAdapterMonitor(Adapter: LongWord): HMONITOR; stdcall;
  3489.     function CreateDevice(Adapter: LongWord; DeviceType: TD3DDevType; hFocusWindow: HWND; BehaviorFlags: DWord; var pPresentationParameters: TD3DPresentParameters; out ppReturnedDeviceInterface: IDirect3DDevice8): HResult; stdcall;
  3490.   end;
  3491.  
  3492.  
  3493.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DDevice8);'}
  3494.   {$EXTERNALSYM IDirect3DDevice8}
  3495.   IDirect3DDevice8 = interface(IUnknown)
  3496.     ['{7385E5DF-8FE8-41D5-86B6-D7B48547B6CF}']
  3497.      (*** IDirect3DDevice8 methods ***)
  3498.     function TestCooperativeLevel: HResult; stdcall;
  3499.     function GetAvailableTextureMem: LongWord; stdcall;
  3500.     function ResourceManagerDiscardBytes(Bytes: DWord): HResult; stdcall;
  3501.     function GetDirect3D(out ppD3D8: IDirect3D8): HResult; stdcall;
  3502.     function GetDeviceCaps(out pCaps: TD3DCaps8): HResult; stdcall;
  3503.     function GetDisplayMode(out pMode: TD3DDisplayMode): HResult; stdcall;
  3504.     function GetCreationParameters(out pParameters: TD3DDeviceCreationParameters): HResult; stdcall;
  3505.     function SetCursorProperties(XHotSpot, YHotSpot: LongWord; pCursorBitmap: IDirect3DSurface8): HResult; stdcall;
  3506.     procedure SetCursorPosition(XScreenSpace, YScreenSpace: Integer; Flags: DWord); stdcall;
  3507.     function ShowCursor(bShow: BOOL): BOOL; stdcall;
  3508.     function CreateAdditionalSwapChain(const pPresentationParameters: TD3DPresentParameters; out pSwapChain: IDirect3DSwapChain8): HResult; stdcall;
  3509.     function Reset(const pPresentationParameters: TD3DPresentParameters): HResult; stdcall;
  3510.     function Present(pSourceRect, pDestRect: PRect; hDestWindowOverride: HWND; pDirtyRegion: PRgnData): HResult; stdcall;
  3511.     function GetBackBuffer(BackBuffer: LongWord; _Type: TD3DBackBufferType; out ppBackBuffer: IDirect3DSurface8): HResult; stdcall;
  3512.     function GetRasterStatus(out pRasterStatus: TD3DRasterStatus): HResult; stdcall;
  3513.     procedure SetGammaRamp(Flags: DWord; const pRamp: TD3DGammaRamp); stdcall;
  3514.     procedure GetGammaRamp(out pRamp: TD3DGammaRamp); stdcall;
  3515.     function CreateTexture(Width, Height, Levels: LongWord; Usage: DWord; Format: TD3DFormat; Pool: TD3DPool; out ppTexture: IDirect3DTexture8): HResult; stdcall;
  3516.     function CreateVolumeTexture(Width, Height, Depth, Levels: LongWord; Usage: DWord; Format: TD3DFormat; Pool: TD3DPool; out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall;
  3517.     function CreateCubeTexture(EdgeLength, Levels: LongWord; Usage: DWord; Format: TD3DFormat; Pool: TD3DPool; out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall;
  3518.     function CreateVertexBuffer(Length: LongWord; Usage, FVF: DWord; Pool: TD3DPool; out ppVertexBuffer: IDirect3DVertexBuffer8): HResult; stdcall;
  3519.     function CreateIndexBuffer(Length: LongWord; Usage: DWord; Format: TD3DFormat; Pool: TD3DPool; out ppIndexBuffer: IDirect3DIndexBuffer8): HResult; stdcall;
  3520.     function CreateRenderTarget(Width, Height: LongWord; Format: TD3DFormat; MultiSample: TD3DMultiSampleType; Lockable: BOOL; out ppSurface: IDirect3DSurface8): HResult; stdcall;
  3521.     function CreateDepthStencilSurface(Width, Height: LongWord; Format: TD3DFormat; MultiSample: TD3DMultiSampleType; out ppSurface: IDirect3DSurface8): HResult; stdcall;
  3522.     function CreateImageSurface(Width, Height: LongWord; Format: TD3DFormat; out ppSurface: IDirect3DSurface8): HResult; stdcall;
  3523.     function CopyRects(pSourceSurface: IDirect3DSurface8; pSourceRectsArray: PRect; cRects: LongWord; pDestinationSurface: IDirect3DSurface8; pDestPointsArray: PPoint): HResult; stdcall;
  3524.     function UpdateTexture(pSourceTexture, pDestinationTexture: IDirect3DBaseTexture8): HResult; stdcall;
  3525.     function GetFrontBuffer(pDestSurface: IDirect3DSurface8): HResult; stdcall;
  3526.     function SetRenderTarget(pRenderTarget, pNewZStencil: IDirect3DSurface8): HResult; stdcall;
  3527.     function GetRenderTarget(out ppRenderTarget: IDirect3DSurface8): HResult; stdcall;
  3528.     function GetDepthStencilSurface(out ppZStencilSurface: IDirect3DSurface8): HResult; stdcall;
  3529.     function BeginScene: HResult; stdcall;
  3530.     function EndScene: HResult; stdcall;
  3531.     function Clear(Count: DWord; pRects: PD3DRect; Flags: DWord; Color: TD3DColor; Z: Single; Stencil: DWord): HResult; stdcall;
  3532.     function SetTransform(State: TD3DTransformStateType; const pMatrix: TD3DMatrix): HResult; stdcall;
  3533.     function GetTransform(State: TD3DTransformStateType; out pMatrix: TD3DMatrix): HResult; stdcall;
  3534.     function MultiplyTransform(State: TD3DTransformStateType; const pMatrix: TD3DMatrix): HResult; stdcall;
  3535.     function SetViewport(const pViewport: TD3DViewport8): HResult; stdcall;
  3536.     function GetViewport(out pViewport: TD3DViewport8): HResult; stdcall;
  3537.     function SetMaterial(const pMaterial: TD3DMaterial8): HResult; stdcall;
  3538.     function GetMaterial(out pMaterial: TD3DMaterial8): HResult; stdcall;
  3539.     function SetLight(Index: DWord; const pLight: TD3DLight8): HResult; stdcall;
  3540.     function GetLight(Index: DWord; out pLight: TD3DLight8): HResult; stdcall;
  3541.     function LightEnable(Index: DWord; Enable: BOOL): HResult; stdcall;
  3542.     function GetLightEnable(Index: DWord; out pEnable: BOOL): HResult; stdcall;
  3543.     function SetClipPlane(Index: DWord; pPlane: PSingle): HResult; stdcall;
  3544.     function GetClipPlane(Index: DWord; pPlane: PSingle): HResult; stdcall;
  3545.     function SetRenderState(State: TD3DRenderStateType; Value: DWord): HResult; stdcall;
  3546.     function GetRenderState(State: TD3DRenderStateType; out pValue: DWord): HResult; stdcall;
  3547.     function BeginStateBlock: HResult; stdcall;
  3548.     function EndStateBlock(out pToken: DWord): HResult; stdcall;
  3549.     function ApplyStateBlock(Token: DWord): HResult; stdcall;
  3550.     function CaptureStateBlock(Token: DWord): HResult; stdcall;
  3551.     function DeleteStateBlock(Token: DWord): HResult; stdcall;
  3552.     function CreateStateBlock(_Type: TD3DStateBlockType; out Token: DWord): HResult; stdcall;
  3553.     function SetClipStatus(const pClipStatus: TD3DClipStatus8): HResult; stdcall;
  3554.     function GetClipStatus(out pClipStatus: TD3DClipStatus8): HResult; stdcall;
  3555.     function GetTexture(Stage: DWord; out ppTexture: IDirect3DBaseTexture8): HResult; stdcall;
  3556.     function SetTexture(Stage: DWord; pTexture: IDirect3DBaseTexture8): HResult; stdcall;
  3557.     function GetTextureStageState(Stage: DWord; _Type: TD3DTextureStageStateType; out pValue: DWord): HResult; stdcall;
  3558.     function SetTextureStageState(Stage: DWord; _Type: TD3DTextureStageStateType; Value: DWord): HResult; stdcall;
  3559.     function ValidateDevice(out pNumPasses: DWord): HResult; stdcall;
  3560.     function GetInfo(DevInfoID: DWord; out pDevInfoStruct; DevInfoStructSize: DWord): HResult; stdcall;
  3561.     function SetPaletteEntries(PaletteNumber: LongWord; pEntries: pPaletteEntry): HResult; stdcall;
  3562.     function GetPaletteEntries(PaletteNumber: LongWord; pEntries: pPaletteEntry): HResult; stdcall;
  3563.     function SetCurrentTexturePalette(PaletteNumber: LongWord): HResult; stdcall;
  3564.     function GetCurrentTexturePalette(out PaletteNumber: LongWord): HResult; stdcall;
  3565.     function DrawPrimitive(PrimitiveType: TD3DPrimitiveType; StartVertex, PrimitiveCount: LongWord): HResult; stdcall;
  3566.     function DrawIndexedPrimitive(_Type: TD3DPrimitiveType; minIndex, NumVertices, startIndex, primCount: LongWord): HResult; stdcall;
  3567.     function DrawPrimitiveUP(PrimitiveType: TD3DPrimitiveType; PrimitiveCount: LongWord; const pVertexStreamZeroData; VertexStreamZeroStride: LongWord): HResult; stdcall;
  3568.     function DrawIndexedPrimitiveUP(PrimitiveType: TD3DPrimitiveType; MinVertexIndex, NumVertexIndices, PrimitiveCount: LongWord; const pIndexData; IndexDataFormat: TD3DFormat; const pVertexStreamZeroData; VertexStreamZeroStride: LongWord): HResult; stdcall;
  3569.     function ProcessVertices(SrcStartIndex, DestIndex, VertexCount: LongWord; pDestBuffer: IDirect3DVertexBuffer8; Flags: DWord): HResult; stdcall;
  3570.     function CreateVertexShader(pDeclaration, pFunction: PDWord; out pHandle: DWord; Usage: DWord): HResult; stdcall;
  3571.     function SetVertexShader(Handle: DWord): HResult; stdcall;
  3572.     function GetVertexShader(out pHandle: DWord): HResult; stdcall;
  3573.     function DeleteVertexShader(Handle: DWord): HResult; stdcall;
  3574.     function SetVertexShaderConstant(_Register: DWord; const pConstantData; ConstantCount: DWord): HResult; stdcall;
  3575.     function GetVertexShaderConstant(_Register: DWord; out pConstantData; ConstantCount: DWord): HResult; stdcall;
  3576.     function GetVertexShaderDeclaration(Handle: DWord; pData: Pointer; out pSizeOfData: DWord): HResult; stdcall;
  3577.     function GetVertexShaderFunction(Handle: DWord; pData: Pointer; out pSizeOfData: DWord): HResult; stdcall;
  3578.     function SetStreamSource(StreamNumber: LongWord; pStreamData: IDirect3DVertexBuffer8; Stride: LongWord): HResult; stdcall;
  3579.     function GetStreamSource(StreamNumber: LongWord; out ppStreamData: IDirect3DVertexBuffer8; out pStride: LongWord): HResult; stdcall;
  3580.     function SetIndices(pIndexData: IDirect3DIndexBuffer8; BaseVertexIndex: LongWord): HResult; stdcall;
  3581.     function GetIndices(out ppIndexData: IDirect3DIndexBuffer8; out pBaseVertexIndex: LongWord): HResult; stdcall;
  3582.     function CreatePixelShader(pFunction: PDWord; out pHandle: DWord): HResult; stdcall;
  3583.     function SetPixelShader(Handle: DWord): HResult; stdcall;
  3584.     function GetPixelShader(out Handle: DWord): HResult; stdcall;
  3585.     function DeletePixelShader(Handle: DWord): HResult; stdcall;
  3586.     function SetPixelShaderConstant(_Register: DWord; const pConstantData; ConstantCount: DWord): HResult; stdcall;
  3587.     function GetPixelShaderConstant(_Register: DWord; out pConstantData; ConstantCount: DWord): HResult; stdcall;
  3588.     function GetPixelShaderFunction(Handle: DWord; pData: Pointer; var pSizeOfData: DWord): HResult; stdcall;
  3589.     function DrawRectPatch(Handle: LongWord; pNumSegs: PSingle; pTriPatchInfo: PD3DRectPatchInfo): HResult; stdcall;
  3590.     function DrawTriPatch(Handle: LongWord; pNumSegs: PSingle; pTriPatchInfo: PD3DTriPatchInfo): HResult; stdcall;
  3591.     function DeletePatch(Handle: LongWord): HResult; stdcall;
  3592.   end;
  3593.  
  3594.  
  3595.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DSwapChain8);'}
  3596.   {$EXTERNALSYM IDirect3DSwapChain8}
  3597.   IDirect3DSwapChain8 = interface(IUnknown)
  3598.     ['{928C088B-76B9-4C6B-A536-A590853876CD}']
  3599.     (*** IDirect3DSwapChain8 methods ***)
  3600.     function Present(pSourceRect, pDestRect: PRect; hDestWindowOverride: HWND; pDirtyRegion: PRgnData): HResult; stdcall;
  3601.     function GetBackBuffer(BackBuffer: LongWord; _Type: TD3DBackBufferType; out ppBackBuffer: IDirect3DSurface8): HResult; stdcall;
  3602.   end;
  3603.  
  3604.  
  3605.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DResource8);'}
  3606.   {$EXTERNALSYM IDirect3DResource8}
  3607.   IDirect3DResource8 = interface(IUnknown)
  3608.     ['{1B36BB7B-09B7-410a-B445-7D1430D7B33F}']
  3609.     (*** IDirect3DResource8 methods ***)
  3610.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  3611.     function SetPrivateData(const refguid: TGUID; const pData; SizeOfData, Flags: DWord): HResult; stdcall;
  3612.     function GetPrivateData(const refguid: TGUID; pData: Pointer; out pSizeOfData: DWord): HResult; stdcall;
  3613.     function FreePrivateData(const refguid: TGUID): HResult; stdcall;
  3614.     function SetPriority(PriorityNew: DWord): DWord; stdcall;
  3615.     function GetPriority: DWord; stdcall;
  3616.     procedure PreLoad; stdcall;
  3617.     function GetType: TD3DResourceType; stdcall;
  3618.   end;
  3619.  
  3620.  
  3621.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DBaseTexture8);'}
  3622.   {$EXTERNALSYM IDirect3DBaseTexture8}
  3623.   IDirect3DBaseTexture8 = interface(IDirect3DResource8)
  3624.     ['{B4211CFA-51B9-4a9f-AB78-DB99B2BB678E}']
  3625.     (*** IDirect3DBaseTexture8 methods ***)
  3626.     function SetLOD(LODNew: DWord): DWord; stdcall;
  3627.     function GetLOD: DWord; stdcall;
  3628.     function GetLevelCount: DWord; stdcall;
  3629.   end;
  3630.  
  3631.  
  3632.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DTexture8);'}
  3633.   {$EXTERNALSYM IDirect3DTexture8}
  3634.   IDirect3DTexture8 = interface(IDirect3DBaseTexture8)
  3635.     ['{E4CDD575-2866-4f01-B12E-7EECE1EC9358}']
  3636.     (*** IDirect3DTexture8 methods ***)
  3637.     function GetLevelDesc(Level: LongWord; out pDesc: TD3DSurfaceDesc): HResult; stdcall;
  3638.     function GetSurfaceLevel(Level: LongWord; out ppSurfaceLevel: IDirect3DSurface8): HResult; stdcall;
  3639.     function LockRect(Level: LongWord; out pLockedRect: TD3DLockedRect; pRect: PRect; Flags: DWord): HResult; stdcall;
  3640.     function UnlockRect(Level: LongWord): HResult; stdcall;
  3641.     function AddDirtyRect(pDirtyRect: PRect): HResult; stdcall;
  3642.   end;
  3643.  
  3644.  
  3645.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVolumeTexture8);'}
  3646.   {$EXTERNALSYM IDirect3DVolumeTexture8}
  3647.   IDirect3DVolumeTexture8 = interface(IDirect3DBaseTexture8)
  3648.     ['{E4CDD575-2866-4f01-B12E-7EECE1EC9358}']
  3649.     (*** IDirect3DVolumeTexture8 methods ***)
  3650.     function GetLevelDesc(Level: LongWord; out pDesc: TD3DVolumeDesc): HResult; stdcall;
  3651.     function GetVolumeLevel(Level: LongWord; out ppVolumeLevel: IDirect3DVolume8): HResult; stdcall;
  3652.     function LockBox(Level: LongWord; out pLockedVolume: TD3DLockedBox; pBox: PD3DBox; Flags: DWord): HResult; stdcall;
  3653.     function UnlockBox(Level: LongWord): HResult; stdcall;
  3654.     function AddDirtyBox(pDirtyBox: PD3DBox): HResult; stdcall;
  3655.   end;
  3656.  
  3657.  
  3658.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DCubeTexture8);'}
  3659.   {$EXTERNALSYM IDirect3DCubeTexture8}
  3660.   IDirect3DCubeTexture8 = interface(IDirect3DBaseTexture8)
  3661.     ['{3EE5B968-2ACA-4c34-8BB5-7E0C3D19B750}']
  3662.     (*** IDirect3DCubeTexture8 methods ***)
  3663.     function GetLevelDesc(Level: LongWord; out pDesc: TD3DSurfaceDesc): HResult; stdcall;
  3664.     function GetCubeMapSurface(FaceType: TD3DCubeMapFaces; Level: LongWord; out ppCubeMapSurface: IDirect3DSurface8): HResult; stdcall;
  3665.     function LockRect(FaceType: TD3DCubeMapFaces; Level: LongWord; out pLockedRect: TD3DLockedRect; pRect: PRect; Flags: DWord): HResult; stdcall;
  3666.     function UnlockRect(FaceType: TD3DCubeMapFaces; Level: LongWord): HResult; stdcall;
  3667.     function AddDirtyRect(FaceType: TD3DCubeMapFaces; pDirtyRect: PRect): HResult; stdcall;
  3668.   end;
  3669.  
  3670.  
  3671.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVertexBuffer8);'}
  3672.   {$EXTERNALSYM IDirect3DVertexBuffer8}
  3673.   IDirect3DVertexBuffer8 = interface(IDirect3DResource8)
  3674.     ['{8AEEEAC7-05F9-44d4-B591-000B0DF1CB95}']
  3675.     (*** IDirect3DVertexBuffer8 methods ***)
  3676.     function Lock(OffsetToLock, SizeToLock: LongWord; out ppbData: PByte; Flags: DWord): HResult; stdcall;
  3677.     function Unlock: HResult; stdcall;
  3678.     function GetDesc(out pDesc: TD3DVertexBufferDesc): HResult; stdcall;
  3679.   end;
  3680.  
  3681.  
  3682.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DIndexBuffer8);'}
  3683.   {$EXTERNALSYM IDirect3DIndexBuffer8}
  3684.   IDirect3DIndexBuffer8 = interface(IDirect3DResource8)
  3685.     ['{0E689C9A-053D-44a0-9D92-DB0E3D750F86}']
  3686.     (*** IDirect3DIndexBuffer8 methods ***)
  3687.     function Lock(OffsetToLock, SizeToLock: DWord; out ppbData: PByte; Flags: DWord): HResult; stdcall;
  3688.     function Unlock: HResult; stdcall;
  3689.     function GetDesc(out pDesc: TD3DIndexBufferDesc): HResult; stdcall;
  3690.   end;
  3691.  
  3692.  
  3693.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DSurface8);'}
  3694.   {$EXTERNALSYM IDirect3DSurface8}
  3695.   IDirect3DSurface8 = interface(IUnknown)
  3696.     ['{B96EEBCA-B326-4ea5-882F-2FF5BAE021DD}']
  3697.     (*** IDirect3DSurface8 methods ***)
  3698.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  3699.     function SetPrivateData(const refguid: TGUID; const pData; SizeOfData, Flags: DWord): HResult; stdcall;
  3700.     function GetPrivateData(const refguid: TGUID; pData: Pointer; out pSizeOfData: DWord): HResult; stdcall;
  3701.     function FreePrivateData(const refguid: TGUID): HResult; stdcall;
  3702.     function GetContainer(const riid: TGUID; out ppContainer: Pointer): HResult; stdcall;
  3703.     function GetDesc(out pDesc: TD3DSurfaceDesc): HResult; stdcall;
  3704.     function LockRect(out pLockedRect: TD3DLockedRect; pRect: PRect; Flags: DWord): HResult; stdcall;
  3705.     function UnlockRect: HResult; stdcall;
  3706.   end;
  3707.  
  3708.  
  3709.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVolume8);'}
  3710.   {$EXTERNALSYM IDirect3DVolume8}
  3711.   IDirect3DVolume8 = interface(IUnknown)
  3712.     ['{BD7349F5-14F1-42e4-9C79-972380DB40C0}']
  3713.     (*** IDirect3DVolume8 methods ***)
  3714.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  3715.     function SetPrivateData(const refguid: TGUID; const pData; SizeOfData, Flags: DWord): HResult; stdcall;
  3716.     function GetPrivateData(const refguid: TGUID; pData: Pointer; out pSizeOfData: DWord): HResult; stdcall;
  3717.     function FreePrivateData(const refguid: TGUID): HResult; stdcall;
  3718.     function GetContainer(const riid: TGUID; var ppContainer: Pointer): HResult; stdcall;
  3719.     function GetDesc(out pDesc: TD3DVolumeDesc): HResult; stdcall;
  3720.     function LockBox(out pLockedVolume: TD3DLockedBox; pBox: PD3DBox; Flags: DWord): HResult; stdcall;
  3721.     function UnlockBox: HResult; stdcall;
  3722.   end;
  3723.  
  3724.  
  3725.  
  3726. (*
  3727.  * Interface IID's
  3728.  *)
  3729. type
  3730.   IID_IDirect3D8              = IDirect3D8;
  3731.   {$EXTERNALSYM IID_IDirect3D8}
  3732.   IID_IDirect3DDevice8        = IDirect3DDevice8;
  3733.   {$EXTERNALSYM IID_IDirect3DDevice8}
  3734.   IID_IDirect3DResource8      = IDirect3DResource8;
  3735.   {$EXTERNALSYM IID_IDirect3DResource8}
  3736.   IID_IDirect3DBaseTexture8   = IDirect3DBaseTexture8;
  3737.   {$EXTERNALSYM IID_IDirect3DBaseTexture8}
  3738.   IID_IDirect3DTexture8       = IDirect3DTexture8;
  3739.   {$EXTERNALSYM IID_IDirect3DTexture8}
  3740.   IID_IDirect3DCubeTexture8   = IDirect3DCubeTexture8;
  3741.   {$EXTERNALSYM IID_IDirect3DCubeTexture8}
  3742.   IID_IDirect3DVolumeTexture8 = IDirect3DVolumeTexture8;
  3743.   {$EXTERNALSYM IID_IDirect3DVolumeTexture8}
  3744.   IID_IDirect3DVertexBuffer8  = IDirect3DVertexBuffer8;
  3745.   {$EXTERNALSYM IID_IDirect3DVertexBuffer8}
  3746.   IID_IDirect3DIndexBuffer8   = IDirect3DIndexBuffer8;
  3747.   {$EXTERNALSYM IID_IDirect3DIndexBuffer8}
  3748.   IID_IDirect3DSurface8       = IDirect3DSurface8;
  3749.   {$EXTERNALSYM IID_IDirect3DSurface8}
  3750.   IID_IDirect3DVolume8        = IDirect3DVolume8;
  3751.   {$EXTERNALSYM IID_IDirect3DVolume8}
  3752.   IID_IDirect3DSwapChain8     = IDirect3DSwapChain8;
  3753.   {$EXTERNALSYM IID_IDirect3DSwapChain8}
  3754.  
  3755.  
  3756. const
  3757. {****************************************************************************
  3758.  * Flags for SetPrivateData method on all D3D8 interfaces
  3759.  *
  3760.  * The passed pointer is an IUnknown ptr. The SizeOfData argument to SetPrivateData
  3761.  * must be set to sizeof(IUnknown*). Direct3D will call AddRef through this
  3762.  * pointer and Release when the private data is destroyed. The data will be
  3763.  * destroyed when another SetPrivateData with the same GUID is set, when
  3764.  * FreePrivateData is called, or when the D3D8 object is freed.
  3765.  ****************************************************************************}
  3766.   D3DSPD_IUNKNOWN                         = $00000001;
  3767.   {$EXTERNALSYM D3DSPD_IUNKNOWN}
  3768.  
  3769. (****************************************************************************
  3770.  *
  3771.  * Parameter for IDirect3D8 Enum and GetCaps8 functions to get the info for
  3772.  * the current mode only.
  3773.  *
  3774.  ****************************************************************************)
  3775.  
  3776.   D3DCURRENT_DISPLAY_MODE                 = $00EFFFFF;
  3777.   {$EXTERNALSYM D3DCURRENT_DISPLAY_MODE}
  3778.  
  3779. (****************************************************************************
  3780.  *
  3781.  * Flags for IDirect3D8::CreateDevice's BehaviorFlags
  3782.  *
  3783.  ****************************************************************************)
  3784.  
  3785.   D3DCREATE_FPU_PRESERVE                  = $00000002;
  3786.   {$EXTERNALSYM D3DCREATE_FPU_PRESERVE}
  3787.   D3DCREATE_MULTITHREADED                 = $00000004;
  3788.   {$EXTERNALSYM D3DCREATE_MULTITHREADED}
  3789.  
  3790.   D3DCREATE_PUREDEVICE                    = $00000010;
  3791.   {$EXTERNALSYM D3DCREATE_PUREDEVICE}
  3792.   D3DCREATE_SOFTWARE_VERTEXPROCESSING     = $00000020;
  3793.   {$EXTERNALSYM D3DCREATE_SOFTWARE_VERTEXPROCESSING}
  3794.   D3DCREATE_HARDWARE_VERTEXPROCESSING     = $00000040;
  3795.   {$EXTERNALSYM D3DCREATE_HARDWARE_VERTEXPROCESSING}
  3796.   D3DCREATE_MIXED_VERTEXPROCESSING        = $00000080;
  3797.   {$EXTERNALSYM D3DCREATE_MIXED_VERTEXPROCESSING}
  3798.  
  3799.   D3DCREATE_DISABLE_DRIVER_MANAGEMENT     = $00000100;
  3800.   {$EXTERNALSYM D3DCREATE_DISABLE_DRIVER_MANAGEMENT}
  3801.  
  3802.  
  3803. (****************************************************************************
  3804.  *
  3805.  * Parameter for IDirect3D8::CreateDevice's iAdapter
  3806.  *
  3807.  ****************************************************************************)
  3808.  
  3809.   D3DADAPTER_DEFAULT                      = 0;
  3810.   {$EXTERNALSYM D3DADAPTER_DEFAULT}
  3811.  
  3812. (****************************************************************************
  3813.  *
  3814.  * Flags for IDirect3D8::EnumAdapters
  3815.  *
  3816.  ****************************************************************************)
  3817.  
  3818.   D3DENUM_NO_WHQL_LEVEL                   = $00000002;
  3819.   {$EXTERNALSYM D3DENUM_NO_WHQL_LEVEL}
  3820.  
  3821. (****************************************************************************
  3822.  *
  3823.  * Maximum number of back-buffers supported in DX8
  3824.  *
  3825.  ****************************************************************************)
  3826.  
  3827.   D3DPRESENT_BACK_BUFFERS_MAX             = 3;
  3828.   {$EXTERNALSYM D3DPRESENT_BACK_BUFFERS_MAX}
  3829.  
  3830. (****************************************************************************
  3831.  *
  3832.  * Flags for IDirect3DDevice8::SetGammaRamp
  3833.  *
  3834.  ****************************************************************************)
  3835.  
  3836.   D3DSGR_NO_CALIBRATION                  = $00000000;
  3837.   {$EXTERNALSYM D3DSGR_NO_CALIBRATION}
  3838.   D3DSGR_CALIBRATE                       = $00000001;
  3839.   {$EXTERNALSYM D3DSGR_CALIBRATE}
  3840.  
  3841. (****************************************************************************
  3842.  *
  3843.  * Flags for IDirect3DDevice8::SetCursorPosition
  3844.  *
  3845.  ****************************************************************************)
  3846.  
  3847.   D3DCURSOR_IMMEDIATE_UPDATE             = $00000001;
  3848.   {$EXTERNALSYM D3DCURSOR_IMMEDIATE_UPDATE}
  3849.  
  3850. (****************************************************************************
  3851.  *
  3852.  * Flags for DrawPrimitive/DrawIndexedPrimitive
  3853.  *   Also valid for Begin/BeginIndexed
  3854.  *   Also valid for VertexBuffer::CreateVertexBuffer
  3855.  ****************************************************************************)
  3856.  
  3857.  
  3858. (*
  3859.  *  DirectDraw error codes
  3860.  *)
  3861.   _FACD3D = $876;
  3862.   {$EXTERNALSYM _FACD3D}
  3863.  
  3864. //#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )
  3865. function MAKE_D3DHRESULT(Code: DWord): DWord;
  3866. {$EXTERNALSYM MAKE_D3DHRESULT}
  3867.  
  3868. const
  3869.   MAKE_D3DHRESULT_R     = (1 shl 31) or (_FACD3D shl 16);
  3870.  
  3871. (*
  3872.  * Direct3D Errors
  3873.  *)
  3874.   D3D_OK                                  = S_OK;
  3875.   {$EXTERNALSYM D3D_OK}
  3876.  
  3877.   D3DERR_WRONGTEXTUREFORMAT               = HResult(MAKE_D3DHRESULT_R or 2072);
  3878.   {$EXTERNALSYM D3DERR_WRONGTEXTUREFORMAT}
  3879.   D3DERR_UNSUPPORTEDCOLOROPERATION        = HResult(MAKE_D3DHRESULT_R or 2073);
  3880.   {$EXTERNALSYM D3DERR_UNSUPPORTEDCOLOROPERATION}
  3881.   D3DERR_UNSUPPORTEDCOLORARG              = HResult(MAKE_D3DHRESULT_R or 2074);
  3882.   {$EXTERNALSYM D3DERR_UNSUPPORTEDCOLORARG}
  3883.   D3DERR_UNSUPPORTEDALPHAOPERATION        = HResult(MAKE_D3DHRESULT_R or 2075);
  3884.   {$EXTERNALSYM D3DERR_UNSUPPORTEDALPHAOPERATION}
  3885.   D3DERR_UNSUPPORTEDALPHAARG              = HResult(MAKE_D3DHRESULT_R or 2076);
  3886.   {$EXTERNALSYM D3DERR_UNSUPPORTEDALPHAARG}
  3887.   D3DERR_TOOMANYOPERATIONS                = HResult(MAKE_D3DHRESULT_R or 2077);
  3888.   {$EXTERNALSYM D3DERR_TOOMANYOPERATIONS}
  3889.   D3DERR_CONFLICTINGTEXTUREFILTER         = HResult(MAKE_D3DHRESULT_R or 2078);
  3890.   {$EXTERNALSYM D3DERR_CONFLICTINGTEXTUREFILTER}
  3891.   D3DERR_UNSUPPORTEDFACTORVALUE           = HResult(MAKE_D3DHRESULT_R or 2079);
  3892.   {$EXTERNALSYM D3DERR_UNSUPPORTEDFACTORVALUE}
  3893.   D3DERR_CONFLICTINGRENDERSTATE           = HResult(MAKE_D3DHRESULT_R or 2081);
  3894.   {$EXTERNALSYM D3DERR_CONFLICTINGRENDERSTATE}
  3895.   D3DERR_UNSUPPORTEDTEXTUREFILTER         = HResult(MAKE_D3DHRESULT_R or 2082);
  3896.   {$EXTERNALSYM D3DERR_UNSUPPORTEDTEXTUREFILTER}
  3897.   D3DERR_CONFLICTINGTEXTUREPALETTE        = HResult(MAKE_D3DHRESULT_R or 2086);
  3898.   {$EXTERNALSYM D3DERR_CONFLICTINGTEXTUREPALETTE}
  3899.   D3DERR_DRIVERINTERNALERROR              = HResult(MAKE_D3DHRESULT_R or 2087);
  3900.   {$EXTERNALSYM D3DERR_DRIVERINTERNALERROR}
  3901.  
  3902.   D3DERR_NOTFOUND                         = HResult(MAKE_D3DHRESULT_R or 2150);
  3903.   {$EXTERNALSYM D3DERR_NOTFOUND}
  3904.   D3DERR_MOREDATA                         = HResult(MAKE_D3DHRESULT_R or 2151);
  3905.   {$EXTERNALSYM D3DERR_MOREDATA}
  3906.   D3DERR_DEVICELOST                       = HResult(MAKE_D3DHRESULT_R or 2152);
  3907.   {$EXTERNALSYM D3DERR_DEVICELOST}
  3908.   D3DERR_DEVICENOTRESET                   = HResult(MAKE_D3DHRESULT_R or 2153);
  3909.   {$EXTERNALSYM D3DERR_DEVICENOTRESET}
  3910.   D3DERR_NOTAVAILABLE                     = HResult(MAKE_D3DHRESULT_R or 2154);
  3911.   {$EXTERNALSYM D3DERR_NOTAVAILABLE}
  3912.   D3DERR_OUTOFVIDEOMEMORY                 = HResult(MAKE_D3DHRESULT_R or 380);
  3913.   {$EXTERNALSYM D3DERR_OUTOFVIDEOMEMORY}
  3914.   D3DERR_INVALIDDEVICE                    = HResult(MAKE_D3DHRESULT_R or 2155);
  3915.   {$EXTERNALSYM D3DERR_INVALIDDEVICE}
  3916.   D3DERR_INVALIDCALL                      = HResult(MAKE_D3DHRESULT_R or 2156);
  3917.   {$EXTERNALSYM D3DERR_INVALIDCALL}
  3918.   D3DERR_DRIVERINVALIDCALL                = HResult(MAKE_D3DHRESULT_R or 2157);
  3919.   {$EXTERNALSYM D3DERR_DRIVERINVALIDCALL}
  3920.  
  3921.  
  3922.  
  3923. (*
  3924.  * DLL Function for creating a Direct3D8 object. This object supports
  3925.  * enumeration and allows the creation of Direct3DDevice8 objects.
  3926.  * Pass the value of the constant D3D_SDK_VERSION to this function, so
  3927.  * that the run-time can validate that your application was compiled
  3928.  * against the right headers.
  3929.  *)
  3930.  
  3931. function Direct3D8Loaded: Boolean;
  3932. function LoadDirect3D8: Boolean;
  3933. function UnLoadDirect3D8: Boolean;
  3934.  
  3935. // Due to the way Object Pascal handles functions resulting in 'native' interface
  3936. // pointer we should declare result not as interface but as usial pointer
  3937.  
  3938. {$IFDEF DIRECT3D8_DYNAMIC_LINK}
  3939. type
  3940.   TDirect3DCreate8 = function (SDKVersion: LongWord): Pointer; stdcall;
  3941.  
  3942. var
  3943.   _Direct3DCreate8: TDirect3DCreate8 = nil;
  3944.  
  3945. {$ELSE}
  3946. function _Direct3DCreate8(SDKVersion: LongWord): Pointer; stdcall;
  3947. {$ENDIF}
  3948.  
  3949. function Direct3DCreate8(SDKVersion: LongWord): IDirect3D8; stdcall;
  3950. {$EXTERNALSYM Direct3DCreate8}
  3951.  
  3952.  
  3953. //********************************************************************
  3954. // Introduced types for compatibility with DirectXGraphics.pas translation
  3955. // by Ampaze (Tim Baumgarten) from http://www.crazyentertainment.net
  3956. type
  3957.   PD3DAdapter_Identifier8               = PD3DAdapterIdentifier8;
  3958.   PD3DDevice_Creation_Parameters        = PD3DDeviceCreationParameters;
  3959.   PD3DIndexBuffer_Desc                  = PD3DIndexBufferDesc;
  3960.   PD3DLocked_Box                        = PD3DLockedBox;
  3961.   PD3DLocked_Rect                       = PD3DLockedRect;
  3962.   PD3DPresent_Parameters                = PD3DPresentParameters;
  3963.   PD3DRaster_Status                     = PD3DRasterStatus;
  3964.   PD3DRectPatch_Info                    = PD3DRectPatchInfo;
  3965.   PD3DSurface_Desc                      = PD3DSurfaceDesc;
  3966.   PD3DTriPatch_Info                     = PD3DTriPatchInfo;
  3967.   PD3DVertexBuffer_Desc                 = PD3DVertexBufferDesc;
  3968.   PD3DVolume_Desc                       = PD3DVolumeDesc;
  3969.  
  3970.   TD3DAdapter_Identifier8               = TD3DAdapterIdentifier8;
  3971.   TD3DBackBuffer_Type                   = TD3DBackBufferType;
  3972.   TD3DCubeMap_Faces                     = TD3DCubeMapFaces;
  3973.   TD3DDevice_Creation_Parameters        = TD3DDeviceCreationParameters;
  3974.   TD3DIndexBuffer_Desc                  = TD3DIndexBufferDesc;
  3975.   TD3DLocked_Box                        = TD3DLockedBox;
  3976.   TD3DLocked_Rect                       = TD3DLockedRect;
  3977.   TD3DMultiSample_Type                  = TD3DMultiSampleType;
  3978.   TD3DPresent_Parameters                = TD3DPresentParameters;
  3979.   TD3DRaster_Status                     = TD3DRasterStatus;
  3980.   TD3DRectPatch_Info                    = TD3DRectPatchInfo;
  3981.   TD3DShader_Instruction_Opcode_Type    = TD3DShaderInstructionOpcodeType;
  3982.   TD3DShader_Param_DSTMod_Type          = TD3DShaderParamDSTModType;
  3983.   TD3DShader_Param_Register_Type        = TD3DShaderParamRegisterType;
  3984.   TD3DShader_Param_SRCMod_Type          = TD3DShaderParamSRCModType;
  3985.   TD3DSurface_Desc                      = TD3DSurfaceDesc;
  3986.   TD3DTriPatch_Info                     = TD3DTriPatchInfo;
  3987.   TD3DVertexBuffer_Desc                 = TD3DVertexBufferDesc;
  3988.   TD3DVolume_Desc                       = TD3DVolumeDesc;
  3989.   TD3DVSD_TokenType                     = TD3DVSDTokenType;
  3990.   TD3DVS_AddressMode_Type               = TD3DVSAddressModeType;
  3991.   TD3DVS_RastOut_Offsets                = TD3DVSRastOutOffsets;
  3992.  
  3993.   TD3DDevInfo_ResourceManager           = TD3DDevInfoResourceManager;
  3994.   TD3DDevInfo_D3DVertexStats            = TD3DDevInfoD3DVertexStats;
  3995.  
  3996.   PD3DDevInfo_ResourceManager           = PD3DDevInfoResourceManager;
  3997.   PD3DDevInfo_D3DVertexStats            = PD3DDevInfoD3DVertexStats;
  3998.  
  3999.  
  4000. implementation
  4001.  
  4002.  
  4003. (*==========================================================================;
  4004.  *  File:       d3d8types.h
  4005.  *  Content:    Direct3D capabilities include file
  4006.  ***************************************************************************)
  4007.  
  4008. // #define D3DCOLOR_ARGB(a,r,g,b) \
  4009. //     ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
  4010. function D3DCOLOR_ARGB(a,r,g,b: DWord): TD3DColor;
  4011. begin
  4012.   Result := (a shl 24) or (r shl 16) or (g shl 8) or b;
  4013. end;
  4014.  
  4015. // #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
  4016. function D3DCOLOR_RGBA(r,g,b,a: DWord): TD3DColor;
  4017. begin
  4018.   Result := (a shl 24) or (r shl 16) or (g shl 8) or b;
  4019. end;
  4020.  
  4021. // #define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)
  4022. function D3DCOLOR_XRGB(r,g,b: DWord): TD3DColor;
  4023. begin
  4024.   Result := DWORD($FF shl 24) or (r shl 16) or (g shl 8) or b;
  4025. end;
  4026.  
  4027. // #define D3DCOLOR_COLORVALUE(r,g,b,a) \
  4028. //     D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
  4029. function D3DCOLOR_COLORVALUE(r,g,b,a: Single): TD3DColor;
  4030. begin
  4031.   Result :=
  4032.     (round(a * 255) shl 24) or
  4033.     (round(r * 255) shl 16) or
  4034.     (round(g * 255) shl 8) or
  4035.     (round(b * 255));
  4036. end;
  4037.  
  4038. // #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
  4039. function D3DTS_WORLDMATRIX(index: Byte): TD3DTransformStateType;
  4040. begin
  4041.   Result:= TD3DTransformStateType(index + 256);
  4042. end;
  4043.  
  4044. // D3DVSD_MAKETOKENTYPE(tokenType) ((tokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)
  4045. function D3DVSD_MAKETOKENTYPE(tokenType: TD3DVSDTokenType): DWord;
  4046. begin
  4047.   Result:= ((DWord(tokenType) shl D3DVSD_TOKENTYPESHIFT) and D3DVSD_TOKENTYPEMASK);
  4048. end;
  4049.  
  4050. //#define D3DVSD_STREAM( _StreamNumber ) \
  4051. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (_StreamNumber))
  4052. function D3DVSD_STREAM(_StreamNumber: DWord): DWord;
  4053. begin
  4054.   Result:= D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) or _StreamNumber;
  4055. end;
  4056.  
  4057. //#define D3DVSD_REG( _VertexRegister, _Type ) \
  4058. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) |            \
  4059. //     ((_Type) << D3DVSD_DATATYPESHIFT) | (_VertexRegister))
  4060. function D3DVSD_REG( _VertexRegister, _Type: DWord): DWord;
  4061. begin
  4062.   Result:= D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) or ((_Type shl D3DVSD_DATATYPESHIFT) or _VertexRegister);
  4063. end;
  4064.  
  4065. //#define D3DVSD_SKIP( _DWORDCount ) \
  4066. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | \
  4067. //     ((_DWORDCount) << D3DVSD_SKIPCOUNTSHIFT))
  4068. function D3DVSD_SKIP(_DWORDCount: DWord): DWord;
  4069. begin
  4070.   Result:= D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) or $10000000 or (_DWORDCount shl D3DVSD_SKIPCOUNTSHIFT);
  4071. end;
  4072.  
  4073. //#define D3DVSD_CONST( _ConstantAddress, _Count ) \
  4074. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | \
  4075. //     ((_Count) << D3DVSD_CONSTCOUNTSHIFT) | (_ConstantAddress))
  4076. function D3DVSD_CONST(_ConstantAddress, _Count: DWord): DWord;
  4077. begin
  4078.   Result:= D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) or (_Count shl D3DVSD_CONSTCOUNTSHIFT) or _ConstantAddress;
  4079. end;
  4080.  
  4081. //#define D3DVSD_TESSNORMAL( _VertexRegisterIn, _VertexRegisterOut ) \
  4082. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | \
  4083. //     ((_VertexRegisterIn) << D3DVSD_VERTEXREGINSHIFT) | \
  4084. //     ((0x02) << D3DVSD_DATATYPESHIFT) | (_VertexRegisterOut))
  4085. function D3DVSD_TESSNORMAL(_VertexRegisterIn, _VertexRegisterOut: DWord): DWord;
  4086. begin
  4087.   Result:= D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) or
  4088.            (_VertexRegisterIn shl D3DVSD_VERTEXREGINSHIFT) or
  4089.            ($02 shl D3DVSD_DATATYPESHIFT) or _VertexRegisterOut;
  4090. end;
  4091.  
  4092. //#define D3DVSD_TESSUV( _VertexRegister ) \
  4093. //    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | \
  4094. //     ((0x01) << D3DVSD_DATATYPESHIFT) | (_VertexRegister))
  4095. function D3DVSD_TESSUV(_VertexRegister: DWord): DWord;
  4096. begin
  4097.   Result:= D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) or $10000000 or
  4098.            ($01 shl D3DVSD_DATATYPESHIFT) or _VertexRegister;
  4099. end;
  4100.  
  4101. //#define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor))
  4102. function D3DPS_VERSION(_Major, _Minor : Cardinal) : Cardinal;
  4103. begin
  4104.   Result:= $FFFF0000 or (_Major shl 8 ) or _Minor;
  4105. end;
  4106.  
  4107. //#define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor))
  4108. function D3DVS_VERSION(_Major, _Minor : Cardinal) : Cardinal;
  4109. begin
  4110.   Result:= $FFFE0000 or (_Major shl 8 ) or _Minor;
  4111. end;
  4112.  
  4113. //#define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)
  4114. function D3DSHADER_VERSION_MAJOR(_Version : Cardinal) : Cardinal;
  4115. begin
  4116.   Result:= (_Version shr 8 ) and $FF;
  4117. end;
  4118.  
  4119. //#define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)
  4120. function D3DSHADER_VERSION_MINOR(_Version : Cardinal) : Cardinal;
  4121. begin
  4122.   Result:= (_Version shr 0) and $FF;
  4123. end;
  4124.  
  4125. //#define D3DSHADER_COMMENT(_DWordSize) \
  4126. //    ((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COMMENT)
  4127. function D3DSHADER_COMMENT(_DWordSize: DWord) : DWord;
  4128. begin
  4129.   Result:= ((_DWordSize shl D3DSI_COMMENTSIZE_SHIFT) and D3DSI_COMMENTSIZE_MASK) or D3DSIO_COMMENT;
  4130. end;
  4131.  
  4132. //#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
  4133. function D3DFVF_TEXCOORDSIZE3(CoordIndex: DWord): DWord;
  4134. begin
  4135.   Result:= D3DFVF_TEXTUREFORMAT3 shl (CoordIndex * 2 + 16)
  4136. end;
  4137.  
  4138. //#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
  4139. function D3DFVF_TEXCOORDSIZE2(CoordIndex: DWord): DWord;
  4140. begin
  4141.   Result:= D3DFVF_TEXTUREFORMAT2;
  4142. end;
  4143.  
  4144. //#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
  4145. function D3DFVF_TEXCOORDSIZE4(CoordIndex: DWord): DWord;
  4146. begin
  4147.   Result:= D3DFVF_TEXTUREFORMAT4 shl (CoordIndex * 2 + 16)
  4148. end;
  4149.  
  4150. //#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
  4151. function D3DFVF_TEXCOORDSIZE1(CoordIndex: DWord): DWord;
  4152. begin
  4153.   Result:= D3DFVF_TEXTUREFORMAT1 shl (CoordIndex * 2 + 16)
  4154. end;
  4155.  
  4156. //#ifndef MAKEFOURCC
  4157. //    #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
  4158. //                ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |       \
  4159. //                ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
  4160. //#endif /* defined(MAKEFOURCC) */
  4161. function MAKEFOURCC(ch0, ch1, ch2, ch3: Char): DWord;
  4162. begin
  4163.   Result:= Byte(ch0) or (Byte(ch1) shl 8) or (Byte(ch2) shl 16) or (Byte(ch3) shl 24 );
  4164. end;
  4165.  
  4166.  
  4167. (*==========================================================================;
  4168.  *  File:   d3d8.h
  4169.  *  Content:    Direct3D include file
  4170.  ****************************************************************************)
  4171.  
  4172. //#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )
  4173. function MAKE_D3DHRESULT(Code: DWord): DWord;
  4174. begin
  4175.   Result:= DWord((1 shl 31) or (_FACD3D shl 16)) or Code;
  4176. end;
  4177.  
  4178. const
  4179.   Direct3D8dll = 'd3d8.dll';
  4180.  
  4181. {$IFDEF DIRECT3D8_DYNAMIC_LINK}
  4182. var
  4183.   Direct3D8Lib: THandle = 0;
  4184.  
  4185. function Direct3D8Loaded: Boolean;
  4186. begin
  4187.   Result:= Direct3D8Lib <> 0;
  4188. end;
  4189.  
  4190. function UnLoadDirect3D8: Boolean;
  4191. begin
  4192.   Result:= True;
  4193.   if Direct3D8Loaded then
  4194.   begin
  4195.     Result:= FreeLibrary(Direct3D8Lib);
  4196.     _Direct3DCreate8:= nil;
  4197.     Direct3D8Lib:= 0;
  4198.   end;
  4199. end;
  4200.  
  4201. function LoadDirect3D8: Boolean;
  4202. const
  4203.   ProcName = 'Direct3DCreate8';
  4204. begin
  4205.   Result:= Direct3D8Loaded;
  4206.   if (not Result) then
  4207.   begin
  4208.     Direct3D8Lib:= LoadLibrary(Direct3D8dll);
  4209.     if Direct3D8Loaded then
  4210.     begin
  4211.       _Direct3DCreate8:= GetProcAddress(Direct3D8Lib, ProcName);
  4212.       Result:= Assigned(_Direct3DCreate8);
  4213.       if not Result then UnLoadDirect3D8;
  4214.     end;
  4215.   end;
  4216. end;
  4217. {$ELSE}
  4218. function Direct3D8Loaded: Boolean;
  4219. begin // Stub function for static linking
  4220.   Result:= True;
  4221. end;
  4222.  
  4223. function UnLoadDirect3D8: Boolean;
  4224. begin // Stub function for static linking
  4225.   Result:= True; // should emulate "normal" behaviour
  4226. end;
  4227.  
  4228. function LoadDirect3D8: Boolean;
  4229. begin // Stub function for static linking
  4230.   Result:= True;
  4231. end;
  4232.  
  4233. function _Direct3DCreate8(SDKVersion: LongWord): Pointer; external Direct3D8dll name 'Direct3DCreate8';
  4234. {$ENDIF}
  4235.  
  4236. function Direct3DCreate8(SDKVersion: LongWord): IDirect3D8;
  4237. begin
  4238. {$IFDEF DIRECT3D8_DYNAMIC_LINK}
  4239. {$IFDEF DIRECT3D8_DYNAMIC_LINK_EXPLICIT}
  4240.   LoadDirect3D8;
  4241.  
  4242. {$ENDIF}
  4243. {$ENDIF}
  4244.   Result:= IDirect3D8(_Direct3DCreate8(SDKVersion));
  4245.   if Assigned(Result) then Result._Release; // Delphi autoincrement reference count
  4246. end;
  4247.  
  4248. {$IFDEF DIRECT3D8_DYNAMIC_LINK}
  4249. initialization
  4250. {$IFNDEF DIRECT3D8_DYNAMIC_LINK_EXPLICIT}
  4251.   LoadDirect3D8;
  4252. {$ENDIF}
  4253. finalization
  4254.   UnLoadDirect3D8;
  4255. {$ENDIF}
  4256. end.
  4257.