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

Delphi控件源码

开发平台:

Delphi

  1. {******************************************************************************}
  2. {*                                                                            *}
  3. {*  Copyright (C) Microsoft Corporation.  All Rights Reserved.                *}
  4. {*                                                                            *}
  5. {*  Files:      d3d9types.h d3d9caps.h d3d9.h                                 *}
  6. {*  Content:    Direct3D9 include files                                       *}
  7. {*                                                                            *}
  8. {*  DirectX 9.0 Delphi adaptation by Alexey Barkovoy                          *}
  9. {*  E-Mail: clootie@reactor.ru                                                *}
  10. {*                                                                            *}
  11. {*  Modified: 26-Jan-2003                                                     *}
  12. {*                                                                            *}
  13. {*  Latest version can be downloaded from:                                    *}
  14. {*     http://clootie.narod.ru/delphi                                         *}
  15. {*                                                                            *}
  16. {*  This File contains only Direct3D 9.0 definitions.                         *}
  17. {*  If you want to use previous versions - use Direct3D.pas and Direct3D8.pas *}
  18. {*                                                                            *}
  19. {******************************************************************************}
  20. {                                                                              }
  21. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  22. {                                                                              }
  23. { The contents of this file are used with permission, subject to the Mozilla   }
  24. { Public License Version 1.1 (the "License"); you may not use this file except }
  25. { in compliance with the License. You may obtain a copy of the License at      }
  26. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  27. {                                                                              }
  28. { Software distributed under the License is distributed on an "AS IS" basis,   }
  29. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  30. { the specific language governing rights and limitations under the License.    }
  31. {                                                                              }
  32. { Alternatively, the contents of this file may be used under the terms of the  }
  33. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  34. { provisions of the LGPL License are applicable instead of those above.        }
  35. { If you wish to allow use of your version of this file only under the terms   }
  36. { of the LGPL License and not to allow others to use your version of this file }
  37. { under the MPL, indicate your decision by deleting  the provisions above and  }
  38. { replace  them with the notice and other provisions required by the LGPL      }
  39. { License.  If you do not delete the provisions above, a recipient may use     }
  40. { your version of this file under either the MPL or the LGPL License.          }
  41. {                                                                              }
  42. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  43. {                                                                              }
  44. {******************************************************************************}
  45. {$I DirectX.inc}
  46. unit Direct3D9;
  47. interface
  48. // Global level dynamic loading support
  49. {$IFDEF DYNAMIC_LINK_ALL}
  50.   {$DEFINE DIRECT3D9_DYNAMIC_LINK}
  51. {$ENDIF}
  52. {$IFDEF DYNAMIC_LINK_EXPLICIT_ALL}
  53.   {$DEFINE DIRECT3D9_DYNAMIC_LINK_EXPLICIT}
  54. {$ENDIF}
  55. // Remove "dots" below to force some kind of dynamic linking
  56. {.$DEFINE DIRECT3D9_DYNAMIC_LINK}
  57. {.$DEFINE DIRECT3D9_DYNAMIC_LINK_EXPLICIT}
  58. {$NOINCLUDE DXTypes}
  59. (*$HPPEMIT '#include "d3d9.h"' *)
  60. (*$HPPEMIT '#include "d3d9types.h"' *)
  61. (*$HPPEMIT '#include "d3d9caps.h"' *)
  62. uses Windows, DXTypes;
  63. ///// Helper constants (for use in SetRenderState) /////
  64. const
  65.   iTrue  = DWORD(True);
  66.   iFalse = DWORD(False);
  67. (*==========================================================================;
  68.  *
  69.  *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  70.  *
  71.  *  File:       d3d9types.h
  72.  *  Content:    Direct3D capabilities include file
  73.  *
  74.  ***************************************************************************)
  75. type
  76.   // D3DCOLOR is equivalent to D3DFMT_A8R8G8B8
  77.   D3DCOLOR = DXTypes.D3DCOLOR;
  78.   {$EXTERNALSYM D3DCOLOR}
  79.   TD3DColor = DXTypes.TD3DColor;
  80.   {$NODEFINE TD3DColor}
  81.   {$HPPEMIT 'typedef D3DCOLOR TD3DColor;'}
  82. // maps unsigned 8 bits/channel to D3DCOLOR
  83. // #define D3DCOLOR_ARGB(a,r,g,b) 
  84. //     ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
  85. function D3DCOLOR_ARGB(a,r,g,b: DWord): TD3DColor;
  86. {$EXTERNALSYM D3DCOLOR_ARGB}
  87. // #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
  88. function D3DCOLOR_RGBA(r,g,b,a: DWord): TD3DColor;
  89. {$EXTERNALSYM D3DCOLOR_RGBA}
  90. // #define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)
  91. function D3DCOLOR_XRGB(r,g,b: DWord): TD3DColor;
  92. {$EXTERNALSYM D3DCOLOR_XRGB}
  93. // #define D3DCOLOR_XYUV(y,u,v)   D3DCOLOR_ARGB(0xff,y,u,v)
  94. function D3DCOLOR_XYUV(y,u,v: DWord): TD3DColor;
  95. {$EXTERNALSYM D3DCOLOR_XYUV}
  96. // #define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v)
  97. function D3DCOLOR_AYUV(a,y,u,v: DWord): TD3DColor;
  98. {$EXTERNALSYM D3DCOLOR_AYUV}
  99. // maps floating point channels (0.f to 1.f range) to D3DCOLOR
  100. // #define D3DCOLOR_COLORVALUE(r,g,b,a) 
  101. //     D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
  102. function D3DCOLOR_COLORVALUE(r,g,b,a: Single): TD3DColor;
  103. {$EXTERNALSYM D3DCOLOR_COLORVALUE}
  104. type
  105.   _D3DVECTOR = DXTypes._D3DVECTOR;
  106.   {$EXTERNALSYM _D3DVECTOR}
  107.   D3DVECTOR = DXTypes.D3DVECTOR;
  108.   {$EXTERNALSYM D3DVECTOR}
  109.   TD3DVector = DXTypes.TD3DVector;
  110.   {$NODEFINE TD3DVector}
  111.   PD3DVector = DXTypes.PD3DVector;
  112.   {$NODEFINE PD3DVector}
  113.   {$HPPEMIT 'typedef _D3DVECTOR TD3DVector;'}
  114.   {$HPPEMIT 'typedef _D3DVECTOR *PD3DVector;'}
  115.   PD3DColorValue = ^TD3DColorValue;
  116.   _D3DCOLORVALUE = packed record
  117.     r: Single;
  118.     g: Single;
  119.     b: Single;
  120.     a: Single;
  121.   end {_D3DCOLORVALUE};
  122.   {$EXTERNALSYM _D3DCOLORVALUE}
  123.   D3DCOLORVALUE = _D3DCOLORVALUE;
  124.   {$EXTERNALSYM D3DCOLORVALUE}
  125.   TD3DColorValue = _D3DCOLORVALUE;
  126.   PD3DRect = ^TD3DRect;
  127.   _D3DRECT = packed record
  128.     x1: LongInt;
  129.     y1: LongInt;
  130.     x2: LongInt;
  131.     y2: LongInt;
  132.   end {_D3DRECT};
  133.   {$EXTERNALSYM _D3DRECT}
  134.   D3DRECT = _D3DRECT;
  135.   {$EXTERNALSYM D3DRECT}
  136.   TD3DRect = _D3DRECT;
  137.   PD3DMatrix = ^TD3DMatrix;
  138.   _D3DMATRIX = packed record
  139.     case integer of
  140.       0 : (_11, _12, _13, _14: Single;
  141.            _21, _22, _23, _24: Single;
  142.            _31, _32, _33, _34: Single;
  143.            _41, _42, _43, _44: Single);
  144.       1 : (m : array [0..3, 0..3] of Single);
  145.   end {_D3DMATRIX};
  146.   {$EXTERNALSYM _D3DMATRIX}
  147.   D3DMATRIX = _D3DMATRIX;
  148.   {$EXTERNALSYM D3DMATRIX}
  149.   TD3DMatrix = _D3DMATRIX;
  150.   PD3DViewport9 = ^TD3DViewport9;
  151.   _D3DVIEWPORT9 = packed record
  152.     X: DWord;
  153.     Y: DWord;         { Viewport Top left }
  154.     Width: DWord;
  155.     Height: DWord;    { Viewport Dimensions }
  156.     MinZ: Single;       { Min/max of clip Volume }
  157.     MaxZ: Single;
  158.   end {_D3DVIEWPORT9};
  159.   {$EXTERNALSYM _D3DVIEWPORT9}
  160.   D3DVIEWPORT9 = _D3DVIEWPORT9;
  161.   {$EXTERNALSYM D3DVIEWPORT9}
  162.   TD3DViewport9 = _D3DVIEWPORT9;
  163. (*
  164.  * Values for clip fields.
  165.  *)
  166. const
  167.   // Max number of user clipping planes, supported in D3D.
  168.   D3DMAXUSERCLIPPLANES = 32;
  169.   {$EXTERNALSYM D3DMAXUSERCLIPPLANES}
  170.   // These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE
  171.   //
  172.   D3DCLIPPLANE0 = (1 shl 0);
  173.   {$EXTERNALSYM D3DCLIPPLANE0}
  174.   D3DCLIPPLANE1 = (1 shl 1);
  175.   {$EXTERNALSYM D3DCLIPPLANE1}
  176.   D3DCLIPPLANE2 = (1 shl 2);
  177.   {$EXTERNALSYM D3DCLIPPLANE2}
  178.   D3DCLIPPLANE3 = (1 shl 3);
  179.   {$EXTERNALSYM D3DCLIPPLANE3}
  180.   D3DCLIPPLANE4 = (1 shl 4);
  181.   {$EXTERNALSYM D3DCLIPPLANE4}
  182.   D3DCLIPPLANE5 = (1 shl 5);
  183.   {$EXTERNALSYM D3DCLIPPLANE5}
  184.   // The following bits are used in the ClipUnion and ClipIntersection
  185.   // members of the D3DCLIPSTATUS9
  186.   //
  187.   D3DCS_LEFT    = $00000001;
  188.   {$EXTERNALSYM D3DCS_LEFT}
  189.   D3DCS_RIGHT   = $00000002;
  190.   {$EXTERNALSYM D3DCS_RIGHT}
  191.   D3DCS_TOP     = $00000004;
  192.   {$EXTERNALSYM D3DCS_TOP}
  193.   D3DCS_BOTTOM  = $00000008;
  194.   {$EXTERNALSYM D3DCS_BOTTOM}
  195.   D3DCS_FRONT   = $00000010;
  196.   {$EXTERNALSYM D3DCS_FRONT}
  197.   D3DCS_BACK    = $00000020;
  198.   {$EXTERNALSYM D3DCS_BACK}
  199.   D3DCS_PLANE0  = $00000040;
  200.   {$EXTERNALSYM D3DCS_PLANE0}
  201.   D3DCS_PLANE1  = $00000080;
  202.   {$EXTERNALSYM D3DCS_PLANE1}
  203.   D3DCS_PLANE2  = $00000100;
  204.   {$EXTERNALSYM D3DCS_PLANE2}
  205.   D3DCS_PLANE3  = $00000200;
  206.   {$EXTERNALSYM D3DCS_PLANE3}
  207.   D3DCS_PLANE4  = $00000400;
  208.   {$EXTERNALSYM D3DCS_PLANE4}
  209.   D3DCS_PLANE5  = $00000800;
  210.   {$EXTERNALSYM D3DCS_PLANE5}
  211.   D3DCS_ALL     = D3DCS_LEFT   or
  212.                   D3DCS_RIGHT  or
  213.                   D3DCS_TOP    or
  214.                   D3DCS_BOTTOM or
  215.                   D3DCS_FRONT  or
  216.                   D3DCS_BACK   or
  217.                   D3DCS_PLANE0 or
  218.                   D3DCS_PLANE1 or
  219.                   D3DCS_PLANE2 or
  220.                   D3DCS_PLANE3 or
  221.                   D3DCS_PLANE4 or
  222.                   D3DCS_PLANE5;
  223.   {$EXTERNALSYM D3DCS_ALL}
  224. type
  225.   PD3DClipStatus9 = ^TD3DClipStatus9;
  226.   _D3DCLIPSTATUS9 = packed record
  227.     ClipUnion: DWord;
  228.     ClipIntersection: DWord;
  229.   end {_D3DCLIPSTATUS9};
  230.   {$EXTERNALSYM _D3DCLIPSTATUS9}
  231.   D3DCLIPSTATUS9 = _D3DCLIPSTATUS9;
  232.   {$EXTERNALSYM D3DCLIPSTATUS9}
  233.   TD3DClipStatus9 = _D3DCLIPSTATUS9;
  234.   PD3DMaterial9 = ^TD3DMaterial9;
  235.   _D3DMATERIAL9 = packed record
  236.     Diffuse: TD3DColorValue;   { Diffuse color RGBA }
  237.     Ambient: TD3DColorValue;   { Ambient color RGB }
  238.     Specular: TD3DColorValue;  { Specular 'shininess' }
  239.     Emissive: TD3DColorValue;  { Emissive color RGB }
  240.     Power: Single;             { Sharpness if specular highlight }
  241.   end {_D3DMATERIAL9};
  242.   {$EXTERNALSYM _D3DMATERIAL9}
  243.   D3DMATERIAL9 = _D3DMATERIAL9;
  244.   {$EXTERNALSYM D3DMATERIAL9}
  245.   TD3DMaterial9 = _D3DMATERIAL9;
  246.   _D3DLIGHTTYPE = (
  247.   {$IFNDEF COMPILER6_UP}
  248.     D3DLIGHT_INVALID_0, {= 0}
  249.     D3DLIGHT_POINT,     {= 1}
  250.     D3DLIGHT_SPOT,      {= 2}
  251.     D3DLIGHT_DIRECTIONAL{= 3}
  252.   {$ELSE}
  253.     D3DLIGHT_POINT       = 1,
  254.     D3DLIGHT_SPOT        = 2,
  255.     D3DLIGHT_DIRECTIONAL = 3
  256.   {$ENDIF}
  257.   );
  258.   {$EXTERNALSYM _D3DLIGHTTYPE}
  259.   D3DLIGHTTYPE = _D3DLIGHTTYPE;
  260.   {$EXTERNALSYM D3DLIGHTTYPE}
  261.   TD3DLightType = _D3DLIGHTTYPE;
  262.   PD3DLight9 = ^TD3DLight9;
  263.   _D3DLIGHT9 = packed record
  264.     _Type: TD3DLightType;       { Type of light source }
  265.     Diffuse: TD3DColorValue;    { Diffuse color of light }
  266.     Specular: TD3DColorValue;   { Specular color of light }
  267.     Ambient: TD3DColorValue;    { Ambient color of light }
  268.     Position: TD3DVector;       { Position in world space }
  269.     Direction: TD3DVector;      { Direction in world space }
  270.     Range: Single;              { Cutoff range }
  271.     Falloff: Single;            { Falloff }
  272.     Attenuation0: Single;       { Constant attenuation }
  273.     Attenuation1: Single;       { Linear attenuation }
  274.     Attenuation2: Single;       { Quadratic attenuation }
  275.     Theta: Single;              { Inner angle of spotlight cone }
  276.     Phi: Single;                { Outer angle of spotlight cone }
  277.   end {_D3DLIGHT9};
  278.   {$EXTERNALSYM _D3DLIGHT9}
  279.   D3DLIGHT9 = _D3DLIGHT9;
  280.   {$EXTERNALSYM D3DLIGHT9}
  281.   TD3DLight9 = _D3DLIGHT9;
  282. (*
  283.  * Options for clearing
  284.  *)
  285. const
  286.   D3DCLEAR_TARGET       = $00000001; { Clear target surface }
  287.   {$EXTERNALSYM D3DCLEAR_TARGET}
  288.   D3DCLEAR_ZBUFFER      = $00000002; { Clear target z buffer }
  289.   {$EXTERNALSYM D3DCLEAR_ZBUFFER}
  290.   D3DCLEAR_STENCIL      = $00000004; { Clear stencil planes }
  291.   {$EXTERNALSYM D3DCLEAR_STENCIL}
  292. (*
  293.  * The following defines the rendering states
  294.  *)
  295. type
  296.   _D3DSHADEMODE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  297.   {$EXTERNALSYM _D3DSHADEMODE}
  298.   D3DSHADEMODE = _D3DSHADEMODE;
  299.   {$EXTERNALSYM D3DSHADEMODE}
  300.   TD3DShadeMode = _D3DSHADEMODE;
  301. const
  302.   D3DSHADE_FLAT      = 1;
  303.   {$EXTERNALSYM D3DSHADE_FLAT}
  304.   D3DSHADE_GOURAUD   = 2;
  305.   {$EXTERNALSYM D3DSHADE_GOURAUD}
  306.   D3DSHADE_PHONG     = 3;
  307.   {$EXTERNALSYM D3DSHADE_PHONG}
  308. type
  309.   _D3DFILLMODE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  310.   {$EXTERNALSYM _D3DFILLMODE}
  311.   D3DFILLMODE = _D3DFILLMODE;
  312.   {$EXTERNALSYM D3DFILLMODE}
  313.   TD3DFillMode = _D3DFILLMODE;
  314. const
  315.   D3DFILL_POINT      = 1;
  316.   {$EXTERNALSYM D3DFILL_POINT}
  317.   D3DFILL_WIREFRAME  = 2;
  318.   {$EXTERNALSYM D3DFILL_WIREFRAME}
  319.   D3DFILL_SOLID      = 3;
  320.   {$EXTERNALSYM D3DFILL_SOLID}
  321. type
  322.   _D3DBLEND = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  323.   {$EXTERNALSYM _D3DBLEND}
  324.   D3DBLEND = _D3DBLEND;
  325.   {$EXTERNALSYM D3DBLEND}
  326.   TD3DBlend = _D3DBLEND;
  327. const
  328.   D3DBLEND_ZERO              = 1;
  329.   {$EXTERNALSYM D3DBLEND_ZERO}
  330.   D3DBLEND_ONE               = 2;
  331.   {$EXTERNALSYM D3DBLEND_ONE}
  332.   D3DBLEND_SRCCOLOR          = 3;
  333.   {$EXTERNALSYM D3DBLEND_SRCCOLOR}
  334.   D3DBLEND_INVSRCCOLOR       = 4;
  335.   {$EXTERNALSYM D3DBLEND_INVSRCCOLOR}
  336.   D3DBLEND_SRCALPHA          = 5;
  337.   {$EXTERNALSYM D3DBLEND_SRCALPHA}
  338.   D3DBLEND_INVSRCALPHA       = 6;
  339.   {$EXTERNALSYM D3DBLEND_INVSRCALPHA}
  340.   D3DBLEND_DESTALPHA         = 7;
  341.   {$EXTERNALSYM D3DBLEND_DESTALPHA}
  342.   D3DBLEND_INVDESTALPHA      = 8;
  343.   {$EXTERNALSYM D3DBLEND_INVDESTALPHA}
  344.   D3DBLEND_DESTCOLOR         = 9;
  345.   {$EXTERNALSYM D3DBLEND_DESTCOLOR}
  346.   D3DBLEND_INVDESTCOLOR      = 10;
  347.   {$EXTERNALSYM D3DBLEND_INVDESTCOLOR}
  348.   D3DBLEND_SRCALPHASAT       = 11;
  349.   {$EXTERNALSYM D3DBLEND_SRCALPHASAT}
  350.   D3DBLEND_BOTHSRCALPHA      = 12;
  351.   {$EXTERNALSYM D3DBLEND_BOTHSRCALPHA}
  352.   D3DBLEND_BOTHINVSRCALPHA   = 13;
  353.   {$EXTERNALSYM D3DBLEND_BOTHINVSRCALPHA}
  354.   D3DBLEND_BLENDFACTOR       = 14; (* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on *)
  355.   {$EXTERNALSYM D3DBLEND_BLENDFACTOR}
  356.   D3DBLEND_INVBLENDFACTOR    = 15; (* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on *)
  357.   {$EXTERNALSYM D3DBLEND_INVBLENDFACTOR}
  358. type
  359.   _D3DBLENDOP = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  360.   {$EXTERNALSYM _D3DBLENDOP}
  361.   D3DBLENDOP = _D3DBLENDOP;
  362.   {$EXTERNALSYM D3DBLENDOP}
  363.   TD3DBlendOp = _D3DBLENDOP;
  364. const
  365.   D3DBLENDOP_ADD             = 1;
  366.   {$EXTERNALSYM D3DBLENDOP_ADD}
  367.   D3DBLENDOP_SUBTRACT        = 2;
  368.   {$EXTERNALSYM D3DBLENDOP_SUBTRACT}
  369.   D3DBLENDOP_REVSUBTRACT     = 3;
  370.   {$EXTERNALSYM D3DBLENDOP_REVSUBTRACT}
  371.   D3DBLENDOP_MIN             = 4;
  372.   {$EXTERNALSYM D3DBLENDOP_MIN}
  373.   D3DBLENDOP_MAX             = 5;
  374.   {$EXTERNALSYM D3DBLENDOP_MAX}
  375. type
  376.   _D3DTEXTUREADDRESS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  377.   {$EXTERNALSYM _D3DTEXTUREADDRESS}
  378.   D3DTEXTUREADDRESS = _D3DTEXTUREADDRESS;
  379.   {$EXTERNALSYM D3DTEXTUREADDRESS}
  380.   TD3DTextureAddress = _D3DTEXTUREADDRESS;
  381. const
  382.   D3DTADDRESS_WRAP           = 1;
  383.   {$EXTERNALSYM D3DTADDRESS_WRAP}
  384.   D3DTADDRESS_MIRROR         = 2;
  385.   {$EXTERNALSYM D3DTADDRESS_MIRROR}
  386.   D3DTADDRESS_CLAMP          = 3;
  387.   {$EXTERNALSYM D3DTADDRESS_CLAMP}
  388.   D3DTADDRESS_BORDER         = 4;
  389.   {$EXTERNALSYM D3DTADDRESS_BORDER}
  390.   D3DTADDRESS_MIRRORONCE     = 5;
  391.   {$EXTERNALSYM D3DTADDRESS_MIRRORONCE}
  392. type
  393.   _D3DCULL = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  394.   {$EXTERNALSYM _D3DCULL}
  395.   D3DCULL = _D3DCULL;
  396.   {$EXTERNALSYM D3DCULL}
  397.   TD3DCull = _D3DCULL;
  398. const
  399.   D3DCULL_NONE       = 1;
  400.   {$EXTERNALSYM D3DCULL_NONE}
  401.   D3DCULL_CW         = 2;
  402.   {$EXTERNALSYM D3DCULL_CW}
  403.   D3DCULL_CCW        = 3;
  404.   {$EXTERNALSYM D3DCULL_CCW}
  405. type
  406.   _D3DCMPFUNC = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  407.   {$EXTERNALSYM _D3DCMPFUNC}
  408.   D3DCMPFUNC = _D3DCMPFUNC;
  409.   {$EXTERNALSYM D3DCMPFUNC}
  410.   TD3DCmpFunc = _D3DCMPFUNC;
  411. const
  412.   D3DCMP_NEVER          = 1;
  413.   {$EXTERNALSYM D3DCMP_NEVER}
  414.   D3DCMP_LESS           = 2;
  415.   {$EXTERNALSYM D3DCMP_LESS}
  416.   D3DCMP_EQUAL          = 3;
  417.   {$EXTERNALSYM D3DCMP_EQUAL}
  418.   D3DCMP_LESSEQUAL      = 4;
  419.   {$EXTERNALSYM D3DCMP_LESSEQUAL}
  420.   D3DCMP_GREATER        = 5;
  421.   {$EXTERNALSYM D3DCMP_GREATER}
  422.   D3DCMP_NOTEQUAL       = 6;
  423.   {$EXTERNALSYM D3DCMP_NOTEQUAL}
  424.   D3DCMP_GREATEREQUAL   = 7;
  425.   {$EXTERNALSYM D3DCMP_GREATEREQUAL}
  426.   D3DCMP_ALWAYS         = 8;
  427.   {$EXTERNALSYM D3DCMP_ALWAYS}
  428. type
  429.   _D3DSTENCILOP = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  430.   {$EXTERNALSYM _D3DSTENCILOP}
  431.   D3DSTENCILOP = _D3DSTENCILOP;
  432.   {$EXTERNALSYM D3DSTENCILOP}
  433.   TD3DStencilOp = _D3DSTENCILOP;
  434. const
  435.   D3DSTENCILOP_KEEP     = 1;
  436.   {$EXTERNALSYM D3DSTENCILOP_KEEP}
  437.   D3DSTENCILOP_ZERO     = 2;
  438.   {$EXTERNALSYM D3DSTENCILOP_ZERO}
  439.   D3DSTENCILOP_REPLACE  = 3;
  440.   {$EXTERNALSYM D3DSTENCILOP_REPLACE}
  441.   D3DSTENCILOP_INCRSAT  = 4;
  442.   {$EXTERNALSYM D3DSTENCILOP_INCRSAT}
  443.   D3DSTENCILOP_DECRSAT  = 5;
  444.   {$EXTERNALSYM D3DSTENCILOP_DECRSAT}
  445.   D3DSTENCILOP_INVERT   = 6;
  446.   {$EXTERNALSYM D3DSTENCILOP_INVERT}
  447.   D3DSTENCILOP_INCR     = 7;
  448.   {$EXTERNALSYM D3DSTENCILOP_INCR}
  449.   D3DSTENCILOP_DECR     = 8;
  450.   {$EXTERNALSYM D3DSTENCILOP_DECR}
  451. type
  452.   _D3DFOGMODE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  453.   {$EXTERNALSYM _D3DFOGMODE}
  454.   D3DFOGMODE = _D3DFOGMODE;
  455.   {$EXTERNALSYM D3DFOGMODE}
  456.   TD3DFogMode = _D3DFOGMODE;
  457. const
  458.   D3DFOG_NONE   = 0;
  459.   {$EXTERNALSYM D3DFOG_NONE}
  460.   D3DFOG_EXP    = 1;
  461.   {$EXTERNALSYM D3DFOG_EXP}
  462.   D3DFOG_EXP2   = 2;
  463.   {$EXTERNALSYM D3DFOG_EXP2}
  464.   D3DFOG_LINEAR = 3;
  465.   {$EXTERNALSYM D3DFOG_LINEAR}
  466. type
  467.   _D3DZBUFFERTYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  468.   {$EXTERNALSYM _D3DZBUFFERTYPE}
  469.   D3DZBUFFERTYPE = _D3DZBUFFERTYPE;
  470.   {$EXTERNALSYM D3DZBUFFERTYPE}
  471.   TD3DZBufferType = _D3DZBUFFERTYPE;
  472. const
  473.   D3DZB_FALSE   = 0;
  474.   {$EXTERNALSYM D3DZB_FALSE}
  475.   D3DZB_TRUE    = 1;
  476.   {$EXTERNALSYM D3DZB_TRUE}
  477.   D3DZB_USEW    = 2;
  478.   {$EXTERNALSYM D3DZB_USEW}
  479. type
  480.   // Primitives supported by draw-primitive API
  481.   _D3DPRIMITIVETYPE = (
  482.   {$IFNDEF COMPILER6_UP}
  483.     D3DPT_INVALID_0    {= 0},
  484.     D3DPT_POINTLIST    {= 1},
  485.     D3DPT_LINELIST     {= 2},
  486.     D3DPT_LINESTRIP    {= 3},
  487.     D3DPT_TRIANGLELIST {= 4},
  488.     D3DPT_TRIANGLESTRIP{= 5},
  489.     D3DPT_TRIANGLEFAN  {= 6}
  490.   {$ELSE}
  491.     D3DPT_POINTLIST     = 1,
  492.     D3DPT_LINELIST      = 2,
  493.     D3DPT_LINESTRIP     = 3,
  494.     D3DPT_TRIANGLELIST  = 4,
  495.     D3DPT_TRIANGLESTRIP = 5,
  496.     D3DPT_TRIANGLEFAN   = 6
  497.   {$ENDIF}
  498.   );
  499.   {$EXTERNALSYM _D3DPRIMITIVETYPE}
  500.   D3DPRIMITIVETYPE = _D3DPRIMITIVETYPE;
  501.   {$EXTERNALSYM D3DPRIMITIVETYPE}
  502.   TD3DPrimitiveType = _D3DPRIMITIVETYPE;
  503. {$IFNDEF COMPILER6_UP}
  504. const
  505.   D3DTS_VIEW          = 2;
  506.   {$EXTERNALSYM D3DTS_VIEW}
  507.   D3DTS_PROJECTION    = 3;
  508.   {$EXTERNALSYM D3DTS_PROJECTION}
  509.   D3DTS_TEXTURE0      = 16;
  510.   {$EXTERNALSYM D3DTS_TEXTURE0}
  511.   D3DTS_TEXTURE1      = 17;
  512.   {$EXTERNALSYM D3DTS_TEXTURE1}
  513.   D3DTS_TEXTURE2      = 18;
  514.   {$EXTERNALSYM D3DTS_TEXTURE2}
  515.   D3DTS_TEXTURE3      = 19;
  516.   {$EXTERNALSYM D3DTS_TEXTURE3}
  517.   D3DTS_TEXTURE4      = 20;
  518.   {$EXTERNALSYM D3DTS_TEXTURE4}
  519.   D3DTS_TEXTURE5      = 21;
  520.   {$EXTERNALSYM D3DTS_TEXTURE5}
  521.   D3DTS_TEXTURE6      = 22;
  522.   {$EXTERNALSYM D3DTS_TEXTURE6}
  523.   D3DTS_TEXTURE7      = 23;
  524.   {$EXTERNALSYM D3DTS_TEXTURE7}
  525.   D3DTS_FORCE_DWORD   = $7fffffff; (* force 32-bit size enum *)
  526.   {$EXTERNALSYM D3DTS_FORCE_DWORD}
  527. type
  528.   _D3DTRANSFORMSTATETYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  529. {$ELSE}
  530. type
  531.   _D3DTRANSFORMSTATETYPE = (
  532.     D3DTS_VIEW          = 2,
  533.     D3DTS_PROJECTION    = 3,
  534.     D3DTS_TEXTURE0      = 16,
  535.     D3DTS_TEXTURE1      = 17,
  536.     D3DTS_TEXTURE2      = 18,
  537.     D3DTS_TEXTURE3      = 19,
  538.     D3DTS_TEXTURE4      = 20,
  539.     D3DTS_TEXTURE5      = 21,
  540.     D3DTS_TEXTURE6      = 22,
  541.     D3DTS_TEXTURE7      = 23
  542.   );
  543. {$ENDIF}
  544.   {$EXTERNALSYM _D3DTRANSFORMSTATETYPE}
  545.   D3DTRANSFORMSTATETYPE = _D3DTRANSFORMSTATETYPE;
  546.   {$EXTERNALSYM D3DTRANSFORMSTATETYPE}
  547.   TD3DTransformStateType = _D3DTRANSFORMSTATETYPE;
  548. // #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
  549. function D3DTS_WORLDMATRIX(index: Byte): TD3DTransformStateType;
  550. {$EXTERNALSYM D3DTS_WORLDMATRIX}
  551. const
  552.   D3DTS_WORLD   =  TD3DTransformStateType(0 + 256); // #define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)
  553.   {$EXTERNALSYM D3DTS_WORLD}
  554.   D3DTS_WORLD1  =  TD3DTransformStateType(1 + 256); // #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
  555.   {$EXTERNALSYM D3DTS_WORLD1}
  556.   D3DTS_WORLD2  =  TD3DTransformStateType(2 + 256); // #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
  557.   {$EXTERNALSYM D3DTS_WORLD2}
  558.   D3DTS_WORLD3  =  TD3DTransformStateType(3 + 256); // #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
  559.   {$EXTERNALSYM D3DTS_WORLD3}
  560. {$IFNDEF COMPILER6_UP}
  561. type
  562.   _D3DRENDERSTATETYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  563.   {$EXTERNALSYM _D3DRENDERSTATETYPE}
  564.   D3DRENDERSTATETYPE = _D3DRENDERSTATETYPE;
  565.   {$EXTERNALSYM D3DRENDERSTATETYPE}
  566.   TD3DRenderStateType = _D3DRENDERSTATETYPE;
  567. const
  568.   D3DRS_ZENABLE                   = TD3DRenderStateType(7);    { D3DZBUFFERTYPE (or TRUE/FALSE for legacy) }
  569.   {$EXTERNALSYM D3DRS_ZENABLE}
  570.   D3DRS_FILLMODE                  = TD3DRenderStateType(8);    { D3DFILLMODE }
  571.   {$EXTERNALSYM D3DRS_FILLMODE}
  572.   D3DRS_SHADEMODE                 = TD3DRenderStateType(9);    { D3DSHADEMODE }
  573.   {$EXTERNALSYM D3DRS_SHADEMODE}
  574.   D3DRS_ZWRITEENABLE              = TD3DRenderStateType(14);   { TRUE to enable z writes }
  575.   {$EXTERNALSYM D3DRS_ZWRITEENABLE}
  576.   D3DRS_ALPHATESTENABLE           = TD3DRenderStateType(15);   { TRUE to enable alpha tests }
  577.   {$EXTERNALSYM D3DRS_ALPHATESTENABLE}
  578.   D3DRS_LASTPIXEL                 = TD3DRenderStateType(16);   { TRUE for last-pixel on lines }
  579.   {$EXTERNALSYM D3DRS_LASTPIXEL}
  580.   D3DRS_SRCBLEND                  = TD3DRenderStateType(19);   { D3DBLEND }
  581.   {$EXTERNALSYM D3DRS_SRCBLEND}
  582.   D3DRS_DESTBLEND                 = TD3DRenderStateType(20);   { D3DBLEND }
  583.   {$EXTERNALSYM D3DRS_DESTBLEND}
  584.   D3DRS_CULLMODE                  = TD3DRenderStateType(22);   { D3DCULL }
  585.   {$EXTERNALSYM D3DRS_CULLMODE}
  586.   D3DRS_ZFUNC                     = TD3DRenderStateType(23);   { D3DCMPFUNC }
  587.   {$EXTERNALSYM D3DRS_ZFUNC}
  588.   D3DRS_ALPHAREF                  = TD3DRenderStateType(24);   { D3DFIXED }
  589.   {$EXTERNALSYM D3DRS_ALPHAREF}
  590.   D3DRS_ALPHAFUNC                 = TD3DRenderStateType(25);   { D3DCMPFUNC }
  591.   {$EXTERNALSYM D3DRS_ALPHAFUNC}
  592.   D3DRS_DITHERENABLE              = TD3DRenderStateType(26);   { TRUE to enable dithering }
  593.   {$EXTERNALSYM D3DRS_DITHERENABLE}
  594.   D3DRS_ALPHABLENDENABLE          = TD3DRenderStateType(27);   { TRUE to enable alpha blending }
  595.   {$EXTERNALSYM D3DRS_ALPHABLENDENABLE}
  596.   D3DRS_FOGENABLE                 = TD3DRenderStateType(28);   { TRUE to enable fog blending }
  597.   {$EXTERNALSYM D3DRS_FOGENABLE}
  598.   D3DRS_SPECULARENABLE            = TD3DRenderStateType(29);   { TRUE to enable specular }
  599.   {$EXTERNALSYM D3DRS_SPECULARENABLE}
  600.   D3DRS_FOGCOLOR                  = TD3DRenderStateType(34);   { D3DCOLOR }
  601.   {$EXTERNALSYM D3DRS_FOGCOLOR}
  602.   D3DRS_FOGTABLEMODE              = TD3DRenderStateType(35);   { D3DFOGMODE }
  603.   {$EXTERNALSYM D3DRS_FOGTABLEMODE}
  604.   D3DRS_FOGSTART                  = TD3DRenderStateType(36);   { Fog start (for both vertex and pixel fog) }
  605.   {$EXTERNALSYM D3DRS_FOGSTART}
  606.   D3DRS_FOGEND                    = TD3DRenderStateType(37);   { Fog end      }
  607.   {$EXTERNALSYM D3DRS_FOGEND}
  608.   D3DRS_FOGDENSITY                = TD3DRenderStateType(38);   { Fog density  }
  609.   {$EXTERNALSYM D3DRS_FOGDENSITY}
  610.   D3DRS_RANGEFOGENABLE            = TD3DRenderStateType(48);   { Enables range-based fog }
  611.   {$EXTERNALSYM D3DRS_RANGEFOGENABLE}
  612.   D3DRS_STENCILENABLE             = TD3DRenderStateType(52);   { BOOL enable/disable stenciling }
  613.   {$EXTERNALSYM D3DRS_STENCILENABLE}
  614.   D3DRS_STENCILFAIL               = TD3DRenderStateType(53);   { D3DSTENCILOP to do if stencil test fails }
  615.   {$EXTERNALSYM D3DRS_STENCILFAIL}
  616.   D3DRS_STENCILZFAIL              = TD3DRenderStateType(54);   { D3DSTENCILOP to do if stencil test passes and Z test fails }
  617.   {$EXTERNALSYM D3DRS_STENCILZFAIL}
  618.   D3DRS_STENCILPASS               = TD3DRenderStateType(55);   { D3DSTENCILOP to do if both stencil and Z tests pass }
  619.   {$EXTERNALSYM D3DRS_STENCILPASS}
  620.   D3DRS_STENCILFUNC               = TD3DRenderStateType(56);   { D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true }
  621.   {$EXTERNALSYM D3DRS_STENCILFUNC}
  622.   D3DRS_STENCILREF                = TD3DRenderStateType(57);   { Reference value used in stencil test }
  623.   {$EXTERNALSYM D3DRS_STENCILREF}
  624.   D3DRS_STENCILMASK               = TD3DRenderStateType(58);   { Mask value used in stencil test }
  625.   {$EXTERNALSYM D3DRS_STENCILMASK}
  626.   D3DRS_STENCILWRITEMASK          = TD3DRenderStateType(59);   { Write mask applied to values written to stencil buffer }
  627.   {$EXTERNALSYM D3DRS_STENCILWRITEMASK}
  628.   D3DRS_TEXTUREFACTOR             = TD3DRenderStateType(60);   { D3DCOLOR used for multi-texture blend }
  629.   {$EXTERNALSYM D3DRS_TEXTUREFACTOR}
  630.   D3DRS_WRAP0                     = TD3DRenderStateType(128);  { wrap for 1st texture coord. set }
  631.   {$EXTERNALSYM D3DRS_WRAP0}
  632.   D3DRS_WRAP1                     = TD3DRenderStateType(129);  { wrap for 2nd texture coord. set }
  633.   {$EXTERNALSYM D3DRS_WRAP1}
  634.   D3DRS_WRAP2                     = TD3DRenderStateType(130);  { wrap for 3rd texture coord. set }
  635.   {$EXTERNALSYM D3DRS_WRAP2}
  636.   D3DRS_WRAP3                     = TD3DRenderStateType(131);  { wrap for 4th texture coord. set }
  637.   {$EXTERNALSYM D3DRS_WRAP3}
  638.   D3DRS_WRAP4                     = TD3DRenderStateType(132);  { wrap for 5th texture coord. set }
  639.   {$EXTERNALSYM D3DRS_WRAP4}
  640.   D3DRS_WRAP5                     = TD3DRenderStateType(133);  { wrap for 6th texture coord. set }
  641.   {$EXTERNALSYM D3DRS_WRAP5}
  642.   D3DRS_WRAP6                     = TD3DRenderStateType(134);  { wrap for 7th texture coord. set }
  643.   {$EXTERNALSYM D3DRS_WRAP6}
  644.   D3DRS_WRAP7                     = TD3DRenderStateType(135);  { wrap for 8th texture coord. set }
  645.   {$EXTERNALSYM D3DRS_WRAP7}
  646.   D3DRS_CLIPPING                  = TD3DRenderStateType(136);
  647.   {$EXTERNALSYM D3DRS_CLIPPING}
  648.   D3DRS_LIGHTING                  = TD3DRenderStateType(137);
  649.   {$EXTERNALSYM D3DRS_LIGHTING}
  650.   D3DRS_AMBIENT                   = TD3DRenderStateType(139);
  651.   {$EXTERNALSYM D3DRS_AMBIENT}
  652.   D3DRS_FOGVERTEXMODE             = TD3DRenderStateType(140);
  653.   {$EXTERNALSYM D3DRS_FOGVERTEXMODE}
  654.   D3DRS_COLORVERTEX               = TD3DRenderStateType(141);
  655.   {$EXTERNALSYM D3DRS_COLORVERTEX}
  656.   D3DRS_LOCALVIEWER               = TD3DRenderStateType(142);
  657.   {$EXTERNALSYM D3DRS_LOCALVIEWER}
  658.   D3DRS_NORMALIZENORMALS          = TD3DRenderStateType(143);
  659.   {$EXTERNALSYM D3DRS_NORMALIZENORMALS}
  660.   D3DRS_DIFFUSEMATERIALSOURCE     = TD3DRenderStateType(145);
  661.   {$EXTERNALSYM D3DRS_DIFFUSEMATERIALSOURCE}
  662.   D3DRS_SPECULARMATERIALSOURCE    = TD3DRenderStateType(146);
  663.   {$EXTERNALSYM D3DRS_SPECULARMATERIALSOURCE}
  664.   D3DRS_AMBIENTMATERIALSOURCE     = TD3DRenderStateType(147);
  665.   {$EXTERNALSYM D3DRS_AMBIENTMATERIALSOURCE}
  666.   D3DRS_EMISSIVEMATERIALSOURCE    = TD3DRenderStateType(148);
  667.   {$EXTERNALSYM D3DRS_EMISSIVEMATERIALSOURCE}
  668.   D3DRS_VERTEXBLEND               = TD3DRenderStateType(151);
  669.   {$EXTERNALSYM D3DRS_VERTEXBLEND}
  670.   D3DRS_CLIPPLANEENABLE           = TD3DRenderStateType(152);
  671.   {$EXTERNALSYM D3DRS_CLIPPLANEENABLE}
  672.   D3DRS_POINTSIZE                 = TD3DRenderStateType(154);   { float point size }
  673.   {$EXTERNALSYM D3DRS_POINTSIZE}
  674.   D3DRS_POINTSIZE_MIN             = TD3DRenderStateType(155);   { float point size min threshold }
  675.   {$EXTERNALSYM D3DRS_POINTSIZE_MIN}
  676.   D3DRS_POINTSPRITEENABLE         = TD3DRenderStateType(156);   { BOOL point texture coord control }
  677.   {$EXTERNALSYM D3DRS_POINTSPRITEENABLE}
  678.   D3DRS_POINTSCALEENABLE          = TD3DRenderStateType(157);   { BOOL point size scale enable }
  679.   {$EXTERNALSYM D3DRS_POINTSCALEENABLE}
  680.   D3DRS_POINTSCALE_A              = TD3DRenderStateType(158);   { float point attenuation A value }
  681.   {$EXTERNALSYM D3DRS_POINTSCALE_A}
  682.   D3DRS_POINTSCALE_B              = TD3DRenderStateType(159);   { float point attenuation B value }
  683.   {$EXTERNALSYM D3DRS_POINTSCALE_B}
  684.   D3DRS_POINTSCALE_C              = TD3DRenderStateType(160);   { float point attenuation C value }
  685.   {$EXTERNALSYM D3DRS_POINTSCALE_C}
  686.   D3DRS_MULTISAMPLEANTIALIAS      = TD3DRenderStateType(161);  // BOOL - set to do FSAA with multisample buffer
  687.   {$EXTERNALSYM D3DRS_MULTISAMPLEANTIALIAS}
  688.   D3DRS_MULTISAMPLEMASK           = TD3DRenderStateType(162);  // DWORD - per-sample enable/disable
  689.   {$EXTERNALSYM D3DRS_MULTISAMPLEMASK}
  690.   D3DRS_PATCHEDGESTYLE            = TD3DRenderStateType(163);  // Sets whether patch edges will use float style tessellation
  691.   {$EXTERNALSYM D3DRS_PATCHEDGESTYLE}
  692.   D3DRS_DEBUGMONITORTOKEN         = TD3DRenderStateType(165);  // DEBUG ONLY - token to debug monitor
  693.   {$EXTERNALSYM D3DRS_DEBUGMONITORTOKEN}
  694.   D3DRS_POINTSIZE_MAX             = TD3DRenderStateType(166);   { float point size max threshold }
  695.   {$EXTERNALSYM D3DRS_POINTSIZE_MAX}
  696.   D3DRS_INDEXEDVERTEXBLENDENABLE  = TD3DRenderStateType(167);
  697.   {$EXTERNALSYM D3DRS_INDEXEDVERTEXBLENDENABLE}
  698.   D3DRS_COLORWRITEENABLE          = TD3DRenderStateType(168);  // per-channel write enable
  699.   {$EXTERNALSYM D3DRS_COLORWRITEENABLE}
  700.   D3DRS_TWEENFACTOR               = TD3DRenderStateType(170);   // float tween factor
  701.   {$EXTERNALSYM D3DRS_TWEENFACTOR}
  702.   D3DRS_BLENDOP                   = TD3DRenderStateType(171);   // D3DBLENDOP setting
  703.   {$EXTERNALSYM D3DRS_BLENDOP}
  704.   D3DRS_POSITIONDEGREE            = TD3DRenderStateType(172);   // NPatch position interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default)
  705.   {$EXTERNALSYM D3DRS_POSITIONDEGREE}
  706.   D3DRS_NORMALDEGREE              = TD3DRenderStateType(173);   // NPatch normal interpolation degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC
  707.   {$EXTERNALSYM D3DRS_NORMALDEGREE}
  708.   D3DRS_SCISSORTESTENABLE         = TD3DRenderStateType(174);
  709.   {$EXTERNALSYM D3DRS_SCISSORTESTENABLE}
  710.   D3DRS_SLOPESCALEDEPTHBIAS       = TD3DRenderStateType(175);
  711.   {$EXTERNALSYM D3DRS_SLOPESCALEDEPTHBIAS}
  712.   D3DRS_ANTIALIASEDLINEENABLE     = TD3DRenderStateType(176);
  713.   {$EXTERNALSYM D3DRS_ANTIALIASEDLINEENABLE}
  714.   D3DRS_MINTESSELLATIONLEVEL      = TD3DRenderStateType(178);
  715.   {$EXTERNALSYM D3DRS_MINTESSELLATIONLEVEL}
  716.   D3DRS_MAXTESSELLATIONLEVEL      = TD3DRenderStateType(179);
  717.   {$EXTERNALSYM D3DRS_MAXTESSELLATIONLEVEL}
  718.   D3DRS_ADAPTIVETESS_X            = TD3DRenderStateType(180);
  719.   {$EXTERNALSYM D3DRS_ADAPTIVETESS_X}
  720.   D3DRS_ADAPTIVETESS_Y            = TD3DRenderStateType(181);
  721.   {$EXTERNALSYM D3DRS_ADAPTIVETESS_Y}
  722.   D3DRS_ADAPTIVETESS_Z            = TD3DRenderStateType(182);
  723.   {$EXTERNALSYM D3DRS_ADAPTIVETESS_Z}
  724.   D3DRS_ADAPTIVETESS_W            = TD3DRenderStateType(183);
  725.   {$EXTERNALSYM D3DRS_ADAPTIVETESS_W}
  726.   D3DRS_ENABLEADAPTIVETESSELLATION = TD3DRenderStateType(184);
  727.   {$EXTERNALSYM D3DRS_ENABLEADAPTIVETESSELLATION}
  728.   D3DRS_TWOSIDEDSTENCILMODE       = TD3DRenderStateType(185);   (* BOOL enable/disable 2 sided stenciling *)
  729.   {$EXTERNALSYM D3DRS_TWOSIDEDSTENCILMODE}
  730.   D3DRS_CCW_STENCILFAIL           = TD3DRenderStateType(186);   (* D3DSTENCILOP to do if ccw stencil test fails *)
  731.   {$EXTERNALSYM D3DRS_CCW_STENCILFAIL}
  732.   D3DRS_CCW_STENCILZFAIL          = TD3DRenderStateType(187);   (* D3DSTENCILOP to do if ccw stencil test passes and Z test fails *)
  733.   {$EXTERNALSYM D3DRS_CCW_STENCILZFAIL}
  734.   D3DRS_CCW_STENCILPASS           = TD3DRenderStateType(188);   (* D3DSTENCILOP to do if both ccw stencil and Z tests pass *)
  735.   {$EXTERNALSYM D3DRS_CCW_STENCILPASS}
  736.   D3DRS_CCW_STENCILFUNC           = TD3DRenderStateType(189);   (* D3DCMPFUNC fn.  ccw Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true *)
  737.   {$EXTERNALSYM D3DRS_CCW_STENCILFUNC}
  738.   D3DRS_COLORWRITEENABLE1         = TD3DRenderStateType(190);   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  739.   {$EXTERNALSYM D3DRS_COLORWRITEENABLE1}
  740.   D3DRS_COLORWRITEENABLE2         = TD3DRenderStateType(191);   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  741.   {$EXTERNALSYM D3DRS_COLORWRITEENABLE2}
  742.   D3DRS_COLORWRITEENABLE3         = TD3DRenderStateType(192);   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  743.   {$EXTERNALSYM D3DRS_COLORWRITEENABLE3}
  744.   D3DRS_BLENDFACTOR               = TD3DRenderStateType(193);   (* D3DCOLOR used for a constant blend factor during alpha blending for devices that support D3DPBLENDCAPS_BLENDFACTOR *)
  745.   {$EXTERNALSYM D3DRS_BLENDFACTOR}
  746.   D3DRS_SRGBWRITEENABLE           = TD3DRenderStateType(194);   (* Enable rendertarget writes to be DE-linearized to SRGB (for formats that expose D3DUSAGE_QUERY_SRGBWRITE) *)
  747.   {$EXTERNALSYM D3DRS_SRGBWRITEENABLE}
  748.   D3DRS_DEPTHBIAS                 = TD3DRenderStateType(195);
  749.   {$EXTERNALSYM D3DRS_DEPTHBIAS}
  750.   D3DRS_WRAP8                     = TD3DRenderStateType(198);   (* Additional wrap states for vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD *)
  751.   {$EXTERNALSYM D3DRS_WRAP8}
  752.   D3DRS_WRAP9                     = TD3DRenderStateType(199);
  753.   {$EXTERNALSYM D3DRS_WRAP9}
  754.   D3DRS_WRAP10                    = TD3DRenderStateType(200);
  755.   {$EXTERNALSYM D3DRS_WRAP10}
  756.   D3DRS_WRAP11                    = TD3DRenderStateType(201);
  757.   {$EXTERNALSYM D3DRS_WRAP11}
  758.   D3DRS_WRAP12                    = TD3DRenderStateType(202);
  759.   {$EXTERNALSYM D3DRS_WRAP12}
  760.   D3DRS_WRAP13                    = TD3DRenderStateType(203);
  761.   {$EXTERNALSYM D3DRS_WRAP13}
  762.   D3DRS_WRAP14                    = TD3DRenderStateType(204);
  763.   {$EXTERNALSYM D3DRS_WRAP14}
  764.   D3DRS_WRAP15                    = TD3DRenderStateType(205);
  765.   {$EXTERNALSYM D3DRS_WRAP15}
  766.   D3DRS_SEPARATEALPHABLENDENABLE  = TD3DRenderStateType(206);  (* TRUE to enable a separate blending function for the alpha channel *)
  767.   {$EXTERNALSYM D3DRS_SEPARATEALPHABLENDENABLE}
  768.   D3DRS_SRCBLENDALPHA             = TD3DRenderStateType(207);  (* SRC blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  769.   {$EXTERNALSYM D3DRS_SRCBLENDALPHA}
  770.   D3DRS_DESTBLENDALPHA            = TD3DRenderStateType(208);  (* DST blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  771.   {$EXTERNALSYM D3DRS_DESTBLENDALPHA}
  772.   D3DRS_BLENDOPALPHA              = TD3DRenderStateType(209);  (* Blending operation for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  773.   {$EXTERNALSYM D3DRS_BLENDOPALPHA}
  774.   D3DRS_FORCE_DWORD               = TD3DRenderStateType($7fffffff); { force 32-bit size enum }
  775.   {$EXTERNALSYM D3DRS_FORCE_DWORD}
  776. {$ELSE}
  777. type
  778.   _D3DRENDERSTATETYPE = (
  779.     D3DRS_ZENABLE                   = 7,    (* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) *)
  780.     D3DRS_FILLMODE                  = 8,    (* D3DFILLMODE *)
  781.     D3DRS_SHADEMODE                 = 9,    (* D3DSHADEMODE *)
  782.     D3DRS_ZWRITEENABLE              = 14,   (* TRUE to enable z writes *)
  783.     D3DRS_ALPHATESTENABLE           = 15,   (* TRUE to enable alpha tests *)
  784.     D3DRS_LASTPIXEL                 = 16,   (* TRUE for last-pixel on lines *)
  785.     D3DRS_SRCBLEND                  = 19,   (* D3DBLEND *)
  786.     D3DRS_DESTBLEND                 = 20,   (* D3DBLEND *)
  787.     D3DRS_CULLMODE                  = 22,   (* D3DCULL *)
  788.     D3DRS_ZFUNC                     = 23,   (* D3DCMPFUNC *)
  789.     D3DRS_ALPHAREF                  = 24,   (* D3DFIXED *)
  790.     D3DRS_ALPHAFUNC                 = 25,   (* D3DCMPFUNC *)
  791.     D3DRS_DITHERENABLE              = 26,   (* TRUE to enable dithering *)
  792.     D3DRS_ALPHABLENDENABLE          = 27,   (* TRUE to enable alpha blending *)
  793.     D3DRS_FOGENABLE                 = 28,   (* TRUE to enable fog blending *)
  794.     D3DRS_SPECULARENABLE            = 29,   (* TRUE to enable specular *)
  795.     D3DRS_FOGCOLOR                  = 34,   (* D3DCOLOR *)
  796.     D3DRS_FOGTABLEMODE              = 35,   (* D3DFOGMODE *)
  797.     D3DRS_FOGSTART                  = 36,   (* Fog start (for both vertex and pixel fog) *)
  798.     D3DRS_FOGEND                    = 37,   (* Fog end      *)
  799.     D3DRS_FOGDENSITY                = 38,   (* Fog density  *)
  800.     D3DRS_RANGEFOGENABLE            = 48,   (* Enables range-based fog *)
  801.     D3DRS_STENCILENABLE             = 52,   (* BOOL enable/disable stenciling *)
  802.     D3DRS_STENCILFAIL               = 53,   (* D3DSTENCILOP to do if stencil test fails *)
  803.     D3DRS_STENCILZFAIL              = 54,   (* D3DSTENCILOP to do if stencil test passes and Z test fails *)
  804.     D3DRS_STENCILPASS               = 55,   (* D3DSTENCILOP to do if both stencil and Z tests pass *)
  805.     D3DRS_STENCILFUNC               = 56,   (* D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true *)
  806.     D3DRS_STENCILREF                = 57,   (* Reference value used in stencil test *)
  807.     D3DRS_STENCILMASK               = 58,   (* Mask value used in stencil test *)
  808.     D3DRS_STENCILWRITEMASK          = 59,   (* Write mask applied to values written to stencil buffer *)
  809.     D3DRS_TEXTUREFACTOR             = 60,   (* D3DCOLOR used for multi-texture blend *)
  810.     D3DRS_WRAP0                     = 128,  (* wrap for 1st texture coord. set *)
  811.     D3DRS_WRAP1                     = 129,  (* wrap for 2nd texture coord. set *)
  812.     D3DRS_WRAP2                     = 130,  (* wrap for 3rd texture coord. set *)
  813.     D3DRS_WRAP3                     = 131,  (* wrap for 4th texture coord. set *)
  814.     D3DRS_WRAP4                     = 132,  (* wrap for 5th texture coord. set *)
  815.     D3DRS_WRAP5                     = 133,  (* wrap for 6th texture coord. set *)
  816.     D3DRS_WRAP6                     = 134,  (* wrap for 7th texture coord. set *)
  817.     D3DRS_WRAP7                     = 135,  (* wrap for 8th texture coord. set *)
  818.     D3DRS_CLIPPING                  = 136,
  819.     D3DRS_LIGHTING                  = 137,
  820.     D3DRS_AMBIENT                   = 139,
  821.     D3DRS_FOGVERTEXMODE             = 140,
  822.     D3DRS_COLORVERTEX               = 141,
  823.     D3DRS_LOCALVIEWER               = 142,
  824.     D3DRS_NORMALIZENORMALS          = 143,
  825.     D3DRS_DIFFUSEMATERIALSOURCE     = 145,
  826.     D3DRS_SPECULARMATERIALSOURCE    = 146,
  827.     D3DRS_AMBIENTMATERIALSOURCE     = 147,
  828.     D3DRS_EMISSIVEMATERIALSOURCE    = 148,
  829.     D3DRS_VERTEXBLEND               = 151,
  830.     D3DRS_CLIPPLANEENABLE           = 152,
  831.     D3DRS_POINTSIZE                 = 154,   (* float point size *)
  832.     D3DRS_POINTSIZE_MIN             = 155,   (* float point size min threshold *)
  833.     D3DRS_POINTSPRITEENABLE         = 156,   (* BOOL point texture coord control *)
  834.     D3DRS_POINTSCALEENABLE          = 157,   (* BOOL point size scale enable *)
  835.     D3DRS_POINTSCALE_A              = 158,   (* float point attenuation A value *)
  836.     D3DRS_POINTSCALE_B              = 159,   (* float point attenuation B value *)
  837.     D3DRS_POINTSCALE_C              = 160,   (* float point attenuation C value *)
  838.     D3DRS_MULTISAMPLEANTIALIAS      = 161,  // BOOL - set to do FSAA with multisample buffer
  839.     D3DRS_MULTISAMPLEMASK           = 162,  // DWORD - per-sample enable/disable
  840.     D3DRS_PATCHEDGESTYLE            = 163,  // Sets whether patch edges will use float style tessellation
  841.     D3DRS_DEBUGMONITORTOKEN         = 165,  // DEBUG ONLY - token to debug monitor
  842.     D3DRS_POINTSIZE_MAX             = 166,   (* float point size max threshold *)
  843.     D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,
  844.     D3DRS_COLORWRITEENABLE          = 168,  // per-channel write enable
  845.     D3DRS_TWEENFACTOR               = 170,   // float tween factor
  846.     D3DRS_BLENDOP                   = 171,   // D3DBLENDOP setting
  847.     D3DRS_POSITIONDEGREE            = 172,   // NPatch position interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default)
  848.     D3DRS_NORMALDEGREE              = 173,   // NPatch normal interpolation degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC
  849.     D3DRS_SCISSORTESTENABLE         = 174,
  850.     D3DRS_SLOPESCALEDEPTHBIAS       = 175,
  851.     D3DRS_ANTIALIASEDLINEENABLE     = 176,
  852.     D3DRS_MINTESSELLATIONLEVEL      = 178,
  853.     D3DRS_MAXTESSELLATIONLEVEL      = 179,
  854.     D3DRS_ADAPTIVETESS_X            = 180,
  855.     D3DRS_ADAPTIVETESS_Y            = 181,
  856.     D3DRS_ADAPTIVETESS_Z            = 182,
  857.     D3DRS_ADAPTIVETESS_W            = 183,
  858.     D3DRS_ENABLEADAPTIVETESSELLATION = 184,
  859.     D3DRS_TWOSIDEDSTENCILMODE       = 185,   (* BOOL enable/disable 2 sided stenciling *)
  860.     D3DRS_CCW_STENCILFAIL           = 186,   (* D3DSTENCILOP to do if ccw stencil test fails *)
  861.     D3DRS_CCW_STENCILZFAIL          = 187,   (* D3DSTENCILOP to do if ccw stencil test passes and Z test fails *)
  862.     D3DRS_CCW_STENCILPASS           = 188,   (* D3DSTENCILOP to do if both ccw stencil and Z tests pass *)
  863.     D3DRS_CCW_STENCILFUNC           = 189,   (* D3DCMPFUNC fn.  ccw Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true *)
  864.     D3DRS_COLORWRITEENABLE1         = 190,   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  865.     D3DRS_COLORWRITEENABLE2         = 191,   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  866.     D3DRS_COLORWRITEENABLE3         = 192,   (* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS *)
  867.     D3DRS_BLENDFACTOR               = 193,   (* D3DCOLOR used for a constant blend factor during alpha blending for devices that support D3DPBLENDCAPS_BLENDFACTOR *)
  868.     D3DRS_SRGBWRITEENABLE           = 194,   (* Enable rendertarget writes to be DE-linearized to SRGB (for formats that expose D3DUSAGE_QUERY_SRGBWRITE) *)
  869.     D3DRS_DEPTHBIAS                 = 195,
  870.     D3DRS_WRAP8                     = 198,   (* Additional wrap states for vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD *)
  871.     D3DRS_WRAP9                     = 199,
  872.     D3DRS_WRAP10                    = 200,
  873.     D3DRS_WRAP11                    = 201,
  874.     D3DRS_WRAP12                    = 202,
  875.     D3DRS_WRAP13                    = 203,
  876.     D3DRS_WRAP14                    = 204,
  877.     D3DRS_WRAP15                    = 205,
  878.     D3DRS_SEPARATEALPHABLENDENABLE  = 206,  (* TRUE to enable a separate blending function for the alpha channel *)
  879.     D3DRS_SRCBLENDALPHA             = 207,  (* SRC blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  880.     D3DRS_DESTBLENDALPHA            = 208,  (* DST blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  881.     D3DRS_BLENDOPALPHA              = 209   (* Blending operation for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE *)
  882.   );
  883.   {$EXTERNALSYM _D3DRENDERSTATETYPE}
  884.   D3DRENDERSTATETYPE = _D3DRENDERSTATETYPE;
  885.   {$EXTERNALSYM D3DRENDERSTATETYPE}
  886.   TD3DRenderStateType = _D3DRENDERSTATETYPE;
  887. {$ENDIF}
  888. const
  889.   // Maximum number of simultaneous render targets D3D supports
  890.   D3D_MAX_SIMULTANEOUS_RENDERTARGETS = 4;
  891.   {$EXTERNALSYM D3D_MAX_SIMULTANEOUS_RENDERTARGETS}
  892. type
  893.   // Values for material source
  894.   _D3DMATERIALCOLORSOURCE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  895.   {$EXTERNALSYM _D3DMATERIALCOLORSOURCE}
  896.   D3DMATERIALCOLORSOURCE = _D3DMATERIALCOLORSOURCE;
  897.   {$EXTERNALSYM D3DMATERIALCOLORSOURCE}
  898.   TD3DMaterialSource = _D3DMATERIALCOLORSOURCE;
  899. const
  900.   D3DMCS_MATERIAL       = TD3DMaterialSource(0);         // Color from material is used
  901.   {$EXTERNALSYM D3DMCS_MATERIAL}
  902.   D3DMCS_COLOR1         = TD3DMaterialSource(1);         // Diffuse vertex color is used
  903.   {$EXTERNALSYM D3DMCS_COLOR1}
  904.   D3DMCS_COLOR2         = TD3DMaterialSource(2);         // Specular vertex color is used
  905.   {$EXTERNALSYM D3DMCS_COLOR2}
  906.   D3DMCS_FORCE_DWORD    = TD3DMaterialSource($7fffffff); // force 32-bit size enum
  907.   {$EXTERNALSYM D3DMCS_FORCE_DWORD}
  908.   // Bias to apply to the texture coordinate set to apply a wrap to.
  909.   D3DRENDERSTATE_WRAPBIAS                = DWORD(128);
  910.   {$EXTERNALSYM D3DRENDERSTATE_WRAPBIAS}
  911.   { Flags to construct the WRAP render states }
  912.   D3DWRAP_U             = $00000001;
  913.   {$EXTERNALSYM D3DWRAP_U}
  914.   D3DWRAP_V             = $00000002;
  915.   {$EXTERNALSYM D3DWRAP_V}
  916.   D3DWRAP_W             = $00000004;
  917.   {$EXTERNALSYM D3DWRAP_W}
  918.   { Flags to construct the WRAP render states for 1D thru 4D texture coordinates }
  919.   D3DWRAPCOORD_0        = $00000001;    // same as D3DWRAP_U
  920.   {$EXTERNALSYM D3DWRAPCOORD_0}
  921.   D3DWRAPCOORD_1        = $00000002;    // same as D3DWRAP_V
  922.   {$EXTERNALSYM D3DWRAPCOORD_1}
  923.   D3DWRAPCOORD_2        = $00000004;    // same as D3DWRAP_W
  924.   {$EXTERNALSYM D3DWRAPCOORD_2}
  925.   D3DWRAPCOORD_3        = $00000008;
  926.   {$EXTERNALSYM D3DWRAPCOORD_3}
  927.   { Flags to construct D3DRS_COLORWRITEENABLE }
  928.   D3DCOLORWRITEENABLE_RED       = (1 shl 0);
  929.   {$EXTERNALSYM D3DCOLORWRITEENABLE_RED}
  930.   D3DCOLORWRITEENABLE_GREEN     = (1 shl 1);
  931.   {$EXTERNALSYM D3DCOLORWRITEENABLE_GREEN}
  932.   D3DCOLORWRITEENABLE_BLUE      = (1 shl 2);
  933.   {$EXTERNALSYM D3DCOLORWRITEENABLE_BLUE}
  934.   D3DCOLORWRITEENABLE_ALPHA     = (1 shl 3);
  935.   {$EXTERNALSYM D3DCOLORWRITEENABLE_ALPHA}
  936. (*
  937.  * State enumerants for per-stage processing of fixed function pixel processing
  938.  * Two of these affect fixed function vertex processing as well: TEXTURETRANSFORMFLAGS and TEXCOORDINDEX.
  939.  *)
  940. {$IFNDEF COMPILER6_UP}
  941. type
  942.   _D3DTEXTURESTAGESTATETYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  943.   {$EXTERNALSYM _D3DTEXTURESTAGESTATETYPE}
  944.   D3DTEXTURESTAGESTATETYPE = _D3DTEXTURESTAGESTATETYPE;
  945.   {$EXTERNALSYM D3DTEXTURESTAGESTATETYPE}
  946.   TD3DTextureStageStateType = _D3DTEXTURESTAGESTATETYPE;
  947. const
  948.   D3DTSS_COLOROP        = TD3DTextureStageStateType( 1); { D3DTEXTUREOP - per-stage blending controls for color channels }
  949.   {$EXTERNALSYM D3DTSS_COLOROP}
  950.   D3DTSS_COLORARG1      = TD3DTextureStageStateType( 2); { D3DTA_* (texture arg) }
  951.   {$EXTERNALSYM D3DTSS_COLORARG1}
  952.   D3DTSS_COLORARG2      = TD3DTextureStageStateType( 3); { D3DTA_* (texture arg) }
  953.   {$EXTERNALSYM D3DTSS_COLORARG2}
  954.   D3DTSS_ALPHAOP        = TD3DTextureStageStateType( 4); { D3DTEXTUREOP - per-stage blending controls for alpha channel }
  955.   {$EXTERNALSYM D3DTSS_ALPHAOP}
  956.   D3DTSS_ALPHAARG1      = TD3DTextureStageStateType( 5); { D3DTA_* (texture arg) }
  957.   {$EXTERNALSYM D3DTSS_ALPHAARG1}
  958.   D3DTSS_ALPHAARG2      = TD3DTextureStageStateType( 6); { D3DTA_* (texture arg) }
  959.   {$EXTERNALSYM D3DTSS_ALPHAARG2}
  960.   D3DTSS_BUMPENVMAT00   = TD3DTextureStageStateType( 7); { float (bump mapping matrix) }
  961.   {$EXTERNALSYM D3DTSS_BUMPENVMAT00}
  962.   D3DTSS_BUMPENVMAT01   = TD3DTextureStageStateType( 8); { float (bump mapping matrix) }
  963.   {$EXTERNALSYM D3DTSS_BUMPENVMAT01}
  964.   D3DTSS_BUMPENVMAT10   = TD3DTextureStageStateType( 9); { float (bump mapping matrix) }
  965.   {$EXTERNALSYM D3DTSS_BUMPENVMAT10}
  966.   D3DTSS_BUMPENVMAT11   = TD3DTextureStageStateType(10); { float (bump mapping matrix) }
  967.   {$EXTERNALSYM D3DTSS_BUMPENVMAT11}
  968.   D3DTSS_TEXCOORDINDEX  = TD3DTextureStageStateType(11); { identifies which set of texture coordinates index this texture }
  969.   {$EXTERNALSYM D3DTSS_TEXCOORDINDEX}
  970.   D3DTSS_BUMPENVLSCALE  = TD3DTextureStageStateType(22); { float scale for bump map luminance }
  971.   {$EXTERNALSYM D3DTSS_BUMPENVLSCALE}
  972.   D3DTSS_BUMPENVLOFFSET = TD3DTextureStageStateType(23); { float offset for bump map luminance }
  973.   {$EXTERNALSYM D3DTSS_BUMPENVLOFFSET}
  974.   D3DTSS_TEXTURETRANSFORMFLAGS = TD3DTextureStageStateType(24); { D3DTEXTURETRANSFORMFLAGS controls texture transform }
  975.   {$EXTERNALSYM D3DTSS_TEXTURETRANSFORMFLAGS}
  976.   D3DTSS_COLORARG0      = TD3DTextureStageStateType(26); { D3DTA_* third arg for triadic ops }
  977.   {$EXTERNALSYM D3DTSS_COLORARG0}
  978.   D3DTSS_ALPHAARG0      = TD3DTextureStageStateType(27); { D3DTA_* third arg for triadic ops }
  979.   {$EXTERNALSYM D3DTSS_ALPHAARG0}
  980.   D3DTSS_RESULTARG      = TD3DTextureStageStateType(28); { D3DTA_* arg for result (CURRENT or TEMP) }
  981.   {$EXTERNALSYM D3DTSS_RESULTARG}
  982.   D3DTSS_CONSTANT       = TD3DTextureStageStateType(32); { Per-stage constant D3DTA_CONSTANT }
  983.   {$EXTERNALSYM D3DTSS_CONSTANT}
  984.   D3DTSS_FORCE_DWORD    = TD3DTextureStageStateType($7fffffff); { force 32-bit size enum }
  985.   {$EXTERNALSYM D3DTSS_FORCE_DWORD}
  986. {$ELSE}
  987. type
  988.   _D3DTEXTURESTAGESTATETYPE = (
  989.     D3DTSS_COLOROP        =  1, { D3DTEXTUREOP - per-stage blending controls for color channels }
  990.     D3DTSS_COLORARG1      =  2, { D3DTA_* (texture arg) }
  991.     D3DTSS_COLORARG2      =  3, { D3DTA_* (texture arg) }
  992.     D3DTSS_ALPHAOP        =  4, { D3DTEXTUREOP - per-stage blending controls for alpha channel }
  993.     D3DTSS_ALPHAARG1      =  5, { D3DTA_* (texture arg) }
  994.     D3DTSS_ALPHAARG2      =  6, { D3DTA_* (texture arg) }
  995.     D3DTSS_BUMPENVMAT00   =  7, { float (bump mapping matrix) }
  996.     D3DTSS_BUMPENVMAT01   =  8, { float (bump mapping matrix) }
  997.     D3DTSS_BUMPENVMAT10   =  9, { float (bump mapping matrix) }
  998.     D3DTSS_BUMPENVMAT11   = 10, { float (bump mapping matrix) }
  999.     D3DTSS_TEXCOORDINDEX  = 11, { identifies which set of texture coordinates index this texture }
  1000.     D3DTSS_BUMPENVLSCALE  = 22, { float scale for bump map luminance }
  1001.     D3DTSS_BUMPENVLOFFSET = 23, { float offset for bump map luminance }
  1002.     D3DTSS_TEXTURETRANSFORMFLAGS = 24, { D3DTEXTURETRANSFORMFLAGS controls texture transform }
  1003.     D3DTSS_COLORARG0      = 26, { D3DTA_* third arg for triadic ops }
  1004.     D3DTSS_ALPHAARG0      = 27, { D3DTA_* third arg for triadic ops }
  1005.     D3DTSS_RESULTARG      = 28, { D3DTA_* arg for result (CURRENT or TEMP) }
  1006.     D3DTSS_CONSTANT       = 32  { Per-stage constant D3DTA_CONSTANT }
  1007.   );
  1008.   {$EXTERNALSYM _D3DTEXTURESTAGESTATETYPE}
  1009.   D3DTEXTURESTAGESTATETYPE = _D3DTEXTURESTAGESTATETYPE;
  1010.   {$EXTERNALSYM D3DTEXTURESTAGESTATETYPE}
  1011.   TD3DTextureStageStateType = _D3DTEXTURESTAGESTATETYPE;
  1012. {$ENDIF}
  1013. type
  1014. (*
  1015.  * State enumerants for per-sampler texture processing.
  1016.  *)
  1017.   _D3DSAMPLERSTATETYPE = (
  1018.   {$IFNDEF COMPILER6_UP}
  1019.     D3DSAMP_invalid_0     {= 0},
  1020.     D3DSAMP_ADDRESSU      {= 1},  { D3DTEXTUREADDRESS for U coordinate }
  1021.     D3DSAMP_ADDRESSV      {= 2},  { D3DTEXTUREADDRESS for V coordinate }
  1022.     D3DSAMP_ADDRESSW      {= 3},  { D3DTEXTUREADDRESS for W coordinate }
  1023.     D3DSAMP_BORDERCOLOR   {= 4},  { D3DCOLOR }
  1024.     D3DSAMP_MAGFILTER     {= 5},  { D3DTEXTUREFILTER filter to use for magnification }
  1025.     D3DSAMP_MINFILTER     {= 6},  { D3DTEXTUREFILTER filter to use for minification }
  1026.     D3DSAMP_MIPFILTER     {= 7},  { D3DTEXTUREFILTER filter to use between mipmaps during minification }
  1027.     D3DSAMP_MIPMAPLODBIAS {= 8},  { float Mipmap LOD bias }
  1028.     D3DSAMP_MAXMIPLEVEL   {= 9},  { DWORD 0..(n-1) LOD index of largest map to use (0 == largest) }
  1029.     D3DSAMP_MAXANISOTROPY {= 10}, { DWORD maximum anisotropy }
  1030.     D3DSAMP_SRGBTEXTURE   {= 11}, { Default = 0 (which means Gamma 1.0,
  1031.                                    no correction required.) else correct for
  1032.                                    Gamma = 2.2 }
  1033.     D3DSAMP_ELEMENTINDEX  {= 12}, { When multi-element texture is assigned to sampler, this
  1034.                                     indicates which element index to use.  Default = 0.  }
  1035.     D3DSAMP_DMAPOFFSET    {= 13}  { Offset in vertices in the pre-sampled displacement map.
  1036.                                     Only valid for D3DDMAPSAMPLER sampler  }
  1037.   {$ELSE}
  1038.     D3DSAMP_ADDRESSU       = 1,  { D3DTEXTUREADDRESS for U coordinate }
  1039.     D3DSAMP_ADDRESSV       = 2,  { D3DTEXTUREADDRESS for V coordinate }
  1040.     D3DSAMP_ADDRESSW       = 3,  { D3DTEXTUREADDRESS for W coordinate }
  1041.     D3DSAMP_BORDERCOLOR    = 4,  { D3DCOLOR }
  1042.     D3DSAMP_MAGFILTER      = 5,  { D3DTEXTUREFILTER filter to use for magnification }
  1043.     D3DSAMP_MINFILTER      = 6,  { D3DTEXTUREFILTER filter to use for minification }
  1044.     D3DSAMP_MIPFILTER      = 7,  { D3DTEXTUREFILTER filter to use between mipmaps during minification }
  1045.     D3DSAMP_MIPMAPLODBIAS  = 8,  { float Mipmap LOD bias }
  1046.     D3DSAMP_MAXMIPLEVEL    = 9,  { DWORD 0..(n-1) LOD index of largest map to use (0 == largest) }
  1047.     D3DSAMP_MAXANISOTROPY  = 10, { DWORD maximum anisotropy }
  1048.     D3DSAMP_SRGBTEXTURE    = 11, { Default = 0 (which means Gamma 1.0,
  1049.                                   no correction required.) else correct for
  1050.                                   Gamma = 2.2 }
  1051.     D3DSAMP_ELEMENTINDEX   = 12, { When multi-element texture is assigned to sampler, this
  1052.                                    indicates which element index to use.  Default = 0.  }
  1053.     D3DSAMP_DMAPOFFSET     = 13  { Offset in vertices in the pre-sampled displacement map.
  1054.                                    Only valid for D3DDMAPSAMPLER sampler  }
  1055.   {$ENDIF}
  1056.   );
  1057.   {$EXTERNALSYM _D3DSAMPLERSTATETYPE}
  1058.   D3DSAMPLERSTATETYPE = _D3DSAMPLERSTATETYPE;
  1059.   {$EXTERNALSYM D3DSAMPLERSTATETYPE}
  1060.   TD3DSamplerStateType = _D3DSAMPLERSTATETYPE;
  1061. const
  1062.   { Special sampler which is used in the tesselator }
  1063.   D3DDMAPSAMPLER = 256;
  1064.   {$EXTERNALSYM D3DDMAPSAMPLER}
  1065.   // Samplers used in vertex shaders
  1066.   D3DVERTEXTEXTURESAMPLER0 = (D3DDMAPSAMPLER+1);
  1067.   {$EXTERNALSYM D3DVERTEXTEXTURESAMPLER0}
  1068.   D3DVERTEXTEXTURESAMPLER1 = (D3DDMAPSAMPLER+2);
  1069.   {$EXTERNALSYM D3DVERTEXTEXTURESAMPLER1}
  1070.   D3DVERTEXTEXTURESAMPLER2 = (D3DDMAPSAMPLER+3);
  1071.   {$EXTERNALSYM D3DVERTEXTEXTURESAMPLER2}
  1072.   D3DVERTEXTEXTURESAMPLER3 = (D3DDMAPSAMPLER+4);
  1073.   {$EXTERNALSYM D3DVERTEXTEXTURESAMPLER3}
  1074.   // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position
  1075.   // and normal in the camera space) should be taken as texture coordinates
  1076.   // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from
  1077.   //
  1078.   D3DTSS_TCI_PASSTHRU                           = $00000000;
  1079.   {$EXTERNALSYM D3DTSS_TCI_PASSTHRU}
  1080.   D3DTSS_TCI_CAMERASPACENORMAL                  = $00010000;
  1081.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACENORMAL}
  1082.   D3DTSS_TCI_CAMERASPACEPOSITION                = $00020000;
  1083.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACEPOSITION}
  1084.   D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR        = $00030000;
  1085.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR}
  1086.   D3DTSS_TCI_SPHEREMAP                          = $00040000;
  1087.   {$EXTERNALSYM D3DTSS_TCI_SPHEREMAP}
  1088. (*
  1089.  * Enumerations for COLOROP and ALPHAOP texture blending operations set in
  1090.  * texture processing stage controls in D3DTSS.
  1091.  *)
  1092. type
  1093.   _D3DTEXTUREOP = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1094.   {$EXTERNALSYM _D3DTEXTUREOP}
  1095.   D3DTEXTUREOP = _D3DTEXTUREOP;
  1096.   {$EXTERNALSYM D3DTEXTUREOP}
  1097.   TD3DTextureOp = _D3DTEXTUREOP;
  1098. const
  1099.   // Control
  1100.   D3DTOP_DISABLE              = 1;      // disables stage
  1101.   {$EXTERNALSYM D3DTOP_DISABLE}
  1102.   D3DTOP_SELECTARG1           = 2;      // the default
  1103.   {$EXTERNALSYM D3DTOP_SELECTARG1}
  1104.   D3DTOP_SELECTARG2           = 3;
  1105.   {$EXTERNALSYM D3DTOP_SELECTARG2}
  1106.   // Modulate
  1107.   D3DTOP_MODULATE             = 4;      // multiply args together
  1108.   {$EXTERNALSYM D3DTOP_MODULATE}
  1109.   D3DTOP_MODULATE2X           = 5;      // multiply and  1 bit
  1110.   {$EXTERNALSYM D3DTOP_MODULATE2X}
  1111.   D3DTOP_MODULATE4X           = 6;      // multiply and  2 bits
  1112.   {$EXTERNALSYM D3DTOP_MODULATE4X}
  1113.   // Add
  1114.   D3DTOP_ADD                  =  7;   // add arguments together
  1115.   {$EXTERNALSYM D3DTOP_ADD}
  1116.   D3DTOP_ADDSIGNED            =  8;   // add with -0.5 bias
  1117.   {$EXTERNALSYM D3DTOP_ADDSIGNED}
  1118.   D3DTOP_ADDSIGNED2X          =  9;   // as above but left  1 bit
  1119.   {$EXTERNALSYM D3DTOP_ADDSIGNED2X}
  1120.   D3DTOP_SUBTRACT             = 10;   // Arg1 - Arg2, with no saturation
  1121.   {$EXTERNALSYM D3DTOP_SUBTRACT}
  1122.   D3DTOP_ADDSMOOTH            = 11;   // add 2 args, subtract product
  1123.                                       // Arg1 + Arg2 - Arg1*Arg2
  1124.                                       // = Arg1 + (1-Arg1)*Arg2
  1125.   {$EXTERNALSYM D3DTOP_ADDSMOOTH}
  1126.   // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
  1127.   D3DTOP_BLENDDIFFUSEALPHA    = 12; // iterated alpha
  1128.   {$EXTERNALSYM D3DTOP_BLENDDIFFUSEALPHA}
  1129.   D3DTOP_BLENDTEXTUREALPHA    = 13; // texture alpha
  1130.   {$EXTERNALSYM D3DTOP_BLENDTEXTUREALPHA}
  1131.   D3DTOP_BLENDFACTORALPHA     = 14; // alpha from D3DRS_TEXTUREFACTOR
  1132.   {$EXTERNALSYM D3DTOP_BLENDFACTORALPHA}
  1133.   // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)
  1134.   D3DTOP_BLENDTEXTUREALPHAPM  = 15; // texture alpha
  1135.   {$EXTERNALSYM D3DTOP_BLENDTEXTUREALPHAPM}
  1136.   D3DTOP_BLENDCURRENTALPHA    = 16; // by alpha of current color
  1137.   {$EXTERNALSYM D3DTOP_BLENDCURRENTALPHA}
  1138.   // Specular mapping
  1139.   D3DTOP_PREMODULATE            = 17;     // modulate with next texture before use
  1140.   {$EXTERNALSYM D3DTOP_PREMODULATE}
  1141.   D3DTOP_MODULATEALPHA_ADDCOLOR = 18;     // Arg1.RGB + Arg1.A*Arg2.RGB
  1142.                                           // COLOROP only
  1143.   {$EXTERNALSYM D3DTOP_MODULATEALPHA_ADDCOLOR}
  1144.   D3DTOP_MODULATECOLOR_ADDALPHA = 19;     // Arg1.RGB*Arg2.RGB + Arg1.A
  1145.                                           // COLOROP only
  1146.   {$EXTERNALSYM D3DTOP_MODULATECOLOR_ADDALPHA}
  1147.   D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20;  // (1-Arg1.A)*Arg2.RGB + Arg1.RGB
  1148.                                           // COLOROP only
  1149.   {$EXTERNALSYM D3DTOP_MODULATEINVALPHA_ADDCOLOR}
  1150.   D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21;  // (1-Arg1.RGB)*Arg2.RGB + Arg1.A
  1151.                                           // COLOROP only
  1152.   {$EXTERNALSYM D3DTOP_MODULATEINVCOLOR_ADDALPHA}
  1153.   // Bump mapping
  1154.   D3DTOP_BUMPENVMAP           = 22; // per pixel env map perturbation
  1155.   {$EXTERNALSYM D3DTOP_BUMPENVMAP}
  1156.   D3DTOP_BUMPENVMAPLUMINANCE  = 23; // with luminance channel
  1157.   {$EXTERNALSYM D3DTOP_BUMPENVMAPLUMINANCE}
  1158.   // This can do either diffuse or specular bump mapping with correct input.
  1159.   // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)
  1160.   // where each component has been scaled and offset to make it signed.
  1161.   // The result is replicated into all four (including alpha) channels.
  1162.   // This is a valid COLOROP only.
  1163.   D3DTOP_DOTPRODUCT3          = 24;
  1164.   {$EXTERNALSYM D3DTOP_DOTPRODUCT3}
  1165.   // Triadic ops
  1166.   D3DTOP_MULTIPLYADD          = 25; // Arg0 + Arg1*Arg2
  1167.   {$EXTERNALSYM D3DTOP_MULTIPLYADD}
  1168.   D3DTOP_LERP                 = 26; // (Arg0)*Arg1 + (1-Arg0)*Arg2
  1169.   {$EXTERNALSYM D3DTOP_LERP}
  1170. (*
  1171.  * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending
  1172.  * operations set in texture processing stage controls in D3DRENDERSTATE.
  1173.  *)
  1174. const
  1175.   D3DTA_SELECTMASK        = $0000000f;  // mask for arg selector
  1176.   {$EXTERNALSYM D3DTA_SELECTMASK}
  1177.   D3DTA_DIFFUSE           = $00000000;  // select diffuse color (read only)
  1178.   {$EXTERNALSYM D3DTA_DIFFUSE}
  1179.   D3DTA_CURRENT           = $00000001;  // select stage destination register (read/write)
  1180.   {$EXTERNALSYM D3DTA_CURRENT}
  1181.   D3DTA_TEXTURE           = $00000002;  // select texture color (read only)
  1182.   {$EXTERNALSYM D3DTA_TEXTURE}
  1183.   D3DTA_TFACTOR           = $00000003;  // select D3DRS_TEXTUREFACTOR (read only)
  1184.   {$EXTERNALSYM D3DTA_TFACTOR}
  1185.   D3DTA_SPECULAR          = $00000004;  // select specular color (read only)
  1186.   {$EXTERNALSYM D3DTA_SPECULAR}
  1187.   D3DTA_TEMP              = $00000005;  // select temporary register color (read/write)
  1188.   {$EXTERNALSYM D3DTA_TEMP}
  1189.   D3DTA_CONSTANT          = $00000006;  // select texture stage constant
  1190.   {$EXTERNALSYM D3DTA_CONSTANT}
  1191.   D3DTA_COMPLEMENT        = $00000010;  // take 1.0 - x (read modifier)
  1192.   {$EXTERNALSYM D3DTA_COMPLEMENT}
  1193.   D3DTA_ALPHAREPLICATE    = $00000020;  // replicate alpha to color components (read modifier)
  1194.   {$EXTERNALSYM D3DTA_ALPHAREPLICATE}
  1195. type
  1196.   //
  1197.   // Values for D3DSAMP_***FILTER texture stage states
  1198.   //
  1199.   _D3DTEXTUREFILTERTYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1200.   {$EXTERNALSYM _D3DTEXTUREFILTERTYPE}
  1201.   D3DTEXTUREFILTERTYPE = _D3DTEXTUREFILTERTYPE;
  1202.   {$EXTERNALSYM D3DTEXTUREFILTERTYPE}
  1203.   TD3DTextureFilterType = _D3DTEXTUREFILTERTYPE;
  1204. const
  1205.   D3DTEXF_NONE            = 0;    // filtering disabled (valid for mip filter only)
  1206.   {$EXTERNALSYM D3DTEXF_NONE}
  1207.   D3DTEXF_POINT           = 1;    // nearest
  1208.   {$EXTERNALSYM D3DTEXF_POINT}
  1209.   D3DTEXF_LINEAR          = 2;    // linear interpolation
  1210.   {$EXTERNALSYM D3DTEXF_LINEAR}
  1211.   D3DTEXF_ANISOTROPIC     = 3;    // anisotropic
  1212.   {$EXTERNALSYM D3DTEXF_ANISOTROPIC}
  1213.   D3DTEXF_PYRAMIDALQUAD   = 6;    // 4-sample tent
  1214.   {$EXTERNALSYM D3DTEXF_PYRAMIDALQUAD}
  1215.   D3DTEXF_GAUSSIANQUAD    = 7;    // 4-sample gaussian
  1216.   {$EXTERNALSYM D3DTEXF_GAUSSIANQUAD}
  1217. const
  1218.   { Bits for Flags in ProcessVertices call }
  1219.   D3DPV_DONOTCOPYDATA        = (1 shl 0);
  1220.   {$EXTERNALSYM D3DPV_DONOTCOPYDATA}
  1221. //-------------------------------------------------------------------
  1222.   // Flexible vertex format bits
  1223.   //
  1224.   D3DFVF_RESERVED0        = $001;
  1225.   {$EXTERNALSYM D3DFVF_RESERVED0}
  1226.   D3DFVF_POSITION_MASK    = $400E;
  1227.   {$EXTERNALSYM D3DFVF_POSITION_MASK}
  1228.   D3DFVF_XYZ              = $002;
  1229.   {$EXTERNALSYM D3DFVF_XYZ}
  1230.   D3DFVF_XYZRHW           = $004;
  1231.   {$EXTERNALSYM D3DFVF_XYZRHW}
  1232.   D3DFVF_XYZB1            = $006;
  1233.   {$EXTERNALSYM D3DFVF_XYZB1}
  1234.   D3DFVF_XYZB2            = $008;
  1235.   {$EXTERNALSYM D3DFVF_XYZB2}
  1236.   D3DFVF_XYZB3            = $00a;
  1237.   {$EXTERNALSYM D3DFVF_XYZB3}
  1238.   D3DFVF_XYZB4            = $00c;
  1239.   {$EXTERNALSYM D3DFVF_XYZB4}
  1240.   D3DFVF_XYZB5            = $00e;
  1241.   {$EXTERNALSYM D3DFVF_XYZB5}
  1242.   D3DFVF_XYZW             = $4002;
  1243.   {$EXTERNALSYM D3DFVF_XYZW}
  1244.   D3DFVF_NORMAL           = $010;
  1245.   {$EXTERNALSYM D3DFVF_NORMAL}
  1246.   D3DFVF_PSIZE            = $020;
  1247.   {$EXTERNALSYM D3DFVF_PSIZE}
  1248.   D3DFVF_DIFFUSE          = $040;
  1249.   {$EXTERNALSYM D3DFVF_DIFFUSE}
  1250.   D3DFVF_SPECULAR         = $080;
  1251.   {$EXTERNALSYM D3DFVF_SPECULAR}
  1252.   D3DFVF_TEXCOUNT_MASK    = $f00;
  1253.   {$EXTERNALSYM D3DFVF_TEXCOUNT_MASK}
  1254.   D3DFVF_TEXCOUNT_SHIFT   = 8;
  1255.   {$EXTERNALSYM D3DFVF_TEXCOUNT_SHIFT}
  1256.   D3DFVF_TEX0             = $000;
  1257.   {$EXTERNALSYM D3DFVF_TEX0}
  1258.   D3DFVF_TEX1             = $100;
  1259.   {$EXTERNALSYM D3DFVF_TEX1}
  1260.   D3DFVF_TEX2             = $200;
  1261.   {$EXTERNALSYM D3DFVF_TEX2}
  1262.   D3DFVF_TEX3             = $300;
  1263.   {$EXTERNALSYM D3DFVF_TEX3}
  1264.   D3DFVF_TEX4             = $400;
  1265.   {$EXTERNALSYM D3DFVF_TEX4}
  1266.   D3DFVF_TEX5             = $500;
  1267.   {$EXTERNALSYM D3DFVF_TEX5}
  1268.   D3DFVF_TEX6             = $600;
  1269.   {$EXTERNALSYM D3DFVF_TEX6}
  1270.   D3DFVF_TEX7             = $700;
  1271.   {$EXTERNALSYM D3DFVF_TEX7}
  1272.   D3DFVF_TEX8             = $800;
  1273.   {$EXTERNALSYM D3DFVF_TEX8}
  1274.   D3DFVF_LASTBETA_UBYTE4   = $1000;
  1275.   {$EXTERNALSYM D3DFVF_LASTBETA_UBYTE4}
  1276.   D3DFVF_LASTBETA_D3DCOLOR = $8000;
  1277.   {$EXTERNALSYM D3DFVF_LASTBETA_D3DCOLOR}
  1278.   D3DFVF_RESERVED2         = $6000;  // 2 reserved bits
  1279.   {$EXTERNALSYM D3DFVF_RESERVED2}
  1280. //---------------------------------------------------------------------
  1281. // Vertex Shaders
  1282. //
  1283. // Vertex shader declaration
  1284. // Forces TD3DDeclUsage, TD3DDeclMethod, TD3DDeclType be 1 byte enums
  1285. {$MINENUMSIZE 1}
  1286. type
  1287.   // Vertex element semantics
  1288.   //
  1289.   _D3DDECLUSAGE = (
  1290.     D3DDECLUSAGE_POSITION,      // = 0
  1291.     D3DDECLUSAGE_BLENDWEIGHT,   // 1
  1292.     D3DDECLUSAGE_BLENDINDICES,  // 2
  1293.     D3DDECLUSAGE_NORMAL,        // 3
  1294.     D3DDECLUSAGE_PSIZE,         // 4
  1295.     D3DDECLUSAGE_TEXCOORD,      // 5
  1296.     D3DDECLUSAGE_TANGENT,       // 6
  1297.     D3DDECLUSAGE_BINORMAL,      // 7
  1298.     D3DDECLUSAGE_TESSFACTOR,    // 8
  1299.     D3DDECLUSAGE_POSITIONT,     // 9
  1300.     D3DDECLUSAGE_COLOR,         // 10
  1301.     D3DDECLUSAGE_FOG,           // 11
  1302.     D3DDECLUSAGE_DEPTH,         // 12
  1303.     D3DDECLUSAGE_SAMPLE         // 13
  1304.   );
  1305.   {$EXTERNALSYM _D3DDECLUSAGE}
  1306.   D3DDECLUSAGE = _D3DDECLUSAGE;
  1307.   {$EXTERNALSYM D3DDECLUSAGE}
  1308.   TD3DDeclUsage = _D3DDECLUSAGE;
  1309. const
  1310.   MAXD3DDECLUSAGE         = DWORD(D3DDECLUSAGE_SAMPLE);
  1311.   {$EXTERNALSYM MAXD3DDECLUSAGE}
  1312.   MAXD3DDECLUSAGEINDEX    = 15;
  1313.   {$EXTERNALSYM MAXD3DDECLUSAGEINDEX}
  1314.   MAXD3DDECLLENGTH        = 64; // does not include "end" marker vertex element
  1315.   {$EXTERNALSYM MAXD3DDECLLENGTH}
  1316. type
  1317.   _D3DDECLMETHOD = (
  1318.     D3DDECLMETHOD_DEFAULT,    // = 0,
  1319.     D3DDECLMETHOD_PARTIALU,
  1320.     D3DDECLMETHOD_PARTIALV,
  1321.     D3DDECLMETHOD_CROSSUV,    // Normal
  1322.     D3DDECLMETHOD_UV,
  1323.     D3DDECLMETHOD_LOOKUP,               // Lookup a displacement map
  1324.     D3DDECLMETHOD_LOOKUPPRESAMPLED      // Lookup a pre-sampled displacement map
  1325.   );
  1326.   {$EXTERNALSYM _D3DDECLMETHOD}
  1327.   D3DDECLMETHOD = _D3DDECLMETHOD;
  1328.   {$EXTERNALSYM D3DDECLMETHOD}
  1329.   TD3DDeclMethod = _D3DDECLMETHOD;
  1330. const
  1331.   MAXD3DDECLMETHOD = DWORD(D3DDECLMETHOD_LOOKUPPRESAMPLED);
  1332.   {$EXTERNALSYM MAXD3DDECLMETHOD}
  1333. type
  1334.   // Declarations for _Type fields
  1335.   //
  1336.   _D3DDECLTYPE = (
  1337.   {$IFNDEF COMPILER6_UP}
  1338.     D3DDECLTYPE_FLOAT1   {=  0}, // 1D float expanded to (value, 0., 0., 1.)
  1339.     D3DDECLTYPE_FLOAT2   {=  1}, // 2D float expanded to (value, value, 0., 1.)
  1340.     D3DDECLTYPE_FLOAT3   {=  2}, // 3D float expanded to (value, value, value, 1.)
  1341.     D3DDECLTYPE_FLOAT4   {=  3}, // 4D float
  1342.     D3DDECLTYPE_D3DCOLOR {=  4}, // 4D packed unsigned bytes mapped to 0. to 1. range
  1343.                                  // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A)
  1344.     D3DDECLTYPE_UBYTE4   {=  5}, // 4D unsigned byte
  1345.     D3DDECLTYPE_SHORT2   {=  6}, // 2D signed short expanded to (value, value, 0., 1.)
  1346.     D3DDECLTYPE_SHORT4   {=  7}, // 4D signed short
  1347.   // The following types are valid only with vertex shaders >= 2.0
  1348.     D3DDECLTYPE_UBYTE4N  {=  8}, // Each of 4 bytes is normalized by dividing to 255.0
  1349.     D3DDECLTYPE_SHORT2N  {=  9}, // 2D signed short normalized (v[0]/32767.0,v[1]/32767.0,0,1)
  1350.     D3DDECLTYPE_SHORT4N  {= 10}, // 4D signed short normalized (v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0)
  1351.     D3DDECLTYPE_USHORT2N {= 11}, // 2D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,0,1)
  1352.     D3DDECLTYPE_USHORT4N {= 12}, // 4D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0)
  1353.     D3DDECLTYPE_UDEC3    {= 13}, // 3D unsigned 10 10 10 format expanded to (value, value, value, 1)
  1354.     D3DDECLTYPE_DEC3N    {= 14}, // 3D signed 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1)
  1355.     D3DDECLTYPE_FLOAT16_2{= 15}, // Two 16-bit floating point values, expanded to (value, value, 0, 1)
  1356.     D3DDECLTYPE_FLOAT16_4{= 16}, // Four 16-bit floating point values
  1357.     D3DDECLTYPE_UNUSED   {= 17}  // When the type field in a decl is unused.
  1358.   {$ELSE}
  1359.     D3DDECLTYPE_FLOAT1    =  0,  // 1D float expanded to (value, 0., 0., 1.)
  1360.     D3DDECLTYPE_FLOAT2    =  1,  // 2D float expanded to (value, value, 0., 1.)
  1361.     D3DDECLTYPE_FLOAT3    =  2,  // 3D float expanded to (value, value, value, 1.)
  1362.     D3DDECLTYPE_FLOAT4    =  3,  // 4D float
  1363.     D3DDECLTYPE_D3DCOLOR  =  4,  // 4D packed unsigned bytes mapped to 0. to 1. range
  1364.                                  // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A)
  1365.     D3DDECLTYPE_UBYTE4    =  5,  // 4D unsigned byte
  1366.     D3DDECLTYPE_SHORT2    =  6,  // 2D signed short expanded to (value, value, 0., 1.)
  1367.     D3DDECLTYPE_SHORT4    =  7,  // 4D signed short
  1368.   // The following types are valid only with vertex shaders >= 2.0
  1369.     D3DDECLTYPE_UBYTE4N   =  8,  // Each of 4 bytes is normalized by dividing to 255.0
  1370.     D3DDECLTYPE_SHORT2N   =  9,  // 2D signed short normalized (v[0]/32767.0,v[1]/32767.0,0,1)
  1371.     D3DDECLTYPE_SHORT4N   = 10,  // 4D signed short normalized (v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0)
  1372.     D3DDECLTYPE_USHORT2N  = 11,  // 2D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,0,1)
  1373.     D3DDECLTYPE_USHORT4N  = 12,  // 4D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0)
  1374.     D3DDECLTYPE_UDEC3     = 13,  // 3D unsigned 10 10 10 format expanded to (value, value, value, 1)
  1375.     D3DDECLTYPE_DEC3N     = 14,  // 3D signed 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1)
  1376.     D3DDECLTYPE_FLOAT16_2 = 15,  // Two 16-bit floating point values, expanded to (value, value, 0, 1)
  1377.     D3DDECLTYPE_FLOAT16_4 = 16,  // Four 16-bit floating point values
  1378.     D3DDECLTYPE_UNUSED    = 17   // When the type field in a decl is unused.
  1379.   {$ENDIF}
  1380.   );
  1381.   {$EXTERNALSYM _D3DDECLTYPE}
  1382.   D3DDECLTYPE = _D3DDECLTYPE;
  1383.   {$EXTERNALSYM D3DDECLTYPE}
  1384.   TD3DDeclType = _D3DDECLTYPE;
  1385. // Restores enums to be 4 byte in size
  1386. {$MINENUMSIZE 4}
  1387. const
  1388.   MAXD3DDECLTYPE      = DWORD(D3DDECLTYPE_UNUSED);
  1389.   {$EXTERNALSYM MAXD3DDECLTYPE}
  1390. type
  1391.   PD3DVertexElement9 = ^TD3DVertexElement9;
  1392.   _D3DVERTEXELEMENT9 = packed record
  1393.     Stream:     Word;                 // Stream index
  1394.     Offset:     Word;                 // Offset in the stream in bytes
  1395.     _Type:      TD3DDeclType{Byte};   // Data type
  1396.     Method:     TD3DDeclMethod{Byte}; // Processing method
  1397.     Usage:      TD3DDeclUsage{Byte};  // Semantics
  1398.     UsageIndex: Byte;                 // Semantic index
  1399.   end;
  1400.   {$EXTERNALSYM _D3DVERTEXELEMENT9}
  1401.   D3DVERTEXELEMENT9 = _D3DVERTEXELEMENT9;
  1402.   {$EXTERNALSYM D3DVERTEXELEMENT9}
  1403.   TD3DVertexElement9 = _D3DVERTEXELEMENT9;
  1404. // This is used to initialize the last vertex element in a vertex declaration
  1405. // array
  1406. //
  1407. const
  1408.   D3DDECL_END: TD3DVertexElement9 = (Stream     : $FF;
  1409.                                      Offset     : 0;
  1410.                                      _Type      : D3DDECLTYPE_UNUSED;
  1411.                                      Method     : TD3DDeclMethod(0);
  1412.                                      Usage      : TD3DDeclUsage(0);
  1413.                                      UsageIndex : 0);
  1414.   {$EXTERNALSYM D3DDECL_END}
  1415. // Maximum supported number of texture coordinate sets
  1416. const
  1417.   D3DDP_MAXTEXCOORD   = 8;
  1418.   {$EXTERNALSYM D3DDP_MAXTEXCOORD}
  1419. //---------------------------------------------------------------------
  1420. //
  1421. // The internal format of Pixel Shader (PS) & Vertex Shader (VS)
  1422. // Instruction Tokens is defined in the Direct3D Device Driver Kit
  1423. //
  1424. //---------------------------------------------------------------------
  1425.   //
  1426.   // Instruction Token Bit Definitions
  1427.   //
  1428.   D3DSI_OPCODE_MASK       = $0000FFFF;
  1429.   {$EXTERNALSYM D3DSI_OPCODE_MASK}
  1430.   D3DSI_INSTLENGTH_MASK   = $0F000000;
  1431.   {$EXTERNALSYM D3DSI_INSTLENGTH_MASK}
  1432.   D3DSI_INSTLENGTH_SHIFT  = 24;
  1433.   {$EXTERNALSYM D3DSI_INSTLENGTH_SHIFT}
  1434. type 
  1435.   _D3DSHADER_INSTRUCTION_OPCODE_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1436.   {$EXTERNALSYM _D3DSHADER_INSTRUCTION_OPCODE_TYPE}
  1437.   D3DSHADER_INSTRUCTION_OPCODE_TYPE = _D3DSHADER_INSTRUCTION_OPCODE_TYPE;
  1438.   {$EXTERNALSYM D3DSHADER_INSTRUCTION_OPCODE_TYPE}
  1439.   TD3DShaderInstructionOpcodeType = _D3DSHADER_INSTRUCTION_OPCODE_TYPE;
  1440. const
  1441.   D3DSIO_NOP          = 0;
  1442.   {$EXTERNALSYM D3DSIO_NOP}
  1443.   D3DSIO_MOV          = 1;
  1444.   {$EXTERNALSYM D3DSIO_MOV}
  1445.   D3DSIO_ADD          = 2;
  1446.   {$EXTERNALSYM D3DSIO_ADD}
  1447.   D3DSIO_SUB          = 3;
  1448.   {$EXTERNALSYM D3DSIO_SUB}
  1449.   D3DSIO_MAD          = 4;
  1450.   {$EXTERNALSYM D3DSIO_MAD}
  1451.   D3DSIO_MUL          = 5;
  1452.   {$EXTERNALSYM D3DSIO_MUL}
  1453.   D3DSIO_RCP          = 6;
  1454.   {$EXTERNALSYM D3DSIO_RCP}
  1455.   D3DSIO_RSQ          = 7;
  1456.   {$EXTERNALSYM D3DSIO_RSQ}
  1457.   D3DSIO_DP3          = 8;
  1458.   {$EXTERNALSYM D3DSIO_DP3}
  1459.   D3DSIO_DP4          = 9;
  1460.   {$EXTERNALSYM D3DSIO_DP4}
  1461.   D3DSIO_MIN          = 10;
  1462.   {$EXTERNALSYM D3DSIO_MIN}
  1463.   D3DSIO_MAX          = 11;
  1464.   {$EXTERNALSYM D3DSIO_MAX}
  1465.   D3DSIO_SLT          = 12;
  1466.   {$EXTERNALSYM D3DSIO_SLT}
  1467.   D3DSIO_SGE          = 13;
  1468.   {$EXTERNALSYM D3DSIO_SGE}
  1469.   D3DSIO_EXP          = 14;
  1470.   {$EXTERNALSYM D3DSIO_EXP}
  1471.   D3DSIO_LOG          = 15;
  1472.   {$EXTERNALSYM D3DSIO_LOG}
  1473.   D3DSIO_LIT          = 16;
  1474.   {$EXTERNALSYM D3DSIO_LIT}
  1475.   D3DSIO_DST          = 17;
  1476.   {$EXTERNALSYM D3DSIO_DST}
  1477.   D3DSIO_LRP          = 18;
  1478.   {$EXTERNALSYM D3DSIO_LRP}
  1479.   D3DSIO_FRC          = 19;
  1480.   {$EXTERNALSYM D3DSIO_FRC}
  1481.   D3DSIO_M4x4         = 20;
  1482.   {$EXTERNALSYM D3DSIO_M4x4}
  1483.   D3DSIO_M4x3         = 21;
  1484.   {$EXTERNALSYM D3DSIO_M4x3}
  1485.   D3DSIO_M3x4         = 22;
  1486.   {$EXTERNALSYM D3DSIO_M3x4}
  1487.   D3DSIO_M3x3         = 23;
  1488.   {$EXTERNALSYM D3DSIO_M3x3}
  1489.   D3DSIO_M3x2         = 24;
  1490.   {$EXTERNALSYM D3DSIO_M3x2}
  1491.   D3DSIO_CALL         = 25;
  1492.   {$EXTERNALSYM D3DSIO_CALL}
  1493.   D3DSIO_CALLNZ       = 26;
  1494.   {$EXTERNALSYM D3DSIO_CALLNZ}
  1495.   D3DSIO_LOOP         = 27;
  1496.   {$EXTERNALSYM D3DSIO_LOOP}
  1497.   D3DSIO_RET          = 28;
  1498.   {$EXTERNALSYM D3DSIO_RET}
  1499.   D3DSIO_ENDLOOP      = 29;
  1500.   {$EXTERNALSYM D3DSIO_ENDLOOP}
  1501.   D3DSIO_LABEL        = 30;
  1502.   {$EXTERNALSYM D3DSIO_LABEL}
  1503.   D3DSIO_DCL          = 31;
  1504.   {$EXTERNALSYM D3DSIO_DCL}
  1505.   D3DSIO_POW          = 32;
  1506.   {$EXTERNALSYM D3DSIO_POW}
  1507.   D3DSIO_CRS          = 33;
  1508.   {$EXTERNALSYM D3DSIO_CRS}
  1509.   D3DSIO_SGN          = 34;
  1510.   {$EXTERNALSYM D3DSIO_SGN}
  1511.   D3DSIO_ABS          = 35;
  1512.   {$EXTERNALSYM D3DSIO_ABS}
  1513.   D3DSIO_NRM          = 36;
  1514.   {$EXTERNALSYM D3DSIO_NRM}
  1515.   D3DSIO_SINCOS       = 37;
  1516.   {$EXTERNALSYM D3DSIO_SINCOS}
  1517.   D3DSIO_REP          = 38;
  1518.   {$EXTERNALSYM D3DSIO_REP}
  1519.   D3DSIO_ENDREP       = 39;
  1520.   {$EXTERNALSYM D3DSIO_ENDREP}
  1521.   D3DSIO_IF           = 40;
  1522.   {$EXTERNALSYM D3DSIO_IF}
  1523.   D3DSIO_IFC          = 41;
  1524.   {$EXTERNALSYM D3DSIO_IFC}
  1525.   D3DSIO_ELSE         = 42;
  1526.   {$EXTERNALSYM D3DSIO_ELSE}
  1527.   D3DSIO_ENDIF        = 43;
  1528.   {$EXTERNALSYM D3DSIO_ENDIF}
  1529.   D3DSIO_BREAK        = 44;
  1530.   {$EXTERNALSYM D3DSIO_BREAK}
  1531.   D3DSIO_BREAKC       = 45;
  1532.   {$EXTERNALSYM D3DSIO_BREAKC}
  1533.   D3DSIO_MOVA         = 46;
  1534.   {$EXTERNALSYM D3DSIO_MOVA}
  1535.   D3DSIO_DEFB         = 47;
  1536.   {$EXTERNALSYM D3DSIO_DEFB}
  1537.   D3DSIO_DEFI         = 48;
  1538.   {$EXTERNALSYM D3DSIO_DEFI}
  1539.   D3DSIO_TEXCOORD     = 64;
  1540.   {$EXTERNALSYM D3DSIO_TEXCOORD}
  1541.   D3DSIO_TEXKILL      = 65;
  1542.   {$EXTERNALSYM D3DSIO_TEXKILL}
  1543.   D3DSIO_TEX          = 66;
  1544.   {$EXTERNALSYM D3DSIO_TEX}
  1545.   D3DSIO_TEXBEM       = 67;
  1546.   {$EXTERNALSYM D3DSIO_TEXBEM}
  1547.   D3DSIO_TEXBEML      = 68;
  1548.   {$EXTERNALSYM D3DSIO_TEXBEML}
  1549.   D3DSIO_TEXREG2AR    = 69;
  1550.   {$EXTERNALSYM D3DSIO_TEXREG2AR}
  1551.   D3DSIO_TEXREG2GB    = 70;
  1552.   {$EXTERNALSYM D3DSIO_TEXREG2GB}
  1553.   D3DSIO_TEXM3x2PAD   = 71;
  1554.   {$EXTERNALSYM D3DSIO_TEXM3x2PAD}
  1555.   D3DSIO_TEXM3x2TEX   = 72;
  1556.   {$EXTERNALSYM D3DSIO_TEXM3x2TEX}
  1557.   D3DSIO_TEXM3x3PAD   = 73;
  1558.   {$EXTERNALSYM D3DSIO_TEXM3x3PAD}
  1559.   D3DSIO_TEXM3x3TEX   = 74;
  1560.   {$EXTERNALSYM D3DSIO_TEXM3x3TEX}
  1561.   D3DSIO_RESERVED0    = 75;
  1562.   {$EXTERNALSYM D3DSIO_RESERVED0}
  1563.   D3DSIO_TEXM3x3SPEC  = 76;
  1564.   {$EXTERNALSYM D3DSIO_TEXM3x3SPEC}
  1565.   D3DSIO_TEXM3x3VSPEC = 77;
  1566.   {$EXTERNALSYM D3DSIO_TEXM3x3VSPEC}
  1567.   D3DSIO_EXPP         = 78;
  1568.   {$EXTERNALSYM D3DSIO_EXPP}
  1569.   D3DSIO_LOGP         = 79;
  1570.   {$EXTERNALSYM D3DSIO_LOGP}
  1571.   D3DSIO_CND          = 80;
  1572.   {$EXTERNALSYM D3DSIO_CND}
  1573.   D3DSIO_DEF          = 81;
  1574.   {$EXTERNALSYM D3DSIO_DEF}
  1575.   D3DSIO_TEXREG2RGB   = 82;
  1576.   {$EXTERNALSYM D3DSIO_TEXREG2RGB}
  1577.   D3DSIO_TEXDP3TEX    = 83;
  1578.   {$EXTERNALSYM D3DSIO_TEXDP3TEX}
  1579.   D3DSIO_TEXM3x2DEPTH = 84;
  1580.   {$EXTERNALSYM D3DSIO_TEXM3x2DEPTH}
  1581.   D3DSIO_TEXDP3       = 85;
  1582.   {$EXTERNALSYM D3DSIO_TEXDP3}
  1583.   D3DSIO_TEXM3x3      = 86;
  1584.   {$EXTERNALSYM D3DSIO_TEXM3x3}
  1585.   D3DSIO_TEXDEPTH     = 87;
  1586.   {$EXTERNALSYM D3DSIO_TEXDEPTH}
  1587.   D3DSIO_CMP          = 88;
  1588.   {$EXTERNALSYM D3DSIO_CMP}
  1589.   D3DSIO_BEM          = 89;
  1590.   {$EXTERNALSYM D3DSIO_BEM}
  1591.   D3DSIO_DP2ADD       = 90;
  1592.   {$EXTERNALSYM D3DSIO_DP2ADD}
  1593.   D3DSIO_DSX          = 91;
  1594.   {$EXTERNALSYM D3DSIO_DSX}
  1595.   D3DSIO_DSY          = 92;
  1596.   {$EXTERNALSYM D3DSIO_DSY}
  1597.   D3DSIO_TEXLDD       = 93;
  1598.   {$EXTERNALSYM D3DSIO_TEXLDD}
  1599.   D3DSIO_SETP         = 94;
  1600.   {$EXTERNALSYM D3DSIO_SETP}
  1601.   D3DSIO_TEXLDL       = 95;
  1602.   {$EXTERNALSYM D3DSIO_TEXLDL}
  1603.   D3DSIO_BREAKP       = 96;
  1604.   {$EXTERNALSYM D3DSIO_BREAKP}
  1605.   D3DSIO_PHASE        = $FFFD;
  1606.   {$EXTERNALSYM D3DSIO_PHASE}
  1607.   D3DSIO_COMMENT      = $FFFE;
  1608.   {$EXTERNALSYM D3DSIO_COMMENT}
  1609.   D3DSIO_END          = $FFFF;
  1610.   {$EXTERNALSYM D3DSIO_END}
  1611.   //---------------------------------------------------------------------
  1612.   // Use these constants with D3DSIO_SINCOS macro as SRC2, SRC3
  1613.   //
  1614.   //#define D3DSINCOSCONST1 -1.5500992e-006f, -2.1701389e-005f,  0.0026041667f, 0.00026041668f
  1615.   //#define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f
  1616.   //---------------------------------------------------------------------
  1617.   // Co-Issue Instruction Modifier - if set then this instruction is to be
  1618.   // issued in parallel with the previous instruction(s) for which this bit
  1619.   // is not set.
  1620.   //
  1621.   D3DSI_COISSUE           = $40000000;
  1622.   {$EXTERNALSYM D3DSI_COISSUE}
  1623.   //---------------------------------------------------------------------
  1624.   // Opcode specific controls
  1625.   D3DSP_OPCODESPECIFICCONTROL_MASK  = $00ff0000;
  1626.   {$EXTERNALSYM D3DSP_OPCODESPECIFICCONTROL_MASK}
  1627.   D3DSP_OPCODESPECIFICCONTROL_SHIFT = 16;
  1628.   {$EXTERNALSYM D3DSP_OPCODESPECIFICCONTROL_SHIFT}
  1629.   // ps_2_0 texld controls
  1630.   D3DSI_TEXLD_PROJECT = ($01 shl D3DSP_OPCODESPECIFICCONTROL_SHIFT);
  1631.   {$EXTERNALSYM D3DSI_TEXLD_PROJECT}
  1632.   D3DSI_TEXLD_BIAS    = ($02 shl D3DSP_OPCODESPECIFICCONTROL_SHIFT);
  1633.   {$EXTERNALSYM D3DSI_TEXLD_BIAS}
  1634. type
  1635.   // Comparison for dynamic conditional instruction opcodes (i.e. if, breakc)
  1636.   {$MINENUMSIZE 1} // Forces TD3DShaderComparison be 1 byte enum
  1637.   _D3DSHADER_COMPARISON = (
  1638.                          // < = >
  1639.   {$IFNDEF COMPILER6_UP}
  1640.     D3DSPC_RESERVED0{= 0}, // 0 0 0
  1641.     D3DSPC_GT       {= 1}, // 0 0 1
  1642.     D3DSPC_EQ       {= 2}, // 0 1 0
  1643.     D3DSPC_GE       {= 3}, // 0 1 1
  1644.     D3DSPC_LT       {= 4}, // 1 0 0
  1645.     D3DSPC_NE       {= 5}, // 1 0 1
  1646.     D3DSPC_LE       {= 6}, // 1 1 0
  1647.     D3DSPC_RESERVED1{= 7}  // 1 1 1
  1648.   {$ELSE}
  1649.     D3DSPC_RESERVED0= 0, // 0 0 0
  1650.     D3DSPC_GT       = 1, // 0 0 1
  1651.     D3DSPC_EQ       = 2, // 0 1 0
  1652.     D3DSPC_GE       = 3, // 0 1 1
  1653.     D3DSPC_LT       = 4, // 1 0 0
  1654.     D3DSPC_NE       = 5, // 1 0 1
  1655.     D3DSPC_LE       = 6, // 1 1 0
  1656.     D3DSPC_RESERVED1= 7  // 1 1 1
  1657.   {$ENDIF}
  1658.   );
  1659.   {$EXTERNALSYM _D3DSHADER_COMPARISON}
  1660.   D3DSHADER_COMPARISON = _D3DSHADER_COMPARISON;
  1661.   {$EXTERNALSYM D3DSHADER_COMPARISON}
  1662.   TD3DShaderComparison = _D3DSHADER_COMPARISON;
  1663.   {$MINENUMSIZE 4} // Restores enums to be 4 byte in size
  1664. const
  1665.   // Comparison is part of instruction opcode token:
  1666.   D3DSHADER_COMPARISON_SHIFT = D3DSP_OPCODESPECIFICCONTROL_SHIFT;
  1667.   {$EXTERNALSYM D3DSHADER_COMPARISON_SHIFT}
  1668.   D3DSHADER_COMPARISON_MASK  = ($7 shl D3DSHADER_COMPARISON_SHIFT);
  1669.   {$EXTERNALSYM D3DSHADER_COMPARISON_MASK}
  1670.   //---------------------------------------------------------------------
  1671.   // Predication flags on instruction token
  1672.   D3DSHADER_INSTRUCTION_PREDICATED    = ($1 shl 28);
  1673.   {$EXTERNALSYM D3DSHADER_INSTRUCTION_PREDICATED}
  1674.   //---------------------------------------------------------------------
  1675.   // DCL Info Token Controls
  1676.   // For dcl info tokens requiring a semantic (usage + index)
  1677.   D3DSP_DCL_USAGE_SHIFT = 0;
  1678.   {$EXTERNALSYM D3DSP_DCL_USAGE_SHIFT}
  1679.   D3DSP_DCL_USAGE_MASK  = $0000000f;
  1680.   {$EXTERNALSYM D3DSP_DCL_USAGE_MASK}
  1681.   D3DSP_DCL_USAGEINDEX_SHIFT = 16;
  1682.   {$EXTERNALSYM D3DSP_DCL_USAGEINDEX_SHIFT}
  1683.   D3DSP_DCL_USAGEINDEX_MASK  = $000f0000;
  1684.   {$EXTERNALSYM D3DSP_DCL_USAGEINDEX_MASK}
  1685.   // DCL pixel shader sampler info token.
  1686.   D3DSP_TEXTURETYPE_SHIFT = 27;
  1687.   {$EXTERNALSYM D3DSP_TEXTURETYPE_SHIFT}
  1688.   D3DSP_TEXTURETYPE_MASK  = $78000000;
  1689.   {$EXTERNALSYM D3DSP_TEXTURETYPE_MASK}
  1690. {$IFNDEF COMPILER6_UP}
  1691. type
  1692.   _D3DSAMPLER_TEXTURE_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1693.   {$EXTERNALSYM _D3DSAMPLER_TEXTURE_TYPE}
  1694.   D3DSAMPLER_TEXTURE_TYPE = _D3DSAMPLER_TEXTURE_TYPE;
  1695.   {$EXTERNALSYM D3DSAMPLER_TEXTURE_TYPE}
  1696.   TD3DSamplerTextureType = _D3DSAMPLER_TEXTURE_TYPE;
  1697. const
  1698.   D3DSTT_UNKNOWN = 0 shl D3DSP_TEXTURETYPE_SHIFT; // uninitialized value
  1699.   {$EXTERNALSYM D3DSTT_UNKNOWN}
  1700.   D3DSTT_2D      = 2 shl D3DSP_TEXTURETYPE_SHIFT; // dcl_2d s# (for declaring a 2-D texture)
  1701.   {$EXTERNALSYM D3DSTT_2D}
  1702.   D3DSTT_CUBE    = 3 shl D3DSP_TEXTURETYPE_SHIFT; // dcl_cube s# (for declaring a cube texture)
  1703.   {$EXTERNALSYM D3DSTT_CUBE}
  1704.   D3DSTT_VOLUME  = 4 shl D3DSP_TEXTURETYPE_SHIFT; // dcl_volume s# (for declaring a volume texture)
  1705.   {$EXTERNALSYM D3DSTT_VOLUME}
  1706.   D3DSTT_FORCE_DWORD  = $7fffffff;      // force 32-bit size enum
  1707.   {$EXTERNALSYM D3DSTT_FORCE_DWORD}
  1708. {$ELSE}
  1709. type
  1710.   _D3DSAMPLER_TEXTURE_TYPE = (
  1711.   {$IFDEF BCB}
  1712.     D3DSTT_DUMMY
  1713.   {$ELSE}
  1714.     D3DSTT_UNKNOWN = 0 shl D3DSP_TEXTURETYPE_SHIFT, // uninitialized value
  1715.     D3DSTT_2D      = 2 shl D3DSP_TEXTURETYPE_SHIFT, // dcl_2d s# (for declaring a 2-D texture)
  1716.     D3DSTT_CUBE    = 3 shl D3DSP_TEXTURETYPE_SHIFT, // dcl_cube s# (for declaring a cube texture)
  1717.     D3DSTT_VOLUME  = 4 shl D3DSP_TEXTURETYPE_SHIFT, // dcl_volume s# (for declaring a volume texture)
  1718.     D3DSTT_FORCE_DWORD  = $7fffffff      // force 32-bit size enum
  1719.   {$ENDIF}
  1720.   );
  1721.   {$EXTERNALSYM _D3DSAMPLER_TEXTURE_TYPE}
  1722.   D3DSAMPLER_TEXTURE_TYPE = _D3DSAMPLER_TEXTURE_TYPE;
  1723.   {$EXTERNALSYM D3DSAMPLER_TEXTURE_TYPE}
  1724.   TD3DSamplerTextureType = _D3DSAMPLER_TEXTURE_TYPE;
  1725. {$ENDIF}
  1726. const
  1727.   //---------------------------------------------------------------------
  1728.   // Parameter Token Bit Definitions
  1729.   //
  1730.   D3DSP_REGNUM_MASK       = $000007FF;
  1731.   {$EXTERNALSYM D3DSP_REGNUM_MASK}
  1732.   // destination parameter write mask
  1733.   D3DSP_WRITEMASK_0       = $00010000;  // Component 0 (X;Red)
  1734.   {$EXTERNALSYM D3DSP_WRITEMASK_0}
  1735.   D3DSP_WRITEMASK_1       = $00020000;  // Component 1 (Y;Green)
  1736.   {$EXTERNALSYM D3DSP_WRITEMASK_1}
  1737.   D3DSP_WRITEMASK_2       = $00040000;  // Component 2 (Z;Blue)
  1738.   {$EXTERNALSYM D3DSP_WRITEMASK_2}
  1739.   D3DSP_WRITEMASK_3       = $00080000;  // Component 3 (W;Alpha)
  1740.   {$EXTERNALSYM D3DSP_WRITEMASK_3}
  1741.   D3DSP_WRITEMASK_ALL     = $000F0000;  // All Components
  1742.   {$EXTERNALSYM D3DSP_WRITEMASK_ALL}
  1743.   // destination parameter modifiers
  1744.   D3DSP_DSTMOD_SHIFT      = 20;
  1745.   {$EXTERNALSYM D3DSP_DSTMOD_SHIFT}
  1746.   D3DSP_DSTMOD_MASK       = $00F00000;
  1747.   {$EXTERNALSYM D3DSP_DSTMOD_MASK}
  1748.   // Bit masks for destination parameter modifiers
  1749.     D3DSPDM_NONE                 = (0 shl D3DSP_DSTMOD_SHIFT); // nop
  1750.     {$EXTERNALSYM D3DSPDM_NONE}
  1751.     D3DSPDM_SATURATE             = (1 shl D3DSP_DSTMOD_SHIFT); // clamp to 0. to 1. range
  1752.     {$EXTERNALSYM D3DSPDM_SATURATE}
  1753.     D3DSPDM_PARTIALPRECISION     = (2 shl D3DSP_DSTMOD_SHIFT); // Partial precision hint
  1754.     {$EXTERNALSYM D3DSPDM_PARTIALPRECISION}
  1755.     D3DSPDM_MSAMPCENTROID        = (4 shl D3DSP_DSTMOD_SHIFT); // Relevant to multisampling only:
  1756.     {$EXTERNALSYM D3DSPDM_MSAMPCENTROID}
  1757.                                                                //      When the pixel center is not covered, sample
  1758.                                                                //      attribute or compute gradients/LOD
  1759.                                                                //      using multisample "centroid" location.
  1760.                                                                //      "Centroid" is some location within the covered
  1761.                                                                //      region of the pixel.
  1762.   // destination parameter
  1763.   D3DSP_DSTSHIFT_SHIFT    = 24;
  1764.   {$EXTERNALSYM D3DSP_DSTSHIFT_SHIFT}
  1765.   D3DSP_DSTSHIFT_MASK     = $0F000000;
  1766.   {$EXTERNALSYM D3DSP_DSTSHIFT_MASK}
  1767.   // destination/source parameter register type
  1768.   D3DSP_REGTYPE_SHIFT     = 28;
  1769.   {$EXTERNALSYM D3DSP_REGTYPE_SHIFT}
  1770.   D3DSP_REGTYPE_SHIFT2    = 8;
  1771.   {$EXTERNALSYM D3DSP_REGTYPE_SHIFT2}
  1772.   D3DSP_REGTYPE_MASK      = $70000000;
  1773.   {$EXTERNALSYM D3DSP_REGTYPE_MASK}
  1774.   D3DSP_REGTYPE_MASK2     = $00001800;
  1775.   {$EXTERNALSYM D3DSP_REGTYPE_MASK2}
  1776. {$IFNDEF COMPILER6_UP}
  1777. const
  1778.   D3DSPR_TEMP          =  0; // Temporary Register File
  1779.   {$EXTERNALSYM D3DSPR_TEMP}
  1780.   D3DSPR_INPUT         =  1; // Input Register File
  1781.   {$EXTERNALSYM D3DSPR_INPUT}
  1782.   D3DSPR_CONST         =  2; // Constant Register File
  1783.   {$EXTERNALSYM D3DSPR_CONST}
  1784.   D3DSPR_ADDR          =  3; // Address Register (VS)
  1785.   {$EXTERNALSYM D3DSPR_ADDR}
  1786.   D3DSPR_TEXTURE       =  3; // Texture Register File (PS)
  1787.   {$EXTERNALSYM D3DSPR_TEXTURE}
  1788.   D3DSPR_RASTOUT       =  4; // Rasterizer Register File
  1789.   {$EXTERNALSYM D3DSPR_RASTOUT}
  1790.   D3DSPR_ATTROUT       =  5; // Attribute Output Register File
  1791.   {$EXTERNALSYM D3DSPR_ATTROUT}
  1792.   D3DSPR_TEXCRDOUT     =  6; // Texture Coordinate Output Register File
  1793.   {$EXTERNALSYM D3DSPR_TEXCRDOUT}
  1794.   D3DSPR_OUTPUT        =  6; // Output register file for VS3.0+
  1795.   {$EXTERNALSYM D3DSPR_OUTPUT}
  1796.   D3DSPR_CONSTINT      =  7; // Constant Integer Vector Register File
  1797.   {$EXTERNALSYM D3DSPR_CONSTINT}
  1798.   D3DSPR_COLOROUT      =  8; // Color Output Register File
  1799.   {$EXTERNALSYM D3DSPR_COLOROUT}
  1800.   D3DSPR_DEPTHOUT      =  9; // Depth Output Register File
  1801.   {$EXTERNALSYM D3DSPR_DEPTHOUT}
  1802.   D3DSPR_SAMPLER       = 10; // Sampler State Register File
  1803.   {$EXTERNALSYM D3DSPR_SAMPLER}
  1804.   D3DSPR_CONST2        = 11; // Constant Register File  2048 - 4095
  1805.   {$EXTERNALSYM D3DSPR_CONST2}
  1806.   D3DSPR_CONST3        = 12; // Constant Register File  4096 - 6143
  1807.   {$EXTERNALSYM D3DSPR_CONST3}
  1808.   D3DSPR_CONST4        = 13; // Constant Register File  6144 - 8191
  1809.   {$EXTERNALSYM D3DSPR_CONST4}
  1810.   D3DSPR_CONSTBOOL     = 14; // Constant Boolean register file
  1811.   {$EXTERNALSYM D3DSPR_CONSTBOOL}
  1812.   D3DSPR_LOOP          = 15; // Loop counter register file
  1813.   {$EXTERNALSYM D3DSPR_LOOP}
  1814.   D3DSPR_TEMPFLOAT16   = 16; // 16-bit float temp register file
  1815.   {$EXTERNALSYM D3DSPR_TEMPFLOAT16}
  1816.   D3DSPR_MISCTYPE      = 17; // Miscellaneous (single) registers.
  1817.   {$EXTERNALSYM D3DSPR_MISCTYPE}
  1818.   D3DSPR_LABEL         = 18; // Label
  1819.   {$EXTERNALSYM D3DSPR_LABEL}
  1820.   D3DSPR_PREDICATE     = 19; // Predicate register
  1821.   {$EXTERNALSYM D3DSPR_PREDICATE}
  1822. type
  1823.   _D3DSHADER_PARAM_REGISTER_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1824. {$ELSE}
  1825. type
  1826.   _D3DSHADER_PARAM_REGISTER_TYPE = (
  1827.     D3DSPR_TEMP           =  0, // Temporary Register File
  1828.     D3DSPR_INPUT          =  1, // Input Register File
  1829.     D3DSPR_CONST          =  2, // Constant Register File
  1830.     D3DSPR_ADDR           =  3, // Address Register (VS)
  1831.     D3DSPR_TEXTURE        =  3, // Texture Register File (PS)
  1832.     D3DSPR_RASTOUT        =  4, // Rasterizer Register File
  1833.     D3DSPR_ATTROUT        =  5, // Attribute Output Register File
  1834.     D3DSPR_TEXCRDOUT      =  6, // Texture Coordinate Output Register File
  1835.     D3DSPR_OUTPUT         =  6, // Output register file for VS3.0+
  1836.     D3DSPR_CONSTINT       =  7, // Constant Integer Vector Register File
  1837.     D3DSPR_COLOROUT       =  8, // Color Output Register File
  1838.     D3DSPR_DEPTHOUT       =  9, // Depth Output Register File
  1839.     D3DSPR_SAMPLER        = 10, // Sampler State Register File
  1840.     D3DSPR_CONST2         = 11, // Constant Register File  2048 - 4095
  1841.     D3DSPR_CONST3         = 12, // Constant Register File  4096 - 6143
  1842.     D3DSPR_CONST4         = 13, // Constant Register File  6144 - 8191
  1843.     D3DSPR_CONSTBOOL      = 14, // Constant Boolean register file
  1844.     D3DSPR_LOOP           = 15, // Loop counter register file
  1845.     D3DSPR_TEMPFLOAT16    = 16, // 16-bit float temp register file
  1846.     D3DSPR_MISCTYPE       = 17, // Miscellaneous (single) registers.
  1847.     D3DSPR_LABEL          = 18, // Label
  1848.     D3DSPR_PREDICATE      = 19  // Predicate register
  1849.   );
  1850. {$ENDIF}
  1851.   {$EXTERNALSYM _D3DSHADER_PARAM_REGISTER_TYPE}
  1852.   D3DSHADER_PARAM_REGISTER_TYPE = _D3DSHADER_PARAM_REGISTER_TYPE;
  1853.   {$EXTERNALSYM D3DSHADER_PARAM_REGISTER_TYPE}
  1854.   TD3DShaderParamRegisterType = _D3DSHADER_PARAM_REGISTER_TYPE;
  1855.   // The miscellaneous register file (D3DSPR_MISCTYPES)
  1856.   // contains register types for which there is only ever one
  1857.   // register (i.e. the register # is not needed).
  1858.   // Rather than use up additional register types for such
  1859.   // registers, they are defined
  1860.   // as particular offsets into the misc. register file:
  1861.   {$MINENUMSIZE 1} // Forces TD3DShaderMiscTypeOffsets be 1 byte enum
  1862.   _D3DSHADER_MISCTYPE_OFFSETS = (
  1863.   {$IFNDEF COMPILER6_UP}
  1864.     D3DSMO_POSITION   {= 0}, // Input position x,y,z,rhw (PS)
  1865.     D3DSMO_FACE   {= 1}  // Floating point primitive area (PS)
  1866.   {$ELSE}
  1867.     D3DSMO_POSITION   = 0, // Input position x,y,z,rhw (PS)
  1868.     D3DSMO_FACE   = 1  // Floating point primitive area (PS)
  1869.   {$ENDIF}
  1870.   );
  1871.   {$EXTERNALSYM _D3DSHADER_MISCTYPE_OFFSETS}
  1872.   D3DSHADER_MISCTYPE_OFFSETS = _D3DSHADER_MISCTYPE_OFFSETS;
  1873.   {$EXTERNALSYM D3DSHADER_MISCTYPE_OFFSETS}
  1874.   TD3DShaderMiscTypeOffsets = _D3DSHADER_MISCTYPE_OFFSETS;
  1875.   {$MINENUMSIZE 4} // Restores enums to be 4 byte in size
  1876.   // Register offsets in the Rasterizer Register File
  1877.   //
  1878.   _D3DVS_RASTOUT_OFFSETS = (
  1879.     D3DSRO_POSITION, // = 0,
  1880.     D3DSRO_FOG,
  1881.     D3DSRO_POINT_SIZE
  1882.   );
  1883.   {$EXTERNALSYM _D3DVS_RASTOUT_OFFSETS}
  1884.   D3DVS_RASTOUT_OFFSETS = _D3DVS_RASTOUT_OFFSETS;
  1885.   {$EXTERNALSYM D3DVS_RASTOUT_OFFSETS}
  1886.   TD3DVSRastoutOffsets = _D3DVS_RASTOUT_OFFSETS;
  1887. // Source operand addressing modes
  1888. const
  1889.   D3DVS_ADDRESSMODE_SHIFT = 13;
  1890.   {$EXTERNALSYM D3DVS_ADDRESSMODE_SHIFT}
  1891.   D3DVS_ADDRESSMODE_MASK  = 1 shl D3DVS_ADDRESSMODE_SHIFT;
  1892.   {$EXTERNALSYM D3DVS_ADDRESSMODE_MASK}
  1893. type
  1894.   _D3DVS_ADDRESSMODE_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1895.   {$EXTERNALSYM _D3DVS_ADDRESSMODE_TYPE}
  1896.   D3DVS_ADDRESSMODE_TYPE = _D3DVS_ADDRESSMODE_TYPE;
  1897.   {$EXTERNALSYM D3DVS_ADDRESSMODE_TYPE}
  1898.   TD3DVSAddressModeType = _D3DVS_ADDRESSMODE_TYPE;
  1899. const
  1900.   D3DVS_ADDRMODE_ABSOLUTE    = 0 shl D3DVS_ADDRESSMODE_SHIFT;
  1901.   {$EXTERNALSYM D3DVS_ADDRMODE_ABSOLUTE}
  1902.   D3DVS_ADDRMODE_RELATIVE    = 1 shl D3DVS_ADDRESSMODE_SHIFT; 
  1903.   {$EXTERNALSYM D3DVS_ADDRMODE_RELATIVE}
  1904.   D3DVS_ADDRMODE_FORCE_DWORD = $7fffffff;                      // force 32-bit size enum
  1905.   {$EXTERNALSYM D3DVS_ADDRMODE_FORCE_DWORD}
  1906. const
  1907.   D3DSHADER_ADDRESSMODE_SHIFT = 13;
  1908.   {$EXTERNALSYM D3DSHADER_ADDRESSMODE_SHIFT}
  1909.   D3DSHADER_ADDRESSMODE_MASK  = (1 shl D3DSHADER_ADDRESSMODE_SHIFT);
  1910.   {$EXTERNALSYM D3DSHADER_ADDRESSMODE_MASK}
  1911. type
  1912.   _D3DSHADER_ADDRESSMODE_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1913.   {$EXTERNALSYM _D3DSHADER_ADDRESSMODE_TYPE}
  1914.   D3DSHADER_ADDRESSMODE_TYPE = _D3DSHADER_ADDRESSMODE_TYPE;
  1915.   {$EXTERNALSYM D3DSHADER_ADDRESSMODE_TYPE}
  1916.   TD3DShaderAddressModeType = _D3DSHADER_ADDRESSMODE_TYPE;
  1917. const
  1918.   D3DSHADER_ADDRMODE_ABSOLUTE  = (0 shl D3DSHADER_ADDRESSMODE_SHIFT);
  1919.   {$EXTERNALSYM D3DSHADER_ADDRMODE_ABSOLUTE}
  1920.   D3DSHADER_ADDRMODE_RELATIVE  = (1 shl D3DSHADER_ADDRESSMODE_SHIFT);
  1921.   {$EXTERNALSYM D3DSHADER_ADDRMODE_RELATIVE}
  1922.   D3DSHADER_ADDRMODE_FORCE_DWORD = $7fffffff; // force 32-bit size enum
  1923.   {$EXTERNALSYM D3DSHADER_ADDRMODE_FORCE_DWORD}
  1924.   // Source operand swizzle definitions
  1925.   //
  1926.   D3DVS_SWIZZLE_SHIFT     = 16;
  1927.   {$EXTERNALSYM D3DVS_SWIZZLE_SHIFT}
  1928.   D3DVS_SWIZZLE_MASK      = $00FF0000;
  1929.   {$EXTERNALSYM D3DVS_SWIZZLE_MASK}
  1930.   // The following bits define where to take component X from:
  1931.   D3DVS_X_X = 0 shl D3DVS_SWIZZLE_SHIFT;
  1932.   {$EXTERNALSYM D3DVS_X_X}
  1933.   D3DVS_X_Y = 1 shl D3DVS_SWIZZLE_SHIFT;
  1934.   {$EXTERNALSYM D3DVS_X_Y}
  1935.   D3DVS_X_Z = 2 shl D3DVS_SWIZZLE_SHIFT;
  1936.   {$EXTERNALSYM D3DVS_X_Z}
  1937.   D3DVS_X_W = 3 shl D3DVS_SWIZZLE_SHIFT;
  1938.   {$EXTERNALSYM D3DVS_X_W}
  1939.   // The following bits define where to take component Y from:
  1940.   D3DVS_Y_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 2);
  1941.   {$EXTERNALSYM D3DVS_Y_X}
  1942.   D3DVS_Y_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 2);
  1943.   {$EXTERNALSYM D3DVS_Y_Y}
  1944.   D3DVS_Y_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 2);
  1945.   {$EXTERNALSYM D3DVS_Y_Z}
  1946.   D3DVS_Y_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 2);
  1947.   {$EXTERNALSYM D3DVS_Y_W}
  1948.   // The following bits define where to take component Z from:
  1949.   D3DVS_Z_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 4);
  1950.   {$EXTERNALSYM D3DVS_Z_X}
  1951.   D3DVS_Z_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 4);
  1952.   {$EXTERNALSYM D3DVS_Z_Y}
  1953.   D3DVS_Z_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 4);
  1954.   {$EXTERNALSYM D3DVS_Z_Z}
  1955.   D3DVS_Z_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 4);
  1956.   {$EXTERNALSYM D3DVS_Z_W}
  1957.   // The following bits define where to take component W from:
  1958.   D3DVS_W_X = 0 shl (D3DVS_SWIZZLE_SHIFT + 6);
  1959.   {$EXTERNALSYM D3DVS_W_X}
  1960.   D3DVS_W_Y = 1 shl (D3DVS_SWIZZLE_SHIFT + 6);
  1961.   {$EXTERNALSYM D3DVS_W_Y}
  1962.   D3DVS_W_Z = 2 shl (D3DVS_SWIZZLE_SHIFT + 6);
  1963.   {$EXTERNALSYM D3DVS_W_Z}
  1964.   D3DVS_W_W = 3 shl (D3DVS_SWIZZLE_SHIFT + 6);
  1965.   {$EXTERNALSYM D3DVS_W_W}
  1966.   // Value when there is no swizzle (X is taken from X, Y is taken from Y,
  1967.   // Z is taken from Z, W is taken from W
  1968.   //
  1969.   D3DVS_NOSWIZZLE = D3DVS_X_X or D3DVS_Y_Y or D3DVS_Z_Z or D3DVS_W_W;
  1970.   {$EXTERNALSYM D3DVS_NOSWIZZLE}
  1971.   // source parameter swizzle
  1972.   D3DSP_SWIZZLE_SHIFT = 16;
  1973.   {$EXTERNALSYM D3DSP_SWIZZLE_SHIFT}
  1974.   D3DSP_SWIZZLE_MASK  = $00FF0000;
  1975.   {$EXTERNALSYM D3DSP_SWIZZLE_MASK}
  1976.   D3DSP_NOSWIZZLE =
  1977.     (0 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  1978.     (1 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  1979.     (2 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  1980.     (3 shl (D3DSP_SWIZZLE_SHIFT + 6));
  1981.   {$EXTERNALSYM D3DSP_NOSWIZZLE}
  1982.   // pixel-shader swizzle ops
  1983.   D3DSP_REPLICATERED =
  1984.     (0 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  1985.     (0 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  1986.     (0 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  1987.     (0 shl (D3DSP_SWIZZLE_SHIFT + 6));
  1988.   {$EXTERNALSYM D3DSP_REPLICATERED}
  1989.   D3DSP_REPLICATEGREEN =
  1990.     (1 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  1991.     (1 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  1992.     (1 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  1993.     (1 shl (D3DSP_SWIZZLE_SHIFT + 6));
  1994.   {$EXTERNALSYM D3DSP_REPLICATEGREEN}
  1995.   D3DSP_REPLICATEBLUE =
  1996.     (2 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  1997.     (2 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  1998.     (2 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  1999.     (2 shl (D3DSP_SWIZZLE_SHIFT + 6));
  2000.   {$EXTERNALSYM D3DSP_REPLICATEBLUE}
  2001.   D3DSP_REPLICATEALPHA =
  2002.     (3 shl (D3DSP_SWIZZLE_SHIFT + 0)) or
  2003.     (3 shl (D3DSP_SWIZZLE_SHIFT + 2)) or
  2004.     (3 shl (D3DSP_SWIZZLE_SHIFT + 4)) or
  2005.     (3 shl (D3DSP_SWIZZLE_SHIFT + 6));
  2006.   {$EXTERNALSYM D3DSP_REPLICATEALPHA}
  2007.   // source parameter modifiers
  2008.   D3DSP_SRCMOD_SHIFT      = 24;
  2009.   {$EXTERNALSYM D3DSP_SRCMOD_SHIFT}
  2010.   D3DSP_SRCMOD_MASK       = $0F000000;
  2011.   {$EXTERNALSYM D3DSP_SRCMOD_MASK}
  2012. type
  2013.   _D3DSHADER_PARAM_SRCMOD_TYPE = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2014.   {$EXTERNALSYM _D3DSHADER_PARAM_SRCMOD_TYPE}
  2015.   D3DSHADER_PARAM_SRCMOD_TYPE = _D3DSHADER_PARAM_SRCMOD_TYPE;
  2016.   {$EXTERNALSYM D3DSHADER_PARAM_SRCMOD_TYPE}
  2017.   TD3DShaderParamSRCModType = _D3DSHADER_PARAM_SRCMOD_TYPE;
  2018. const
  2019.   D3DSPSM_NONE        = 0 shl D3DSP_SRCMOD_SHIFT; // nop
  2020.   {$EXTERNALSYM D3DSPSM_NONE}
  2021.   D3DSPSM_NEG         = 1 shl D3DSP_SRCMOD_SHIFT; // negate
  2022.   {$EXTERNALSYM D3DSPSM_NEG}
  2023.   D3DSPSM_BIAS        = 2 shl D3DSP_SRCMOD_SHIFT; // bias
  2024.   {$EXTERNALSYM D3DSPSM_BIAS}
  2025.   D3DSPSM_BIASNEG     = 3 shl D3DSP_SRCMOD_SHIFT; // bias and negate
  2026.   {$EXTERNALSYM D3DSPSM_BIASNEG}
  2027.   D3DSPSM_SIGN        = 4 shl D3DSP_SRCMOD_SHIFT; // sign
  2028.   {$EXTERNALSYM D3DSPSM_SIGN}
  2029.   D3DSPSM_SIGNNEG     = 5 shl D3DSP_SRCMOD_SHIFT; // sign and negate
  2030.   {$EXTERNALSYM D3DSPSM_SIGNNEG}
  2031.   D3DSPSM_COMP        = 6 shl D3DSP_SRCMOD_SHIFT; // complement
  2032.   {$EXTERNALSYM D3DSPSM_COMP}
  2033.   D3DSPSM_X2          = 7 shl D3DSP_SRCMOD_SHIFT; // *2
  2034.   {$EXTERNALSYM D3DSPSM_X2}
  2035.   D3DSPSM_X2NEG       = 8 shl D3DSP_SRCMOD_SHIFT; // *2 and negate
  2036.   {$EXTERNALSYM D3DSPSM_X2NEG}
  2037.   D3DSPSM_DZ          = 9 shl D3DSP_SRCMOD_SHIFT; // divide through by z component
  2038.   {$EXTERNALSYM D3DSPSM_DZ}
  2039.   D3DSPSM_DW          = 10 shl D3DSP_SRCMOD_SHIFT; // divide through by w component
  2040.   {$EXTERNALSYM D3DSPSM_DW}
  2041.   D3DSPSM_ABS         = 11 shl D3DSP_SRCMOD_SHIFT; // abs()
  2042.   {$EXTERNALSYM D3DSPSM_ABS}
  2043.   D3DSPSM_ABSNEG      = 12 shl D3DSP_SRCMOD_SHIFT; // -abs()
  2044.   {$EXTERNALSYM D3DSPSM_ABSNEG}
  2045.   D3DSPSM_NOT         = 13 shl D3DSP_SRCMOD_SHIFT; // for predicate register: "!p0"
  2046.   {$EXTERNALSYM D3DSPSM_NOT}
  2047.   D3DSPSM_FORCE_DWORD = $7fffffff;                // force 32-bit size enum
  2048.   {$EXTERNALSYM D3DSPSM_FORCE_DWORD}
  2049. // pixel shader version token
  2050. //#define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor))
  2051. function D3DPS_VERSION(_Major, _Minor: DWord): DWord;
  2052. {$EXTERNALSYM D3DPS_VERSION}
  2053. // vertex shader version token
  2054. //#define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor))
  2055. function D3DVS_VERSION(_Major, _Minor: DWord): DWord;
  2056. {$EXTERNALSYM D3DVS_VERSION}
  2057. // extract major/minor from version cap
  2058. //#define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)
  2059. function D3DSHADER_VERSION_MAJOR(_Version: DWord): DWord;
  2060. {$EXTERNALSYM D3DSHADER_VERSION_MAJOR}
  2061. //#define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)
  2062. function D3DSHADER_VERSION_MINOR(_Version: DWord): DWord;
  2063. {$EXTERNALSYM D3DSHADER_VERSION_MINOR}
  2064. const
  2065.   // destination/source parameter register type
  2066.   D3DSI_COMMENTSIZE_SHIFT = 16;
  2067.   {$EXTERNALSYM D3DSI_COMMENTSIZE_SHIFT}
  2068.   D3DSI_COMMENTSIZE_MASK  = $7FFF0000;
  2069.   {$EXTERNALSYM D3DSI_COMMENTSIZE_MASK}
  2070. //#define D3DSHADER_COMMENT(_DWordSize) 
  2071. //    ((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COMMENT)
  2072. function D3DSHADER_COMMENT(_DWordSize: DWord) : DWord;
  2073. {$EXTERNALSYM D3DSHADER_COMMENT}
  2074. const
  2075.   // pixel/vertex shader end token
  2076.   D3DPS_END  = $0000FFFF;
  2077.   {$EXTERNALSYM D3DPS_END}
  2078.   D3DVS_END  = $0000FFFF;
  2079.   {$EXTERNALSYM D3DVS_END}
  2080. //---------------------------------------------------------------------
  2081. type
  2082.   // High order surfaces
  2083.   //
  2084.   _D3DBASISTYPE = (
  2085.     D3DBASIS_BEZIER      {= 0},
  2086.     D3DBASIS_BSPLINE     {= 1},
  2087.     D3DBASIS_CATMULL_ROM {= 2} { In D3D8 this used to be D3DBASIS_INTERPOLATE }
  2088.   );
  2089.   {$EXTERNALSYM _D3DBASISTYPE}
  2090.   D3DBASISTYPE = _D3DBASISTYPE;
  2091.   {$EXTERNALSYM D3DBASISTYPE}
  2092.   TD3DBasisType = _D3DBASISTYPE;
  2093.   _D3DDEGREETYPE = (
  2094.   {$IFNDEF COMPILER6_UP}
  2095.     D3DDEGREE_invalid_0  {= 0},
  2096.     D3DDEGREE_LINEAR     {= 1},
  2097.     D3DDEGREE_QUADRATIC  {= 2},
  2098.     D3DDEGREE_CUBIC      {= 3},
  2099.     D3DDEGREE_invalid_4  {= 4},
  2100.     D3DDEGREE_QUINTIC    {= 5}
  2101.   {$ELSE}
  2102.     D3DDEGREE_LINEAR      = 1,
  2103.     D3DDEGREE_QUADRATIC   = 2,
  2104.     D3DDEGREE_CUBIC       = 3,
  2105.     D3DDEGREE_QUINTIC     = 5
  2106.   {$ENDIF}
  2107.   );
  2108.   {$EXTERNALSYM _D3DDEGREETYPE}
  2109.   D3DDEGREETYPE = _D3DDEGREETYPE;
  2110.   {$EXTERNALSYM D3DDEGREETYPE}
  2111.   TD3DDegreeType = _D3DDEGREETYPE;
  2112.   _D3DPATCHEDGESTYLE = (
  2113.     D3DPATCHEDGE_DISCRETE   {= 0},
  2114.     D3DPATCHEDGE_CONTINUOUS {= 1}
  2115.   );
  2116.   {$EXTERNALSYM _D3DPATCHEDGESTYLE}
  2117.   D3DPATCHEDGESTYLE = _D3DPATCHEDGESTYLE;
  2118.   {$EXTERNALSYM D3DPATCHEDGESTYLE}
  2119.   TD3DPatchEdgeStyle = _D3DPATCHEDGESTYLE;
  2120.   _D3DSTATEBLOCKTYPE = (
  2121.   {$IFNDEF COMPILER6_UP}
  2122.     D3DSBT_INVALID_0,
  2123.     D3DSBT_ALL          {= 1}, // capture all state
  2124.     D3DSBT_PIXELSTATE   {= 2}, // capture pixel state
  2125.     D3DSBT_VERTEXSTATE  {= 3}  // capture vertex state
  2126.   {$ELSE}
  2127.     D3DSBT_ALL          = 1, // capture all state
  2128.     D3DSBT_PIXELSTATE   = 2, // capture pixel state
  2129.     D3DSBT_VERTEXSTATE  = 3  // capture vertex state
  2130.   {$ENDIF}
  2131.   );
  2132.   {$EXTERNALSYM _D3DSTATEBLOCKTYPE}
  2133.   D3DSTATEBLOCKTYPE = _D3DSTATEBLOCKTYPE;
  2134.   {$EXTERNALSYM D3DSTATEBLOCKTYPE}
  2135.   TD3DStateBlockType = _D3DSTATEBLOCKTYPE;
  2136. type
  2137.   // The D3DVERTEXBLENDFLAGS type is used with D3DRS_VERTEXBLEND state.
  2138.   //
  2139.   _D3DVERTEXBLENDFLAGS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2140.   {$EXTERNALSYM _D3DVERTEXBLENDFLAGS}
  2141.   D3DVERTEXBLENDFLAGS = _D3DVERTEXBLENDFLAGS;
  2142.   {$EXTERNALSYM D3DVERTEXBLENDFLAGS}
  2143.   TD3DVertexBlendFlags = _D3DVERTEXBLENDFLAGS;
  2144. const
  2145.   D3DVBF_DISABLE  = 0;            // Disable vertex blending
  2146.   {$EXTERNALSYM D3DVBF_DISABLE}
  2147.   D3DVBF_1WEIGHTS = 1;            // 2 matrix blending
  2148.   {$EXTERNALSYM D3DVBF_1WEIGHTS}
  2149.   D3DVBF_2WEIGHTS = 2;            // 3 matrix blending
  2150.   {$EXTERNALSYM D3DVBF_2WEIGHTS}
  2151.   D3DVBF_3WEIGHTS = 3;            // 4 matrix blending
  2152.   {$EXTERNALSYM D3DVBF_3WEIGHTS}
  2153.   D3DVBF_TWEENING = 255;          // blending using D3DRS_TWEENFACTOR
  2154.   {$EXTERNALSYM D3DVBF_TWEENING}
  2155.   D3DVBF_0WEIGHTS = 256;          // one matrix is used with weight 1.0
  2156.   {$EXTERNALSYM D3DVBF_0WEIGHTS}
  2157.   D3DVBF_FORCE_DWORD = $7fffffff; // force 32-bit size enum
  2158.   {$EXTERNALSYM D3DVBF_FORCE_DWORD}
  2159. type
  2160.   _D3DTEXTURETRANSFORMFLAGS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  2161.   {$EXTERNALSYM _D3DTEXTURETRANSFORMFLAGS}
  2162.   D3DTEXTURETRANSFORMFLAGS = _D3DTEXTURETRANSFORMFLAGS;
  2163.   {$EXTERNALSYM D3DTEXTURETRANSFORMFLAGS}
  2164.   TD3DTextureTransformFlags = _D3DTEXTURETRANSFORMFLAGS;
  2165. const
  2166.   D3DTTFF_DISABLE         = 0;    // texture coordinates are passed directly
  2167.   {$EXTERNALSYM D3DTTFF_DISABLE}
  2168.   D3DTTFF_COUNT1          = 1;    // rasterizer should expect 1-D texture coords
  2169.   {$EXTERNALSYM D3DTTFF_COUNT1}
  2170.   D3DTTFF_COUNT2          = 2;    // rasterizer should expect 2-D texture coords
  2171.   {$EXTERNALSYM D3DTTFF_COUNT2}
  2172.   D3DTTFF_COUNT3          = 3;    // rasterizer should expect 3-D texture coords
  2173.   {$EXTERNALSYM D3DTTFF_COUNT3}
  2174.   D3DTTFF_COUNT4          = 4;    // rasterizer should expect 4-D texture coords
  2175.   {$EXTERNALSYM D3DTTFF_COUNT4}
  2176.   D3DTTFF_PROJECTED       = 256;  // texcoords to be divided by COUNTth element
  2177.   {$EXTERNALSYM D3DTTFF_PROJECTED}
  2178.   D3DTTFF_FORCE_DWORD     = $7fffffff;
  2179.   {$EXTERNALSYM D3DTTFF_FORCE_DWORD}
  2180. const
  2181.   // Macros to set texture coordinate format bits in the FVF id
  2182.   D3DFVF_TEXTUREFORMAT2 = 0;         // Two floating point values
  2183.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT2}
  2184.   D3DFVF_TEXTUREFORMAT1 = 3;         // One floating point value
  2185.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT1}
  2186.   D3DFVF_TEXTUREFORMAT3 = 1;         // Three floating point values
  2187.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT3}
  2188.   D3DFVF_TEXTUREFORMAT4 = 2;         // Four floating point values
  2189.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT4}
  2190. //#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
  2191. function D3DFVF_TEXCOORDSIZE3(CoordIndex: DWord): DWord;
  2192. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE3}
  2193. //#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
  2194. function D3DFVF_TEXCOORDSIZE2(CoordIndex: DWord): DWord;
  2195. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE2}
  2196. //#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
  2197. function D3DFVF_TEXCOORDSIZE4(CoordIndex: DWord): DWord;
  2198. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE4}
  2199. //#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
  2200. function D3DFVF_TEXCOORDSIZE1(CoordIndex: DWord): DWord;
  2201. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE1}
  2202. //---------------------------------------------------------------------
  2203. type
  2204.   { Direct3D9 Device types }
  2205.   _D3DDEVTYPE = (
  2206.   {$IFNDEF COMPILER6_UP}
  2207.     D3DDEVTYPE_INVALID_0,
  2208.     D3DDEVTYPE_HAL         {= 1},
  2209.     D3DDEVTYPE_REF         {= 2},
  2210.     D3DDEVTYPE_SW          {= 3}
  2211.   {$ELSE}
  2212.     D3DDEVTYPE_HAL         = 1,
  2213.     D3DDEVTYPE_REF         = 2,
  2214.     D3DDEVTYPE_SW          = 3
  2215.   {$ENDIF}
  2216.   );
  2217.   {$EXTERNALSYM _D3DDEVTYPE}
  2218.   D3DDEVTYPE = _D3DDEVTYPE;
  2219.   {$EXTERNALSYM D3DDEVTYPE}
  2220.   TD3DDevType = _D3DDEVTYPE;
  2221.   { Multi-Sample buffer types }
  2222.   _D3DMULTISAMPLE_TYPE = (
  2223.   {$IFNDEF COMPILER6_UP}
  2224.     D3DMULTISAMPLE_NONE            {=  0},
  2225.     D3DMULTISAMPLE_NONMASKABLE     {=  1},
  2226.     D3DMULTISAMPLE_2_SAMPLES       {=  2},
  2227.     D3DMULTISAMPLE_3_SAMPLES       {=  3},
  2228.     D3DMULTISAMPLE_4_SAMPLES       {=  4},
  2229.     D3DMULTISAMPLE_5_SAMPLES       {=  5},
  2230.     D3DMULTISAMPLE_6_SAMPLES       {=  6},
  2231.     D3DMULTISAMPLE_7_SAMPLES       {=  7},
  2232.     D3DMULTISAMPLE_8_SAMPLES       {=  8},
  2233.     D3DMULTISAMPLE_9_SAMPLES       {=  9},
  2234.     D3DMULTISAMPLE_10_SAMPLES      {= 10},
  2235.     D3DMULTISAMPLE_11_SAMPLES      {= 11},
  2236.     D3DMULTISAMPLE_12_SAMPLES      {= 12},
  2237.     D3DMULTISAMPLE_13_SAMPLES      {= 13},
  2238.     D3DMULTISAMPLE_14_SAMPLES      {= 14},
  2239.     D3DMULTISAMPLE_15_SAMPLES      {= 15},
  2240.     D3DMULTISAMPLE_16_SAMPLES      {= 16}
  2241.   {$ELSE}
  2242.     D3DMULTISAMPLE_NONE            =  0,
  2243.     D3DMULTISAMPLE_NONMASKABLE     =  1,
  2244.     D3DMULTISAMPLE_2_SAMPLES       =  2,
  2245.     D3DMULTISAMPLE_3_SAMPLES       =  3,
  2246.     D3DMULTISAMPLE_4_SAMPLES       =  4,
  2247.     D3DMULTISAMPLE_5_SAMPLES       =  5,
  2248.     D3DMULTISAMPLE_6_SAMPLES       =  6,
  2249.     D3DMULTISAMPLE_7_SAMPLES       =  7,
  2250.     D3DMULTISAMPLE_8_SAMPLES       =  8,
  2251.     D3DMULTISAMPLE_9_SAMPLES       =  9,
  2252.     D3DMULTISAMPLE_10_SAMPLES      = 10,
  2253.     D3DMULTISAMPLE_11_SAMPLES      = 11,
  2254.     D3DMULTISAMPLE_12_SAMPLES      = 12,
  2255.     D3DMULTISAMPLE_13_SAMPLES      = 13,
  2256.     D3DMULTISAMPLE_14_SAMPLES      = 14,
  2257.     D3DMULTISAMPLE_15_SAMPLES      = 15,
  2258.     D3DMULTISAMPLE_16_SAMPLES      = 16
  2259.   {$ENDIF}
  2260.   );
  2261.   {$EXTERNALSYM _D3DMULTISAMPLE_TYPE}
  2262.   D3DMULTISAMPLE_TYPE = _D3DMULTISAMPLE_TYPE;
  2263.   {$EXTERNALSYM D3DMULTISAMPLE_TYPE}
  2264.   TD3DMultiSampleType = _D3DMULTISAMPLE_TYPE;
  2265. (* Formats
  2266.  * Most of these names have the following convention:
  2267.  *      A = Alpha
  2268.  *      R = Red
  2269.  *      G = Green
  2270.  *      B = Blue
  2271.  *      X = Unused Bits
  2272.  *      P = Palette
  2273.  *      L = Luminance