Direct3D9.pas
上传用户:ctlcnc
上传日期:2021-12-10
资源大小:4933k
文件大小:234k
源码类别:

2D图形编程

开发平台:

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