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

Delphi控件源码

开发平台:

Delphi

  1. (* TD3DPrimCaps dwSourceBlendCaps, dwDestBlendCaps *)
  2.   D3DPBLENDCAPS_ZERO              = $00000001;
  3.   {$EXTERNALSYM D3DPBLENDCAPS_ZERO}
  4.   D3DPBLENDCAPS_ONE               = $00000002;
  5.   {$EXTERNALSYM D3DPBLENDCAPS_ONE}
  6.   D3DPBLENDCAPS_SRCCOLOR          = $00000004;
  7.   {$EXTERNALSYM D3DPBLENDCAPS_SRCCOLOR}
  8.   D3DPBLENDCAPS_INVSRCCOLOR       = $00000008;
  9.   {$EXTERNALSYM D3DPBLENDCAPS_INVSRCCOLOR}
  10.   D3DPBLENDCAPS_SRCALPHA          = $00000010;
  11.   {$EXTERNALSYM D3DPBLENDCAPS_SRCALPHA}
  12.   D3DPBLENDCAPS_INVSRCALPHA       = $00000020;
  13.   {$EXTERNALSYM D3DPBLENDCAPS_INVSRCALPHA}
  14.   D3DPBLENDCAPS_DESTALPHA         = $00000040;
  15.   {$EXTERNALSYM D3DPBLENDCAPS_DESTALPHA}
  16.   D3DPBLENDCAPS_INVDESTALPHA      = $00000080;
  17.   {$EXTERNALSYM D3DPBLENDCAPS_INVDESTALPHA}
  18.   D3DPBLENDCAPS_DESTCOLOR         = $00000100;
  19.   {$EXTERNALSYM D3DPBLENDCAPS_DESTCOLOR}
  20.   D3DPBLENDCAPS_INVDESTCOLOR      = $00000200;
  21.   {$EXTERNALSYM D3DPBLENDCAPS_INVDESTCOLOR}
  22.   D3DPBLENDCAPS_SRCALPHASAT       = $00000400;
  23.   {$EXTERNALSYM D3DPBLENDCAPS_SRCALPHASAT}
  24.   D3DPBLENDCAPS_BOTHSRCALPHA      = $00000800;
  25.   {$EXTERNALSYM D3DPBLENDCAPS_BOTHSRCALPHA}
  26.   D3DPBLENDCAPS_BOTHINVSRCALPHA   = $00001000;
  27.   {$EXTERNALSYM D3DPBLENDCAPS_BOTHINVSRCALPHA}
  28. (* TD3DPrimCaps dwShadeCaps *)
  29.   D3DPSHADECAPS_COLORFLATMONO             = $00000001;
  30.   {$EXTERNALSYM D3DPSHADECAPS_COLORFLATMONO}
  31.   D3DPSHADECAPS_COLORFLATRGB              = $00000002;
  32.   {$EXTERNALSYM D3DPSHADECAPS_COLORFLATRGB}
  33.   D3DPSHADECAPS_COLORGOURAUDMONO          = $00000004;
  34.   {$EXTERNALSYM D3DPSHADECAPS_COLORGOURAUDMONO}
  35.   D3DPSHADECAPS_COLORGOURAUDRGB           = $00000008;
  36.   {$EXTERNALSYM D3DPSHADECAPS_COLORGOURAUDRGB}
  37.   D3DPSHADECAPS_COLORPHONGMONO            = $00000010;
  38.   {$EXTERNALSYM D3DPSHADECAPS_COLORPHONGMONO}
  39.   D3DPSHADECAPS_COLORPHONGRGB             = $00000020;
  40.   {$EXTERNALSYM D3DPSHADECAPS_COLORPHONGRGB}
  41.   D3DPSHADECAPS_SPECULARFLATMONO          = $00000040;
  42.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARFLATMONO}
  43.   D3DPSHADECAPS_SPECULARFLATRGB           = $00000080;
  44.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARFLATRGB}
  45.   D3DPSHADECAPS_SPECULARGOURAUDMONO       = $00000100;
  46.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARGOURAUDMONO}
  47.   D3DPSHADECAPS_SPECULARGOURAUDRGB        = $00000200;
  48.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARGOURAUDRGB}
  49.   D3DPSHADECAPS_SPECULARPHONGMONO         = $00000400;
  50.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARPHONGMONO}
  51.   D3DPSHADECAPS_SPECULARPHONGRGB          = $00000800;
  52.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARPHONGRGB}
  53.   D3DPSHADECAPS_ALPHAFLATBLEND            = $00001000;
  54.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAFLATBLEND}
  55.   D3DPSHADECAPS_ALPHAFLATSTIPPLED         = $00002000;
  56.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAFLATSTIPPLED}
  57.   D3DPSHADECAPS_ALPHAGOURAUDBLEND         = $00004000;
  58.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAGOURAUDBLEND}
  59.   D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED      = $00008000;
  60.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED}
  61.   D3DPSHADECAPS_ALPHAPHONGBLEND           = $00010000;
  62.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAPHONGBLEND}
  63.   D3DPSHADECAPS_ALPHAPHONGSTIPPLED        = $00020000;
  64.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAPHONGSTIPPLED}
  65.   D3DPSHADECAPS_FOGFLAT                   = $00040000;
  66.   {$EXTERNALSYM D3DPSHADECAPS_FOGFLAT}
  67.   D3DPSHADECAPS_FOGGOURAUD                = $00080000;
  68.   {$EXTERNALSYM D3DPSHADECAPS_FOGGOURAUD}
  69.   D3DPSHADECAPS_FOGPHONG                  = $00100000;
  70.   {$EXTERNALSYM D3DPSHADECAPS_FOGPHONG}
  71. (* TD3DPrimCaps dwTextureCaps *)
  72. (*
  73.  * Perspective-correct texturing is supported
  74.  *)
  75.   D3DPTEXTURECAPS_PERSPECTIVE     = $00000001;
  76.   {$EXTERNALSYM D3DPTEXTURECAPS_PERSPECTIVE}
  77. (*
  78.  * Power-of-2 texture dimensions are required
  79.  *)
  80.   D3DPTEXTURECAPS_POW2            = $00000002;
  81.   {$EXTERNALSYM D3DPTEXTURECAPS_POW2}
  82. (*
  83.  * Alpha in texture pixels is supported
  84.  *)
  85.   D3DPTEXTURECAPS_ALPHA           = $00000004;
  86.   {$EXTERNALSYM D3DPTEXTURECAPS_ALPHA}
  87. (*
  88.  * Color-keyed textures are supported
  89.  *)
  90.   D3DPTEXTURECAPS_TRANSPARENCY    = $00000008;
  91.   {$EXTERNALSYM D3DPTEXTURECAPS_TRANSPARENCY}
  92. (*
  93.  * obsolete, see D3DPTADDRESSCAPS_BORDER
  94.  *)
  95.   D3DPTEXTURECAPS_BORDER          = $00000010;
  96.   {$EXTERNALSYM D3DPTEXTURECAPS_BORDER}
  97. (*
  98.  * Only square textures are supported
  99.  *)
  100.   D3DPTEXTURECAPS_SQUAREONLY      = $00000020;
  101.   {$EXTERNALSYM D3DPTEXTURECAPS_SQUAREONLY}
  102. {$IFDEF DIRECT3D_VERSION_6}
  103. (*
  104.  * Texture indices are not scaled by the texture size prior
  105.  * to interpolation.
  106.  *)
  107.   D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE = $00000040;
  108.   {$EXTERNALSYM D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE}
  109. (*
  110.  * Device can draw alpha from texture palettes
  111.  *)
  112.   D3DPTEXTURECAPS_ALPHAPALETTE    = $00000080;
  113.   {$EXTERNALSYM D3DPTEXTURECAPS_ALPHAPALETTE}
  114. (*
  115.  * Device can use non-POW2 textures if:
  116.  *  1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage
  117.  *  2) D3DRS_WRAP(N) is zero for this texture's coordinates
  118.  *  3) mip mapping is not enabled (use magnification filter only)
  119.  *)
  120.   D3DPTEXTURECAPS_NONPOW2CONDITIONAL  = $00000100;
  121.   {$EXTERNALSYM D3DPTEXTURECAPS_NONPOW2CONDITIONAL}
  122. {$ENDIF} // DIRECT3D_VERSION_6
  123. {$IFDEF DIRECT3D_VERSION_7}
  124. // 0x00000200L unused
  125. (*
  126.  * Device can divide transformed texture coordinates by the
  127.  * COUNTth texture coordinate (can do D3DTTFF_PROJECTED)
  128.  *)
  129.   D3DPTEXTURECAPS_PROJECTED  = $00000400;
  130.   {$EXTERNALSYM D3DPTEXTURECAPS_PROJECTED}
  131. (*
  132.  * Device can do cubemap textures
  133.  *)
  134.   D3DPTEXTURECAPS_CUBEMAP           = $00000800;
  135.   {$EXTERNALSYM D3DPTEXTURECAPS_CUBEMAP}
  136.   D3DPTEXTURECAPS_COLORKEYBLEND     = $00001000;
  137.   {$EXTERNALSYM D3DPTEXTURECAPS_COLORKEYBLEND}
  138. {$ENDIF} // DIRECT3D_VERSION_7
  139. (* TD3DPrimCaps dwTextureFilterCaps *)
  140.   D3DPTFILTERCAPS_NEAREST         = $00000001;
  141.   {$EXTERNALSYM D3DPTFILTERCAPS_NEAREST}
  142.   D3DPTFILTERCAPS_LINEAR          = $00000002;
  143.   {$EXTERNALSYM D3DPTFILTERCAPS_LINEAR}
  144.   D3DPTFILTERCAPS_MIPNEAREST      = $00000004;
  145.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPNEAREST}
  146.   D3DPTFILTERCAPS_MIPLINEAR       = $00000008;
  147.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPLINEAR}
  148.   D3DPTFILTERCAPS_LINEARMIPNEAREST = $00000010;
  149.   {$EXTERNALSYM D3DPTFILTERCAPS_LINEARMIPNEAREST}
  150.   D3DPTFILTERCAPS_LINEARMIPLINEAR = $00000020;
  151.   {$EXTERNALSYM D3DPTFILTERCAPS_LINEARMIPLINEAR}
  152. {$IFDEF DIRECT3D_VERSION_6}
  153. (* Device3 Min Filter *)
  154.   D3DPTFILTERCAPS_MINFPOINT       = $00000100;
  155.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFPOINT}
  156.   D3DPTFILTERCAPS_MINFLINEAR      = $00000200;
  157.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFLINEAR}
  158.   D3DPTFILTERCAPS_MINFANISOTROPIC = $00000400;
  159.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFANISOTROPIC}
  160. (* Device3 Mip Filter *)
  161.   D3DPTFILTERCAPS_MIPFPOINT       = $00010000;
  162.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPFPOINT}
  163.   D3DPTFILTERCAPS_MIPFLINEAR      = $00020000;
  164.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPFLINEAR}
  165. (* Device3 Mag Filter *)
  166.   D3DPTFILTERCAPS_MAGFPOINT         = $01000000;
  167.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFPOINT}
  168.   D3DPTFILTERCAPS_MAGFLINEAR        = $02000000;
  169.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFLINEAR}
  170.   D3DPTFILTERCAPS_MAGFANISOTROPIC   = $04000000;
  171.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFANISOTROPIC}
  172.   D3DPTFILTERCAPS_MAGFAFLATCUBIC    = $08000000;
  173.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFAFLATCUBIC}
  174.   D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC = $10000000;
  175.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC}
  176. {$ENDIF} // DIRECT3D_VERSION_6
  177. (* TD3DPrimCaps dwTextureBlendCaps *)
  178.   D3DPTBLENDCAPS_DECAL            = $00000001;
  179.   {$EXTERNALSYM D3DPTBLENDCAPS_DECAL}
  180.   D3DPTBLENDCAPS_MODULATE         = $00000002;
  181.   {$EXTERNALSYM D3DPTBLENDCAPS_MODULATE}
  182.   D3DPTBLENDCAPS_DECALALPHA       = $00000004;
  183.   {$EXTERNALSYM D3DPTBLENDCAPS_DECALALPHA}
  184.   D3DPTBLENDCAPS_MODULATEALPHA    = $00000008;
  185.   {$EXTERNALSYM D3DPTBLENDCAPS_MODULATEALPHA}
  186.   D3DPTBLENDCAPS_DECALMASK        = $00000010;
  187.   {$EXTERNALSYM D3DPTBLENDCAPS_DECALMASK}
  188.   D3DPTBLENDCAPS_MODULATEMASK     = $00000020;
  189.   {$EXTERNALSYM D3DPTBLENDCAPS_MODULATEMASK}
  190.   D3DPTBLENDCAPS_COPY             = $00000040;
  191.   {$EXTERNALSYM D3DPTBLENDCAPS_COPY}
  192. {$IFDEF DIRECT3D_VERSION_5}
  193.   D3DPTBLENDCAPS_ADD            = $00000080;
  194.   {$EXTERNALSYM D3DPTBLENDCAPS_ADD}
  195. {$ENDIF} // DIRECT3D_VERSION_5
  196. (* TD3DPrimCaps dwTextureAddressCaps *)
  197.   D3DPTADDRESSCAPS_WRAP           = $00000001;
  198.   {$EXTERNALSYM D3DPTADDRESSCAPS_WRAP}
  199.   D3DPTADDRESSCAPS_MIRROR         = $00000002;
  200.   {$EXTERNALSYM D3DPTADDRESSCAPS_MIRROR}
  201.   D3DPTADDRESSCAPS_CLAMP          = $00000004;
  202.   {$EXTERNALSYM D3DPTADDRESSCAPS_CLAMP}
  203. {$IFDEF DIRECT3D_VERSION_5}
  204.   D3DPTADDRESSCAPS_BORDER         = $00000008;
  205.   {$EXTERNALSYM D3DPTADDRESSCAPS_BORDER}
  206.   D3DPTADDRESSCAPS_INDEPENDENTUV  = $00000010;
  207.   {$EXTERNALSYM D3DPTADDRESSCAPS_INDEPENDENTUV}
  208. {$ENDIF} // DIRECT3D_VERSION_5
  209. {$IFDEF DIRECT3D_VERSION_6}
  210. (* D3DDEVICEDESC dwStencilCaps *)
  211.   D3DSTENCILCAPS_KEEP     = $00000001;
  212.   {$EXTERNALSYM D3DSTENCILCAPS_KEEP}
  213.   D3DSTENCILCAPS_ZERO     = $00000002;
  214.   {$EXTERNALSYM D3DSTENCILCAPS_ZERO}
  215.   D3DSTENCILCAPS_REPLACE  = $00000004;
  216.   {$EXTERNALSYM D3DSTENCILCAPS_REPLACE}
  217.   D3DSTENCILCAPS_INCRSAT  = $00000008;
  218.   {$EXTERNALSYM D3DSTENCILCAPS_INCRSAT}
  219.   D3DSTENCILCAPS_DECRSAT  = $00000010;
  220.   {$EXTERNALSYM D3DSTENCILCAPS_DECRSAT}
  221.   D3DSTENCILCAPS_INVERT   = $00000020;
  222.   {$EXTERNALSYM D3DSTENCILCAPS_INVERT}
  223.   D3DSTENCILCAPS_INCR     = $00000040;
  224.   {$EXTERNALSYM D3DSTENCILCAPS_INCR}
  225.   D3DSTENCILCAPS_DECR     = $00000080;
  226.   {$EXTERNALSYM D3DSTENCILCAPS_DECR}
  227. (* D3DDEVICEDESC dwTextureOpCaps *)
  228.   D3DTEXOPCAPS_DISABLE                    = $00000001;
  229.   {$EXTERNALSYM D3DTEXOPCAPS_DISABLE}
  230.   D3DTEXOPCAPS_SELECTARG1                 = $00000002;
  231.   {$EXTERNALSYM D3DTEXOPCAPS_SELECTARG1}
  232.   D3DTEXOPCAPS_SELECTARG2                 = $00000004;
  233.   {$EXTERNALSYM D3DTEXOPCAPS_SELECTARG2}
  234.   D3DTEXOPCAPS_MODULATE                   = $00000008;
  235.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE}
  236.   D3DTEXOPCAPS_MODULATE2X                 = $00000010;
  237.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE2X}
  238.   D3DTEXOPCAPS_MODULATE4X                 = $00000020;
  239.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE4X}
  240.   D3DTEXOPCAPS_ADD                        = $00000040;
  241.   {$EXTERNALSYM D3DTEXOPCAPS_ADD}
  242.   D3DTEXOPCAPS_ADDSIGNED                  = $00000080;
  243.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSIGNED}
  244.   D3DTEXOPCAPS_ADDSIGNED2X                = $00000100;
  245.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSIGNED2X}
  246.   D3DTEXOPCAPS_SUBTRACT                   = $00000200;
  247.   {$EXTERNALSYM D3DTEXOPCAPS_SUBTRACT}
  248.   D3DTEXOPCAPS_ADDSMOOTH                  = $00000400;
  249.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSMOOTH}
  250.   D3DTEXOPCAPS_BLENDDIFFUSEALPHA          = $00000800;
  251.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDDIFFUSEALPHA}
  252.   D3DTEXOPCAPS_BLENDTEXTUREALPHA          = $00001000;
  253.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDTEXTUREALPHA}
  254.   D3DTEXOPCAPS_BLENDFACTORALPHA           = $00002000;
  255.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDFACTORALPHA}
  256.   D3DTEXOPCAPS_BLENDTEXTUREALPHAPM        = $00004000;
  257.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDTEXTUREALPHAPM}
  258.   D3DTEXOPCAPS_BLENDCURRENTALPHA          = $00008000;
  259.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDCURRENTALPHA}
  260.   D3DTEXOPCAPS_PREMODULATE                = $00010000;
  261.   {$EXTERNALSYM D3DTEXOPCAPS_PREMODULATE}
  262.   D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR     = $00020000;
  263.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR}
  264.   D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA     = $00040000;
  265.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA}
  266.   D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR  = $00080000;
  267.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR}
  268.   D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA  = $00100000;
  269.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA}
  270.   D3DTEXOPCAPS_BUMPENVMAP                 = $00200000;
  271.   {$EXTERNALSYM D3DTEXOPCAPS_BUMPENVMAP}
  272.   D3DTEXOPCAPS_BUMPENVMAPLUMINANCE        = $00400000;
  273.   {$EXTERNALSYM D3DTEXOPCAPS_BUMPENVMAPLUMINANCE}
  274.   D3DTEXOPCAPS_DOTPRODUCT3                = $00800000;
  275.   {$EXTERNALSYM D3DTEXOPCAPS_DOTPRODUCT3}
  276. (* D3DDEVICEDESC dwFVFCaps flags *)
  277.   D3DFVFCAPS_TEXCOORDCOUNTMASK    = $0000ffff; (* mask for texture coordinate count field *)
  278.   {$EXTERNALSYM D3DFVFCAPS_TEXCOORDCOUNTMASK}
  279.   D3DFVFCAPS_DONOTSTRIPELEMENTS   = $00080000; (* Device prefers that vertex elements not be stripped *)
  280.   {$EXTERNALSYM D3DFVFCAPS_DONOTSTRIPELEMENTS}
  281. {$ENDIF} // DIRECT3D_VERSION_6
  282. (*
  283.  * Description for a device.
  284.  * This is used to describe a device that is to be created or to query
  285.  * the current device.
  286.  *)
  287. type
  288.   PD3DDeviceDesc = ^TD3DDeviceDesc;
  289.   _D3DDeviceDesc = packed record
  290.     dwSize: DWORD;                       (* Size of TD3DDeviceDesc structure *)
  291.     dwFlags: DWORD;                      (* Indicates which fields have valid data *)
  292.     dcmColorModel: TD3DColorModel;       (* Color model of device *)
  293.     dwDevCaps: DWORD;                    (* Capabilities of device *)
  294.     dtcTransformCaps: TD3DTransformCaps; (* Capabilities of transform *)
  295.     bClipping: BOOL;                     (* Device can do 3D clipping *)
  296.     dlcLightingCaps: TD3DLightingCaps;   (* Capabilities of lighting *)
  297.     dpcLineCaps: TD3DPrimCaps;
  298.     dpcTriCaps: TD3DPrimCaps;
  299.     dwDeviceRenderBitDepth: DWORD;       (* One of DDBB_8, 16, etc.. *)
  300.     dwDeviceZBufferBitDepth: DWORD;      (* One of DDBD_16, 32, etc.. *)
  301.     dwMaxBufferSize: DWORD;              (* Maximum execute buffer size *)
  302.     dwMaxVertexCount: DWORD;             (* Maximum vertex count *)
  303. {$IFDEF DIRECT3D_VERSION_5}
  304.     // *** New fields for DX5 *** //
  305.     // Width and height caps are 0 for legacy HALs.
  306.     dwMinTextureWidth, dwMinTextureHeight  : DWORD;
  307.     dwMaxTextureWidth, dwMaxTextureHeight  : DWORD;
  308.     dwMinStippleWidth, dwMaxStippleWidth   : DWORD;
  309.     dwMinStippleHeight, dwMaxStippleHeight : DWORD;
  310. {$ENDIF} // DIRECT3D_VERSION_5
  311. {$IFDEF DIRECT3D_VERSION_6}
  312.     // New fields for DX6
  313.     dwMaxTextureRepeat : DWORD;
  314.     dwMaxTextureAspectRatio : DWORD;
  315.     dwMaxAnisotropy : DWORD;
  316.     // Guard band that the rasterizer can accommodate
  317.     // Screen-space vertices inside this space but outside the viewport
  318.     // will get clipped properly.
  319.     dvGuardBandLeft : TD3DValue;
  320.     dvGuardBandTop : TD3DValue;
  321.     dvGuardBandRight : TD3DValue;
  322.     dvGuardBandBottom : TD3DValue;
  323.     dvExtentsAdjust : TD3DValue;
  324.     dwStencilCaps : DWORD;
  325.     dwFVFCaps : DWORD;  (* low 4 bits: 0 implies TLVERTEX only, 1..8 imply FVF aware *)
  326.     dwTextureOpCaps : DWORD;
  327.     wMaxTextureBlendStages : WORD;
  328.     wMaxSimultaneousTextures : WORD;
  329. {$ENDIF} // DIRECT3D_VERSION_6
  330.   end;
  331.   {$EXTERNALSYM _D3DDeviceDesc}
  332.   D3DDeviceDesc = _D3DDeviceDesc;
  333.   {$EXTERNALSYM D3DDeviceDesc}
  334.   TD3DDeviceDesc = _D3DDeviceDesc;
  335. {$IFDEF DIRECT3D_VERSION_7}
  336.   PD3DDeviceDesc7 = ^TD3DDeviceDesc7;
  337.   _D3DDeviceDesc7 = packed record
  338.     dwDevCaps:               DWORD;             (* Capabilities of device *)
  339.     dpcLineCaps:             TD3DPrimCaps;
  340.     dpcTriCaps:              TD3DPrimCaps;
  341.     dwDeviceRenderBitDepth:  DWORD;             (* One of DDBB_8, 16, etc.. *)
  342.     dwDeviceZBufferBitDepth: DWORD;             (* One of DDBD_16, 32, etc.. *)
  343.     dwMinTextureWidth, dwMinTextureHeight: DWORD;
  344.     dwMaxTextureWidth, dwMaxTextureHeight: DWORD;
  345.     dwMaxTextureRepeat:                    DWORD;
  346.     dwMaxTextureAspectRatio:               DWORD;
  347.     dwMaxAnisotropy:                       DWORD;
  348.     dvGuardBandLeft:                       TD3DValue;
  349.     dvGuardBandTop:                        TD3DValue;
  350.     dvGuardBandRight:                      TD3DValue;
  351.     dvGuardBandBottom:                     TD3DValue;
  352.     dvExtentsAdjust:                       TD3DValue;
  353.     dwStencilCaps:                         DWORD;
  354.     dwFVFCaps:                             DWORD;
  355.     dwTextureOpCaps:                       DWORD;
  356.     wMaxTextureBlendStages:                WORD;
  357.     wMaxSimultaneousTextures:              WORD;
  358.     dwMaxActiveLights:                     DWORD;
  359.     dvMaxVertexW:                          TD3DValue;
  360.     deviceGUID:                            TGUID;
  361.     wMaxUserClipPlanes:                    WORD;
  362.     wMaxVertexBlendMatrices:               WORD;
  363.     dwVertexProcessingCaps:                DWORD;
  364.     dwReserved1:                           DWORD;
  365.     dwReserved2:                           DWORD;
  366.     dwReserved3:                           DWORD;
  367.     dwReserved4:                           DWORD;
  368.   end;
  369.   {$EXTERNALSYM _D3DDeviceDesc7}
  370.   D3DDeviceDesc7 = _D3DDeviceDesc7;
  371.   {$EXTERNALSYM D3DDeviceDesc7}
  372.   TD3DDeviceDesc7 = _D3DDeviceDesc7;
  373. {$ENDIF} // DIRECT3D_VERSION_7
  374. const
  375.   D3DDEVICEDESCSIZE = SizeOf(TD3DDeviceDesc);
  376.   {$EXTERNALSYM D3DDEVICEDESCSIZE}
  377. {$IFDEF DIRECT3D_VERSION_7} // There is the BUG in C++Headers
  378.   D3DDEVICEDESC7SIZE = SizeOf(TD3DDeviceDesc7);
  379.   {$EXTERNALSYM D3DDEVICEDESC7SIZE}
  380. {$ENDIF} // DIRECT3D_VERSION_7
  381. type
  382.   TD3DEnumDevicesCallbackA = function (lpGuid: PGUID; // nil for the default device
  383.       lpDeviceDescription: PAnsiChar; lpDeviceName: PAnsiChar;
  384.       var lpD3DHWDeviceDesc: TD3DDeviceDesc;
  385.       var lpD3DHELDeviceDesc: TD3DDeviceDesc;
  386.       lpContext: Pointer): HResult; stdcall;
  387.   TD3DEnumDevicesCallback = TD3DEnumDevicesCallbackA;
  388.   {$NODEFINE TD3DEnumDevicesCallbackA}
  389.   {$NODEFINE TD3DEnumDevicesCallback}
  390. {$IFDEF DIRECT3D_VERSION_7}
  391.   TD3DEnumDevicesCallback7A = function (
  392.       lpDeviceDescription: PAnsiChar; lpDeviceName: PAnsiChar;
  393.       const lpD3DDeviceDesc: TD3DDeviceDesc7; lpContext: Pointer): HResult; stdcall;
  394.   TD3DEnumDevicesCallback7 = TD3DEnumDevicesCallback7A;
  395.   {$NODEFINE TD3DEnumDevicesCallback7A}
  396.   {$NODEFINE TD3DEnumDevicesCallback7}
  397. {$ENDIF} // DIRECT3D_VERSION_7
  398. (* TD3DDeviceDesc dwFlags indicating valid fields *)
  399. const
  400.   D3DDD_COLORMODEL            = $00000001; (* dcmColorModel is valid *)
  401.   {$EXTERNALSYM D3DDD_COLORMODEL}
  402.   D3DDD_DEVCAPS               = $00000002; (* dwDevCaps is valid *)
  403.   {$EXTERNALSYM D3DDD_DEVCAPS}
  404.   D3DDD_TRANSFORMCAPS         = $00000004; (* dtcTransformCaps is valid *)
  405.   {$EXTERNALSYM D3DDD_TRANSFORMCAPS}
  406.   D3DDD_LIGHTINGCAPS          = $00000008; (* dlcLightingCaps is valid *)
  407.   {$EXTERNALSYM D3DDD_LIGHTINGCAPS}
  408.   D3DDD_BCLIPPING             = $00000010; (* bClipping is valid *)
  409.   {$EXTERNALSYM D3DDD_BCLIPPING}
  410.   D3DDD_LINECAPS              = $00000020; (* dpcLineCaps is valid *)
  411.   {$EXTERNALSYM D3DDD_LINECAPS}
  412.   D3DDD_TRICAPS               = $00000040; (* dpcTriCaps is valid *)
  413.   {$EXTERNALSYM D3DDD_TRICAPS}
  414.   D3DDD_DEVICERENDERBITDEPTH  = $00000080; (* dwDeviceRenderBitDepth is valid *)
  415.   {$EXTERNALSYM D3DDD_DEVICERENDERBITDEPTH}
  416.   D3DDD_DEVICEZBUFFERBITDEPTH = $00000100; (* dwDeviceZBufferBitDepth is valid *)
  417.   {$EXTERNALSYM D3DDD_DEVICEZBUFFERBITDEPTH}
  418.   D3DDD_MAXBUFFERSIZE         = $00000200; (* dwMaxBufferSize is valid *)
  419.   {$EXTERNALSYM D3DDD_MAXBUFFERSIZE}
  420.   D3DDD_MAXVERTEXCOUNT        = $00000400; (* dwMaxVertexCount is valid *)
  421.   {$EXTERNALSYM D3DDD_MAXVERTEXCOUNT}
  422. (* TD3DDeviceDesc dwDevCaps flags *)
  423.   D3DDEVCAPS_FLOATTLVERTEX        = $00000001; (* Device accepts floating point *)
  424.                                                (* for post-transform vertex data *)
  425.   {$EXTERNALSYM D3DDEVCAPS_FLOATTLVERTEX}
  426.   D3DDEVCAPS_SORTINCREASINGZ      = $00000002; (* Device needs data sorted for increasing Z*)
  427.   {$EXTERNALSYM D3DDEVCAPS_SORTINCREASINGZ}
  428.   D3DDEVCAPS_SORTDECREASINGZ      = $00000004; (* Device needs data sorted for decreasing Z*)
  429.   {$EXTERNALSYM D3DDEVCAPS_SORTDECREASINGZ}
  430.   D3DDEVCAPS_SORTEXACT            = $00000008; (* Device needs data sorted exactly *)
  431.   {$EXTERNALSYM D3DDEVCAPS_SORTEXACT}
  432.   D3DDEVCAPS_EXECUTESYSTEMMEMORY  = $00000010; (* Device can use execute buffers from system memory *)
  433.   {$EXTERNALSYM D3DDEVCAPS_EXECUTESYSTEMMEMORY}
  434.   D3DDEVCAPS_EXECUTEVIDEOMEMORY   = $00000020; (* Device can use execute buffers from video memory *)
  435.   {$EXTERNALSYM D3DDEVCAPS_EXECUTEVIDEOMEMORY}
  436.   D3DDEVCAPS_TLVERTEXSYSTEMMEMORY = $00000040; (* Device can use TL buffers from system memory *)
  437.   {$EXTERNALSYM D3DDEVCAPS_TLVERTEXSYSTEMMEMORY}
  438.   D3DDEVCAPS_TLVERTEXVIDEOMEMORY  = $00000080; (* Device can use TL buffers from video memory *)
  439.   {$EXTERNALSYM D3DDEVCAPS_TLVERTEXVIDEOMEMORY}
  440.   D3DDEVCAPS_TEXTURESYSTEMMEMORY  = $00000100; (* Device can texture from system memory *)
  441.   {$EXTERNALSYM D3DDEVCAPS_TEXTURESYSTEMMEMORY}
  442.   D3DDEVCAPS_TEXTUREVIDEOMEMORY   = $00000200; (* Device can texture from device memory *)
  443.   {$EXTERNALSYM D3DDEVCAPS_TEXTUREVIDEOMEMORY}
  444. {$IFDEF DIRECT3D_VERSION_5}
  445.   D3DDEVCAPS_DRAWPRIMTLVERTEX     = $00000400; (* Device can draw TLVERTEX primitives *)
  446.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMTLVERTEX}
  447.   D3DDEVCAPS_CANRENDERAFTERFLIP   = $00000800; (* Device can render without waiting for flip to complete *)
  448.   {$EXTERNALSYM D3DDEVCAPS_CANRENDERAFTERFLIP}
  449.   D3DDEVCAPS_TEXTURENONLOCALVIDMEM   = $00001000; (* Device can texture from nonlocal video memory *)
  450.   {$EXTERNALSYM D3DDEVCAPS_TEXTURENONLOCALVIDMEM}
  451. {$ENDIF} // DIRECT3D_VERSION_5
  452. {$IFDEF DIRECT3D_VERSION_6}
  453.   D3DDEVCAPS_DRAWPRIMITIVES2         = $00002000; (* Device can support DrawPrimitives2 *)
  454.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMITIVES2}
  455.   D3DDEVCAPS_SEPARATETEXTUREMEMORIES = $00004000; (* Device is texturing from separate memory pools *)
  456.   {$EXTERNALSYM D3DDEVCAPS_SEPARATETEXTUREMEMORIES}
  457.   D3DDEVCAPS_DRAWPRIMITIVES2EX       = $00008000; (* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*)
  458.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMITIVES2EX}
  459. {$ENDIF} // DIRECT3D_VERSION_6
  460. {$IFDEF DIRECT3D_VERSION_7}
  461.   D3DDEVCAPS_HWTRANSFORMANDLIGHT     = $00010000; (* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also *)
  462.   {$EXTERNALSYM D3DDEVCAPS_HWTRANSFORMANDLIGHT}
  463.   D3DDEVCAPS_CANBLTSYSTONONLOCAL     = $00020000; (* Device supports a Tex Blt from system memory to non-local vidmem *)
  464.   {$EXTERNALSYM D3DDEVCAPS_CANBLTSYSTONONLOCAL}
  465.   D3DDEVCAPS_HWRASTERIZATION         = $00080000; (* Device has HW acceleration for rasterization *)
  466.   {$EXTERNALSYM D3DDEVCAPS_HWRASTERIZATION}
  467. (*
  468.  * These are the flags in the D3DDEVICEDESC7.dwVertexProcessingCaps field
  469.  *)
  470. (* device can do texgen *)
  471.   D3DVTXPCAPS_TEXGEN              = $00000001;
  472.   {$EXTERNALSYM D3DVTXPCAPS_TEXGEN}
  473. (* device can do IDirect3DDevice7 colormaterialsource ops *)
  474.   D3DVTXPCAPS_MATERIALSOURCE7     = $00000002;
  475.   {$EXTERNALSYM D3DVTXPCAPS_MATERIALSOURCE7}
  476. (* device can do vertex fog *)
  477.   D3DVTXPCAPS_VERTEXFOG           = $00000004;
  478.   {$EXTERNALSYM D3DVTXPCAPS_VERTEXFOG}
  479. (* device can do directional lights *)
  480.   D3DVTXPCAPS_DIRECTIONALLIGHTS   = $00000008;
  481.   {$EXTERNALSYM D3DVTXPCAPS_DIRECTIONALLIGHTS}
  482. (* device can do positional lights (includes point and spot) *)
  483.   D3DVTXPCAPS_POSITIONALLIGHTS    = $00000010;
  484.   {$EXTERNALSYM D3DVTXPCAPS_POSITIONALLIGHTS}
  485. (* device can do local viewer *)
  486.   D3DVTXPCAPS_LOCALVIEWER         = $00000020;
  487.   {$EXTERNALSYM D3DVTXPCAPS_LOCALVIEWER}
  488. {$ENDIF} // DIRECT3D_VERSION_7
  489.   D3DFDS_COLORMODEL        = $00000001; (* Match color model *)
  490.   {$EXTERNALSYM D3DFDS_COLORMODEL}
  491.   D3DFDS_GUID              = $00000002; (* Match guid *)
  492.   {$EXTERNALSYM D3DFDS_GUID}
  493.   D3DFDS_HARDWARE          = $00000004; (* Match hardware/software *)
  494.   {$EXTERNALSYM D3DFDS_HARDWARE}
  495.   D3DFDS_TRIANGLES         = $00000008; (* Match in triCaps *)
  496.   {$EXTERNALSYM D3DFDS_TRIANGLES}
  497.   D3DFDS_LINES             = $00000010; (* Match in lineCaps  *)
  498.   {$EXTERNALSYM D3DFDS_LINES}
  499.   D3DFDS_MISCCAPS          = $00000020; (* Match primCaps.dwMiscCaps *)
  500.   {$EXTERNALSYM D3DFDS_MISCCAPS}
  501.   D3DFDS_RASTERCAPS        = $00000040; (* Match primCaps.dwRasterCaps *)
  502.   {$EXTERNALSYM D3DFDS_RASTERCAPS}
  503.   D3DFDS_ZCMPCAPS          = $00000080; (* Match primCaps.dwZCmpCaps *)
  504.   {$EXTERNALSYM D3DFDS_ZCMPCAPS}
  505.   D3DFDS_ALPHACMPCAPS      = $00000100; (* Match primCaps.dwAlphaCmpCaps *)
  506.   {$EXTERNALSYM D3DFDS_ALPHACMPCAPS}
  507.   D3DFDS_SRCBLENDCAPS      = $00000200; (* Match primCaps.dwSourceBlendCaps *)
  508.   {$EXTERNALSYM D3DFDS_SRCBLENDCAPS}
  509.   D3DFDS_DSTBLENDCAPS      = $00000400; (* Match primCaps.dwDestBlendCaps *)
  510.   {$EXTERNALSYM D3DFDS_DSTBLENDCAPS}
  511.   D3DFDS_SHADECAPS         = $00000800; (* Match primCaps.dwShadeCaps *)
  512.   {$EXTERNALSYM D3DFDS_SHADECAPS}
  513.   D3DFDS_TEXTURECAPS       = $00001000; (* Match primCaps.dwTextureCaps *)
  514.   {$EXTERNALSYM D3DFDS_TEXTURECAPS}
  515.   D3DFDS_TEXTUREFILTERCAPS = $00002000; (* Match primCaps.dwTextureFilterCaps *)
  516.   {$EXTERNALSYM D3DFDS_TEXTUREFILTERCAPS}
  517.   D3DFDS_TEXTUREBLENDCAPS  = $00004000; (* Match primCaps.dwTextureBlendCaps *)
  518.   {$EXTERNALSYM D3DFDS_TEXTUREBLENDCAPS}
  519.   D3DFDS_TEXTUREADDRESSCAPS  = $00008000; (* Match primCaps.dwTextureBlendCaps *)
  520.   {$EXTERNALSYM D3DFDS_TEXTUREADDRESSCAPS}
  521. (*
  522.  * FindDevice arguments
  523.  *)
  524. type
  525.   PD3DFindDeviceSearch = ^TD3DFindDeviceSearch;
  526.   _D3DFINDDEVICESEARCH = packed record
  527.     dwSize: DWORD;
  528.     dwFlags: DWORD;
  529.     bHardware: BOOL;
  530.     dcmColorModel: TD3DColorModel;
  531.     guid: TGUID;
  532.     dwCaps: DWORD;
  533.     dpcPrimCaps: TD3DPrimCaps;
  534.   end;
  535.   {$EXTERNALSYM _D3DFINDDEVICESEARCH}
  536.   D3DFINDDEVICESEARCH = _D3DFINDDEVICESEARCH;
  537.   {$EXTERNALSYM D3DFINDDEVICESEARCH}
  538.   TD3DFindDeviceSearch = _D3DFINDDEVICESEARCH;
  539.   PD3DFindDeviceResult = ^TD3DFindDeviceResult;
  540.   _D3DFINDDEVICERESULT = packed record
  541.     dwSize: DWORD;
  542.     guid: TGUID;                (* guid which matched *)
  543.     ddHwDesc: TD3DDeviceDesc;   (* hardware TD3DDeviceDesc *)
  544.     ddSwDesc: TD3DDeviceDesc;   (* software TD3DDeviceDesc *)
  545.   end;
  546.   {$EXTERNALSYM _D3DFINDDEVICERESULT}
  547.   D3DFINDDEVICERESULT = _D3DFINDDEVICERESULT;
  548.   {$EXTERNALSYM D3DFINDDEVICERESULT}
  549.   TD3DFindDeviceResult = _D3DFINDDEVICERESULT;
  550. (*
  551.  * Description of execute buffer.
  552.  *)
  553.   PD3DExecuteBufferDesc = ^TD3DExecuteBufferDesc;
  554.   _D3DExecuteBufferDesc = packed record
  555.     dwSize: DWORD;         (* size of this structure *)
  556.     dwFlags: DWORD;        (* flags indicating which fields are valid *)
  557.     dwCaps: DWORD;         (* capabilities of execute buffer *)
  558.     dwBufferSize: DWORD;   (* size of execute buffer data *)
  559.     lpData: Pointer;       (* pointer to actual data *)
  560.   end;
  561.   {$EXTERNALSYM _D3DExecuteBufferDesc}
  562.   D3DExecuteBufferDesc = _D3DExecuteBufferDesc;
  563.   {$EXTERNALSYM D3DExecuteBufferDesc}
  564.   TD3DExecuteBufferDesc = _D3DExecuteBufferDesc;
  565. (* D3DEXECUTEBUFFER dwFlags indicating valid fields *)
  566. const
  567.   D3DDEB_BUFSIZE          = $00000001;     (* buffer size valid *)
  568.   {$EXTERNALSYM D3DDEB_BUFSIZE}
  569.   D3DDEB_CAPS             = $00000002;     (* caps valid *)
  570.   {$EXTERNALSYM D3DDEB_CAPS}
  571.   D3DDEB_LPDATA           = $00000004;     (* lpData valid *)
  572.   {$EXTERNALSYM D3DDEB_LPDATA}
  573. (* D3DEXECUTEBUFFER dwCaps *)
  574.   D3DDEBCAPS_SYSTEMMEMORY = $00000001;     (* buffer in system memory *)
  575.   {$EXTERNALSYM D3DDEBCAPS_SYSTEMMEMORY}
  576.   D3DDEBCAPS_VIDEOMEMORY  = $00000002;     (* buffer in device memory *)
  577.   {$EXTERNALSYM D3DDEBCAPS_VIDEOMEMORY}
  578.   D3DDEBCAPS_MEM          = (D3DDEBCAPS_SYSTEMMEMORY or D3DDEBCAPS_VIDEOMEMORY);
  579.   {$EXTERNALSYM D3DDEBCAPS_MEM}
  580. {$IFDEF DIRECT3D_VERSION_LESS_8}
  581. {$IFDEF DIRECT3D_VERSION_7}
  582. type
  583.   PD3DDevInfo_TextureManager = ^TD3DDevInfo_TextureManager;
  584.   _D3DDEVINFO_TEXTUREMANAGER = packed record
  585.     bThrashing:              BOOL;       (* indicates if thrashing *)
  586.     dwApproxBytesDownloaded: DWORD;      (* Approximate number of bytes downloaded by texture manager *)
  587.     dwNumEvicts:             DWORD;      (* number of textures evicted *)
  588.     dwNumVidCreates:         DWORD;      (* number of textures created in video memory *)
  589.     dwNumTexturesUsed:       DWORD;      (* number of textures used *)
  590.     dwNumUsedTexInVid:       DWORD;      (* number of used textures present in video memory *)
  591.     dwWorkingSet:            DWORD;      (* number of textures in video memory *)
  592.     dwWorkingSetBytes:       DWORD;      (* number of bytes in video memory *)
  593.     dwTotalManaged:          DWORD;      (* total number of managed textures *)
  594.     dwTotalBytes:            DWORD;      (* total number of bytes of managed textures *)
  595.     dwLastPri:               DWORD;      (* priority of last texture evicted *)
  596.   end;
  597.   {$EXTERNALSYM _D3DDEVINFO_TEXTUREMANAGER}
  598.   D3DDEVINFO_TEXTUREMANAGER = _D3DDEVINFO_TEXTUREMANAGER;
  599.   {$EXTERNALSYM D3DDEVINFO_TEXTUREMANAGER}
  600.   TD3DDevInfo_TextureManager = _D3DDEVINFO_TEXTUREMANAGER;
  601.   PD3DDevInfoTextureManager = PD3DDevInfo_TextureManager;
  602.   TD3DDevInfoTextureManager = _D3DDEVINFO_TEXTUREMANAGER;
  603.   PD3DDevInfo_Texturing = ^TD3DDevInfo_Texturing;
  604.   _D3DDEVINFO_TEXTURING = packed record
  605.     dwNumLoads:          DWORD;          (* counts Load() API calls *)
  606.     dwApproxBytesLoaded: DWORD;          (* Approximate number bytes loaded via Load() *)
  607.     dwNumPreLoads:       DWORD;          (* counts PreLoad() API calls *)
  608.     dwNumSet:            DWORD;          (* counts SetTexture() API calls *)
  609.     dwNumCreates:        DWORD;          (* counts texture creates *)
  610.     dwNumDestroys:       DWORD;          (* counts texture destroys *)
  611.     dwNumSetPriorities:  DWORD;          (* counts SetPriority() API calls *)
  612.     dwNumSetLODs:        DWORD;          (* counts SetLOD() API calls *)
  613.     dwNumLocks:          DWORD;          (* counts number of texture locks *)
  614.     dwNumGetDCs:         DWORD;          (* counts number of GetDCs to textures *)
  615.   end;
  616.   {$EXTERNALSYM _D3DDEVINFO_TEXTURING}
  617.   D3DDEVINFO_TEXTURING = _D3DDEVINFO_TEXTURING;
  618.   {$EXTERNALSYM D3DDEVINFO_TEXTURING}
  619.   TD3DDevInfo_Texturing = _D3DDEVINFO_TEXTURING;
  620.   PD3DDevInfoTexturing = PD3DDevInfo_Texturing;
  621.   TD3DDevInfoTexturing = TD3DDevInfo_Texturing;
  622. {$ENDIF} // DIRECT3D_VERSION_7
  623. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  624. (*==========================================================================;
  625.  *
  626.  *
  627.  *  File:   d3d.h
  628.  *  Content:    Direct3D include file
  629.  *
  630.  ****************************************************************************)
  631. // include this file content only if compiling for <=DX7 interfaces
  632. {$IFDEF DIRECT3D_VERSION_LESS_8}
  633. function D3DErrorString(Value: HResult): String;
  634. {$IFDEF DIRECT3D_VERSION_5}
  635. const
  636.   IID_IDirect3DRampDevice: TGUID =
  637.       (D1:$F2086B20;D2:$259F;D3:$11CF;D4:($A3,$1A,$00,$AA,$00,$B9,$33,$56));
  638.   {$EXTERNALSYM IID_IDirect3DRampDevice}
  639.   IID_IDirect3DRGBDevice: TGUID =
  640.       (D1:$A4665C60;D2:$2673;D3:$11CF;D4:($A3,$1A,$00,$AA,$00,$B9,$33,$56));
  641.   {$EXTERNALSYM IID_IDirect3DRGBDevice}
  642.   IID_IDirect3DHALDevice: TGUID =
  643.       (D1:$84E63dE0;D2:$46AA;D3:$11CF;D4:($81,$6F,$00,$00,$C0,$20,$15,$6E));
  644.   {$EXTERNALSYM IID_IDirect3DHALDevice}
  645.   IID_IDirect3DMMXDevice: TGUID =
  646.       (D1:$881949a1;D2:$d6f3;D3:$11d0;D4:($89,$ab,$00,$a0,$c9,$05,$41,$29));
  647.   {$EXTERNALSYM IID_IDirect3DMMXDevice}
  648. {$ENDIF} // DIRECT3D_VERSION_5
  649. {$IFDEF DIRECT3D_VERSION_6}
  650.   IID_IDirect3DRefDevice: TGUID =
  651.       (D1:$50936643;D2:$13e9;D3:$11d1;D4:($89,$aa,$00,$a0,$c9,$05,$41,$29));
  652.   {$EXTERNALSYM IID_IDirect3DRefDevice}
  653.   IID_IDirect3DNullDevice: TGUID =
  654.       (D1:$8767df22;D2:$bacc;D3:$11d1;D4:($89,$69,$00,$a0,$c9,$06,$29,$a8));
  655.   {$EXTERNALSYM IID_IDirect3DNullDevice}
  656. {$ENDIF} // DIRECT3D_VERSION_6
  657. {$IFDEF DIRECT3D_VERSION_7}
  658.   IID_IDirect3DTnLHalDevice: TGUID = '{f5049e78-4861-11d2-a407-00a0c90629a8}';
  659.   {$EXTERNALSYM IID_IDirect3DTnLHalDevice}
  660. {$ENDIF} // DIRECT3D_VERSION_7
  661. type
  662.   IDirect3D = interface;
  663.   {$EXTERNALSYM IDirect3D}
  664.   {$IFDEF DIRECT3D_VERSION_5}
  665.   IDirect3D2 = interface;
  666.   {$ENDIF} // DIRECT3D_VERSION_5
  667.   {$IFDEF DIRECT3D_VERSION_6}
  668.   IDirect3D3 = interface;
  669.   {$ENDIF} // DIRECT3D_VERSION_5
  670.   {$IFDEF DIRECT3D_VERSION_7}
  671.   IDirect3D7 = interface;
  672.   {$ENDIF} // DIRECT3D_VERSION_5
  673.   IDirect3DDevice = interface;
  674.   {$IFDEF DIRECT3D_VERSION_5}
  675.   IDirect3DDevice2 = interface;
  676.   {$ENDIF} // DIRECT3D_VERSION_5
  677.   {$IFDEF DIRECT3D_VERSION_6}
  678.   IDirect3DDevice3 = interface;
  679.   {$ENDIF} // DIRECT3D_VERSION_6
  680.   {$IFDEF DIRECT3D_VERSION_7}
  681.   IDirect3DDevice7 = interface;
  682.   {$ENDIF} // DIRECT3D_VERSION_7
  683.   IDirect3DExecuteBuffer = interface;
  684.   IDirect3DLight = interface;
  685.   IDirect3DMaterial = interface;
  686.   {$IFDEF DIRECT3D_VERSION_5}
  687.   IDirect3DMaterial2 = interface;
  688.   {$ENDIF} // DIRECT3D_VERSION_5
  689.   {$IFDEF DIRECT3D_VERSION_6}
  690.   IDirect3DMaterial3 = interface;
  691.   {$ENDIF} // DIRECT3D_VERSION_6
  692.   IDirect3DTexture = interface;
  693.   {$IFDEF DIRECT3D_VERSION_5}
  694.   IDirect3DTexture2 = interface;
  695.   {$ENDIF} // DIRECT3D_VERSION_5
  696.   IDirect3DViewport = interface;
  697.   {$IFDEF DIRECT3D_VERSION_5}
  698.   IDirect3DViewport2 = interface;
  699.   {$ENDIF} // DIRECT3D_VERSION_5
  700.   {$IFDEF DIRECT3D_VERSION_6}
  701.   IDirect3DViewport3 = interface;
  702.   IDirect3DVertexBuffer = interface;
  703.   {$ENDIF} // DIRECT3D_VERSION_6
  704.   {$IFDEF DIRECT3D_VERSION_7}
  705.   IDirect3DVertexBuffer7 = interface;
  706.   {$ENDIF} // DIRECT3D_VERSION_7
  707. (*
  708.  * Interface IID's
  709.  *)
  710.   IID_IDirect3D = IDirect3D;
  711.   {$EXTERNALSYM IID_IDirect3D}
  712.   {$IFDEF DIRECT3D_VERSION_5}
  713.   IID_IDirect3D2 = IDirect3D2;
  714.   {$EXTERNALSYM IID_IDirect3D2}
  715.   {$ENDIF} // DIRECT3D_VERSION_5
  716.   {$IFDEF DIRECT3D_VERSION_6}
  717.   IID_IDirect3D3 = IDirect3D3;
  718.   {$EXTERNALSYM IID_IDirect3D3}
  719.   {$ENDIF} // DIRECT3D_VERSION_6
  720.   {$IFDEF DIRECT3D_VERSION_7}
  721.   IID_IDirect3D7 = IDirect3D7;
  722.   {$EXTERNALSYM IID_IDirect3D7}
  723.   {$ENDIF} // DIRECT3D_VERSION_7
  724. (*
  725.  * Internal Guid to distinguish requested MMX from MMX being used as an RGB rasterizer
  726.  *)
  727.   IID_IDirect3DDevice = IDirect3DDevice;
  728.   {$EXTERNALSYM IID_IDirect3DDevice}
  729.   {$IFDEF DIRECT3D_VERSION_5}
  730.   IID_IDirect3DDevice2 = IDirect3DDevice2;
  731.   {$EXTERNALSYM IID_IDirect3DDevice2}
  732.   {$ENDIF}
  733.   {$IFDEF DIRECT3D_VERSION_6}
  734.   IID_IDirect3DDevice3 = IDirect3DDevice3;
  735.   {$EXTERNALSYM IID_IDirect3DDevice3}
  736.   {$ENDIF}
  737.   {$IFDEF DIRECT3D_VERSION_7}
  738.   IID_IDirect3DDevice7 = IDirect3DDevice7;
  739.   {$EXTERNALSYM IID_IDirect3DDevice7}
  740.   {$ENDIF}
  741.   IID_IDirect3DTexture = IDirect3DTexture;
  742.   {$EXTERNALSYM IID_IDirect3DTexture}
  743.   {$IFDEF DIRECT3D_VERSION_5}
  744.   IID_IDirect3DTexture2 = IDirect3DTexture2;
  745.   {$EXTERNALSYM IID_IDirect3DTexture2}
  746.   {$ENDIF}
  747.   IID_IDirect3DLight = IDirect3DLight;
  748.   {$EXTERNALSYM IID_IDirect3DLight}
  749.   IID_IDirect3DMaterial = IDirect3DMaterial;
  750.   {$EXTERNALSYM IID_IDirect3DMaterial}
  751.   {$IFDEF DIRECT3D_VERSION_5}
  752.   IID_IDirect3DMaterial2 = IDirect3DMaterial2;
  753.   {$EXTERNALSYM IID_IDirect3DMaterial2}
  754.   {$ENDIF}
  755.   {$IFDEF DIRECT3D_VERSION_6}
  756.   IID_IDirect3DMaterial3 = IDirect3DMaterial3;
  757.   {$EXTERNALSYM IID_IDirect3DMaterial3}
  758.   {$ENDIF}
  759.   IID_IDirect3DExecuteBuffer = IDirect3DExecuteBuffer;
  760.   {$EXTERNALSYM IID_IDirect3DExecuteBuffer}
  761.   IID_IDirect3DViewport = IDirect3DViewport;
  762.   {$EXTERNALSYM IID_IDirect3DViewport}
  763.   {$IFDEF DIRECT3D_VERSION_5}
  764.   IID_IDirect3DViewport2 = IDirect3DViewport2;
  765.   {$EXTERNALSYM IID_IDirect3DViewport2}
  766.   {$ENDIF}
  767.   {$IFDEF DIRECT3D_VERSION_6}
  768.   IID_IDirect3DViewport3 = IDirect3DViewport3;
  769.   {$EXTERNALSYM IID_IDirect3DViewport3}
  770.   {$ENDIF}
  771.   {$IFDEF DIRECT3D_VERSION_6}
  772.   IID_IDirect3DVertexBuffer = IDirect3DVertexBuffer;
  773.   {$EXTERNALSYM IID_IDirect3DVertexBuffer}
  774.   {$ENDIF}
  775.   {$IFDEF DIRECT3D_VERSION_7}
  776.   IID_IDirect3DVertexBuffer7 = IDirect3DVertexBuffer7;
  777.   {$EXTERNALSYM IID_IDirect3DVertexBuffer7}
  778.   {$ENDIF}
  779. (*
  780.  * Direct3D interfaces
  781.  *)
  782.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3D);'}
  783.   IDirect3D = interface(IUnknown)
  784.     ['{3BBA0080-2421-11CF-A31A-00AA00B93356}']
  785.     (*** IDirect3D methods ***)
  786.     function Initialize(lpREFIID: {REFIID} PGUID): HResult; stdcall;
  787.     function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback;
  788.         lpUserArg: Pointer): HResult; stdcall;
  789.     function CreateLight(var lplpDirect3Dlight: IDirect3DLight;
  790.         pUnkOuter: IUnknown): HResult; stdcall;
  791.     function CreateMaterial(var lplpDirect3DMaterial: IDirect3DMaterial;
  792.         pUnkOuter: IUnknown): HResult; stdcall;
  793.     function CreateViewport(var lplpD3DViewport: IDirect3DViewport;
  794.         pUnkOuter: IUnknown): HResult; stdcall;
  795.     function FindDevice(var lpD3DFDS: TD3DFindDeviceSearch;
  796.         var lpD3DFDR: TD3DFindDeviceResult): HResult; stdcall;
  797.   end;
  798. {$IFDEF DIRECT3D_VERSION_5}
  799.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3D2);'}
  800.   {$EXTERNALSYM IDirect3D2}
  801.   IDirect3D2 = interface(IUnknown)
  802.     ['{6aae1ec1-662a-11d0-889d-00aa00bbb76a}']
  803.     (*** IDirect3D2 methods ***)
  804.     function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback;
  805.         lpUserArg: Pointer): HResult; stdcall;
  806.     function CreateLight(var lplpDirect3Dlight: IDirect3DLight;
  807.         pUnkOuter: IUnknown): HResult; stdcall;
  808.     function CreateMaterial(var lplpDirect3DMaterial2: IDirect3DMaterial2;
  809.         pUnkOuter: IUnknown): HResult; stdcall;
  810.     function CreateViewport(var lplpD3DViewport2: IDirect3DViewport2;
  811.         pUnkOuter: IUnknown): HResult; stdcall;
  812.     function FindDevice(var lpD3DFDS: TD3DFindDeviceSearch;
  813.         var lpD3DFDR: TD3DFindDeviceResult): HResult; stdcall;
  814.     function CreateDevice(const rclsid: TRefClsID; lpDDS: IDirectDrawSurface;
  815.         out lplpD3DDevice2: IDirect3DDevice2): HResult; stdcall;
  816.   end;
  817. {$ENDIF} // DIRECT3D_VERSION_5
  818. {$IFDEF DIRECT3D_VERSION_6}
  819.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3D3);'}
  820.   {$EXTERNALSYM IDirect3D3}
  821.   IDirect3D3 = interface(IUnknown)
  822.     ['{bb223240-e72b-11d0-a9b4-00aa00c0993e}']
  823.     (*** IDirect3D3 methods ***)
  824.     function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback;
  825.         lpUserArg: pointer): HResult; stdcall;
  826.     function CreateLight(var lplpDirect3Dlight: IDirect3DLight;
  827.         pUnkOuter: IUnknown): HResult; stdcall;
  828.     function CreateMaterial(var lplpDirect3DMaterial3: IDirect3DMaterial3;
  829.         pUnkOuter: IUnknown): HResult; stdcall;
  830.     function CreateViewport(var lplpD3DViewport3: IDirect3DViewport3;
  831.         pUnkOuter: IUnknown): HResult; stdcall;
  832.     function FindDevice(var lpD3DFDS: TD3DFindDeviceSearch;
  833.         var lpD3DFDR: TD3DFindDeviceResult): HResult; stdcall;
  834.     function CreateDevice(const rclsid: TRefClsID; lpDDS: IDirectDrawSurface4;
  835.         out lplpD3DDevice: IDirect3DDevice3; pUnkOuter: IUnknown): HResult; stdcall;
  836.     function CreateVertexBuffer(var lpVBDesc: TD3DVertexBufferDesc;
  837.         var lpD3DVertexBuffer: IDirect3DVertexBuffer;
  838.         dwFlags: DWORD; pUnkOuter: IUnknown): HResult; stdcall;
  839.     function EnumZBufferFormats(const riidDevice: TRefClsID; lpEnumCallback:
  840.         TD3DEnumPixelFormatsCallback; lpContext: Pointer): HResult; stdcall;
  841.     function EvictManagedTextures : HResult; stdcall;
  842.   end;
  843. {$ENDIF} // DIRECT3D_VERSION_6
  844. {$IFDEF DIRECT3D_VERSION_7}
  845.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3D7);'}
  846.   {$EXTERNALSYM IDirect3D7}
  847.   IDirect3D7 = interface(IUnknown)
  848.     ['{f5049e77-4861-11d2-a407-00a0c90629a8}']
  849.     (*** IDirect3D7 methods ***)
  850.     function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback7;
  851.         lpUserArg: pointer): HResult; stdcall;
  852.     function CreateDevice(const rclsid: TGUID; lpDDS: IDirectDrawSurface7;
  853.         out lplpD3DDevice: IDirect3DDevice7): HResult; stdcall;
  854.     function CreateVertexBuffer(const lpVBDesc: TD3DVertexBufferDesc;
  855.         out lplpD3DVertexBuffer: IDirect3DVertexBuffer7;
  856.         dwFlags: DWORD): HResult; stdcall;
  857.     function EnumZBufferFormats(const riidDevice: TGUID; lpEnumCallback:
  858.         TD3DEnumPixelFormatsCallback; lpContext: pointer): HResult; stdcall;
  859.     function EvictManagedTextures : HResult; stdcall;
  860.   end;
  861. {$ENDIF} // DIRECT3D_VERSION_7
  862. (*
  863.  * Direct3D Device interfaces
  864.  *)
  865.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DDevice);'}
  866.   {$EXTERNALSYM IDirect3DDevice}
  867.   IDirect3DDevice = interface(IUnknown)
  868.     ['{64108800-957d-11d0-89ab-00a0c9054129}']
  869.     (*** IDirect3DDevice methods ***)
  870.     function Initialize(lpd3d: IDirect3D; lpGUID: PGUID;
  871.         var lpd3ddvdesc: TD3DDeviceDesc): HResult; stdcall;
  872.     function GetCaps(var lpD3DHWDevDesc: TD3DDeviceDesc;
  873.         var lpD3DHELDevDesc: TD3DDeviceDesc): HResult; stdcall;
  874.     function SwapTextureHandles(lpD3DTex1: IDirect3DTexture;
  875.         lpD3DTex2: IDirect3DTexture): HResult; stdcall;
  876.     function CreateExecuteBuffer(var lpDesc: TD3DExecuteBufferDesc ;
  877.         var lplpDirect3DExecuteBuffer: IDirect3DExecuteBuffer;
  878.         pUnkOuter: IUnknown): HResult; stdcall;
  879.     function GetStats(var lpD3DStats: TD3DStats): HResult; stdcall;
  880.     function Execute(lpDirect3DExecuteBuffer: IDirect3DExecuteBuffer;
  881.         lpDirect3DViewport: IDirect3DViewport; dwFlags: DWORD): HResult; stdcall;
  882.     function AddViewport(lpDirect3DViewport: IDirect3DViewport): HResult; stdcall;
  883.     function DeleteViewport(lpDirect3DViewport: IDirect3DViewport): HResult; stdcall;
  884.     function NextViewport(lpDirect3DViewport: IDirect3DViewport;
  885.         var lplpDirect3DViewport: IDirect3DViewport; dwFlags: DWORD): HResult; stdcall;
  886.     function Pick(lpDirect3DExecuteBuffer: IDirect3DExecuteBuffer;
  887.         lpDirect3DViewport: IDirect3DViewport; dwFlags: DWORD;
  888.         var lpRect: TD3DRect): HResult; stdcall;
  889.     function GetPickRecords(var lpCount: DWORD;
  890.         var lpD3DPickRec: TD3DPickRecord): HResult; stdcall;
  891.     function EnumTextureFormats(lpd3dEnumTextureProc:
  892.         TD3DEnumTextureFormatsCallback; lpArg: Pointer):
  893.         HResult; stdcall;
  894.     function CreateMatrix(var lpD3DMatHandle: TD3DMatrixHandle): HResult; stdcall;
  895.     function SetMatrix(d3dMatHandle: TD3DMatrixHandle;
  896.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  897.     function GetMatrix(var lpD3DMatHandle: TD3DMatrixHandle;
  898.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  899.     function DeleteMatrix(d3dMatHandle: TD3DMatrixHandle): HResult; stdcall;
  900.     function BeginScene: HResult; stdcall;
  901.     function EndScene: HResult; stdcall;
  902.     function GetDirect3D(var lpD3D: IDirect3D): HResult; stdcall;
  903.   end;
  904. {$IFDEF DIRECT3D_VERSION_5}
  905.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DDevice2);'}
  906.   {$EXTERNALSYM IDirect3DDevice2}
  907.   IDirect3DDevice2 = interface(IUnknown)
  908.     ['{93281501-8cf8-11d0-89ab-00a0c9054129}']
  909.     (*** IDirect3DDevice2 methods ***)
  910.     function GetCaps(var lpD3DHWDevDesc: TD3DDeviceDesc;
  911.         var lpD3DHELDevDesc: TD3DDeviceDesc): HResult; stdcall;
  912.     function SwapTextureHandles(lpD3DTex1: IDirect3DTexture2;
  913.         lpD3DTex2: IDirect3DTexture2): HResult; stdcall;
  914.     function GetStats(var lpD3DStats: TD3DStats): HResult; stdcall;
  915.     function AddViewport(lpDirect3DViewport2: IDirect3DViewport2): HResult; stdcall;
  916.     function DeleteViewport(lpDirect3DViewport: IDirect3DViewport2): HResult; stdcall;
  917.     function NextViewport(lpDirect3DViewport: IDirect3DViewport2;
  918.         var lplpDirect3DViewport: IDirect3DViewport2; dwFlags: DWORD):
  919.         HResult; stdcall;
  920.     function EnumTextureFormats(
  921.         lpd3dEnumTextureProc: TD3DEnumTextureFormatsCallback; lpArg: Pointer):
  922.         HResult; stdcall;
  923.     function BeginScene: HResult; stdcall;
  924.     function EndScene: HResult; stdcall;
  925.     function GetDirect3D(var lpD3D: IDirect3D2): HResult; stdcall;
  926.     (*** DrawPrimitive API ***)
  927.     function SetCurrentViewport(lpd3dViewport2: IDirect3DViewport2)
  928.         : HResult; stdcall;
  929.     function GetCurrentViewport(var lplpd3dViewport2: IDirect3DViewport2)
  930.         : HResult; stdcall;
  931.     function SetRenderTarget(lpNewRenderTarget: IDirectDrawSurface)
  932.         : HResult; stdcall;
  933.     function GetRenderTarget(var lplpNewRenderTarget: IDirectDrawSurface)
  934.         : HResult; stdcall;
  935.     function Begin_(d3dpt: TD3DPrimitiveType; d3dvt: TD3DVertexType;
  936.         dwFlags: DWORD): HResult; stdcall;
  937.     function BeginIndexed(dptPrimitiveType: TD3DPrimitiveType; dvtVertexType:
  938.         TD3DVertexType; lpvVertices: pointer; dwNumVertices: DWORD;
  939.         dwFlags: DWORD): HResult; stdcall;
  940.     function Vertex(lpVertexType: pointer): HResult;  stdcall;
  941.     function Index(wVertexIndex: WORD): HResult;  stdcall;
  942.     function End_(dwFlags: DWORD): HResult; stdcall;
  943.     function GetRenderState(dwRenderStateType: TD3DRenderStateType;
  944.         var lpdwRenderState): HResult; stdcall;
  945.     function SetRenderState(dwRenderStateType: TD3DRenderStateType;
  946.         dwRenderState: DWORD): HResult; stdcall;
  947.     function GetLightState(dwLightStateType: TD3DLightStateType;
  948.         var lpdwLightState): HResult; stdcall;
  949.     function SetLightState(dwLightStateType: TD3DLightStateType;
  950.         dwLightState: DWORD): HResult; stdcall;
  951.     function SetTransform(dtstTransformStateType: TD3DTransformStateType;
  952.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  953.     function GetTransform(dtstTransformStateType: TD3DTransformStateType;
  954.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  955.     function MultiplyTransform(dtstTransformStateType: TD3DTransformStateType;
  956.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  957.     function DrawPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  958.         dvtVertexType: TD3DVertexType; var lpvVertices; dwVertexCount,
  959.         dwFlags: DWORD): HResult; stdcall;
  960.     function DrawIndexedPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  961.         dwVertexTypeDesc: DWORD; lpvVertices: pointer; dwVertexCount: DWORD;
  962.         var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  963.     function SetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  964.     function GetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  965.   end;
  966. {$ENDIF} // DIRECT3D_VERSION_5
  967. {$IFDEF DIRECT3D_VERSION_6}
  968.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DDevice3);'}
  969.   {$EXTERNALSYM IDirect3DDevice3}
  970.   IDirect3DDevice3 = interface(IUnknown)
  971.     ['{b0ab3b60-33d7-11d1-a981-00c04fd7b174}']
  972.     (*** IDirect3DDevice2 methods ***)
  973.     function GetCaps(var lpD3DHWDevDesc: TD3DDeviceDesc;
  974.         var lpD3DHELDevDesc: TD3DDeviceDesc): HResult; stdcall;
  975.     function GetStats(var lpD3DStats: TD3DStats): HResult; stdcall;
  976.     function AddViewport(lpDirect3DViewport: IDirect3DViewport3): HResult; stdcall;
  977.     function DeleteViewport(lpDirect3DViewport: IDirect3DViewport3): HResult; stdcall;
  978.     function NextViewport(lpDirect3DViewport: IDirect3DViewport3;
  979.         var lplpAnotherViewport: IDirect3DViewport3; dwFlags: DWORD): HResult; stdcall;
  980.     function EnumTextureFormats(
  981.         lpd3dEnumPixelProc: TD3DEnumPixelFormatsCallback; lpArg: Pointer):
  982.         HResult; stdcall;
  983.     function BeginScene: HResult; stdcall;
  984.     function EndScene: HResult; stdcall;
  985.     function GetDirect3D(var lpD3D: IDirect3D3): HResult; stdcall;
  986.     function SetCurrentViewport(lpd3dViewport: IDirect3DViewport3)
  987.         : HResult; stdcall;
  988.     function GetCurrentViewport(var lplpd3dViewport: IDirect3DViewport3)
  989.         : HResult; stdcall;
  990.     function SetRenderTarget(lpNewRenderTarget: IDirectDrawSurface4)
  991.         : HResult; stdcall;
  992.     function GetRenderTarget(var lplpNewRenderTarget: IDirectDrawSurface4)
  993.         : HResult; stdcall;
  994.     function Begin_(d3dpt: TD3DPrimitiveType; dwVertexTypeDesc: DWORD;
  995.         dwFlags: DWORD): HResult; stdcall;
  996.     function BeginIndexed(dptPrimitiveType: TD3DPrimitiveType;
  997.         dwVertexTypeDesc: DWORD; lpvVertices: pointer; dwNumVertices: DWORD;
  998.         dwFlags: DWORD): HResult; stdcall;
  999.     function Vertex(lpVertex: pointer): HResult;  stdcall;
  1000.     function Index(wVertexIndex: WORD): HResult;  stdcall;
  1001.     function End_(dwFlags: DWORD): HResult; stdcall;
  1002.     function GetRenderState(dwRenderStateType: TD3DRenderStateType;
  1003.         var lpdwRenderState): HResult; stdcall;
  1004.     function SetRenderState(dwRenderStateType: TD3DRenderStateType;
  1005.         dwRenderState: DWORD): HResult; stdcall;
  1006.     function GetLightState(dwLightStateType: TD3DLightStateType;
  1007.         var lpdwLightState): HResult; stdcall;
  1008.     function SetLightState(dwLightStateType: TD3DLightStateType;
  1009.         dwLightState: DWORD): HResult; stdcall;
  1010.     function SetTransform(dtstTransformStateType: TD3DTransformStateType;
  1011.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  1012.     function GetTransform(dtstTransformStateType: TD3DTransformStateType;
  1013.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  1014.     function MultiplyTransform(dtstTransformStateType: TD3DTransformStateType;
  1015.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  1016.     function DrawPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  1017.         dwVertexTypeDesc: DWORD; const lpvVertices;
  1018.         dwVertexCount, dwFlags: DWORD): HResult; stdcall;
  1019.     function DrawIndexedPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  1020.         dwVertexTypeDesc: DWORD; const lpvVertices; dwVertexCount: DWORD;
  1021.         var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  1022.     function SetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  1023.     function GetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  1024.     function DrawPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
  1025.         dwVertexTypeDesc : DWORD;
  1026.         var lpVertexArray: TD3DDrawPrimitiveStridedData;
  1027.         dwVertexCount, dwFlags: DWORD): HResult; stdcall;
  1028.     function DrawIndexedPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
  1029.         dwVertexTypeDesc : DWORD;
  1030.         var lpVertexArray: TD3DDrawPrimitiveStridedData; dwVertexCount: DWORD;
  1031.         var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  1032.     function DrawPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
  1033.         lpd3dVertexBuffer: IDirect3DVertexBuffer;
  1034.         dwStartVertex, dwNumVertices, dwFlags: DWORD): HResult; stdcall;
  1035.     function DrawIndexedPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
  1036.         lpd3dVertexBuffer: IDirect3DVertexBuffer; var lpwIndices: WORD;
  1037.         dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  1038.     function ComputeSphereVisibility(var lpCenters: TD3DVector;
  1039.         var lpRadii: TD3DValue; dwNumSpheres, dwFlags: DWORD;
  1040.         var lpdwReturnValues: DWORD): HResult; stdcall;
  1041.     function GetTexture(dwStage: DWORD; var lplpTexture: IDirect3DTexture2)
  1042.         : HResult; stdcall;
  1043.     function SetTexture(dwStage: DWORD; lplpTexture: IDirect3DTexture2)
  1044.         : HResult; stdcall;
  1045.     function GetTextureStageState(dwStage: DWORD;
  1046.         dwState: TD3DTextureStageStateType; var lpdwValue: DWORD): HResult; stdcall;
  1047.     function SetTextureStageState(dwStage: DWORD;
  1048.         dwState: TD3DTextureStageStateType; lpdwValue: DWORD): HResult; stdcall;
  1049.     function ValidateDevice(var lpdwExtraPasses: DWORD): HResult; stdcall;
  1050.   end;
  1051. {$ENDIF} // DIRECT3D_VERSION_6
  1052. {$IFDEF DIRECT3D_VERSION_7}
  1053.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DDevice7);'}
  1054.   {$EXTERNALSYM IDirect3DDevice7}
  1055.   IDirect3DDevice7 = interface(IUnknown)
  1056.     ['{f5049e79-4861-11d2-a407-00a0c90629a8}']
  1057.     (*** IDirect3DDevice7 methods ***)
  1058.     function GetCaps(out lpD3DDevDesc: TD3DDeviceDesc7): HResult; stdcall;
  1059.     function EnumTextureFormats(lpd3dEnumPixelProc: TD3DEnumPixelFormatsCallback; lpArg: Pointer): HResult; stdcall;
  1060.     function BeginScene: HResult; stdcall;
  1061.     function EndScene: HResult; stdcall;
  1062.     function GetDirect3D(out lpD3D: IDirect3D7): HResult; stdcall;
  1063.     function SetRenderTarget(lpNewRenderTarget: IDirectDrawSurface7; dwFlags: DWORD): HResult; stdcall;
  1064.     function GetRenderTarget(out lplpRenderTarget: IDirectDrawSurface7): HResult; stdcall;
  1065.     function Clear(dwCount: DWORD; lpRects: PD3DRect; dwFlags, dwColor: DWORD; dvZ: TD3DValue; dwStencil: DWORD): HResult; stdcall;
  1066.     function SetTransform(dtstTransformStateType: TD3DTransformStateType;
  1067.         const lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  1068.     function GetTransform(dtstTransformStateType: TD3DTransformStateType;
  1069.         out lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  1070.     function SetViewport(const lpViewport: TD3DViewport7): HResult; stdcall;
  1071.     function MultiplyTransform(dtstTransformStateType: TD3DTransformStateType;
  1072.         const lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  1073.     function GetViewport(out lpViewport: TD3DViewport7): HResult; stdcall;
  1074.     function SetMaterial(const lpMaterial: TD3DMaterial7): HResult; stdcall;
  1075.     function GetMaterial(out lpMaterial: TD3DMaterial7): HResult; stdcall;
  1076.     function SetLight(dwLightIndex: DWORD; const lpLight: TD3DLight7): HResult; stdcall;
  1077.     function GetLight(dwLightIndex: DWORD; out lpLight: TD3DLight7): HResult; stdcall;
  1078.     function SetRenderState(dwRenderStateType: TD3DRenderStateType; dwRenderState: DWORD): HResult; stdcall;
  1079.     function GetRenderState(dwRenderStateType: TD3DRenderStateType; out dwRenderState: DWORD): HResult; stdcall;
  1080.     function BeginStateBlock : HResult; stdcall;
  1081.     function EndStateBlock(out lpdwBlockHandle: DWORD): HResult; stdcall;
  1082.     function PreLoad(lpddsTexture: IDirectDrawSurface7): HResult; stdcall;
  1083.     function DrawPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  1084.         dwVertexTypeDesc: DWORD; const lpvVertices;
  1085.         dwVertexCount, dwFlags: DWORD): HResult; stdcall;
  1086.     function DrawIndexedPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  1087.         dwVertexTypeDesc: DWORD; const lpvVertices; dwVertexCount: DWORD;
  1088.         const lpwIndices; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  1089.     function SetClipStatus(const lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  1090.     function GetClipStatus(out lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  1091.     function DrawPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
  1092.         dwVertexTypeDesc : DWORD;
  1093.         const lpVertexArray: TD3DDrawPrimitiveStridedData;
  1094.         dwVertexCount, dwFlags: DWORD): HResult; stdcall;
  1095.     function DrawIndexedPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
  1096.         dwVertexTypeDesc : DWORD;
  1097.         const lpVertexArray: TD3DDrawPrimitiveStridedData; dwVertexCount: DWORD;
  1098.         var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  1099.     function DrawPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
  1100.         lpd3dVertexBuffer: IDirect3DVertexBuffer7;
  1101.         dwStartVertex, dwNumVertices, dwFlags: DWORD): HResult; stdcall;
  1102.     function DrawIndexedPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
  1103.         lpd3dVertexBuffer: IDirect3DVertexBuffer7; dwStartVertex, dwNumVertices: DWORD;
  1104.         var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  1105.     function ComputeSphereVisibility(const lpCenters: TD3DVector;
  1106.         var lpRadii: TD3DValue; dwNumSpheres, dwFlags: DWORD;
  1107.         var lpdwReturnValues: DWORD): HResult; stdcall;
  1108.     function GetTexture(dwStage: DWORD; out lplpTexture: IDirectDrawSurface7): HResult; stdcall;
  1109.     function SetTexture(dwStage: DWORD; lpTexture: IDirectDrawSurface7): HResult; stdcall;
  1110.     function GetTextureStageState(dwStage: DWORD;
  1111.         dwState: TD3DTextureStageStateType; out lpdwValue: DWORD): HResult; stdcall;
  1112.     function SetTextureStageState(dwStage: DWORD;
  1113.         dwState: TD3DTextureStageStateType; lpdwValue: DWORD): HResult; stdcall;
  1114.     function ValidateDevice(out lpdwExtraPasses: DWORD): HResult; stdcall;
  1115.     function ApplyStateBlock(dwBlockHandle: DWORD): HResult; stdcall;
  1116.     function CaptureStateBlock(dwBlockHandle: DWORD): HResult; stdcall;
  1117.     function DeleteStateBlock(dwBlockHandle: DWORD): HResult; stdcall;
  1118.     function CreateStateBlock(d3dsbType: TD3DStateBlockType; out lpdwBlockHandle: DWORD): HResult; stdcall;
  1119.     function Load(lpDestTex: IDirectDrawSurface7; lpDestPoint: PPoint;
  1120.         lpSrcTex: IDirectDrawSurface7; lprcSrcRect: PRect; dwFlags: DWORD): HResult; stdcall;
  1121.     function LightEnable(dwLightIndex: DWORD; bEnable: BOOL): HResult; stdcall;
  1122.     function GetLightEnable(dwLightIndex: DWORD; out bEnable: BOOL): HResult; stdcall;
  1123.     function SetClipPlane(dwIndex: DWORD; pPlaneEquation: PD3DValue): HResult; stdcall;
  1124.     function GetClipPlane(dwIndex: DWORD; pPlaneEquation: PD3DValue): HResult; stdcall;
  1125.     function GetInfo(dwDevInfoID: DWORD; pDevInfoStruct: Pointer; dwSize: DWORD): HResult; stdcall;
  1126.   end;
  1127. {$ENDIF} // DIRECT3D_VERSION_7
  1128. (*
  1129.  * Execute Buffer interface
  1130.  *)
  1131.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DExecuteBuffer);'}
  1132.   {$EXTERNALSYM IDirect3DExecuteBuffer}
  1133.   IDirect3DExecuteBuffer = interface(IUnknown)
  1134.     ['{4417C145-33AD-11CF-816F-0000C020156E}']
  1135.     (*** IDirect3DExecuteBuffer methods ***)
  1136.     function Initialize(lpDirect3DDevice: IDirect3DDevice;
  1137.         var lpDesc: TD3DExecuteBufferDesc): HResult; stdcall;
  1138.     function Lock(var lpDesc: TD3DExecuteBufferDesc): HResult; stdcall;
  1139.     function Unlock: HResult; stdcall;
  1140.     function SetExecuteData(var lpData: TD3DExecuteData): HResult; stdcall;
  1141.     function GetExecuteData(var lpData: TD3DExecuteData): HResult; stdcall;
  1142.     function Validate(var lpdwOffset: DWORD; lpFunc: TD3DValidateCallback;
  1143.         lpUserArg: Pointer; dwReserved: DWORD): HResult; stdcall;
  1144.     (*** Warning!  Optimize is defined differently in the header files
  1145.          and the online documentation ***)
  1146.     function Optimize(dwFlags: DWORD): HResult; stdcall;
  1147.   end;
  1148. (*
  1149.  * Light interfaces
  1150.  *)
  1151.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DLight);'}
  1152.   {$EXTERNALSYM IDirect3DLight}
  1153.   IDirect3DLight = interface(IUnknown)
  1154.     ['{4417C142-33AD-11CF-816F-0000C020156E}']
  1155.     (*** IDirect3DLight methods ***)
  1156.     function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
  1157.     function SetLight(var lpLight: TD3DLight2): HResult; stdcall;
  1158.     function GetLight(var lpLight: TD3DLight2): HResult; stdcall;
  1159.   end;
  1160. (*
  1161.  * Material interfaces
  1162.  *)
  1163.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DMaterial);'}
  1164.   {$EXTERNALSYM IDirect3DMaterial}
  1165.   IDirect3DMaterial = interface(IUnknown)
  1166.     ['{4417C144-33AD-11CF-816F-0000C020156E}']
  1167.     (*** IDirect3DMaterial methods ***)
  1168.     function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
  1169.     function SetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  1170.     function GetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  1171.     function GetHandle(lpDirect3DDevice: IDirect3DDevice;
  1172.         var lpHandle: TD3DMaterialHandle): HResult; stdcall;
  1173.     function Reserve: HResult; stdcall;
  1174.     function Unreserve: HResult; stdcall;
  1175.   end;
  1176. {$IFDEF DIRECT3D_VERSION_5}
  1177.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DMaterial2);'}
  1178.   {$EXTERNALSYM IDirect3DMaterial2}
  1179.   IDirect3DMaterial2 = interface(IUnknown)
  1180.     ['{93281503-8cf8-11d0-89ab-00a0c9054129}']
  1181.     (*** IDirect3DMaterial2 methods ***)
  1182.     function SetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  1183.     function GetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  1184.     function GetHandle(lpDirect3DDevice: IDirect3DDevice2;
  1185.         var lpHandle: TD3DMaterialHandle): HResult; stdcall;
  1186.   end;
  1187. {$ENDIF} // DIRECT3D_VERSION_5
  1188. {$IFDEF DIRECT3D_VERSION_6}
  1189.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DMaterial3);'}
  1190.   {$EXTERNALSYM IDirect3DMaterial3}
  1191.   IDirect3DMaterial3 = interface(IUnknown)
  1192.     ['{ca9c46f4-d3c5-11d1-b75a-00600852b312}']
  1193.     (*** IDirect3DMaterial2 methods ***)
  1194.     function SetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  1195.     function GetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  1196.     function GetHandle(lpDirect3DDevice: IDirect3DDevice3;
  1197.         var lpHandle: TD3DMaterialHandle): HResult; stdcall;
  1198.   end;
  1199. {$ENDIF} // DIRECT3D_VERSION_6
  1200. (*
  1201.  * Texture interfaces
  1202.  *)
  1203.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DTexture);'}
  1204.   {$EXTERNALSYM IDirect3DTexture}
  1205.   IDirect3DTexture = interface(IUnknown)
  1206.     ['{2CDCD9E0-25A0-11CF-A31A-00AA00B93356}']
  1207.     (*** IDirect3DTexture methods ***)
  1208.     function Initialize(lpD3DDevice: IDirect3DDevice;
  1209.         lpDDSurface: IDirectDrawSurface): HResult; stdcall;
  1210.     function GetHandle(lpDirect3DDevice: IDirect3DDevice;
  1211.         var lpHandle: TD3DTextureHandle): HResult; stdcall;
  1212.     function PaletteChanged(dwStart: DWORD; dwCount: DWORD): HResult; stdcall;
  1213.     function Load(lpD3DTexture: IDirect3DTexture): HResult; stdcall;
  1214.     function Unload: HResult; stdcall;
  1215.   end;
  1216. {$IFDEF DIRECT3D_VERSION_5}
  1217.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DTexture2);'}
  1218.   {$EXTERNALSYM IDirect3DTexture2}
  1219.   IDirect3DTexture2 = interface(IUnknown)
  1220.     ['{93281502-8cf8-11d0-89ab-00a0c9054129}']
  1221.     (*** IDirect3DTexture2 methods ***)
  1222.     function GetHandle(lpDirect3DDevice: IDirect3DDevice2;
  1223.         var lpHandle: TD3DTextureHandle): HResult; stdcall;
  1224.     function PaletteChanged(dwStart: DWORD; dwCount: DWORD): HResult; stdcall;
  1225.     function Load(lpD3DTexture: IDirect3DTexture2): HResult; stdcall;
  1226.   end;
  1227. {$ENDIF} // DIRECT3D_VERSION_5
  1228. (*
  1229.  * Viewport interfaces
  1230.  *)
  1231.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DViewport);'}
  1232.   {$EXTERNALSYM IDirect3DViewport}
  1233.   IDirect3DViewport = interface(IUnknown)
  1234.     ['{4417C146-33AD-11CF-816F-0000C020156E}']
  1235.     (*** IDirect3DViewport methods ***)
  1236.     function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
  1237.     function GetViewport(out lpData: TD3DViewport): HResult; stdcall;
  1238.     function SetViewport(const lpData: TD3DViewport): HResult; stdcall;
  1239.     function TransformVertices(dwVertexCount: DWORD;
  1240.         const lpData: TD3DTransformData; dwFlags: DWORD;
  1241.         out lpOffscreen: DWORD): HResult; stdcall;
  1242.     function LightElements(dwElementCount: DWORD;
  1243.         var lpData: TD3DLightData): HResult; stdcall;
  1244.     function SetBackground(hMat: TD3DMaterialHandle): HResult; stdcall;
  1245.     function GetBackground(out hMat: TD3DMaterialHandle): HResult; stdcall;
  1246.     function SetBackgroundDepth(lpDDSurface: IDirectDrawSurface):
  1247.         HResult; stdcall;
  1248.     function GetBackgroundDepth(out lplpDDSurface: IDirectDrawSurface;
  1249.         out lpValid: BOOL): HResult; stdcall;
  1250.     function Clear(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD):
  1251.         HResult; stdcall;
  1252.     function AddLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  1253.     function DeleteLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  1254.      function NextLight(lpDirect3DLight: IDirect3DLight;
  1255.         out lplpDirect3DLight: IDirect3DLight; dwFlags: DWORD): HResult; stdcall;
  1256.   end;
  1257. {$IFDEF DIRECT3D_VERSION_5}
  1258.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DViewport2);'}
  1259.   {$EXTERNALSYM IDirect3DViewport2}
  1260.   IDirect3DViewport2 = interface(IUnknown)
  1261.     ['{93281500-8cf8-11d0-89ab-00a0c9054129}']
  1262.     (*** IDirect3DViewport2 methods ***)
  1263.     function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
  1264.     function GetViewport(out lpData: TD3DViewport): HResult; stdcall;
  1265.     function SetViewport(const lpData: TD3DViewport): HResult; stdcall;
  1266.     function TransformVertices(dwVertexCount: DWORD;
  1267.         const lpData: TD3DTransformData; dwFlags: DWORD;
  1268.         out lpOffscreen: DWORD): HResult; stdcall;
  1269.     function LightElements(dwElementCount: DWORD;
  1270.         var lpData: TD3DLightData): HResult; stdcall;
  1271.     function SetBackground(hMat: TD3DMaterialHandle): HResult; stdcall;
  1272.     function GetBackground(out hMat: TD3DMaterialHandle): HResult; stdcall;
  1273.     function SetBackgroundDepth(lpDDSurface: IDirectDrawSurface):
  1274.         HResult; stdcall;
  1275.     function GetBackgroundDepth(out lplpDDSurface: IDirectDrawSurface;
  1276.         out lpValid: BOOL): HResult; stdcall;
  1277.     function Clear(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD):
  1278.         HResult; stdcall;
  1279.     function AddLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  1280.     function DeleteLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  1281.     function NextLight(lpDirect3DLight: IDirect3DLight;
  1282.         out lplpDirect3DLight: IDirect3DLight; dwFlags: DWORD): HResult; stdcall;
  1283.     (*** IDirect3DViewport2 methods ***)
  1284.     function GetViewport2(out lpData: TD3DViewport2): HResult; stdcall;
  1285.     function SetViewport2(const lpData: TD3DViewport2): HResult; stdcall;
  1286.   end;
  1287. {$ENDIF} // DIRECT3D_VERSION_5
  1288. {$IFDEF DIRECT3D_VERSION_6}
  1289.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DViewport3);'}
  1290.   {$EXTERNALSYM IDirect3DViewport3}
  1291.   IDirect3DViewport3 = interface(IUnknown)
  1292.     ['{b0ab3b61-33d7-11d1-a981-00c04fd7b174}']
  1293.     (*** IDirect3DViewport3 methods ***)
  1294.     function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
  1295.     function GetViewport(out lpData: TD3DViewport): HResult; stdcall;
  1296.     function SetViewport(const lpData: TD3DViewport): HResult; stdcall;
  1297.     function TransformVertices(dwVertexCount: DWORD;
  1298.         const lpData: TD3DTransformData; dwFlags: DWORD;
  1299.         out lpOffscreen: DWORD): HResult; stdcall;
  1300.     function LightElements(dwElementCount: DWORD;
  1301.         var lpData: TD3DLightData): HResult; stdcall;
  1302.     function SetBackground(hMat: TD3DMaterialHandle): HResult; stdcall;
  1303.     function GetBackground(var hMat: TD3DMaterialHandle): HResult; stdcall;
  1304.     function SetBackgroundDepth(
  1305.         lpDDSurface: IDirectDrawSurface): HResult; stdcall;
  1306.     function GetBackgroundDepth(out lplpDDSurface: IDirectDrawSurface;
  1307.         out lpValid: BOOL): HResult; stdcall;
  1308.     function Clear(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD):
  1309.         HResult; stdcall;
  1310.     function AddLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  1311.     function DeleteLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  1312.     function NextLight(lpDirect3DLight: IDirect3DLight;
  1313.         out lplpDirect3DLight: IDirect3DLight; dwFlags: DWORD): HResult; stdcall;
  1314.     function GetViewport2(out lpData: TD3DViewport2): HResult; stdcall;
  1315.     function SetViewport2(const lpData: TD3DViewport2): HResult; stdcall;
  1316.     function SetBackgroundDepth2(
  1317.         lpDDSurface: IDirectDrawSurface4): HResult; stdcall;
  1318.     function GetBackgroundDepth2(out lplpDDSurface: IDirectDrawSurface4;
  1319.         out lpValid: BOOL): HResult; stdcall;
  1320.     function Clear2(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD;
  1321.         dwColor: DWORD; dvZ: TD3DValue; dwStencil: DWORD): HResult; stdcall;
  1322.   end;
  1323. {$ENDIF} // DIRECT3D_VERSION_6
  1324. {$IFDEF DIRECT3D_VERSION_6}
  1325.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVertexBuffer);'}
  1326.   {$EXTERNALSYM IDirect3DVertexBuffer}
  1327.   IDirect3DVertexBuffer = interface(IUnknown)
  1328.     ['{7a503555-4a83-11d1-a5db-00a0c90367f8}']
  1329.     (*** IDirect3DVertexBuffer methods ***)
  1330.     function Lock(dwFlags: DWORD; var lplpData: pointer; var lpdwSize: DWORD)
  1331.         : HResult; stdcall;
  1332.     function Unlock : HResult; stdcall;
  1333.     function ProcessVertices(dwVertexOp, dwDestIndex, dwCount: DWORD;
  1334.         lpSrcBuffer: IDirect3DVertexBuffer; dwSrcIndex: DWORD;
  1335.         lpD3DDevice: IDirect3DDevice3; dwFlags: DWORD): HResult; stdcall;
  1336.     function GetVertexBufferDesc(var lpVBDesc: TD3DVertexBufferDesc): HResult; stdcall;
  1337.     function Optimize(lpD3DDevice: IDirect3DDevice3; dwFlags: DWORD): HResult; stdcall;
  1338.   end;
  1339. {$ENDIF} // DIRECT3D_VERSION_6
  1340. {$IFDEF DIRECT3D_VERSION_7}
  1341.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVertexBuffer7);'}
  1342.   {$EXTERNALSYM IDirect3DVertexBuffer7}
  1343.   IDirect3DVertexBuffer7 = interface(IUnknown)
  1344.     ['{f5049e7d-4861-11d2-a407-00a0c90629a8}']
  1345.     (*** IDirect3DVertexBuffer methods ***)
  1346.     function Lock(dwFlags: DWORD; out lplpData: Pointer; out lpdwSize: DWORD): HResult; stdcall;
  1347.     function Unlock : HResult; stdcall;
  1348.     function ProcessVertices(dwVertexOp, dwDestIndex, dwCount: DWORD;
  1349.         lpSrcBuffer: IDirect3DVertexBuffer7; dwSrcIndex: DWORD;
  1350.         lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD): HResult; stdcall;
  1351.     function GetVertexBufferDesc(out lpVBDesc: TD3DVertexBufferDesc): HResult; stdcall;
  1352.     function Optimize(lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD): HResult; stdcall;
  1353.     function ProcessVerticesStrided(dwVertexOp, dwDestIndex, dwCount: DWORD;
  1354.       lpVertexArray: TD3DDrawPrimitiveStridedData; dwVertexTypeDesc: DWORD;
  1355.       lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD): HResult; stdcall;
  1356.   end;
  1357. {$ENDIF} // DIRECT3D_VERSION_7
  1358. {$IFDEF DIRECT3D_VERSION_5}
  1359. const
  1360. (****************************************************************************
  1361.  *
  1362.  * Flags for IDirect3DDevice::NextViewport
  1363.  *
  1364.  ****************************************************************************)
  1365. (*
  1366.  * Return the next viewport
  1367.  *)
  1368.   D3DNEXT_NEXT = $00000001;
  1369.   {$EXTERNALSYM D3DNEXT_NEXT}
  1370. (*
  1371.  * Return the first viewport
  1372.  *)
  1373.   D3DNEXT_HEAD = $00000002;
  1374.   {$EXTERNALSYM D3DNEXT_HEAD}
  1375. (*
  1376.  * Return the last viewport
  1377.  *)
  1378.   D3DNEXT_TAIL = $00000004;
  1379.   {$EXTERNALSYM D3DNEXT_TAIL}
  1380. (****************************************************************************
  1381.  *
  1382.  * Flags for DrawPrimitive/DrawIndexedPrimitive
  1383.  *   Also valid for Begin/BeginIndexed
  1384.  *   Also valid for VertexBuffer::CreateVertexBuffer
  1385.  ****************************************************************************)
  1386. (*
  1387.  * Wait until the device is ready to draw the primitive
  1388.  * This will cause DP to not return DDERR_WASSTILLDRAWING
  1389.  *)
  1390.   D3DDP_WAIT = $00000001;
  1391.   {$EXTERNALSYM D3DDP_WAIT}
  1392. {$IFDEF DIRECT3D_VERSION_LESS_6}
  1393. (*
  1394.  * Hint that it is acceptable to render the primitive out of order.
  1395.  *)
  1396.   D3DDP_OUTOFORDER            = $00000002;
  1397.   {$EXTERNALSYM D3DDP_OUTOFORDER}
  1398. {$ENDIF} // DIRECT3D_VERSION_LESS_6
  1399. (*
  1400.  * Hint that the primitives have been clipped by the application.
  1401.  *)
  1402.   D3DDP_DONOTCLIP = $00000004;
  1403.   {$EXTERNALSYM D3DDP_DONOTCLIP}
  1404. (*
  1405.  * Hint that the extents need not be updated.
  1406.  *)
  1407.   D3DDP_DONOTUPDATEEXTENTS = $00000008;
  1408.   {$EXTERNALSYM D3DDP_DONOTUPDATEEXTENTS}
  1409. {$ENDIF} // DIRECT3D_VERSION_5
  1410. {$IFDEF DIRECT3D_VERSION_6}
  1411. (*
  1412.  * Hint that the lighting should not be applied on vertices.
  1413.  *)
  1414.   D3DDP_DONOTLIGHT            = $00000010;
  1415.   {$EXTERNALSYM D3DDP_DONOTLIGHT}
  1416. {$ENDIF} // DIRECT3D_VERSION_6
  1417. (*
  1418.  * Direct3D Errors
  1419.  * DirectDraw error codes are used when errors not specified here.
  1420.  *)
  1421. const
  1422.   MAKE_DDHRESULT = HResult($88760000);
  1423.   {$EXTERNALSYM MAKE_DDHRESULT}
  1424.   D3D_OK                          = DD_OK;
  1425.   {$EXTERNALSYM D3D_OK}
  1426.   D3DERR_BADMAJORVERSION          = MAKE_DDHRESULT + 700;
  1427.   {$EXTERNALSYM D3DERR_BADMAJORVERSION}
  1428.   D3DERR_BADMINORVERSION          = MAKE_DDHRESULT + 701;
  1429.   {$EXTERNALSYM D3DERR_BADMINORVERSION}
  1430. {$IFDEF DIRECT3D_VERSION_5}
  1431. (*
  1432.  * An invalid device was requested by the application.
  1433.  *)
  1434.   D3DERR_INVALID_DEVICE   = MAKE_DDHRESULT + 705;
  1435.   {$EXTERNALSYM D3DERR_INVALID_DEVICE}
  1436.   D3DERR_INITFAILED       = MAKE_DDHRESULT + 706;
  1437.   {$EXTERNALSYM D3DERR_INITFAILED}
  1438. (*
  1439.  * SetRenderTarget attempted on a device that was
  1440.  * QI'd off the render target.
  1441.  *)
  1442.   D3DERR_DEVICEAGGREGATED = MAKE_DDHRESULT + 707;
  1443.   {$EXTERNALSYM D3DERR_DEVICEAGGREGATED}
  1444. {$ENDIF} // DIRECT3D_VERSION_5
  1445.   D3DERR_EXECUTE_CREATE_FAILED    = MAKE_DDHRESULT + 710;
  1446.   {$EXTERNALSYM D3DERR_EXECUTE_CREATE_FAILED}
  1447.   D3DERR_EXECUTE_DESTROY_FAILED   = MAKE_DDHRESULT + 711;
  1448.   {$EXTERNALSYM D3DERR_EXECUTE_DESTROY_FAILED}
  1449.   D3DERR_EXECUTE_LOCK_FAILED      = MAKE_DDHRESULT + 712;
  1450.   {$EXTERNALSYM D3DERR_EXECUTE_LOCK_FAILED}
  1451.   D3DERR_EXECUTE_UNLOCK_FAILED    = MAKE_DDHRESULT + 713;
  1452.   {$EXTERNALSYM D3DERR_EXECUTE_UNLOCK_FAILED}
  1453.   D3DERR_EXECUTE_LOCKED           = MAKE_DDHRESULT + 714;
  1454.   {$EXTERNALSYM D3DERR_EXECUTE_LOCKED}
  1455.   D3DERR_EXECUTE_NOT_LOCKED       = MAKE_DDHRESULT + 715;
  1456.   {$EXTERNALSYM D3DERR_EXECUTE_NOT_LOCKED}
  1457.   D3DERR_EXECUTE_FAILED           = MAKE_DDHRESULT + 716;
  1458.   {$EXTERNALSYM D3DERR_EXECUTE_FAILED}
  1459.   D3DERR_EXECUTE_CLIPPED_FAILED   = MAKE_DDHRESULT + 717;
  1460.   {$EXTERNALSYM D3DERR_EXECUTE_CLIPPED_FAILED}
  1461.   D3DERR_TEXTURE_NO_SUPPORT       = MAKE_DDHRESULT + 720;
  1462.   {$EXTERNALSYM D3DERR_TEXTURE_NO_SUPPORT}
  1463.   D3DERR_TEXTURE_CREATE_FAILED    = MAKE_DDHRESULT + 721;
  1464.   {$EXTERNALSYM D3DERR_TEXTURE_CREATE_FAILED}
  1465.   D3DERR_TEXTURE_DESTROY_FAILED   = MAKE_DDHRESULT + 722;
  1466.   {$EXTERNALSYM D3DERR_TEXTURE_DESTROY_FAILED}
  1467.   D3DERR_TEXTURE_LOCK_FAILED      = MAKE_DDHRESULT + 723;
  1468.   {$EXTERNALSYM D3DERR_TEXTURE_LOCK_FAILED}
  1469.   D3DERR_TEXTURE_UNLOCK_FAILED    = MAKE_DDHRESULT + 724;
  1470.   {$EXTERNALSYM D3DERR_TEXTURE_UNLOCK_FAILED}
  1471.   D3DERR_TEXTURE_LOAD_FAILED      = MAKE_DDHRESULT + 725;
  1472.   {$EXTERNALSYM D3DERR_TEXTURE_LOAD_FAILED}
  1473.   D3DERR_TEXTURE_SWAP_FAILED      = MAKE_DDHRESULT + 726;
  1474.   {$EXTERNALSYM D3DERR_TEXTURE_SWAP_FAILED}
  1475.   D3DERR_TEXTURE_LOCKED           = MAKE_DDHRESULT + 727;
  1476.   {$EXTERNALSYM D3DERR_TEXTURE_LOCKED}
  1477.   D3DERR_TEXTURE_NOT_LOCKED       = MAKE_DDHRESULT + 728;
  1478.   {$EXTERNALSYM D3DERR_TEXTURE_NOT_LOCKED}
  1479.   D3DERR_TEXTURE_GETSURF_FAILED   = MAKE_DDHRESULT + 729;
  1480.   {$EXTERNALSYM D3DERR_TEXTURE_GETSURF_FAILED}
  1481.   D3DERR_MATRIX_CREATE_FAILED     = MAKE_DDHRESULT + 730;
  1482.   {$EXTERNALSYM D3DERR_MATRIX_CREATE_FAILED}
  1483.   D3DERR_MATRIX_DESTROY_FAILED    = MAKE_DDHRESULT + 731;
  1484.   {$EXTERNALSYM D3DERR_MATRIX_DESTROY_FAILED}
  1485.   D3DERR_MATRIX_SETDATA_FAILED    = MAKE_DDHRESULT + 732;
  1486.   {$EXTERNALSYM D3DERR_MATRIX_SETDATA_FAILED}
  1487.   D3DERR_MATRIX_GETDATA_FAILED    = MAKE_DDHRESULT + 733;
  1488.   {$EXTERNALSYM D3DERR_MATRIX_GETDATA_FAILED}
  1489.   D3DERR_SETVIEWPORTDATA_FAILED   = MAKE_DDHRESULT + 734;
  1490.   {$EXTERNALSYM D3DERR_SETVIEWPORTDATA_FAILED}
  1491. {$IFDEF DIRECT3D_VERSION_5}
  1492.   D3DERR_INVALIDCURRENTVIEWPORT   = MAKE_DDHRESULT + 735;
  1493.   {$EXTERNALSYM D3DERR_INVALIDCURRENTVIEWPORT}
  1494.   D3DERR_INVALIDPRIMITIVETYPE     = MAKE_DDHRESULT + 736;
  1495.   {$EXTERNALSYM D3DERR_INVALIDPRIMITIVETYPE}
  1496.   D3DERR_INVALIDVERTEXTYPE        = MAKE_DDHRESULT + 737;
  1497.   {$EXTERNALSYM D3DERR_INVALIDVERTEXTYPE}
  1498.   D3DERR_TEXTURE_BADSIZE          = MAKE_DDHRESULT + 738;
  1499.   {$EXTERNALSYM D3DERR_TEXTURE_BADSIZE}
  1500.   D3DERR_INVALIDRAMPTEXTURE   = MAKE_DDHRESULT + 739;
  1501.   {$EXTERNALSYM D3DERR_INVALIDRAMPTEXTURE}
  1502. {$ENDIF} // DIRECT3D_VERSION_5
  1503.   D3DERR_MATERIAL_CREATE_FAILED   = MAKE_DDHRESULT + 740;
  1504.   {$EXTERNALSYM D3DERR_MATERIAL_CREATE_FAILED}
  1505.   D3DERR_MATERIAL_DESTROY_FAILED  = MAKE_DDHRESULT + 741;
  1506.   {$EXTERNALSYM D3DERR_MATERIAL_DESTROY_FAILED}
  1507.   D3DERR_MATERIAL_SETDATA_FAILED  = MAKE_DDHRESULT + 742;
  1508.   {$EXTERNALSYM D3DERR_MATERIAL_SETDATA_FAILED}
  1509.   D3DERR_MATERIAL_GETDATA_FAILED  = MAKE_DDHRESULT + 743;
  1510.   {$EXTERNALSYM D3DERR_MATERIAL_GETDATA_FAILED}
  1511. {$IFDEF DIRECT3D_VERSION_5}
  1512.   D3DERR_INVALIDPALETTE           = MAKE_DDHRESULT + 744;
  1513.   {$EXTERNALSYM D3DERR_INVALIDPALETTE}
  1514.   D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY = MAKE_DDHRESULT + 745;
  1515.   {$EXTERNALSYM D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY}
  1516.   D3DERR_ZBUFF_NEEDS_VIDEOMEMORY  = MAKE_DDHRESULT + 746;
  1517.   {$EXTERNALSYM D3DERR_ZBUFF_NEEDS_VIDEOMEMORY}
  1518.   D3DERR_SURFACENOTINVIDMEM       = MAKE_DDHRESULT + 747;
  1519.   {$EXTERNALSYM D3DERR_SURFACENOTINVIDMEM}
  1520. {$ENDIF} // DIRECT3D_VERSION_5
  1521.   D3DERR_LIGHT_SET_FAILED         = MAKE_DDHRESULT + 750;
  1522.   {$EXTERNALSYM D3DERR_LIGHT_SET_FAILED}
  1523. {$IFDEF DIRECT3D_VERSION_5}
  1524.   D3DERR_LIGHTHASVIEWPORT   = MAKE_DDHRESULT + 751;
  1525.   {$EXTERNALSYM D3DERR_LIGHTHASVIEWPORT}
  1526.   D3DERR_LIGHTNOTINTHISVIEWPORT   = MAKE_DDHRESULT + 752;
  1527.   {$EXTERNALSYM D3DERR_LIGHTNOTINTHISVIEWPORT}
  1528. {$ENDIF} // DIRECT3D_VERSION_5
  1529.   D3DERR_SCENE_IN_SCENE           = MAKE_DDHRESULT + 760;
  1530.   {$EXTERNALSYM D3DERR_SCENE_IN_SCENE}
  1531.   D3DERR_SCENE_NOT_IN_SCENE       = MAKE_DDHRESULT + 761;
  1532.   {$EXTERNALSYM D3DERR_SCENE_NOT_IN_SCENE}
  1533.   D3DERR_SCENE_BEGIN_FAILED       = MAKE_DDHRESULT + 762;
  1534.   {$EXTERNALSYM D3DERR_SCENE_BEGIN_FAILED}
  1535.   D3DERR_SCENE_END_FAILED         = MAKE_DDHRESULT + 763;
  1536.   {$EXTERNALSYM D3DERR_SCENE_END_FAILED}
  1537. {$IFDEF DIRECT3D_VERSION_5}
  1538.   D3DERR_INBEGIN                  = MAKE_DDHRESULT + 770;
  1539.   {$EXTERNALSYM D3DERR_INBEGIN}
  1540.   D3DERR_NOTINBEGIN               = MAKE_DDHRESULT + 771;
  1541.   {$EXTERNALSYM D3DERR_NOTINBEGIN}
  1542.   D3DERR_NOVIEWPORTS              = MAKE_DDHRESULT + 772;
  1543.   {$EXTERNALSYM D3DERR_NOVIEWPORTS}
  1544.   D3DERR_VIEWPORTDATANOTSET       = MAKE_DDHRESULT + 773;
  1545.   {$EXTERNALSYM D3DERR_VIEWPORTDATANOTSET}
  1546.   D3DERR_VIEWPORTHASNODEVICE      = MAKE_DDHRESULT + 774;
  1547.   {$EXTERNALSYM D3DERR_VIEWPORTHASNODEVICE}
  1548.   D3DERR_NOCURRENTVIEWPORT        = MAKE_DDHRESULT + 775;
  1549.   {$EXTERNALSYM D3DERR_NOCURRENTVIEWPORT}
  1550. {$ENDIF} // DIRECT3D_VERSION_5
  1551. {$IFDEF DIRECT3D_VERSION_6}
  1552.   D3DERR_INVALIDVERTEXFORMAT      = MAKE_DDHRESULT + 2048;
  1553.   {$EXTERNALSYM D3DERR_INVALIDVERTEXFORMAT}
  1554. (*
  1555.  * Attempted to CreateTexture on a surface that had a color key
  1556.  *)
  1557.   D3DERR_COLORKEYATTACHED                 = MAKE_DDHRESULT + 2050;
  1558.   {$EXTERNALSYM D3DERR_COLORKEYATTACHED}
  1559.   D3DERR_VERTEXBUFFEROPTIMIZED            = MAKE_DDHRESULT + 2060;
  1560.   {$EXTERNALSYM D3DERR_VERTEXBUFFEROPTIMIZED}
  1561.   D3DERR_VBUF_CREATE_FAILED               = MAKE_DDHRESULT + 2061;
  1562.   {$EXTERNALSYM D3DERR_VBUF_CREATE_FAILED}
  1563.   D3DERR_VERTEXBUFFERLOCKED               = MAKE_DDHRESULT + 2062;
  1564.   {$EXTERNALSYM D3DERR_VERTEXBUFFERLOCKED}
  1565.   D3DERR_ZBUFFER_NOTPRESENT               = MAKE_DDHRESULT + 2070;
  1566.   {$EXTERNALSYM D3DERR_ZBUFFER_NOTPRESENT}
  1567.   D3DERR_STENCILBUFFER_NOTPRESENT         = MAKE_DDHRESULT + 2071;
  1568.   {$EXTERNALSYM D3DERR_STENCILBUFFER_NOTPRESENT}
  1569.   D3DERR_WRONGTEXTUREFORMAT               = MAKE_DDHRESULT + 2072;
  1570.   {$EXTERNALSYM D3DERR_WRONGTEXTUREFORMAT}
  1571.   D3DERR_UNSUPPORTEDCOLOROPERATION        = MAKE_DDHRESULT + 2073;
  1572.   {$EXTERNALSYM D3DERR_UNSUPPORTEDCOLOROPERATION}
  1573.   D3DERR_UNSUPPORTEDCOLORARG              = MAKE_DDHRESULT + 2074;
  1574.   {$EXTERNALSYM D3DERR_UNSUPPORTEDCOLORARG}
  1575.   D3DERR_UNSUPPORTEDALPHAOPERATION        = MAKE_DDHRESULT + 2075;
  1576.   {$EXTERNALSYM D3DERR_UNSUPPORTEDALPHAOPERATION}
  1577.   D3DERR_UNSUPPORTEDALPHAARG              = MAKE_DDHRESULT + 2076;
  1578.   {$EXTERNALSYM D3DERR_UNSUPPORTEDALPHAARG}
  1579.   D3DERR_TOOMANYOPERATIONS                = MAKE_DDHRESULT + 2077;
  1580.   {$EXTERNALSYM D3DERR_TOOMANYOPERATIONS}
  1581.   D3DERR_CONFLICTINGTEXTUREFILTER         = MAKE_DDHRESULT + 2078;
  1582.   {$EXTERNALSYM D3DERR_CONFLICTINGTEXTUREFILTER}
  1583.   D3DERR_UNSUPPORTEDFACTORVALUE           = MAKE_DDHRESULT + 2079;
  1584.   {$EXTERNALSYM D3DERR_UNSUPPORTEDFACTORVALUE}
  1585.   D3DERR_CONFLICTINGRENDERSTATE           = MAKE_DDHRESULT + 2081;
  1586.   {$EXTERNALSYM D3DERR_CONFLICTINGRENDERSTATE}
  1587.   D3DERR_UNSUPPORTEDTEXTUREFILTER         = MAKE_DDHRESULT + 2082;
  1588.   {$EXTERNALSYM D3DERR_UNSUPPORTEDTEXTUREFILTER}
  1589.   D3DERR_TOOMANYPRIMITIVES                = MAKE_DDHRESULT + 2083;
  1590.   {$EXTERNALSYM D3DERR_TOOMANYPRIMITIVES}
  1591.   D3DERR_INVALIDMATRIX                    = MAKE_DDHRESULT + 2084;
  1592.   {$EXTERNALSYM D3DERR_INVALIDMATRIX}
  1593.   D3DERR_TOOMANYVERTICES                  = MAKE_DDHRESULT + 2085;
  1594.   {$EXTERNALSYM D3DERR_TOOMANYVERTICES}
  1595.   D3DERR_CONFLICTINGTEXTUREPALETTE        = MAKE_DDHRESULT + 2086;
  1596.   {$EXTERNALSYM D3DERR_CONFLICTINGTEXTUREPALETTE}
  1597. {$ENDIF} // DIRECT3D_VERSION_6
  1598. {$IFDEF DIRECT3D_VERSION_7}
  1599.   D3DERR_INVALIDSTATEBLOCK        = MAKE_DDHRESULT + 2100;
  1600.   {$EXTERNALSYM D3DERR_INVALIDSTATEBLOCK}
  1601.   D3DERR_INBEGINSTATEBLOCK        = MAKE_DDHRESULT + 2101;
  1602.   {$EXTERNALSYM D3DERR_INBEGINSTATEBLOCK}
  1603.   D3DERR_NOTINBEGINSTATEBLOCK     = MAKE_DDHRESULT + 2102;
  1604.   {$EXTERNALSYM D3DERR_NOTINBEGINSTATEBLOCK}
  1605. {$ENDIF} // DIRECT3D_VERSION_7
  1606. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  1607. procedure DisableFPUExceptions;
  1608. procedure EnableFPUExceptions;
  1609. {$IFNDEF EXCLUDE_DXFILE_FROM_DIRECT3D}
  1610. (***************************************************************************
  1611.  *
  1612.  *  Copyright (C) 1998-1999 Microsoft Corporation.  All Rights Reserved.
  1613.  *
  1614.  *  File:       dxfile.h
  1615.  *
  1616.  *  Content:    DirectX File public header file
  1617.  *
  1618.  ***************************************************************************)
  1619. var
  1620.   DXFileDLL : HMODULE;
  1621. function DXFileErrorString(Value: HResult): string;
  1622. type
  1623.   TDXFileFormat = (
  1624.     DXFILEFORMAT_BINARY,
  1625.     DXFILEFORMAT_TEXT,
  1626.     DXFILEFORMAT_COMPRESSED
  1627.   );
  1628.   TDXFileLoadOptions = (
  1629.     DXFILELOAD_FROMFILE,
  1630.     DXFILELOAD_FROMRESOURCE,
  1631.     DXFILELOAD_FROMMEMORY,
  1632.     DXFILELOAD_INVALID_3,
  1633.     DXFILELOAD_FROMSTREAM,
  1634.     DXFILELOAD_INVALID_5,
  1635.     DXFILELOAD_INVALID_6,
  1636.     DXFILELOAD_INVALID_7,
  1637.     DXFILELOAD_FROMURL
  1638.   );
  1639.   PDXFileLoadResource = ^TDXFileLoadResource;
  1640.   TDXFileLoadResource = packed record
  1641.     hModule: HModule;
  1642.     lpName: PAnsiChar;
  1643.     lpType: PAnsiChar;
  1644.   end;
  1645.   PDXFileLoadMemory = ^TDXFileLoadMemory;
  1646.   TDXFileLoadMemory = packed record
  1647.     lpMemory: Pointer;
  1648.     dSize: DWORD;
  1649.   end;
  1650. (*
  1651.  * DirectX File object types.
  1652.  *)
  1653.   IDirectXFile = interface;
  1654.   IDirectXFileEnumObject = interface;
  1655.   IDirectXFileSaveObject = interface;
  1656.   IDirectXFileObject = interface;
  1657.   IDirectXFileData = interface;
  1658.   IDirectXFileDataReference = interface;
  1659.   IDirectXFileBinary = interface;
  1660. (*
  1661.  * DirectX File interfaces.
  1662.  *)
  1663.   IDirectXFile = interface(IUnknown)
  1664.     ['{3d82ab40-62da-11cf-ab39-0020af71e433}']
  1665.     function CreateEnumObject(pvSource: Pointer;
  1666.         dwLoadOptions: TDXFileLoadOptions;
  1667.         var ppEnumObj: IDirectXFileEnumObject): HResult; stdcall;
  1668.     function CreateSaveObject(szFileName: PChar; dwFileFormat: TDXFileFormat;
  1669.         var ppSaveObj: IDirectXFileSaveObject): HResult; stdcall;
  1670.     function RegisterTemplates(pvData: Pointer; cbSize: DWORD): HResult; stdcall;
  1671.   end;
  1672.   IDirectXFileEnumObject = interface(IUnknown)
  1673.     ['{3d82ab41-62da-11cf-ab39-0020af71e433}']
  1674.     function GetNextDataObject(var ppDataObj: IDirectXFileData): HResult; stdcall;
  1675.     function GetDataObjectById
  1676.         (const rguid: TGUID; var ppDataObj: IDirectXFileData): HResult; stdcall;
  1677.     function GetDataObjectByName
  1678.         (szName: PChar; var ppDataObj: IDirectXFileData): HResult; stdcall;
  1679.   end;
  1680.   IDirectXFileSaveObject = interface(IUnknown)
  1681.     ['{3d82ab42-62da-11cf-ab39-0020af71e433}']
  1682.     function SaveTemplates
  1683.         (cTemplates: DWORD; var ppguidTemplates: PGUID): HResult; stdcall;
  1684.     function CreateDataObject(const rguidTemplate: TGUID; szName: PChar;
  1685.         pguid: PGUID; cbSize: DWORD; pvData: Pointer;
  1686.         var ppDataObj: IDirectXFileData): HResult; stdcall;
  1687.     function SaveData(pDataObj: IDirectXFileData): HResult; stdcall;
  1688.   end;
  1689.   IDirectXFileObject = interface(IUnknown)
  1690.     ['{3d82ab43-62da-11cf-ab39-0020af71e433}']
  1691.     function GetName(pstrNameBuf: PChar; var dwBufLen: DWORD): HResult; stdcall;
  1692.     function GetId(var pGuidBuf: TGUID): HResult; stdcall;
  1693.   end;
  1694.   IDirectXFileData = interface(IDirectXFileObject)
  1695.     ['{3d82ab44-62da-11cf-ab39-0020af71e433}']
  1696.     function GetData
  1697.         (szMember: PChar; var pcbSize: DWORD; var ppvData: Pointer): HResult; stdcall;
  1698.     function GetType(var ppguid: PGUID): HResult; stdcall;
  1699.     function GetNextObject(var ppChildObj: IDirectXFileObject): HResult; stdcall;
  1700.     function AddDataObject(pDataObj: IDirectXFileData): HResult; stdcall;
  1701.     function AddDataReference(szRef: PChar; pguidRef: PGUID): HResult; stdcall;
  1702.     function AddBinaryObject(szName: PChar; pguid: PGUID; szMimeType: PChar;
  1703.         pvData: Pointer; cbSize: DWORD): HResult; stdcall;
  1704.   end;
  1705.   IDirectXFileDataReference = interface(IDirectXFileObject)
  1706.     ['{3d82ab45-62da-11cf-ab39-0020af71e433}']
  1707.     function Resolve(var ppDataObj: IDirectXFileData): HResult; stdcall;
  1708.   end;
  1709.   IDirectXFileBinary = interface(IDirectXFileObject)
  1710.     ['{3d82ab46-62da-11cf-ab39-0020af71e433}']
  1711.     function GetSize(var pcbSize: DWORD): HResult; stdcall;
  1712.     function GetMimeType(var pszMimeType: PChar): HResult; stdcall;
  1713.     function Read(pvData: Pointer; cbSize: DWORD; pcbRead: PDWORD{?}): HResult; stdcall;
  1714.   end;
  1715. const
  1716. (*
  1717.  * DirectXFile Object Class Id (for CoCreateInstance())
  1718.  *)
  1719.    CLSID_CDirectXFile: TGUID =
  1720.        (D1:$4516ec43;D2:$8f20;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
  1721. (*
  1722.  * DirectX File Interface GUIDs.
  1723.  *)
  1724. type
  1725.   IID_IDirectXFile = IDirectXFile;
  1726.   IID_IDirectXFileEnumObject = IDirectXFileEnumObject;
  1727.   IID_IDirectXFileSaveObject = IDirectXFileSaveObject;
  1728.   IID_IDirectXFileObject = IDirectXFileObject;
  1729.   IID_IDirectXFileData = IDirectXFileData;
  1730.   IID_IDirectXFileDataReference = IDirectXFileDataReference;
  1731.   IID_IDirectXFileBinary = IDirectXFileBinary;
  1732. (*
  1733.  * DirectX File Header template's GUID.
  1734.  *)
  1735. const
  1736.   TID_DXFILEHeader: TGUID =
  1737.       (D1:$3d82ab43;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
  1738. (*
  1739.  * DirectX File errors.
  1740.  *)
  1741. const
  1742.   DXFILE_OK = 0;
  1743.   DXFILEERR_BADOBJECT                 = MAKE_DDHRESULT or 850;
  1744.   DXFILEERR_BADVALUE                  = MAKE_DDHRESULT or 851;
  1745.   DXFILEERR_BADTYPE                   = MAKE_DDHRESULT or 852;
  1746.   DXFILEERR_BADSTREAMHANDLE           = MAKE_DDHRESULT or 853;
  1747.   DXFILEERR_BADALLOC                  = MAKE_DDHRESULT or 854;
  1748.   DXFILEERR_NOTFOUND                  = MAKE_DDHRESULT or 855;
  1749.   DXFILEERR_NOTDONEYET                = MAKE_DDHRESULT or 856;
  1750.   DXFILEERR_FILENOTFOUND              = MAKE_DDHRESULT or 857;
  1751.   DXFILEERR_RESOURCENOTFOUND          = MAKE_DDHRESULT or 858;
  1752.   DXFILEERR_URLNOTFOUND               = MAKE_DDHRESULT or 859;
  1753.   DXFILEERR_BADRESOURCE               = MAKE_DDHRESULT or 860;
  1754.   DXFILEERR_BADFILETYPE               = MAKE_DDHRESULT or 861;
  1755.   DXFILEERR_BADFILEVERSION            = MAKE_DDHRESULT or 862;
  1756.   DXFILEERR_BADFILEFLOATSIZE          = MAKE_DDHRESULT or 863;
  1757.   DXFILEERR_BADFILECOMPRESSIONTYPE    = MAKE_DDHRESULT or 864;
  1758.   DXFILEERR_BADFILE                   = MAKE_DDHRESULT or 865;
  1759.   DXFILEERR_PARSEERROR                = MAKE_DDHRESULT or 866;
  1760.   DXFILEERR_NOTEMPLATE                = MAKE_DDHRESULT or 867;
  1761.   DXFILEERR_BADARRAYSIZE              = MAKE_DDHRESULT or 868;
  1762.   DXFILEERR_BADDATAREFERENCE          = MAKE_DDHRESULT or 869;
  1763.   DXFILEERR_INTERNALERROR             = MAKE_DDHRESULT or 870;
  1764.   DXFILEERR_NOMOREOBJECTS             = MAKE_DDHRESULT or 871;
  1765.   DXFILEERR_BADINTRINSICS             = MAKE_DDHRESULT or 872;
  1766.   DXFILEERR_NOMORESTREAMHANDLES       = MAKE_DDHRESULT or 873;
  1767.   DXFILEERR_NOMOREDATA                = MAKE_DDHRESULT or 874;
  1768.   DXFILEERR_BADCACHEFILE              = MAKE_DDHRESULT or 875;
  1769.   DXFILEERR_NOINTERNET                = MAKE_DDHRESULT or 876;
  1770. (*
  1771.  * API for creating IDirectXFile interface.
  1772.  *)
  1773. var
  1774.   DirectXFileCreate : function
  1775.     (out lplpDirectXFile: IDirectXFile): HResult; stdcall;
  1776. (* D3DRM XFile templates in binary form *)
  1777. const
  1778.   D3DRM_XTEMPLATES: array [0..3214] of Byte = (
  1779.         $78, $6f, $66, $20, $30, $33, $30, $32, $62,
  1780.         $69, $6e, $20, $30, $30, $36, $34, $1f, 0, $1,
  1781.         0, $6, 0, 0, 0, $48, $65, $61, $64, $65,
  1782.         $72, $a, 0, $5, 0, $43, $ab, $82, $3d, $da,
  1783.         $62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4,
  1784.         $33, $28, 0, $1, 0, $5, 0, 0, 0, $6d, 
  1785.         $61, $6a, $6f, $72, $14, 0, $28, 0, $1, 0, 
  1786.         $5, 0, 0, 0, $6d, $69, $6e, $6f, $72, $14, 
  1787.         0, $29, 0, $1, 0, $5, 0, 0, 0, $66, 
  1788.         $6c, $61, $67, $73, $14, 0, $b, 0, $1f, 0, 
  1789.         $1, 0, $6, 0, 0, 0, $56, $65, $63, $74, 
  1790.         $6f, $72, $a, 0, $5, 0, $5e, $ab, $82, $3d,
  1791.         $da, $62, $cf, $11, $ab, $39, 0, $20, $af, $71,
  1792.         $e4, $33, $2a, 0, $1, 0, $1, 0, 0, 0,
  1793.         $78, $14, 0, $2a, 0, $1, 0, $1, 0, 0,
  1794.         0, $79, $14, 0, $2a, 0, $1, 0, $1, 0,
  1795.         0, 0, $7a, $14, 0, $b, 0, $1f, 0, $1, 
  1796.         0, $8, 0, 0, 0, $43, $6f, $6f, $72, $64, 
  1797.         $73, $32, $64, $a, 0, $5, 0, $44, $3f, $f2, 
  1798.         $f6, $86, $76, $cf, $11, $8f, $52, 0, $40, $33, 
  1799.         $35, $94, $a3, $2a, 0, $1, 0, $1, 0, 0, 
  1800.         0, $75, $14, 0, $2a, 0, $1, 0, $1, 0, 
  1801.         0, 0, $76, $14, 0, $b, 0, $1f, 0, $1, 
  1802.         0, $9, 0, 0, 0, $4d, $61, $74, $72, $69, 
  1803.         $78, $34, $78, $34, $a, 0, $5, 0, $45, $3f, 
  1804.         $f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40, 
  1805.         $33, $35, $94, $a3, $34, 0, $2a, 0, $1, 0, 
  1806.         $6, 0, 0, 0, $6d, $61, $74, $72, $69, $78, 
  1807.         $e, 0, $3, 0, $10, 0, 0, 0, $f, 0, 
  1808.         $14, 0, $b, 0, $1f, 0, $1, 0, $9, 0, 
  1809.         0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42, 
  1810.         $41, $a, 0, $5, 0, $e0, $44, $ff, $35, $7c, 
  1811.         $6c, $cf, $11, $8f, $52, 0, $40, $33, $35, $94, 
  1812.         $a3, $2a, 0, $1, 0, $3, 0, 0, 0, $72, 
  1813.         $65, $64, $14, 0, $2a, 0, $1, 0, $5, 0, 
  1814.         0, 0, $67, $72, $65, $65, $6e, $14, 0, $2a, 
  1815.         0, $1, 0, $4, 0, 0, 0, $62, $6c, $75, 
  1816.         $65, $14, 0, $2a, 0, $1, 0, $5, 0, 0, 
  1817.         0, $61, $6c, $70, $68, $61, $14, 0, $b, 0, 
  1818.         $1f, 0, $1, 0, $8, 0, 0, 0, $43, $6f,
  1819.         $6c, $6f, $72, $52, $47, $42, $a, 0, $5, 0, 
  1820.         $81, $6e, $e1, $d3, $35, $78, $cf, $11, $8f, $52, 
  1821.         0, $40, $33, $35, $94, $a3, $2a, 0, $1, 0,
  1822.         $3, 0, 0, 0, $72, $65, $64, $14, 0, $2a,
  1823.         0, $1, 0, $5, 0, 0, 0, $67, $72, $65, 
  1824.         $65, $6e, $14, 0, $2a, 0, $1, 0, $4, 0, 
  1825.         0, 0, $62, $6c, $75, $65, $14, 0, $b, 0, 
  1826.         $1f, 0, $1, 0, $c, 0, 0, 0, $49, $6e, 
  1827.         $64, $65, $78, $65, $64, $43, $6f, $6c, $6f, $72, 
  1828.         $a, 0, $5, 0, $20, $b8, $30, $16, $42, $78, 
  1829.         $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, 
  1830.         $29, 0, $1, 0, $5, 0, 0, 0, $69, $6e, 
  1831.         $64, $65, $78, $14, 0, $1, 0, $9, 0, 0, 
  1832.         0, $43, $6f, $6c, $6f, $72, $52, $47, $42, $41, 
  1833.         $1, 0, $a, 0, 0, 0, $69, $6e, $64, $65, 
  1834.         $78, $43, $6f, $6c, $6f, $72, $14, 0, $b, 0, 
  1835.         $1f, 0, $1, 0, $7, 0, 0, 0, $42, $6f, 
  1836.         $6f, $6c, $65, $61, $6e, $a, 0, $5, 0, $a0, 
  1837.         $a6, $7d, $53, $37, $ca, $d0, $11, $94, $1c, 0, 
  1838.         $80, $c8, $c, $fa, $7b, $29, 0, $1, 0, $9, 
  1839.         0, 0, 0, $74, $72, $75, $65, $66, $61, $6c, 
  1840.         $73, $65, $14, 0, $b, 0, $1f, 0, $1, 0, 
  1841.         $9, 0, 0, 0, $42, $6f, $6f, $6c, $65, $61, 
  1842.         $6e, $32, $64, $a, 0, $5, 0, $63, $ae, $85, 
  1843.         $48, $e8, $78, $cf, $11, $8f, $52, 0, $40, $33, 
  1844.         $35, $94, $a3, $1, 0, $7, 0, 0, 0, $42, 
  1845.         $6f, $6f, $6c, $65, $61, $6e, $1, 0, $1, 0, 
  1846.         0, 0, $75, $14, 0, $1, 0, $7, 0, 0, 
  1847.         0, $42, $6f, $6f, $6c, $65, $61, $6e, $1, 0, 
  1848.         $1, 0, 0, 0, $76, $14, 0, $b, 0, $1f, 
  1849.         0, $1, 0, $c, 0, 0, 0, $4d, $61, $74,
  1850.         $65, $72, $69, $61, $6c, $57, $72, $61, $70, $a, 
  1851.         0, $5, 0, $60, $ae, $85, $48, $e8, $78, $cf, 
  1852.         $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1, 
  1853.         0, $7, 0, 0, 0, $42, $6f, $6f, $6c, $65, 
  1854.         $61, $6e, $1, 0, $1, 0, 0, 0, $75, $14, 
  1855.         0, $1, 0, $7, 0, 0, 0, $42, $6f, $6f,
  1856.         $6c, $65, $61, $6e, $1, 0, $1, 0, 0, 0, 
  1857.         $76, $14, 0, $b, 0, $1f, 0, $1, 0, $f, 
  1858.         0, 0, 0, $54, $65, $78, $74, $75, $72, $65,
  1859.         $46, $69, $6c, $65, $6e, $61, $6d, $65, $a, 0, 
  1860.         $5, 0, $e1, $90, $27, $a4, $10, $78, $cf, $11, 
  1861.         $8f, $52, 0, $40, $33, $35, $94, $a3, $31, 0, 
  1862.         $1, 0, $8, 0, 0, 0, $66, $69, $6c, $65,
  1863.         $6e, $61, $6d, $65, $14, 0, $b, 0, $1f, 0, 
  1864.         $1, 0, $8, 0, 0, 0, $4d, $61, $74, $65, 
  1865.         $72, $69, $61, $6c, $a, 0, $5, 0, $4d, $ab, 
  1866.         $82, $3d, $da, $62, $cf, $11, $ab, $39, 0, $20, 
  1867.         $af, $71, $e4, $33, $1, 0, $9, 0, 0, 0, 
  1868.         $43, $6f, $6c, $6f, $72, $52, $47, $42, $41, $1, 
  1869.         0, $9, 0, 0, 0, $66, $61, $63, $65, $43, 
  1870.         $6f, $6c, $6f, $72, $14, 0, $2a, 0, $1, 0, 
  1871.         $5, 0, 0, 0, $70, $6f, $77, $65, $72, $14, 
  1872.         0, $1, 0, $8, 0, 0, 0, $43, $6f, $6c, 
  1873.         $6f, $72, $52, $47, $42, $1, 0, $d, 0, 0, 
  1874.         0, $73, $70, $65, $63, $75, $6c, $61, $72, $43, 
  1875.         $6f, $6c, $6f, $72, $14, 0, $1, 0, $8, 0, 
  1876.         0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42, 
  1877.         $1, 0, $d, 0, 0, 0, $65, $6d, $69, $73,
  1878.         $73, $69, $76, $65, $43, $6f, $6c, $6f, $72, $14, 
  1879.         0, $e, 0, $12, 0, $12, 0, $12, 0, $f, 
  1880.         0, $b, 0, $1f, 0, $1, 0, $8, 0, 0, 
  1881.         0, $4d, $65, $73, $68, $46, $61, $63, $65, $a, 
  1882.         0, $5, 0, $5f, $ab, $82, $3d, $da, $62, $cf, 
  1883.         $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $29, 
  1884.         0, $1, 0, $12, 0, 0, 0, $6e, $46, $61, 
  1885.         $63, $65, $56, $65, $72, $74, $65, $78, $49, $6e, 
  1886.         $64, $69, $63, $65, $73, $14, 0, $34, 0, $29, 
  1887.         0, $1, 0, $11, 0, 0, 0, $66, $61, $63, 
  1888.         $65, $56, $65, $72, $74, $65, $78, $49, $6e, $64, 
  1889.         $69, $63, $65, $73, $e, 0, $1, 0, $12, 0, 
  1890.         0, 0, $6e, $46, $61, $63, $65, $56, $65, $72, 
  1891.         $74, $65, $78, $49, $6e, $64, $69, $63, $65, $73, 
  1892.         $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0,
  1893.         $d, 0, 0, 0, $4d, $65, $73, $68, $46, $61, 
  1894.         $63, $65, $57, $72, $61, $70, $73, $a, 0, $5, 
  1895.         0, $c0, $c5, $1e, $ed, $a8, $c0, $d0, $11, $94, 
  1896.         $1c, 0, $80, $c8, $c, $fa, $7b, $29, 0, $1, 
  1897.         0, $f, 0, 0, 0, $6e, $46, $61, $63, $65, 
  1898.         $57, $72, $61, $70, $56, $61, $6c, $75, $65, $73,
  1899.         $14, 0, $34, 0, $1, 0, $9, 0, 0, 0, 
  1900.         $42, $6f, $6f, $6c, $65, $61, $6e, $32, $64, $1, 
  1901.         0, $e, 0, 0, 0, $66, $61, $63, $65, $57, 
  1902.         $72, $61, $70, $56, $61, $6c, $75, $65, $73, $e,
  1903.         0, $1, 0, $f, 0, 0, 0, $6e, $46, $61, 
  1904.         $63, $65, $57, $72, $61, $70, $56, $61, $6c, $75, 
  1905.         $65, $73, $f, 0, $14, 0, $b, 0, $1f, 0,
  1906.         $1, 0, $11, 0, 0, 0, $4d, $65, $73, $68, 
  1907.         $54, $65, $78, $74, $75, $72, $65, $43, $6f, $6f, 
  1908.         $72, $64, $73, $a, 0, $5, 0, $40, $3f, $f2, 
  1909.         $f6, $86, $76, $cf, $11, $8f, $52, 0, $40, $33, 
  1910.         $35, $94, $a3, $29, 0, $1, 0, $e, 0, 0, 
  1911.         0, $6e, $54, $65, $78, $74, $75, $72, $65, $43, 
  1912.         $6f, $6f, $72, $64, $73, $14, 0, $34, 0, $1, 
  1913.         0, $8, 0, 0, 0, $43, $6f, $6f, $72, $64, 
  1914.         $73, $32, $64, $1, 0, $d, 0, 0, 0, $74, 
  1915.         $65, $78, $74, $75, $72, $65, $43, $6f, $6f, $72, 
  1916.         $64, $73, $e, 0, $1, 0, $e, 0, 0, 0, 
  1917.         $6e, $54, $65, $78, $74, $75, $72, $65, $43, $6f, 
  1918.         $6f, $72, $64, $73, $f, 0, $14, 0, $b, 0, 
  1919.         $1f, 0, $1, 0, $10, 0, 0, 0, $4d, $65, 
  1920.         $73, $68, $4d, $61, $74, $65, $72, $69, $61, $6c, 
  1921.         $4c, $69, $73, $74, $a, 0, $5, 0, $42, $3f, 
  1922.         $f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40, 
  1923.         $33, $35, $94, $a3, $29, 0, $1, 0, $a, 0, 
  1924.         0, 0, $6e, $4d, $61, $74, $65, $72, $69, $61, 
  1925.         $6c, $73, $14, 0, $29, 0, $1, 0, $c, 0, 
  1926.         0, 0, $6e, $46, $61, $63, $65, $49, $6e, $64, 
  1927.         $65, $78, $65, $73, $14, 0, $34, 0, $29, 0, 
  1928.         $1, 0, $b, 0, 0, 0, $66, $61, $63, $65, 
  1929.         $49, $6e, $64, $65, $78, $65, $73, $e, 0, $1,
  1930.         0, $c, 0, 0, 0, $6e, $46, $61, $63, $65, 
  1931.         $49, $6e, $64, $65, $78, $65, $73, $f, 0, $14, 
  1932.         0, $e, 0, $1, 0, $8, 0, 0, 0, $4d, 
  1933.         $61, $74, $65, $72, $69, $61, $6c, $f, 0, $b,
  1934.         0, $1f, 0, $1, 0, $b, 0, 0, 0, $4d, 
  1935.         $65, $73, $68, $4e, $6f, $72, $6d, $61, $6c, $73, 
  1936.         $a, 0, $5, 0, $43, $3f, $f2, $f6, $86, $76, 
  1937.         $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, 
  1938.         $29, 0, $1, 0, $8, 0, 0, 0, $6e, $4e,
  1939.         $6f, $72, $6d, $61, $6c, $73, $14, 0, $34, 0, 
  1940.         $1, 0, $6, 0, 0, 0, $56, $65, $63, $74, 
  1941.         $6f, $72, $1, 0, $7, 0, 0, 0, $6e, $6f, 
  1942.         $72, $6d, $61, $6c, $73, $e, 0, $1, 0, $8,
  1943.         0, 0, 0, $6e, $4e, $6f, $72, $6d, $61, $6c, 
  1944.         $73, $f, 0, $14, 0, $29, 0, $1, 0, $c, 
  1945.         0, 0, 0, $6e, $46, $61, $63, $65, $4e, $6f, 
  1946.         $72, $6d, $61, $6c, $73, $14, 0, $34, 0, $1, 
  1947.         0, $8, 0, 0, 0, $4d, $65, $73, $68, $46, 
  1948.         $61, $63, $65, $1, 0, $b, 0, 0, 0, $66, 
  1949.         $61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73, 
  1950.         $e, 0, $1, 0, $c, 0, 0, 0, $6e, $46, 
  1951.         $61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73, 
  1952.         $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0, 
  1953.         $10, 0, 0, 0, $4d, $65, $73, $68, $56, $65, 
  1954.         $72, $74, $65, $78, $43, $6f, $6c, $6f, $72, $73, 
  1955.         $a, 0, $5, 0, $21, $b8, $30, $16, $42, $78, 
  1956.         $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, 
  1957.         $29, 0, $1, 0, $d, 0, 0, 0, $6e, $56, 
  1958.         $65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72, 
  1959.         $73, $14, 0, $34, 0, $1, 0, $c, 0, 0, 
  1960.         0, $49, $6e, $64, $65, $78, $65, $64, $43, $6f, 
  1961.         $6c, $6f, $72, $1, 0, $c, 0, 0, 0, $76,
  1962.         $65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72, 
  1963.         $73, $e, 0, $1, 0, $d, 0, 0, 0, $6e, 
  1964.         $56, $65, $72, $74, $65, $78, $43, $6f, $6c, $6f, 
  1965.         $72, $73, $f, 0, $14, 0, $b, 0, $1f, 0, 
  1966.         $1, 0, $4, 0, 0, 0, $4d, $65, $73, $68,
  1967.         $a, 0, $5, 0, $44, $ab, $82, $3d, $da, $62, 
  1968.         $cf, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, 
  1969.         $29, 0, $1, 0, $9, 0, 0, 0, $6e, $56, 
  1970.         $65, $72, $74, $69, $63, $65, $73, $14, 0, $34, 
  1971.         0, $1, 0, $6, 0, 0, 0, $56, $65, $63, 
  1972.         $74, $6f, $72, $1, 0, $8, 0, 0, 0, $76, 
  1973.         $65, $72, $74, $69, $63, $65, $73, $e, 0, $1, 
  1974.         0, $9, 0, 0, 0, $6e, $56, $65, $72, $74, 
  1975.         $69, $63, $65, $73, $f, 0, $14, 0, $29, 0, 
  1976.         $1, 0, $6, 0, 0, 0, $6e, $46, $61, $63, 
  1977.         $65, $73, $14, 0, $34, 0, $1, 0, $8, 0, 
  1978.         0, 0, $4d, $65, $73, $68, $46, $61, $63, $65,
  1979.         $1, 0, $5, 0, 0, 0, $66, $61, $63, $65, 
  1980.         $73, $e, 0, $1, 0, $6, 0, 0, 0, $6e, 
  1981.         $46, $61, $63, $65, $73, $f, 0, $14, 0, $e, 
  1982.         0, $12, 0, $12, 0, $12, 0, $f, 0, $b,
  1983.         0, $1f, 0, $1, 0, $14, 0, 0, 0, $46, 
  1984.         $72, $61, $6d, $65, $54, $72, $61, $6e, $73, $66, 
  1985.         $6f, $72, $6d, $4d, $61, $74, $72, $69, $78, $a, 
  1986.         0, $5, 0, $41, $3f, $f2, $f6, $86, $76, $cf, 
  1987.         $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1, 
  1988.         0, $9, 0, 0, 0, $4d, $61, $74, $72, $69, 
  1989.         $78, $34, $78, $34, $1, 0, $b, 0, 0, 0,
  1990.         $66, $72, $61, $6d, $65, $4d, $61, $74, $72, $69, 
  1991.         $78, $14, 0, $b, 0, $1f, 0, $1, 0, $5, 
  1992.         0, 0, 0, $46, $72, $61, $6d, $65, $a, 0, 
  1993.         $5, 0, $46, $ab, $82, $3d, $da, $62, $cf, $11, 
  1994.         $ab, $39, 0, $20, $af, $71, $e4, $33, $e, 0, 
  1995.         $12, 0, $12, 0, $12, 0, $f, 0, $b, 0, 
  1996.         $1f, 0, $1, 0, $9, 0, 0, 0, $46, $6c, 
  1997.         $6f, $61, $74, $4b, $65, $79, $73, $a, 0, $5, 
  1998.         0, $a9, $46, $dd, $10, $5b, $77, $cf, $11, $8f, 
  1999.         $52, 0, $40, $33, $35, $94, $a3, $29, 0, $1, 
  2000.         0, $7, 0, 0, 0, $6e, $56, $61, $6c, $75, 
  2001.         $65, $73, $14, 0, $34, 0, $2a, 0, $1, 0, 
  2002.         $6, 0, 0, 0, $76, $61, $6c, $75, $65, $73, 
  2003.         $e, 0, $1, 0, $7, 0, 0, 0, $6e, $56,
  2004.         $61, $6c, $75, $65, $73, $f, 0, $14, 0, $b, 
  2005.         0, $1f, 0, $1, 0, $e, 0, 0, 0, $54, 
  2006.         $69, $6d, $65, $64, $46, $6c, $6f, $61, $74, $4b, 
  2007.         $65, $79, $73, $a, 0, $5, 0, $80, $b1, $6, 
  2008.         $f4, $3b, $7b, $cf, $11, $8f, $52, 0, $40, $33, 
  2009.         $35, $94, $a3, $29, 0, $1, 0, $4, 0, 0, 
  2010.         0, $74, $69, $6d, $65, $14, 0, $1, 0, $9, 
  2011.         0, 0, 0, $46, $6c, $6f, $61, $74, $4b, $65, 
  2012.         $79, $73, $1, 0, $6, 0, 0, 0, $74, $66, 
  2013.         $6b, $65, $79, $73, $14, 0, $b, 0, $1f, 0, 
  2014.         $1, 0, $c, 0, 0, 0, $41, $6e, $69, $6d, 
  2015.         $61, $74, $69, $6f, $6e, $4b, $65, $79, $a, 0, 
  2016.         $5, 0, $a8, $46, $dd, $10, $5b, $77, $cf, $11, 
  2017.         $8f, $52, 0, $40, $33, $35, $94, $a3, $29, 0,
  2018.         $1, 0, $7, 0, 0, 0, $6b, $65, $79, $54,
  2019.         $79, $70, $65, $14, 0, $29, 0, $1, 0, $5, 
  2020.         0, 0, 0, $6e, $4b, $65, $79, $73, $14, 0, 
  2021.         $34, 0, $1, 0, $e, 0, 0, 0, $54, $69, 
  2022.         $6d, $65, $64, $46, $6c, $6f, $61, $74, $4b, $65,
  2023.         $79, $73, $1, 0, $4, 0, 0, 0, $6b, $65, 
  2024.         $79, $73, $e, 0, $1, 0, $5, 0, 0, 0, 
  2025.         $6e, $4b, $65, $79, $73, $f, 0, $14, 0, $b, 
  2026.         0, $1f, 0, $1, 0, $10, 0, 0, 0, $41, 
  2027.         $6e, $69, $6d, $61, $74, $69, $6f, $6e, $4f, $70, 
  2028.         $74, $69, $6f, $6e, $73, $a, 0, $5, 0, $c0, 
  2029.         $56, $bf, $e2, $f, $84, $cf, $11, $8f, $52, 0, 
  2030.         $40, $33, $35, $94, $a3, $29, 0, $1, 0, $a, 
  2031.         0, 0, 0, $6f, $70, $65, $6e, $63, $6c, $6f, 
  2032.         $73, $65, $64, $14, 0, $29, 0, $1, 0, $f, 
  2033.         0, 0, 0, $70, $6f, $73, $69, $74, $69, $6f, 
  2034.         $6e, $71, $75, $61, $6c, $69, $74, $79, $14, 0, 
  2035.         $b, 0, $1f, 0, $1, 0, $9, 0, 0, 0, 
  2036.         $41, $6e, $69, $6d, $61, $74, $69, $6f, $6e, $a, 
  2037.         0, $5, 0, $4f, $ab, $82, $3d, $da, $62, $cf, 
  2038.         $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $e, 
  2039.         0, $12, 0, $12, 0, $12, 0, $f, 0, $b, 
  2040.         0, $1f, 0, $1, 0, $c, 0, 0, 0, $41,
  2041.         $6e, $69, $6d, $61, $74, $69, $6f, $6e, $53, $65, 
  2042.         $74, $a, 0, $5, 0, $50, $ab, $82, $3d, $da, 
  2043.         $62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4, 
  2044.         $33, $e, 0, $1, 0, $9, 0, 0, 0, $41, 
  2045.         $6e, $69, $6d, $61, $74, $69, $6f, $6e, $f, 0,
  2046.         $b, 0, $1f, 0, $1, 0, $a, 0, 0, 0, 
  2047.         $49, $6e, $6c, $69, $6e, $65, $44, $61, $74, $61, 
  2048.         $a, 0, $5, 0, $a0, $ee, $23, $3a, $b1, $94, 
  2049.         $d0, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, 
  2050.         $e, 0, $1, 0, $6, 0, 0, 0, $42, $49, 
  2051.         $4e, $41, $52, $59, $f, 0, $b, 0, $1f, 0, 
  2052.         $1, 0, $3, 0, 0, 0, $55, $72, $6c, $a, 
  2053.         0, $5, 0, $a1, $ee, $23, $3a, $b1, $94, $d0, 
  2054.         $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $29, 
  2055.         0, $1, 0, $5, 0, 0, 0, $6e, $55, $72, 
  2056.         $6c, $73, $14, 0, $34, 0, $31, 0, $1, 0, 
  2057.         $4, 0, 0, 0, $75, $72, $6c, $73, $e, 0, 
  2058.         $1, 0, $5, 0, 0, 0, $6e, $55, $72, $6c,
  2059.         $73, $f, 0, $14, 0, $b, 0, $1f, 0, $1, 
  2060.         0, $f, 0, 0, 0, $50, $72, $6f, $67, $72, 
  2061.         $65, $73, $73, $69, $76, $65, $4d, $65, $73, $68, 
  2062.         $a, 0, $5, 0, $60, $c3, $63, $8a, $7d, $99,
  2063.         $d0, $11, $94, $1c, 0, $80, $c8, $c, $fa, $7b, 
  2064.         $e, 0, $1, 0, $3, 0, 0, 0, $55, $72, 
  2065.         $6c, $13, 0, $1, 0, $a, 0, 0, 0, $49, 
  2066.         $6e, $6c, $69, $6e, $65, $44, $61, $74, $61, $f, 
  2067.         0, $b, 0, $1f, 0, $1, 0, $4, 0, 0, 
  2068.         0, $47, $75, $69, $64, $a, 0, $5, 0, $e0, 
  2069.         $90, $27, $a4, $10, $78, $cf, $11, $8f, $52, 0, 
  2070.         $40, $33, $35, $94, $a3, $29, 0, $1, 0, $5, 
  2071.         0, 0, 0, $64, $61, $74, $61, $31, $14, 0, 
  2072.         $28, 0, $1, 0, $5, 0, 0, 0, $64, $61, 
  2073.         $74, $61, $32, $14, 0, $28, 0, $1, 0, $5,
  2074.         0, 0, 0, $64, $61, $74, $61, $33, $14, 0, 
  2075.         $34, 0, $2d, 0, $1, 0, $5, 0, 0, 0, 
  2076.         $64, $61, $74, $61, $34, $e, 0, $3, 0, $8, 
  2077.         0, 0, 0, $f, 0, $14, 0, $b, 0, $1f,
  2078.         0, $1, 0, $e, 0, 0, 0, $53, $74, $72,
  2079.         $69, $6e, $67, $50, $72, $6f, $70, $65, $72, $74,
  2080.         $79, $a, 0, $5, 0, $e0, $21, $f, $7f, $e1,
  2081.         $bf, $d1, $11, $82, $c0, 0, $a0, $c9, $69, $72,
  2082.         $71, $31, 0, $1, 0, $3, 0, 0, 0, $6b,
  2083.         $65, $79, $14, 0, $31, 0, $1, 0, $5, 0,
  2084.         0, 0, $76, $61, $6c, $75, $65, $14, 0, $b,
  2085.         0, $1f, 0, $1, 0, $b, 0, 0, 0, $50,
  2086.         $72, $6f, $70, $65, $72, $74, $79, $42, $61, $67,
  2087.         $a, 0, $5, 0, $e1, $21, $f, $7f, $e1, $bf,
  2088.         $d1, $11, $82, $c0, 0, $a0, $c9, $69, $72, $71,
  2089.         $e, 0, $1, 0, $e, 0, 0, 0, $53, $74,
  2090.         $72, $69, $6e, $67, $50, $72, $6f, $70, $65, $72,
  2091.         $74, $79, $f, 0, $b, 0, $1f, 0, $1, 0,
  2092.         $e, 0, 0, 0, $45, $78, $74, $65, $72, $6e,
  2093.         $61, $6c, $56, $69, $73, $75, $61, $6c, $a, 0,
  2094.         $5, 0, $a0, $6a, $11, $98, $ba, $bd, $d1, $11,
  2095.         $82, $c0, 0, $a0, $c9, $69, $72, $71, $1, 0,
  2096.         $4, 0, 0, 0, $47, $75, $69, $64, $1, 0,
  2097.         $12, 0, 0, 0, $67, $75, $69, $64, $45, $78,
  2098.         $74, $65, $72, $6e, $61, $6c, $56, $69, $73, $75,
  2099.         $61, $6c, $14, 0, $e, 0, $12, 0, $12, 0,
  2100.         $12, 0, $f, 0, $b, 0);
  2101. {$ENDIF}
  2102. implementation
  2103. {$IFDEF DIRECT3D_VERSION_LESS_8}
  2104. {$IFDEF DIRECT3D_VERSION_7}
  2105. function D3DFVF_TEXCOORDSIZE3(CoordIndex: DWORD): DWORD;
  2106. begin
  2107.   Result := (D3DFVF_TEXTUREFORMAT3 shl (CoordIndex*2 + 16));
  2108. end;
  2109. function D3DFVF_TEXCOORDSIZE2(CoordIndex: DWORD): DWORD;
  2110. begin
  2111.   Result := (D3DFVF_TEXTUREFORMAT2);
  2112. end;
  2113. function D3DFVF_TEXCOORDSIZE4(CoordIndex: DWORD): DWORD;
  2114. begin
  2115.   Result := (D3DFVF_TEXTUREFORMAT4 shl (CoordIndex*2 + 16));
  2116. end;
  2117. function D3DFVF_TEXCOORDSIZE1(CoordIndex: DWORD): DWORD;
  2118. begin
  2119.   Result := (D3DFVF_TEXTUREFORMAT1 shl (CoordIndex*2 + 16));
  2120. end;
  2121. {$ENDIF} // DIRECT3D_VERSION_7
  2122. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  2123. function D3DVal(val: variant): Single;
  2124. begin
  2125.   Result := val;
  2126. end;
  2127. function D3DDivide(a, b: double): Single;
  2128. begin
  2129.   Result := a / b;
  2130. end;
  2131. function D3DMultiply(a, b: double): Single;
  2132. begin
  2133.   Result := a * b;
  2134. end;
  2135. // #define CI_GETALPHA(ci)    ((ci) >> 24)
  2136. function CI_GETALPHA(ci: DWORD): DWORD;
  2137. begin
  2138.   Result := ci shr 24;
  2139. end;
  2140. // #define CI_GETINDEX(ci)    (((ci) >> 8) & 0xffff)
  2141. function CI_GETINDEX(ci: DWORD): DWORD;
  2142. begin
  2143.   Result := (ci shr 8) and $ffff;
  2144. end;
  2145. // #define CI_GETFRACTION(ci) ((ci) & 0xff)
  2146. function CI_GETFRACTION(ci: DWORD): DWORD;
  2147. begin
  2148.   Result := ci and $ff;
  2149. end;
  2150. // #define CI_ROUNDINDEX(ci)  CI_GETINDEX((ci) + 0x80)
  2151. function CI_ROUNDINDEX(ci: DWORD): DWORD;
  2152. begin
  2153.   Result := CI_GETINDEX(ci + $80);
  2154. end;
  2155. // #define CI_MASKALPHA(ci)   ((ci) & 0xffffff)
  2156. function CI_MASKALPHA(ci: DWORD): DWORD;
  2157. begin
  2158.   Result := ci and $ffffff;
  2159. end;
  2160. // #define CI_MAKE(a, i, f)    (((a) << 24) | ((i) << 8) | (f))
  2161. function CI_MAKE(a,i,f: DWORD): DWORD;
  2162. begin
  2163.   Result := (a shl 24) or (i shl 8) or f;
  2164. end;
  2165. // #define RGBA_GETALPHA(rgb)      ((rgb) >> 24)
  2166. function RGBA_GETALPHA(rgb: TD3DColor): DWORD;
  2167. begin
  2168.   Result := rgb shr 24;
  2169. end;
  2170. // #define RGBA_GETRED(rgb)        (((rgb) >> 16) & 0xff)
  2171. function RGBA_GETRED(rgb: TD3DColor): DWORD;
  2172. begin
  2173.   Result := (rgb shr 16) and $ff;
  2174. end;
  2175. // #define RGBA_GETGREEN(rgb)      (((rgb) >> 8) & 0xff)
  2176. function RGBA_GETGREEN(rgb: TD3DColor): DWORD;
  2177. begin
  2178.   Result := (rgb shr 8) and $ff;
  2179. end;
  2180. // #define RGBA_GETBLUE(rgb)       ((rgb) & 0xff)
  2181. function RGBA_GETBLUE(rgb: TD3DColor): DWORD;
  2182. begin
  2183.   Result := rgb and $ff;
  2184. end;
  2185. // #define RGBA_MAKE(r, g, b, a)   ((TD3DColor) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
  2186. function RGBA_MAKE(r, g, b, a: DWORD): TD3DColor;
  2187. begin
  2188.   Result := (a shl 24) or (r shl 16) or (g shl 8) or b;
  2189. end;
  2190. // #define D3DRGB(r, g, b) 
  2191. //     (0xff000000L | (((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255))
  2192. function D3DRGB(r, g, b: Single): TD3DColor;
  2193. begin
  2194.   Result := $ff000000 or DWORD(Round(r * 255) shl 16)
  2195.                       or DWORD(Round(g * 255) shl 8)
  2196.                       or DWORD(Round(b * 255));
  2197. end;
  2198. // #define D3DRGBA(r, g, b, a) 
  2199. //     (  (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) 
  2200. //     |   (((long)((g) * 255)) << 8) | (long)((b) * 255) 
  2201. //    )
  2202. function D3DRGBA(r, g, b, a: Single): TD3DColor;
  2203. begin
  2204.   Result := DWORD(Round(a * 255) shl 24) or DWORD(Round(r * 255) shl 16)
  2205.                                          or DWORD(Round(g * 255) shl 8)
  2206.                                          or DWORD(Round(b * 255));
  2207. end;
  2208. // #define RGB_GETRED(rgb)         (((rgb) >> 16) & 0xff)
  2209. function RGB_GETRED(rgb: TD3DColor): DWORD;
  2210. begin
  2211.   Result := (rgb shr 16) and $ff;
  2212. end;
  2213. // #define RGB_GETGREEN(rgb)       (((rgb) >> 8) & 0xff)
  2214. function RGB_GETGREEN(rgb: TD3DColor): DWORD;
  2215. begin
  2216.   Result := (rgb shr 8) and $ff;
  2217. end;
  2218. // #define RGB_GETBLUE(rgb)        ((rgb) & 0xff)
  2219. function RGB_GETBLUE(rgb: TD3DColor): DWORD;
  2220. begin
  2221.   Result := rgb and $ff;
  2222. end;
  2223. // #define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
  2224. function RGBA_SETALPHA(rgba: TD3DColor; x: DWORD): TD3DColor;
  2225. begin
  2226.   Result := (x shl 24) or (rgba and $00ffffff);
  2227. end;
  2228. // #define RGB_MAKE(r, g, b)       ((TD3DColor) (((r) << 16) | ((g) << 8) | (b)))
  2229. function RGB_MAKE(r, g, b: DWORD): TD3DColor;
  2230. begin
  2231.   Result := (r shl 16) or (g shl 8) or b;
  2232. end;
  2233. // #define RGBA_TORGB(rgba)       ((TD3DColor) ((rgba) & 0xffffff))
  2234. function RGBA_TORGB(rgba: TD3DColor): TD3DColor;
  2235. begin
  2236.   Result := rgba and $00ffffff;
  2237. end;
  2238. // #define RGB_TORGBA(rgb)        ((TD3DColor) ((rgb) | 0xff000000))
  2239. function RGB_TORGBA(rgb: TD3DColor): TD3DColor;
  2240. begin
  2241.   Result := rgb or $ff000000;
  2242. end;
  2243. function D3DSTATE_OVERRIDE(StateType: DWORD): DWORD;
  2244. begin
  2245.   Result := StateType + D3DSTATE_OVERRIDE_BIAS;
  2246. end;
  2247. function D3DTRIFLAG_STARTFLAT(len: DWORD): DWORD;
  2248. begin
  2249.   if not (len in [1..29]) then len := 0;
  2250.   Result := len;
  2251. end;
  2252. // #define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))
  2253. function D3DRENDERSTATE_STIPPLEPATTERN(y: Integer): TD3DRenderStateType;
  2254. begin
  2255.   Result := TD3DRenderStateType(Ord(D3DRENDERSTATE_STIPPLEPATTERN00) + y);
  2256. end;
  2257.     // Addition and subtraction
  2258. function VectorAdd(const v1, v2: TD3DVector): TD3DVector;
  2259. begin
  2260.   Result.x := v1.x+v2.x;
  2261.   Result.y := v1.y+v2.y;
  2262.   Result.z := v1.z+v2.z;
  2263. end;
  2264. function VectorSub(const v1, v2: TD3DVector): TD3DVector;
  2265. begin
  2266.   Result.x := v1.x-v2.x;
  2267.   Result.y := v1.y-v2.y;
  2268.   Result.z := v1.z-v2.z;
  2269. end;
  2270.     // Scalar multiplication and division
  2271. function VectorMulS(const v: TD3DVector; s: TD3DValue): TD3DVector;
  2272. begin
  2273.   Result.x := v.x*s;
  2274.   Result.y := v.y*s;
  2275.   Result.z := v.z*s;
  2276. end;
  2277. function VectorDivS(const v: TD3DVector; s: TD3DValue): TD3DVector;
  2278. begin
  2279.   Result.x := v.x/s;
  2280.   Result.y := v.y/s;
  2281.   Result.z := v.z/s;
  2282. end;
  2283.     // Memberwise multiplication and division
  2284. function VectorMul(const v1, v2: TD3DVector): TD3DVector;
  2285. begin
  2286.   Result.x := v1.x*v2.x;
  2287.   Result.y := v1.y*v2.y;
  2288.   Result.z := v1.z*v2.z;
  2289. end;
  2290. function VectorDiv(const v1, v2: TD3DVector): TD3DVector;
  2291. begin
  2292.   Result.x := v1.x/v2.x;
  2293.   Result.y := v1.y/v2.y;
  2294.   Result.z := v1.z/v2.z;
  2295. end;
  2296.     // Vector dominance
  2297. function VectorSmaller(v1, v2: TD3DVector): boolean;
  2298. begin
  2299.   result := (v1.x < v2.x) and (v1.y < v2.y) and (v1.z < v2.z);
  2300. end;
  2301. function VectorSmallerEqual(v1, v2: TD3DVector): boolean;
  2302. begin
  2303.   result := (v1.x <= v2.x) and (v1.y <= v2.y) and (v1.z <= v2.z);
  2304. end;
  2305.     // Bitwise equality
  2306. function VectorEqual(v1, v2: TD3DVector): boolean;
  2307. begin
  2308.   result := (v1.x = v2.x) and (v1.y = v2.y) and (v1.z = v2.z);
  2309. end;
  2310.     // Length-related functions
  2311. function VectorSquareMagnitude(v: TD3DVector): TD3DValue;
  2312. begin
  2313.   result := (v.x*v.x) + (v.y*v.y) + (v.z*v.z);
  2314. end;
  2315. function VectorMagnitude(v: TD3DVector): TD3DValue;
  2316. begin
  2317.   result := sqrt((v.x*v.x) + (v.y*v.y) + (v.z*v.z));
  2318. end;
  2319.     // Returns vector with same direction and unit length
  2320. function VectorNormalize(const v: TD3DVector): TD3DVector;
  2321. begin
  2322.   result := VectorDivS(v,VectorMagnitude(v));
  2323. end;
  2324.     // Return min/max component of the input vector
  2325. function VectorMin(v: TD3DVector): TD3DValue;
  2326. var
  2327.   ret : TD3DValue;
  2328. begin
  2329.   ret := v.x;
  2330.   if (v.y < ret) then ret := v.y;
  2331.   if (v.z < ret) then ret := v.z;
  2332.   Result := ret;
  2333. end;
  2334. function VectorMax(v: TD3DVector): TD3DValue;
  2335. var
  2336.   ret : TD3DValue;
  2337. begin
  2338.   ret := v.x;
  2339.   if (ret < v.y) then ret := v.y;
  2340.   if (ret < v.z) then ret := v.z;
  2341.   Result := ret;
  2342. end;
  2343.     // Return memberwise min/max of input vectors
  2344. function VectorMinimize(const v1, v2: TD3DVector): TD3DVector;
  2345. begin
  2346.   if v1.x < v2.x then Result.x := v1.x else Result.x := v2.x;
  2347.   if v1.y < v2.y then Result.y := v1.y else Result.y := v2.y;
  2348.   if v1.z < v2.z then Result.z := v1.z else Result.z := v2.z;
  2349. end;
  2350. function VectorMaximize(const v1, v2: TD3DVector): TD3DVector;
  2351. begin
  2352.   if v1.x > v2.x then Result.x := v1.x else Result.x := v2.x;
  2353.   if v1.y > v2.y then Result.y := v1.y else Result.y := v2.y;
  2354.   if v1.z > v2.z then Result.z := v1.z else Result.z := v2.z;
  2355. end;
  2356.     // Dot and cross product
  2357. function VectorDotProduct(v1, v2: TD3DVector): TD3DValue;
  2358. begin
  2359.   Result := (v1.x*v2.x) + (v1.y * v2.y) + (v1.z*v2.z);
  2360. end;
  2361. function VectorCrossProduct(const v1, v2: TD3DVector): TD3DVector;
  2362. begin
  2363.   Result.x := (v1.y*v2.z) - (v1.z*v2.y);
  2364.   Result.y := (v1.z*v2.x) - (v1.x*v2.z);
  2365.   Result.z := (v1.x*v2.y) - (v1.y*v2.x);
  2366. end;
  2367. procedure DisableFPUExceptions;
  2368. var
  2369.   FPUControlWord: Word;
  2370. asm
  2371.   FSTCW   FPUControlWord;
  2372.   OR      FPUControlWord, $4 + $1; { Divide by zero + invalid operation }
  2373.   FLDCW   FPUControlWord;
  2374. end;
  2375. procedure EnableFPUExceptions;
  2376. var
  2377.   FPUControlWord: Word;
  2378. asm
  2379.   FSTCW   FPUControlWord;
  2380.   AND     FPUControlWord, $FFFF - $4 - $1; { Divide by zero + invalid operation }
  2381.   FLDCW   FPUControlWord;
  2382. end;
  2383. {$IFDEF DIRECT3D_VERSION_LESS_8}
  2384. function D3DErrorString(Value: HResult): String; //Full description not available yet
  2385. begin
  2386.   case Value of
  2387.     D3D_OK: Result := 'No error';
  2388.     D3DERR_BADMAJORVERSION: Result := 'D3DERR_BADMAJORVERSION';
  2389.     D3DERR_BADMINORVERSION: Result := 'D3DERR_BADMINORVERSION';
  2390.   {$IFDEF DIRECT3D_VERSION_5}
  2391.     D3DERR_INVALID_DEVICE: Result := 'D3DERR_INITFAILED';
  2392.     D3DERR_INITFAILED: Result := 'D3DERR_INITFAILED';
  2393.     D3DERR_DEVICEAGGREGATED: Result := 'D3DERR_DEVICEAGGREGATED';
  2394.   {$ENDIF} // DIRECT3D_VERSION_5
  2395.     D3DERR_EXECUTE_CREATE_FAILED: Result := 'D3DERR_EXECUTE_CREATE_FAILED';
  2396.     D3DERR_EXECUTE_DESTROY_FAILED: Result := 'D3DERR_EXECUTE_DESTROY_FAILED';
  2397.     D3DERR_EXECUTE_LOCK_FAILED: Result := 'D3DERR_EXECUTE_LOCK_FAILED';
  2398.     D3DERR_EXECUTE_UNLOCK_FAILED: Result := 'D3DERR_EXECUTE_UNLOCK_FAILED';
  2399.     D3DERR_EXECUTE_LOCKED: Result := 'D3DERR_EXECUTE_LOCKED';
  2400.     D3DERR_EXECUTE_NOT_LOCKED: Result := 'D3DERR_EXECUTE_NOT_LOCKED';
  2401.     D3DERR_EXECUTE_FAILED: Result := 'D3DERR_EXECUTE_FAILED';
  2402.     D3DERR_EXECUTE_CLIPPED_FAILED: Result := 'D3DERR_EXECUTE_CLIPPED_FAILED';
  2403.     D3DERR_TEXTURE_NO_SUPPORT: Result := 'D3DERR_TEXTURE_NO_SUPPORT';
  2404.     D3DERR_TEXTURE_CREATE_FAILED: Result := 'D3DERR_TEXTURE_CREATE_FAILED';
  2405.     D3DERR_TEXTURE_DESTROY_FAILED: Result := 'D3DERR_TEXTURE_DESTROY_FAILED';
  2406.     D3DERR_TEXTURE_LOCK_FAILED: Result := 'D3DERR_TEXTURE_LOCK_FAILED';
  2407.     D3DERR_TEXTURE_UNLOCK_FAILED: Result := 'D3DERR_TEXTURE_UNLOCK_FAILED';
  2408.     D3DERR_TEXTURE_LOAD_FAILED: Result := 'D3DERR_TEXTURE_LOAD_FAILED';
  2409.     D3DERR_TEXTURE_SWAP_FAILED: Result := 'D3DERR_TEXTURE_SWAP_FAILED';
  2410.     D3DERR_TEXTURE_LOCKED: Result := 'D3DERR_TEXTURELOCKED';
  2411.     D3DERR_TEXTURE_NOT_LOCKED: Result := 'D3DERR_TEXTURE_NOT_LOCKED';
  2412.     D3DERR_TEXTURE_GETSURF_FAILED: Result := 'D3DERR_TEXTURE_GETSURF_FAILED';
  2413.     D3DERR_MATRIX_CREATE_FAILED: Result := 'D3DERR_MATRIX_CREATE_FAILED';
  2414.     D3DERR_MATRIX_DESTROY_FAILED: Result := 'D3DERR_MATRIX_DESTROY_FAILED';
  2415.     D3DERR_MATRIX_SETDATA_FAILED: Result := 'D3DERR_MATRIX_SETDATA_FAILED';
  2416.     D3DERR_MATRIX_GETDATA_FAILED: Result := 'D3DERR_MATRIX_GETDATA_FAILED';
  2417.     D3DERR_SETVIEWPORTDATA_FAILED: Result := 'D3DERR_SETVIEWPORTDATA_FAILED';
  2418.   {$IFDEF DIRECT3D_VERSION_5}
  2419.     D3DERR_INVALIDCURRENTVIEWPORT: Result := 'D3DERR_INVALIDCURRENTVIEWPORT';
  2420.     D3DERR_INVALIDPRIMITIVETYPE: Result := 'D3DERR_INVALIDPRIMITIVETYPE';
  2421.     D3DERR_INVALIDVERTEXTYPE: Result := 'D3DERR_INVALIDVERTEXTYPE';
  2422.     D3DERR_TEXTURE_BADSIZE: Result := 'D3DERR_TEXTURE_BADSIZE';
  2423.     D3DERR_INVALIDRAMPTEXTURE: Result := 'D3DERR_INVALIDRAMPTEXTURE';
  2424.   {$ENDIF} // DIRECT3D_VERSION_5
  2425.     D3DERR_MATERIAL_CREATE_FAILED: Result := 'D3DERR_MATERIAL_CREATE_FAILED';
  2426.     D3DERR_MATERIAL_DESTROY_FAILED: Result := 'D3DERR_MATERIAL_DESTROY_FAILED';
  2427.     D3DERR_MATERIAL_SETDATA_FAILED: Result := 'D3DERR_MATERIAL_SETDATA_FAILED';
  2428.     D3DERR_MATERIAL_GETDATA_FAILED: Result := 'D3DERR_MATERIAL_GETDATA_FAILED';
  2429.   {$IFDEF DIRECT3D_VERSION_5}
  2430.     D3DERR_INVALIDPALETTE: Result := 'D3DERR_INVALIDPALETTE';
  2431.     D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY: Result := 'D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY';
  2432.     D3DERR_ZBUFF_NEEDS_VIDEOMEMORY: Result := 'D3DERR_ZBUFF_NEEDS_VIDEOMEMORY';
  2433.     D3DERR_SURFACENOTINVIDMEM: Result := 'D3DERR_SURFACENOTINVIDMEM';
  2434.   {$ENDIF} // DIRECT3D_VERSION_5
  2435.     D3DERR_LIGHT_SET_FAILED: Result := 'D3DERR_LIGHT_SET_FAILED';
  2436.   {$IFDEF DIRECT3D_VERSION_5}
  2437.     D3DERR_LIGHTHASVIEWPORT: Result := 'D3DERR_LIGHTHASVIEWPORT';
  2438.     D3DERR_LIGHTNOTINTHISVIEWPORT: Result := 'D3DERR_LIGHTNOTINTHISVIEWPORT';
  2439.   {$ENDIF} // DIRECT3D_VERSION_5
  2440.     D3DERR_SCENE_IN_SCENE: Result := 'D3DERR_SCENE_IN_SCENE';
  2441.     D3DERR_SCENE_NOT_IN_SCENE: Result := 'D3DERR_SCENE_NOT_IN_SCENE';
  2442.     D3DERR_SCENE_BEGIN_FAILED: Result := 'D3DERR_SCENE_BEGIN_FAILED';
  2443.     D3DERR_SCENE_END_FAILED: Result := 'D3DERR_SCENE_END_FAILED';
  2444.   {$IFDEF DIRECT3D_VERSION_5}
  2445.     D3DERR_INBEGIN: Result := 'D3DERR_INBEGIN';
  2446.     D3DERR_NOTINBEGIN: Result := 'D3DERR_NOTINBEGIN';
  2447.     D3DERR_NOVIEWPORTS: Result := 'D3DERR_NOVIEWPORTS';
  2448.     D3DERR_VIEWPORTDATANOTSET: Result := 'D3DERR_VIEWPORTDATANOTSET';
  2449.     D3DERR_VIEWPORTHASNODEVICE: Result := 'D3DERR_VIEWPORTHASNODEVICE';
  2450.     D3DERR_NOCURRENTVIEWPORT: Result := 'D3DERR_NOCURRENTVIEWPORT';
  2451.   {$ENDIF} // DIRECT3D_VERSION_5
  2452.   {$IFDEF DIRECT3D_VERSION_6}
  2453.     D3DERR_INVALIDVERTEXFORMAT: Result := 'D3DERR_INVALIDVERTEXFORMAT';
  2454.     D3DERR_COLORKEYATTACHED: Result := 'D3DERR_COLORKEYATTACHED';
  2455.     D3DERR_VERTEXBUFFEROPTIMIZED: Result := 'D3DERR_VERTEXBUFFEROPTIMIZED';
  2456.     D3DERR_VBUF_CREATE_FAILED: Result := 'D3DERR_VBUF_CREATE_FAILED';
  2457.     D3DERR_VERTEXBUFFERLOCKED: Result := 'D3DERR_VERTEXBUFFERLOCKED';
  2458.     D3DERR_ZBUFFER_NOTPRESENT: Result := 'D3DERR_ZBUFFER_NOTPRESENT';
  2459.     D3DERR_STENCILBUFFER_NOTPRESENT: Result := 'D3DERR_STENCILBUFFER_NOTPRESENT';
  2460.     D3DERR_WRONGTEXTUREFORMAT: Result := 'D3DERR_WRONGTEXTUREFORMAT';
  2461.     D3DERR_UNSUPPORTEDCOLOROPERATION: Result := 'D3DERR_UNSUPPORTEDCOLOROPERATION';
  2462.     D3DERR_UNSUPPORTEDCOLORARG: Result := 'D3DERR_UNSUPPORTEDCOLORARG';
  2463.     D3DERR_UNSUPPORTEDALPHAOPERATION: Result := 'D3DERR_UNSUPPORTEDALPHAOPERATION';
  2464.     D3DERR_UNSUPPORTEDALPHAARG: Result := 'D3DERR_UNSUPPORTEDALPHAARG';
  2465.     D3DERR_TOOMANYOPERATIONS: Result := 'D3DERR_TOOMANYOPERATIONS';
  2466.     D3DERR_CONFLICTINGTEXTUREFILTER: Result := 'D3DERR_CONFLICTINGTEXTUREFILTER';
  2467.     D3DERR_UNSUPPORTEDFACTORVALUE: Result := 'D3DERR_UNSUPPORTEDFACTORVALUE';
  2468.     D3DERR_CONFLICTINGRENDERSTATE: Result := 'D3DERR_CONFLICTINGRENDERSTATE';
  2469.     D3DERR_UNSUPPORTEDTEXTUREFILTER: Result := 'D3DERR_UNSUPPORTEDTEXTUREFILTER';
  2470.     D3DERR_TOOMANYPRIMITIVES: Result := 'D3DERR_TOOMANYPRIMITIVES';
  2471.     D3DERR_INVALIDMATRIX: Result := 'D3DERR_INVALIDMATRIX';
  2472.     D3DERR_TOOMANYVERTICES: Result := 'D3DERR_TOOMANYVERTICES';
  2473.     D3DERR_CONFLICTINGTEXTUREPALETTE: Result := 'D3DERR_CONFLICTINGTEXTUREPALETTE';
  2474.   {$ENDIF} // DIRECT3D_VERSION_6
  2475.   {$IFDEF DIRECT3D_VERSION_7}
  2476.     D3DERR_INVALIDSTATEBLOCK: Result := 'D3DERR_INVALIDSTATEBLOCK';
  2477.     D3DERR_INBEGINSTATEBLOCK: Result := 'D3DERR_INBEGINSTATEBLOCK';
  2478.     D3DERR_NOTINBEGINSTATEBLOCK: Result := 'D3DERR_NOTINBEGINSTATEBLOCK';
  2479.   {$ENDIF} // DIRECT3D_VERSION_7
  2480.     else Result := 'Unrecognized Error';
  2481.   end;
  2482. end;
  2483. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  2484. {$IFNDEF EXCLUDE_DXFILE_FROM_DIRECT3D}
  2485. function DXFileErrorString(Value: HResult): string;
  2486. begin
  2487.   case Value of
  2488.     DXFILE_OK: Result := 'Command completed successfully. Equivalent to DD_OK.';
  2489.     DXFILEERR_BADVALUE: Result := 'Parameter is invalid.';
  2490.     DXFILEERR_BADTYPE: Result := 'Object type is invalid.';
  2491.     DXFILEERR_BADALLOC: Result := 'Memory allocation failed.';
  2492.     DXFILEERR_NOTFOUND: Result := 'Object could not be found.';
  2493.     DXFILEERR_FILENOTFOUND: Result := 'File could not be found.';
  2494.     DXFILEERR_RESOURCENOTFOUND: Result := 'Resource could not be found.';
  2495.     DXFILEERR_URLNOTFOUND: Result := 'URL could not be found.';
  2496.     DXFILEERR_BADRESOURCE: Result := 'Resource is invalid.';
  2497.     DXFILEERR_BADFILETYPE: Result := 'File is not a DirectX file.';
  2498.     DXFILEERR_BADFILEVERSION: Result := 'File version is not valid.';
  2499.     DXFILEERR_BADFILEFLOATSIZE: Result := 'Floating-point size is invalid.';
  2500.     DXFILEERR_BADFILE: Result := 'File is invalid.';
  2501.     DXFILEERR_PARSEERROR: Result := 'File could not be parsed.';
  2502.     DXFILEERR_BADARRAYSIZE: Result := 'Array size is invalid.';
  2503.     DXFILEERR_BADDATAREFERENCE: Result := 'Data reference is invalid.';
  2504.     DXFILEERR_NOMOREOBJECTS: Result := 'All objects have been enumerated.';
  2505.     DXFILEERR_NOMOREDATA: Result := 'No further data is available.';
  2506.     else Result := 'Unrecognized Error';
  2507.   end;
  2508. end;
  2509. initialization
  2510. begin
  2511.   DisableFPUExceptions;
  2512.   DXFileDLL := LoadLibrary('D3DXOF.DLL');
  2513.   DirectXFileCreate := GetProcAddress(DXFileDLL,'DirectXFileCreate');
  2514. end;
  2515. finalization
  2516. begin
  2517.   FreeLibrary(DXFileDLL);
  2518. end;
  2519. {$ENDIF}
  2520. end.