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

Delphi控件源码

开发平台:

Delphi

  1. {******************************************************************************}
  2. {*                                                                            *}
  3. {*  Copyright (C) Microsoft Corporation.  All Rights Reserved.                *}
  4. {*                                                                            *}
  5. {*  File:       d3dx8.h, d3dx8core.h, d3dx8math.h, d3dx8math.inl,             *}
  6. {*              d3dx8effect.h, d3dx8mesh.h, d3dx8shape.h, d3dx8tex.h          *}
  7. {*  Content:    Direct3DX 8.1 headers                                         *}
  8. {*                                                                            *}
  9. {*  Direct3DX 8.1 Delphi adaptation by Alexey Barkovoy                        *}
  10. {*  E-Mail: clootie@reactor.ru                                                *}
  11. {*                                                                            *}
  12. {*  Modified: 27-Apr-2003                                                     *}
  13. {*                                                                            *}
  14. {*  Partly based upon :                                                       *}
  15. {*    Direct3DX 7.0 Delphi adaptation by                                      *}
  16. {*      Arne Sch鋚ers, e-Mail: [look at www.delphi-jedi.org/DelphiGraphics/]  *}
  17. {*                                                                            *}
  18. {*  Latest version can be downloaded from:                                    *}
  19. {*     http://clootie.narod.ru/delphi                                         *}
  20. {*                                                                            *}
  21. {*  This File contains only Direct3DX 8.x Definitions.                        *}
  22. {*  If you want to use D3DX7 version of D3DX use translation by Arne Sch鋚ers *}
  23. {*                                                                            *}
  24. {******************************************************************************)
  25. {                                                                              }
  26. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  27. {                                                                              }
  28. { The contents of this file are used with permission, subject to the Mozilla   }
  29. { Public License Version 1.1 (the "License"); you may not use this file except }
  30. { in compliance with the License. You may obtain a copy of the License at      }
  31. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  32. {                                                                              }
  33. { Software distributed under the License is distributed on an "AS IS" basis,   }
  34. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  35. { the specific language governing rights and limitations under the License.    }
  36. {                                                                              }
  37. { Alternatively, the contents of this file may be used under the terms of the  }
  38. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  39. { provisions of the LGPL License are applicable instead of those above.        }
  40. { If you wish to allow use of your version of this file only under the terms   }
  41. { of the LGPL License and not to allow others to use your version of this file }
  42. { under the MPL, indicate your decision by deleting  the provisions above and  }
  43. { replace  them with the notice and other provisions required by the LGPL      }
  44. { License.  If you do not delete the provisions above, a recipient may use     }
  45. { your version of this file under either the MPL or the LGPL License.          }
  46. {                                                                              }
  47. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  48. {                                                                              }
  49. {******************************************************************************}
  50. // Original source contained in "D3DX8.par"
  51. {$I DirectX.inc}
  52. unit D3DX8;
  53. interface
  54. // Remove "dot" below to link with debug version of D3DX8
  55. // (only in JEDI or TMT pascal version)
  56. {.$DEFINE DEBUG}
  57. // Remove "dot" below to link with DirectXGraphics and Direct3D
  58. {.$DEFINE DXG_COMPAT}
  59. (*$HPPEMIT '#include "d3dx8.h"' *)
  60. (*$HPPEMIT '#include "dxfile.h"' *)
  61. // Do not emit <DXFile.hpp> to C++Builder
  62. (*$NOINCLUDE DXFile *)
  63. (*$HPPEMIT 'namespace D3dx8' *)
  64. (*$HPPEMIT '{' *)
  65. uses
  66.   Windows,
  67.   ActiveX,
  68.   SysUtils,
  69.   {$I UseD3D8.inc},
  70.   DXFile;
  71. const
  72.   //////////// DLL export definitions ///////////////////////////////////////
  73.   d3dx8dll ={$IFDEF DEBUG} 'd3dx8d.dll'{$ELSE} 'D3DX81ab.dll'{$ENDIF};
  74. ///////////////////////////////////////////////////////////////////////////
  75. //
  76. //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  77. //
  78. //  File:       d3dx8.h
  79. //  Content:    D3DX utility library
  80. //
  81. ///////////////////////////////////////////////////////////////////////////
  82. const
  83.   // #define D3DX_DEFAULT ULONG_MAX
  84.   D3DX_DEFAULT          = $FFFFFFFF;
  85.   {$EXTERNALSYM D3DX_DEFAULT}
  86. var
  87.   // #define D3DX_DEFAULT_FLOAT FLT_MAX
  88.   // Forced to define as 'var' cos pascal compiler treats all consts as Double
  89.   D3DX_DEFAULT_FLOAT: Single = 3.402823466e+38;  // max single value
  90.   {$EXTERNALSYM D3DX_DEFAULT_FLOAT}
  91. //////////////////////////////////////////////////////////////////////////////
  92. //
  93. //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  94. //
  95. //  File:       d3dx8math.h
  96. //  Content:    D3DX math types and functions
  97. //
  98. //////////////////////////////////////////////////////////////////////////////
  99. //===========================================================================
  100. //
  101. // General purpose utilities
  102. //
  103. //===========================================================================
  104. const
  105.   D3DX_PI: Single       = 3.141592654;
  106.   {$EXTERNALSYM D3DX_PI}
  107.   D3DX_1BYPI: Single    = 0.318309886;
  108.   {$EXTERNALSYM D3DX_1BYPI}
  109. //#define D3DXToRadian( degree ) ((degree) * (D3DX_PI / 180.0f))
  110. function D3DXToRadian(Degree: Single): Single;
  111. {$EXTERNALSYM D3DXToRadian}
  112. //#define D3DXToDegree( radian ) ((radian) * (180.0f / D3DX_PI))
  113. function D3DXToDegree(Radian: Single): Single;
  114. {$EXTERNALSYM D3DXToDegree}
  115. //===========================================================================
  116. //
  117. // Vectors
  118. //
  119. //===========================================================================
  120. //--------------------------
  121. // 2D Vector
  122. //--------------------------
  123. type
  124.   {$HPPEMIT 'typedef D3DXVECTOR2 TD3DXVector2;'}
  125.   {$HPPEMIT 'typedef D3DXVECTOR2 *PD3DXVector2;'}
  126.   PD3DXVector2 = ^TD3DXVector2;
  127.   {$NODEFINE PD3DXVector2}
  128.   TD3DXVector2 = packed record
  129.     x, y: Single;
  130.   end;
  131.   {$NODEFINE TD3DXVector2}
  132. // Some pascal equalents of C++ class functions & operators
  133. const D3DXVector2Zero: TD3DXVector2 = (x:0; y:0);  // (0,0)
  134. function D3DXVector2(_x, _y: Single): TD3DXVector2;
  135. function D3DXVector2Equal(const v1, v2: TD3DXVector2): Boolean;
  136. //--------------------------
  137. // 3D Vector
  138. //--------------------------
  139. type
  140.   {$HPPEMIT 'typedef D3DXVECTOR3 TD3DXVector3;'}
  141.   {$HPPEMIT 'typedef D3DXVECTOR3 *PD3DXVector3;'}
  142.   PD3DXVector3 = ^TD3DXVector3;
  143.   {$NODEFINE PD3DXVector3}
  144.   TD3DXVector3 = TD3DVector;
  145.   {$NODEFINE TD3DXVector3}
  146. // Some pascal equalents of C++ class functions & operators
  147. const D3DXVector3Zero: TD3DXVector3 = (x:0; y:0; z:0);  // (0,0,0)
  148. function D3DXVector3(_x, _y, _z: Single): TD3DXVector3;
  149. function D3DXVector3Equal(const v1, v2: TD3DXVector3): Boolean;
  150. //--------------------------
  151. // 4D Vector
  152. //--------------------------
  153. type
  154.   {$HPPEMIT 'typedef D3DXVECTOR4 TD3DXVector4;'}
  155.   {$HPPEMIT 'typedef D3DXVECTOR4 *PD3DXVector4;'}
  156.   PD3DXVector4 = ^TD3DXVector4;
  157.   {$NODEFINE PD3DXVector4}
  158.   TD3DXVector4 = packed record
  159.     x, y, z, w: Single;
  160.   end;
  161.   {$NODEFINE TD3DXVector4}
  162. // Some pascal equalents of C++ class functions & operators
  163. const D3DXVector4Zero: TD3DXVector4 = (x:0; y:0; z:0; w:0);  // (0,0,0,0)
  164. function D3DXVector4(_x, _y, _z, _w: Single): TD3DXVector4;
  165. function D3DXVector4Equal(const v1, v2: TD3DXVector4): Boolean;
  166. //===========================================================================
  167. //
  168. // Matrices
  169. //
  170. //===========================================================================
  171. type
  172.   {$HPPEMIT 'typedef D3DXMATRIX TD3DXMatrix;'}
  173.   {$HPPEMIT 'typedef D3DXMATRIX *PD3DXMatrix;'}
  174.   PD3DXMatrix = ^TD3DXMatrix;
  175.   {$NODEFINE PD3DXMatrix}
  176.   TD3DXMatrix = TD3DMatrix;
  177.   {$NODEFINE TD3DXMatrix}
  178. // Some pascal equalents of C++ class functions & operators
  179. function D3DXMatrix(
  180.   _m00, _m01, _m02, _m03,
  181.   _m10, _m11, _m12, _m13,
  182.   _m20, _m21, _m22, _m23,
  183.   _m30, _m31, _m32, _m33: Single): TD3DXMatrix;
  184. function D3DXMatrixAdd(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix;
  185. function D3DXMatrixSubtract(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix;
  186. function D3DXMatrixMul(out mOut: TD3DXMatrix; const m: TD3DXMatrix; MulBy: Single): PD3DXMatrix;
  187. function D3DXMatrixEqual(const m1, m2: TD3DXMatrix): Boolean;
  188. //===========================================================================
  189. //
  190. // Aligned Matrices
  191. //
  192. // This class helps keep matrices 16-byte aligned as preferred by P4 cpus.
  193. // It aligns matrices on the stack and on the heap or in global scope.
  194. // It does this using __declspec(align(16)) which works on VC7 and on VC 6
  195. // with the processor pack. Unfortunately there is no way to detect the
  196. // latter so this is turned on only on VC7. On other compilers this is the
  197. // the same as D3DXMATRIX.
  198. // Using this class on a compiler that does not actually do the alignment
  199. // can be dangerous since it will not expose bugs that ignore alignment.
  200. // E.g if an object of this class in inside a struct or class, and some code
  201. // memcopys data in it assuming tight packing. This could break on a compiler
  202. // that eventually start aligning the matrix.
  203. //
  204. //===========================================================================
  205. // Translator comments: None of current pascal compilers can even align data
  206. // inside records to 16 byte boundary, so we just leave aligned matrix
  207. // declaration equal to standart matrix
  208. type
  209.   PD3DXMatrixA16 = ^TD3DXMatrixA16;
  210.   TD3DXMatrixA16 = TD3DXMatrix;
  211. //===========================================================================
  212. //
  213. //    Quaternions
  214. //
  215. //===========================================================================
  216. type
  217.   PD3DXQuaternion = ^TD3DXQuaternion;
  218.   TD3DXQuaternion = packed record
  219.     x, y, z, w: Single;
  220.   end;
  221.   {$NODEFINE TD3DXQuaternion}
  222.   {$HPPEMIT 'typedef D3DXQUATERNION TD3DXQuaternion;'}
  223. // Some pascal equalents of C++ class functions & operators
  224. function D3DXQuaternion(_x, _y, _z, _w: Single): TD3DXQuaternion;
  225. function D3DXQuaternionAdd(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;
  226. function D3DXQuaternionSubtract(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;
  227. function D3DXQuaternionEqual(const q1, q2: TD3DXQuaternion): Boolean;
  228. function D3DXQuaternionScale(out qOut: TD3DXQuaternion; const q: TD3DXQuaternion;
  229.   s: Single): PD3DXQuaternion;
  230. //===========================================================================
  231. //
  232. // Planes
  233. //
  234. //===========================================================================
  235. type
  236.   PD3DXPlane = ^TD3DXPlane;
  237.   TD3DXPlane = packed record
  238.     a, b, c, d: Single;
  239.   end;
  240.   {$NODEFINE TD3DXPlane}
  241.   {$HPPEMIT 'typedef D3DXPLANE TD3DXPlane;'}
  242. // Some pascal equalents of C++ class functions & operators
  243. const D3DXPlaneZero: TD3DXPlane = (a:0; b:0; c:0; d:0);  // (0,0,0,0)
  244. function D3DXPlane(_a, _b, _c, _d: Single): TD3DXPlane;
  245. function D3DXPlaneEqual(const p1, p2: TD3DXPlane): Boolean;
  246. //===========================================================================
  247. //
  248. // Colors
  249. //
  250. //===========================================================================
  251. type
  252.   {$HPPEMIT 'typedef D3DXCOLOR TD3DXColor;'}
  253.   {$HPPEMIT 'typedef D3DXCOLOR *PD3DXColor;'}
  254.   PD3DXColor = PD3DColorValue;
  255.   {$NODEFINE PD3DXColor}
  256.   TD3DXColor = TD3DColorValue;
  257.   {$NODEFINE TD3DXColor}
  258. function D3DXColor(_r, _g, _b, _a: Single): TD3DXColor;
  259. function D3DXColorToDWord(c: TD3DXColor): DWord;
  260. function D3DXColorFromDWord(c: DWord): TD3DXColor;
  261. function D3DXColorEqual(const c1, c2: TD3DXColor): Boolean;
  262. //===========================================================================
  263. //
  264. // D3DX math functions:
  265. //
  266. // NOTE:
  267. //  * All these functions can take the same object as in and out parameters.
  268. //
  269. //  * Out parameters are typically also returned as return values, so that
  270. //    the output of one function may be used as a parameter to another.
  271. //
  272. //===========================================================================
  273. //--------------------------
  274. // 2D Vector
  275. //--------------------------
  276. // inline
  277. function D3DXVec2Length(const v: TD3DXVector2): Single;
  278. {$EXTERNALSYM D3DXVec2Length}
  279. function D3DXVec2LengthSq(const v: TD3DXVector2): Single;
  280. {$EXTERNALSYM D3DXVec2LengthSq}
  281. function D3DXVec2Dot(const v1, v2: TD3DXVector2): Single;
  282. {$EXTERNALSYM D3DXVec2Dot}
  283. // Z component of ((x1,y1,0) cross (x2,y2,0))
  284. function D3DXVec2CCW(const v1, v2: TD3DXVector2): Single;
  285. {$EXTERNALSYM D3DXVec2CCW}
  286. function D3DXVec2Add(const v1, v2: TD3DXVector2): TD3DXVector2;
  287. {$EXTERNALSYM D3DXVec2Add}
  288. function D3DXVec2Subtract(const v1, v2: TD3DXVector2): TD3DXVector2;
  289. {$EXTERNALSYM D3DXVec2Subtract}
  290. // Minimize each component.  x = min(x1, x2), y = min(y1, y2)
  291. function D3DXVec2Minimize(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2): PD3DXVector2;
  292. {$EXTERNALSYM D3DXVec2Minimize}
  293. // Maximize each component.  x = max(x1, x2), y = max(y1, y2)
  294. function D3DXVec2Maximize(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2): PD3DXVector2;
  295. {$EXTERNALSYM D3DXVec2Maximize}
  296. function D3DXVec2Scale(out vOut: TD3DXVector2; const v: TD3DXVector2; s: Single): PD3DXVector2;
  297. {$EXTERNALSYM D3DXVec2Scale}
  298. // Linear interpolation. V1 + s(V2-V1)
  299. function D3DXVec2Lerp(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2; s: Single): PD3DXVector2;
  300. {$EXTERNALSYM D3DXVec2Lerp}
  301. // non-inline
  302. function D3DXVec2Normalize(out vOut: TD3DXVector2; const v: TD3DXVector2): PD3DXVector2; stdcall; external d3dx8dll;
  303. {$EXTERNALSYM D3DXVec2Normalize}
  304. // Hermite interpolation between position V1, tangent T1 (when s == 0)
  305. // and position V2, tangent T2 (when s == 1).
  306. function D3DXVec2Hermite(out vOut: TD3DXVector2;
  307.    const v1, t1, v2, t2: TD3DXVector2; s: Single): PD3DXVector2; stdcall; external d3dx8dll;
  308. {$EXTERNALSYM D3DXVec2Hermite}
  309. // CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1)
  310. function D3DXVec2CatmullRom(out vOut: TD3DXVector2;
  311.    const v0, v1, v2: TD3DXVector2; s: Single): PD3DXVector2; stdcall; external d3dx8dll;
  312. {$EXTERNALSYM D3DXVec2CatmullRom}
  313. // Barycentric coordinates.  V1 + f(V2-V1) + g(V3-V1)
  314. function D3DXVec2BaryCentric(out vOut: TD3DXVector2;
  315.    const v1, v2, v3: TD3DXVector2; f, g: Single): PD3DXVector2; stdcall; external d3dx8dll;
  316. {$EXTERNALSYM D3DXVec2BaryCentric}
  317. // Transform (x, y, 0, 1) by matrix.
  318. function D3DXVec2Transform(out vOut: TD3DXVector4;
  319.   const v: TD3DXVector2; const m: TD3DXMatrix): PD3DXVector4; stdcall; external d3dx8dll;
  320. {$EXTERNALSYM D3DXVec2Transform}
  321. // Transform (x, y, 0, 1) by matrix, project result back into w=1.
  322. function D3DXVec2TransformCoord(out vOut: TD3DXVector2;
  323.   const v: TD3DXVector2; const m: TD3DXMatrix): PD3DXVector2; stdcall; external d3dx8dll;
  324. {$EXTERNALSYM D3DXVec2TransformCoord}
  325. // Transform (x, y, 0, 0) by matrix.
  326. function D3DXVec2TransformNormal(out vOut: TD3DXVector2;
  327.   const v: TD3DXVector2; const m: TD3DXMatrix): PD3DXVector2; stdcall; external d3dx8dll;
  328. {$EXTERNALSYM D3DXVec2TransformNormal}
  329. //--------------------------
  330. // 3D Vector
  331. //--------------------------
  332. // inline
  333. function D3DXVec3Length(const v: TD3DXVector3): Single;
  334. {$EXTERNALSYM D3DXVec3Length}
  335. function D3DXVec3LengthSq(const v: TD3DXVector3): Single;
  336. {$EXTERNALSYM D3DXVec3LengthSq}
  337. function D3DXVec3Dot(const v1, v2: TD3DXVector3): Single;
  338. {$EXTERNALSYM D3DXVec3Dot}
  339. function D3DXVec3Cross(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
  340. {$EXTERNALSYM D3DXVec3Cross}
  341. function D3DXVec3Add(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
  342. {$EXTERNALSYM D3DXVec3Add}
  343. function D3DXVec3Subtract(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
  344. {$EXTERNALSYM D3DXVec3Subtract}
  345. // Minimize each component.  x = min(x1, x2), y = min(y1, y2), ...
  346. function D3DXVec3Minimize(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
  347. {$EXTERNALSYM D3DXVec3Minimize}
  348. // Maximize each component.  x = max(x1, x2), y = max(y1, y2), ...
  349. function D3DXVec3Maximize(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
  350. {$EXTERNALSYM D3DXVec3Maximize}
  351. function D3DXVec3Scale(out vOut: TD3DXVector3; const v: TD3DXVector3; s: Single): PD3DXVector3;
  352. {$EXTERNALSYM D3DXVec3Scale}
  353. // Linear interpolation. V1 + s(V2-V1)
  354. function D3DXVec3Lerp(out vOut: TD3DXVector3;
  355.   const v1, v2: TD3DXVector3; s: Single): PD3DXVector3;
  356. {$EXTERNALSYM D3DXVec3Lerp}
  357. // non-inline
  358. function D3DXVec3Normalize(out vOut: TD3DXVector3;
  359.    const v: TD3DXVector3): PD3DXVector3; stdcall; external d3dx8dll;
  360. {$EXTERNALSYM D3DXVec3Normalize}
  361. // Hermite interpolation between position V1, tangent T1 (when s == 0)
  362. // and position V2, tangent T2 (when s == 1).
  363. function D3DXVec3Hermite(out vOut: TD3DXVector3;
  364.    const v1, t1, v2, t2: TD3DXVector3; s: Single): PD3DXVector3; stdcall; external d3dx8dll;
  365. {$EXTERNALSYM D3DXVec3Hermite}
  366. // CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1)
  367. function D3DXVec3CatmullRom(out vOut: TD3DXVector3;
  368.    const v1, v2, v3: TD3DXVector3; s: Single): PD3DXVector3; stdcall; external d3dx8dll;
  369. {$EXTERNALSYM D3DXVec3CatmullRom}
  370. // Barycentric coordinates.  V1 + f(V2-V1) + g(V3-V1)
  371. function D3DXVec3BaryCentric(out vOut: TD3DXVector3;
  372.    const v1, v2, v3: TD3DXVector3; f, g: Single): PD3DXVector3; stdcall; external d3dx8dll;
  373. {$EXTERNALSYM D3DXVec3BaryCentric}
  374. // Transform (x, y, z, 1) by matrix.
  375. function D3DXVec3Transform(out vOut: TD3DXVector4;
  376.   const v: TD3DXVector3; const m: TD3DXMatrix): PD3DXVector4; stdcall; external d3dx8dll;
  377. {$EXTERNALSYM D3DXVec3Transform}
  378. // Transform (x, y, z, 1) by matrix, project result back into w=1.
  379. function D3DXVec3TransformCoord(out vOut: TD3DXVector3;
  380.   const v: TD3DXVector3; const m: TD3DXMatrix): PD3DXVector3; stdcall; external d3dx8dll;
  381. {$EXTERNALSYM D3DXVec3TransformCoord}
  382. // Transform (x, y, z, 0) by matrix.  If you transforming a normal by a
  383. // non-affine matrix, the matrix you pass to this function should be the
  384. // transpose of the inverse of the matrix you would use to transform a coord.
  385. function D3DXVec3TransformNormal(out vOut: TD3DXVector3;
  386.   const v: TD3DXVector3; const m: TD3DXMatrix): PD3DXVector3; stdcall; external d3dx8dll;
  387. {$EXTERNALSYM D3DXVec3TransformNormal}
  388. // Project vector from object space into screen space
  389. function D3DXVec3Project(out vOut: TD3DXVector3;
  390.   const v: TD3DXVector3; const pViewport: TD3DViewport8;
  391.   const pProjection, pView, pWorld: TD3DXMatrix): PD3DXVector3; stdcall; external d3dx8dll;
  392. {$EXTERNALSYM D3DXVec3Project}
  393. // Project vector from screen space into object space
  394. function D3DXVec3Unproject(out vOut: TD3DXVector3;
  395.   const v: TD3DXVector3; const pViewport: TD3DViewport8;
  396.   const pProjection, pView, pWorld: TD3DXMatrix): PD3DXVector3; stdcall; external d3dx8dll;
  397. {$EXTERNALSYM D3DXVec3Unproject}
  398. //--------------------------
  399. // 4D Vector
  400. //--------------------------
  401. // inline
  402. function D3DXVec4Length(const v: TD3DXVector4): Single;
  403. {$EXTERNALSYM D3DXVec4Length}
  404. function D3DXVec4LengthSq(const v: TD3DXVector4): Single;
  405. {$EXTERNALSYM D3DXVec4LengthSq}
  406. function D3DXVec4Dot(const v1, v2: TD3DXVector4): Single;
  407. {$EXTERNALSYM D3DXVec4Dot}
  408. function D3DXVec4Add(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
  409. {$EXTERNALSYM D3DXVec4Add}
  410. function D3DXVec4Subtract(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
  411. {$EXTERNALSYM D3DXVec4Subtract}
  412. // Minimize each component.  x = min(x1, x2), y = min(y1, y2), ...
  413. function D3DXVec4Minimize(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
  414. {$EXTERNALSYM D3DXVec4Minimize}
  415. // Maximize each component.  x = max(x1, x2), y = max(y1, y2), ...
  416. function D3DXVec4Maximize(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
  417. {$EXTERNALSYM D3DXVec4Maximize}
  418. function D3DXVec4Scale(out vOut: TD3DXVector4; const v: TD3DXVector4; s: Single): PD3DXVector4;
  419. {$EXTERNALSYM D3DXVec4Scale}
  420. // Linear interpolation. V1 + s(V2-V1)
  421. function D3DXVec4Lerp(out vOut: TD3DXVector4;
  422.   const v1, v2: TD3DXVector4; s: Single): PD3DXVector4;
  423. {$EXTERNALSYM D3DXVec4Lerp}
  424. // non-inline
  425. // Cross-product in 4 dimensions.
  426. function D3DXVec4Cross(out vOut: TD3DXVector4;
  427.   const v1, v2, v3: TD3DXVector4): PD3DXVector4; stdcall; external d3dx8dll;
  428. {$EXTERNALSYM D3DXVec4Cross}
  429. function D3DXVec4Normalize(out vOut: TD3DXVector4;
  430.   const v: TD3DXVector4): PD3DXVector4; stdcall; external d3dx8dll;
  431. {$EXTERNALSYM D3DXVec4Normalize}
  432. // Hermite interpolation between position V1, tangent T1 (when s == 0)
  433. // and position V2, tangent T2 (when s == 1).
  434. function D3DXVec4Hermite(out vOut: TD3DXVector4;
  435.    const v1, t1, v2, t2: TD3DXVector4; s: Single): PD3DXVector4; stdcall; external d3dx8dll;
  436. {$EXTERNALSYM D3DXVec4Hermite}
  437. // CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1)
  438. function D3DXVec4CatmullRom(out vOut: TD3DXVector4;
  439.    const v0, v1, v2, v3: TD3DXVector4; s: Single): PD3DXVector4; stdcall; external d3dx8dll;
  440. {$EXTERNALSYM D3DXVec4CatmullRom}
  441. // Barycentric coordinates.  V1 + f(V2-V1) + g(V3-V1)
  442. function D3DXVec4BaryCentric(out vOut: TD3DXVector4;
  443.    const v1, v2, v3: TD3DXVector4; f, g: Single): PD3DXVector4; stdcall; external d3dx8dll;
  444. {$EXTERNALSYM D3DXVec4BaryCentric}
  445. // Transform vector by matrix.
  446. function D3DXVec4Transform(out vOut: TD3DXVector4;
  447.   const v: TD3DXVector4; const m: TD3DXMatrix): PD3DXVector4; stdcall; external d3dx8dll;
  448. {$EXTERNALSYM D3DXVec4Transform}
  449. //--------------------------
  450. // 4D Matrix
  451. //--------------------------
  452. // inline
  453. function D3DXMatrixIdentity(out mOut: TD3DXMatrix): PD3DXMatrix;
  454. {$EXTERNALSYM D3DXMatrixIdentity}
  455. function D3DXMatrixIsIdentity(const m: TD3DXMatrix): BOOL;
  456. {$EXTERNALSYM D3DXMatrixIsIdentity}
  457. // non-inline
  458. function D3DXMatrixfDeterminant(const m: TD3DXMatrix): Single; stdcall; external d3dx8dll;
  459. {$EXTERNALSYM D3DXMatrixfDeterminant}
  460. function D3DXMatrixTranspose(out pOut: TD3DXMatrix; const pM: TD3DXMatrix): PD3DXMatrix; stdcall; external d3dx8dll;
  461. {$EXTERNALSYM D3DXMatrixTranspose}
  462. // Matrix multiplication.  The result represents the transformation M2
  463. // followed by the transformation M1.  (Out = M1 * M2)
  464. function D3DXMatrixMultiply(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix; stdcall; external d3dx8dll;
  465. {$EXTERNALSYM D3DXMatrixMultiply}
  466. // Matrix multiplication, followed by a transpose. (Out = T(M1 * M2))
  467. function D3DXMatrixMultiplyTranspose(out pOut: TD3DXMatrix; const pM1, pM2: TD3DXMatrix): PD3DXMatrix; stdcall; external d3dx8dll;
  468. {$EXTERNALSYM D3DXMatrixMultiplyTranspose}
  469. // Calculate inverse of matrix.  Inversion my fail, in which case NULL will
  470. // be returned.  The determinant of pM is also returned it pfDeterminant
  471. // is non-NULL.
  472. function D3DXMatrixInverse(out mOut: TD3DXMatrix; pfDeterminant: PSingle;
  473.     const m: TD3DXMatrix): PD3DXMatrix; stdcall; external d3dx8dll;
  474. {$EXTERNALSYM D3DXMatrixInverse}
  475. // Build a matrix which scales by (sx, sy, sz)
  476. function D3DXMatrixScaling(out mOut: TD3DXMatrix; sx, sy, sz: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  477. {$EXTERNALSYM D3DXMatrixScaling}
  478. // Build a matrix which translates by (x, y, z)
  479. function D3DXMatrixTranslation(out mOut: TD3DXMatrix; x, y, z: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  480. {$EXTERNALSYM D3DXMatrixTranslation}
  481. // Build a matrix which rotates around the X axis
  482. function D3DXMatrixRotationX(out mOut: TD3DXMatrix; angle: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  483. {$EXTERNALSYM D3DXMatrixRotationX}
  484. // Build a matrix which rotates around the Y axis
  485. function D3DXMatrixRotationY(out mOut: TD3DXMatrix; angle: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  486. {$EXTERNALSYM D3DXMatrixRotationY}
  487. // Build a matrix which rotates around the Z axis
  488. function D3DXMatrixRotationZ(out mOut: TD3DXMatrix; angle: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  489. {$EXTERNALSYM D3DXMatrixRotationZ}
  490. // Build a matrix which rotates around an arbitrary axis
  491. function D3DXMatrixRotationAxis(out mOut: TD3DXMatrix; const v: TD3DXVector3;
  492.   angle: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  493. {$EXTERNALSYM D3DXMatrixRotationAxis}
  494. // Build a matrix from a quaternion
  495. function D3DXMatrixRotationQuaternion(out mOut: TD3DXMatrix; const Q: TD3DXQuaternion): PD3DXMatrix; stdcall; external d3dx8dll;
  496. {$EXTERNALSYM D3DXMatrixRotationQuaternion}
  497. // Yaw around the Y axis, a pitch around the X axis,
  498. // and a roll around the Z axis.
  499. function D3DXMatrixRotationYawPitchRoll(out mOut: TD3DXMatrix; yaw, pitch, roll: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  500. {$EXTERNALSYM D3DXMatrixRotationYawPitchRoll}
  501. // Build transformation matrix.  NULL arguments are treated as identity.
  502. // Mout = Msc-1 * Msr-1 * Ms * Msr * Msc * Mrc-1 * Mr * Mrc * Mt
  503. function D3DXMatrixTransformation(out mOut: TD3DXMatrix;
  504.    pScalingCenter: PD3DXVector3;
  505.    pScalingRotation: PD3DXQuaternion; pScaling, pRotationCenter: PD3DXVector3;
  506.    pRotation: PD3DXQuaternion; pTranslation: PD3DXVector3): PD3DXMatrix; stdcall; external d3dx8dll;
  507. {$EXTERNALSYM D3DXMatrixTransformation}
  508. // Build affine transformation matrix.  NULL arguments are treated as identity.
  509. // Mout = Ms * Mrc-1 * Mr * Mrc * Mt
  510. function D3DXMatrixAffineTransformation(out mOut: TD3DXMatrix;
  511.    Scaling: Single; pRotationCenter: PD3DXVector3;
  512.    pRotation: PD3DXQuaternion; pTranslation: PD3DXVector3): PD3DXMatrix; stdcall; external d3dx8dll;
  513. {$EXTERNALSYM D3DXMatrixAffineTransformation}
  514. // Build a lookat matrix. (right-handed)
  515. function D3DXMatrixLookAtRH(out mOut: TD3DXMatrix; const Eye, At, Up: TD3DXVector3): PD3DXMatrix; stdcall; external d3dx8dll;
  516. {$EXTERNALSYM D3DXMatrixLookAtRH}
  517. // Build a lookat matrix. (left-handed)
  518. function D3DXMatrixLookAtLH(out mOut: TD3DXMatrix; const Eye, At, Up: TD3DXVector3): PD3DXMatrix; stdcall; external d3dx8dll;
  519. {$EXTERNALSYM D3DXMatrixLookAtLH}
  520. // Build a perspective projection matrix. (right-handed)
  521. function D3DXMatrixPerspectiveRH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  522. {$EXTERNALSYM D3DXMatrixPerspectiveRH}
  523. // Build a perspective projection matrix. (left-handed)
  524. function D3DXMatrixPerspectiveLH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  525. {$EXTERNALSYM D3DXMatrixPerspectiveLH}
  526. // Build a perspective projection matrix. (right-handed)
  527. function D3DXMatrixPerspectiveFovRH(out mOut: TD3DXMatrix; flovy, aspect, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  528. {$EXTERNALSYM D3DXMatrixPerspectiveFovRH}
  529. // Build a perspective projection matrix. (left-handed)
  530. function D3DXMatrixPerspectiveFovLH(out mOut: TD3DXMatrix; flovy, aspect, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  531. {$EXTERNALSYM D3DXMatrixPerspectiveFovLH}
  532. // Build a perspective projection matrix. (right-handed)
  533. function D3DXMatrixPerspectiveOffCenterRH(out mOut: TD3DXMatrix;
  534.    l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  535. {$EXTERNALSYM D3DXMatrixPerspectiveOffCenterRH}
  536. // Build a perspective projection matrix. (left-handed)
  537. function D3DXMatrixPerspectiveOffCenterLH(out mOut: TD3DXMatrix;
  538.    l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  539. {$EXTERNALSYM D3DXMatrixPerspectiveOffCenterLH}
  540. // Build an ortho projection matrix. (right-handed)
  541. function D3DXMatrixOrthoRH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  542. {$EXTERNALSYM D3DXMatrixOrthoRH}
  543. // Build an ortho projection matrix. (left-handed)
  544. function D3DXMatrixOrthoLH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  545. {$EXTERNALSYM D3DXMatrixOrthoLH}
  546. // Build an ortho projection matrix. (right-handed)
  547. function D3DXMatrixOrthoOffCenterRH(out mOut: TD3DXMatrix;
  548.   l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  549. {$EXTERNALSYM D3DXMatrixOrthoOffCenterRH}
  550. // Build an ortho projection matrix. (left-handed)
  551. function D3DXMatrixOrthoOffCenterLH(out mOut: TD3DXMatrix;
  552.   l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
  553. {$EXTERNALSYM D3DXMatrixOrthoOffCenterLH}
  554. // Build a matrix which flattens geometry into a plane, as if casting
  555. // a shadow from a light.
  556. function D3DXMatrixShadow(out mOut: TD3DXMatrix;
  557.   const Light: TD3DXVector4; const Plane: TD3DXPlane): PD3DXMatrix; stdcall; external d3dx8dll;
  558. {$EXTERNALSYM D3DXMatrixShadow}
  559. // Build a matrix which reflects the coordinate system about a plane
  560. function D3DXMatrixReflect(out mOut: TD3DXMatrix;
  561.    const Plane: TD3DXPlane): PD3DXMatrix; stdcall; external d3dx8dll;
  562. {$EXTERNALSYM D3DXMatrixReflect}
  563. //--------------------------
  564. // Quaternion
  565. //--------------------------
  566. // inline
  567. function D3DXQuaternionLength(const q: TD3DXQuaternion): Single;
  568. {$EXTERNALSYM D3DXQuaternionLength}
  569. // Length squared, or "norm"
  570. function D3DXQuaternionLengthSq(const q: TD3DXQuaternion): Single;
  571. {$EXTERNALSYM D3DXQuaternionLengthSq}
  572. function D3DXQuaternionDot(const q1, q2: TD3DXQuaternion): Single;
  573. {$EXTERNALSYM D3DXQuaternionDot}
  574. // (0, 0, 0, 1)
  575. function D3DXQuaternionIdentity(out qOut: TD3DXQuaternion): PD3DXQuaternion;
  576. {$EXTERNALSYM D3DXQuaternionIdentity}
  577. function D3DXQuaternionIsIdentity (const q: TD3DXQuaternion): BOOL;
  578. {$EXTERNALSYM D3DXQuaternionIsIdentity}
  579. // (-x, -y, -z, w)
  580. function D3DXQuaternionConjugate(out qOut: TD3DXQuaternion;
  581.   const q: TD3DXQuaternion): PD3DXQuaternion;
  582. {$EXTERNALSYM D3DXQuaternionConjugate}
  583. // non-inline
  584. // Compute a quaternin's axis and angle of rotation. Expects unit quaternions.
  585. procedure D3DXQuaternionToAxisAngle(const q: TD3DXQuaternion;
  586.   out Axis: TD3DXVector3; out Angle: Single); stdcall; external d3dx8dll;
  587. {$EXTERNALSYM D3DXQuaternionToAxisAngle}
  588. // Build a quaternion from a rotation matrix.
  589. function D3DXQuaternionRotationMatrix(out qOut: TD3DXQuaternion;
  590.   const m: TD3DXMatrix): PD3DXQuaternion; stdcall; external d3dx8dll;
  591. {$EXTERNALSYM D3DXQuaternionRotationMatrix}
  592. // Rotation about arbitrary axis.
  593. function D3DXQuaternionRotationAxis(out qOut: TD3DXQuaternion;
  594.   const v: TD3DXVector3; Angle: Single): PD3DXQuaternion; stdcall; external d3dx8dll;
  595. {$EXTERNALSYM D3DXQuaternionRotationAxis}
  596. // Yaw around the Y axis, a pitch around the X axis,
  597. // and a roll around the Z axis.
  598. function D3DXQuaternionRotationYawPitchRoll(out qOut: TD3DXQuaternion;
  599.   yaw, pitch, roll: Single): PD3DXQuaternion; stdcall; external d3dx8dll;
  600. {$EXTERNALSYM D3DXQuaternionRotationYawPitchRoll}
  601. // Quaternion multiplication.  The result represents the rotation Q2
  602. // followed by the rotation Q1.  (Out = Q2 * Q1)
  603. function D3DXQuaternionMultiply(out qOut: TD3DXQuaternion;
  604.    const q1, q2: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx8dll;
  605. {$EXTERNALSYM D3DXQuaternionMultiply}
  606. function D3DXQuaternionNormalize(out qOut: TD3DXQuaternion;
  607.    const q: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx8dll;
  608. {$EXTERNALSYM D3DXQuaternionNormalize}
  609. // Conjugate and re-norm
  610. function D3DXQuaternionInverse(out qOut: TD3DXQuaternion;
  611.    const q: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx8dll;
  612. {$EXTERNALSYM D3DXQuaternionInverse}
  613. // Expects unit quaternions.
  614. // if q = (cos(theta), sin(theta) * v); ln(q) = (0, theta * v)
  615. function D3DXQuaternionLn(out qOut: TD3DXQuaternion;
  616.    const q: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx8dll;
  617. {$EXTERNALSYM D3DXQuaternionLn}
  618. // Expects pure quaternions. (w == 0)  w is ignored in calculation.
  619. // if q = (0, theta * v); exp(q) = (cos(theta), sin(theta) * v)
  620. function D3DXQuaternionExp(out qOut: TD3DXQuaternion;
  621.    const q: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx8dll;
  622. {$EXTERNALSYM D3DXQuaternionExp}
  623. // Spherical linear interpolation between Q1 (s == 0) and Q2 (s == 1).
  624. // Expects unit quaternions.
  625. function D3DXQuaternionSlerp(out qOut: TD3DXQuaternion;
  626.    const q1, q2: TD3DXQuaternion; t: Single): PD3DXQuaternion; stdcall; external d3dx8dll;
  627. {$EXTERNALSYM D3DXQuaternionSlerp}
  628. // Spherical quadrangle interpolation.
  629. // Slerp(Slerp(Q1, C, t), Slerp(A, B, t), 2t(1-t))
  630. function D3DXQuaternionSquad(out qOut: TD3DXQuaternion;
  631.    const pQ1, pA, pB, pC: TD3DXQuaternion; t: Single): PD3DXQuaternion; stdcall; external d3dx8dll;
  632. {$EXTERNALSYM D3DXQuaternionSquad}
  633. // Setup control points for spherical quadrangle interpolation
  634. // from Q1 to Q2.  The control points are chosen in such a way
  635. // to ensure the continuity of tangents with adjacent segments.
  636. procedure D3DXQuaternionSquadSetup(out pAOut, pBOut, pCOut: TD3DXQuaternion;
  637.    const pQ0, pQ1, pQ2, pQ3: TD3DXQuaternion); stdcall; external d3dx8dll;
  638. {$EXTERNALSYM D3DXQuaternionSquadSetup}
  639. // Barycentric interpolation.
  640. // Slerp(Slerp(Q1, Q2, f+g), Slerp(Q1, Q3, f+g), g/(f+g))
  641. function D3DXQuaternionBaryCentric(out qOut: TD3DXQuaternion;
  642.    const q1, q2, q3: TD3DXQuaternion; f, g: Single): PD3DXQuaternion; stdcall; external d3dx8dll;
  643. {$EXTERNALSYM D3DXQuaternionBaryCentric}
  644. //--------------------------
  645. // Plane
  646. //--------------------------
  647. // inline
  648. // ax + by + cz + dw
  649. function D3DXPlaneDot(const p: TD3DXPlane; const v: TD3DXVector4): Single;
  650. {$EXTERNALSYM D3DXPlaneDot}
  651. // ax + by + cz + d
  652. function D3DXPlaneDotCoord(const p: TD3DXPlane; const v: TD3DXVector3): Single;
  653. {$EXTERNALSYM D3DXPlaneDotCoord}
  654. // ax + by + cz
  655. function D3DXPlaneDotNormal(const p: TD3DXPlane; const v: TD3DXVector3): Single;
  656. {$EXTERNALSYM D3DXPlaneDotNormal}
  657. // non-inline
  658. // Normalize plane (so that |a,b,c| == 1)
  659. function D3DXPlaneNormalize(out pOut: TD3DXPlane; const p: TD3DXPlane): PD3DXPlane; stdcall; external d3dx8dll;
  660. {$EXTERNALSYM D3DXPlaneNormalize}
  661. // Find the intersection between a plane and a line.  If the line is
  662. // parallel to the plane, NULL is returned.
  663. function D3DXPlaneIntersectLine(out vOut: TD3DXVector3;
  664.    const p: TD3DXPlane; const v1, v2: TD3DXVector3): PD3DXVector3; stdcall; external d3dx8dll;
  665. {$EXTERNALSYM D3DXPlaneIntersectLine}
  666. // Construct a plane from a point and a normal
  667. function D3DXPlaneFromPointNormal(out pOut: TD3DXPlane;
  668.    const vPoint, vNormal: TD3DXVector3): PD3DXPlane; stdcall; external d3dx8dll;
  669. {$EXTERNALSYM D3DXPlaneFromPointNormal}
  670. // Construct a plane from 3 points
  671. function D3DXPlaneFromPoints(out pOut: TD3DXPlane;
  672.    const v1, v2, v3: TD3DXVector3): PD3DXPlane; stdcall; external d3dx8dll;
  673. {$EXTERNALSYM D3DXPlaneFromPoints}
  674. // Transform a plane by a matrix.  The vector (a,b,c) must be normal.
  675. // M should be the inverse transpose of the transformation desired.
  676. function D3DXPlaneTransform(out pOut: TD3DXPlane; const m: TD3DXMatrix): PD3DXPlane; stdcall; external d3dx8dll;
  677. {$EXTERNALSYM D3DXPlaneTransform}
  678. //--------------------------
  679. // Color
  680. //--------------------------
  681. // inline
  682. // (1-r, 1-g, 1-b, a)
  683. function D3DXColorNegative(out cOut: TD3DXColor; const c: TD3DXColor): PD3DXColor;
  684. {$EXTERNALSYM D3DXColorNegative}
  685. function D3DXColorAdd(out cOut: TD3DXColor; const c1, c2: TD3DXColor): PD3DXColor;
  686. {$EXTERNALSYM D3DXColorAdd}
  687. function D3DXColorSubtract(out cOut: TD3DXColor; const c1, c2: TD3DXColor): PD3DXColor;
  688. {$EXTERNALSYM D3DXColorSubtract}
  689. function D3DXColorScale(out cOut: TD3DXColor; const c: TD3DXColor; s: Single): PD3DXColor;
  690. {$EXTERNALSYM D3DXColorScale}
  691. // (r1*r2, g1*g2, b1*b2, a1*a2)
  692. function D3DXColorModulate(out cOut: TD3DXColor; const c1, c2: TD3DXColor): PD3DXColor;
  693. {$EXTERNALSYM D3DXColorModulate}
  694. // Linear interpolation of r,g,b, and a. C1 + s(C2-C1)
  695. function D3DXColorLerp(out cOut: TD3DXColor; const c1, c2: TD3DXColor; s: Single): PD3DXColor;
  696. {$EXTERNALSYM D3DXColorLerp}
  697. // non-inline
  698. // Interpolate r,g,b between desaturated color and color.
  699. // DesaturatedColor + s(Color - DesaturatedColor)
  700. function D3DXColorAdjustSaturation(out cOut: TD3DXColor;
  701.    const pC: TD3DXColor; s: Single): PD3DXColor; stdcall; external d3dx8dll;
  702. {$EXTERNALSYM D3DXColorAdjustSaturation}
  703. // Interpolate r,g,b between 50% grey and color.  Grey + s(Color - Grey)
  704. function D3DXColorAdjustContrast(out cOut: TD3DXColor;
  705.    const pC: TD3DXColor; c: Single): PD3DXColor; stdcall; external d3dx8dll;
  706. {$EXTERNALSYM D3DXColorAdjustContrast}
  707. //--------------------------
  708. // Misc
  709. //--------------------------
  710. // Calculate Fresnel term given the cosine of theta (likely obtained by
  711. // taking the dot of two normals), and the refraction index of the material.
  712. function D3DXFresnelTerm(CosTheta, RefractionIndex: Single): Single; stdcall; external d3dx8dll;
  713. {$EXTERNALSYM D3DXFresnelTerm}
  714. //===========================================================================
  715. //
  716. //    Matrix Stack
  717. //
  718. //===========================================================================
  719. type
  720.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXMatrixStack);'}
  721.   {$EXTERNALSYM ID3DXMatrixStack}
  722.   ID3DXMatrixStack = interface(IUnknown)
  723.     ['{E3357330-CC5E-11d2-A434-00A0C90629A8}']
  724.     //
  725.     // ID3DXMatrixStack methods
  726.     //
  727.     // Pops the top of the stack, returns the current top
  728.     // *after* popping the top.
  729.     function Pop: HResult; stdcall;
  730.     // Pushes the stack by one, duplicating the current matrix.
  731.     function Push: HResult; stdcall;
  732.     // Loads identity in the current matrix.
  733.     function LoadIdentity: HResult; stdcall;
  734.     // Loads the given matrix into the current matrix
  735.     function LoadMatrix(const M: TD3DXMatrix): HResult; stdcall;
  736.     // Right-Multiplies the given matrix to the current matrix.
  737.     // (transformation is about the current world origin)
  738.     function MultMatrix(const M: TD3DXMatrix): HResult; stdcall;
  739.     // Left-Multiplies the given matrix to the current matrix
  740.     // (transformation is about the local origin of the object)
  741.     function MultMatrixLocal(const M: TD3DXMatrix): HResult; stdcall;
  742.     // Right multiply the current matrix with the computed rotation
  743.     // matrix, counterclockwise about the given axis with the given angle.
  744.     // (rotation is about the current world origin)
  745.     function RotateAxis(const V: TD3DXVector3; Angle: Single): HResult; stdcall;
  746.     // Left multiply the current matrix with the computed rotation
  747.     // matrix, counterclockwise about the given axis with the given angle.
  748.     // (rotation is about the local origin of the object)
  749.     function RotateAxisLocal(const V: TD3DXVector3; Angle: Single): HResult; stdcall;
  750.     // Right multiply the current matrix with the computed rotation
  751.     // matrix. All angles are counterclockwise. (rotation is about the
  752.     // current world origin)
  753.     // The rotation is composed of a yaw around the Y axis, a pitch around
  754.     // the X axis, and a roll around the Z axis.
  755.     function RotateYawPitchRoll(yaw, pitch, roll: Single): HResult; stdcall;
  756.     // Left multiply the current matrix with the computed rotation
  757.     // matrix. All angles are counterclockwise. (rotation is about the
  758.     // local origin of the object)
  759.     // The rotation is composed of a yaw around the Y axis, a pitch around
  760.     // the X axis, and a roll around the Z axis.
  761.     function RotateYawPitchRollLocal(yaw, pitch, roll: Single): HResult; stdcall;
  762.     // Right multiply the current matrix with the computed scale
  763.     // matrix. (transformation is about the current world origin)
  764.     function Scale(x, y, z: Single): HResult; stdcall;
  765.     // Left multiply the current matrix with the computed scale
  766.     // matrix. (transformation is about the local origin of the object)
  767.     function ScaleLocal(x, y, z: Single): HResult; stdcall;
  768.     // Right multiply the current matrix with the computed translation
  769.     // matrix. (transformation is about the current world origin)
  770.     function Translate(x, y, z: Single): HResult; stdcall;
  771.     // Left multiply the current matrix with the computed translation
  772.     // matrix. (transformation is about the local origin of the object)
  773.     function TranslateLocal(x, y, z: Single): HResult; stdcall;
  774.     // Obtain the current matrix at the top of the stack
  775.     function GetTop: PD3DXMatrix; stdcall;
  776.   end;
  777. type
  778.   IID_ID3DXMatrixStack = ID3DXMatrixStack;
  779.   {$EXTERNALSYM IID_ID3DXMatrixStack}
  780. function D3DXCreateMatrixStack(Flags: DWord; out Stack: ID3DXMatrixStack): HResult; stdcall; external d3dx8dll;
  781. {$EXTERNALSYM D3DXCreateMatrixStack}
  782. ///////////////////////////////////////////////////////////////////////////
  783. //
  784. //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  785. //
  786. //  File:       d3dx8core.h
  787. //  Content:    D3DX core types and functions
  788. //
  789. ///////////////////////////////////////////////////////////////////////////
  790. type
  791. ///////////////////////////////////////////////////////////////////////////
  792. // ID3DXBuffer:
  793. // ------------
  794. // The buffer object is used by D3DX to return arbitrary size data.
  795. //
  796. // GetBufferPointer -
  797. //    Returns a pointer to the beginning of the buffer.
  798. //
  799. // GetBufferSize -
  800. //    Returns the size of the buffer, in bytes.
  801. ///////////////////////////////////////////////////////////////////////////
  802.   PID3DXBuffer = ^ID3DXBuffer;
  803.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXBuffer);'}
  804.   {$EXTERNALSYM ID3DXBuffer}
  805.   ID3DXBuffer = interface(IUnknown)
  806.     ['{932E6A7E-C68E-45dd-A7BF-53D19C86DB1F}']
  807.     // ID3DXBuffer
  808.     function GetBufferPointer: Pointer; stdcall;
  809.     function GetBufferSize: DWord; stdcall;
  810.   end;
  811. ///////////////////////////////////////////////////////////////////////////
  812. // ID3DXFont:
  813. // ----------
  814. // Font objects contain the textures and resources needed to render
  815. // a specific font on a specific device.
  816. //
  817. // Begin -
  818. //    Prepartes device for drawing text.  This is optional.. if DrawText
  819. //    is called outside of Begin/End, it will call Begin and End for you.
  820. //
  821. // DrawText -
  822. //    Draws formatted text on a D3D device.  Some parameters are
  823. //    surprisingly similar to those of GDI's DrawText function.  See GDI
  824. //    documentation for a detailed description of these parameters.
  825. //
  826. // End -
  827. //    Restores device state to how it was when Begin was called.
  828. //
  829. // OnLostDevice, OnResetDevice -
  830. //    Call OnLostDevice() on this object before calling Reset() on the
  831. //    device, so that this object can release any stateblocks and video
  832. //    memory resources.  After Reset(), the call OnResetDevice().
  833. //
  834. ///////////////////////////////////////////////////////////////////////////
  835.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXFont);'}
  836.   {$EXTERNALSYM ID3DXFont}
  837.   ID3DXFont = interface(IUnknown)
  838.     ['{89FAD6A5-024D-49af-8FE7-F51123B85E25}']
  839.     // ID3DXFont
  840.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  841.     function GetLogFont(out pLogFont: TLogFont): HResult; stdcall;
  842.     function _Begin: HResult; stdcall;
  843.     function DrawTextA(pString: PAnsiChar; Count: Integer; const pRect: TRect; Format: DWord; Color: TD3DColor): Integer; stdcall;
  844.     function DrawTextW(pString: PWideChar; Count: Integer; const pRect: TRect; Format: DWord; Color: TD3DColor): Integer; stdcall;
  845.     function _End: HResult; stdcall;
  846.     function OnLostDevice: HResult; stdcall;
  847.     function OnResetDevice: HResult; stdcall;
  848.   end;
  849. function D3DXCreateFont(pDevice: IDirect3DDevice8; hFont: HFONT;
  850.   out ppFont: ID3DXFont): HResult; stdcall; external d3dx8dll;
  851. {$EXTERNALSYM D3DXCreateFont}
  852. function D3DXCreateFontIndirect(pDevice: IDirect3DDevice8;
  853.   const pLogFont: TLogFont; out ppFont: ID3DXFont): HResult; stdcall; external d3dx8dll;
  854. {$EXTERNALSYM D3DXCreateFontIndirect}
  855. ///////////////////////////////////////////////////////////////////////////
  856. // ID3DXSprite:
  857. // ------------
  858. // This object intends to provide an easy way to drawing sprites using D3D.
  859. //
  860. // Begin -
  861. //    Prepares device for drawing sprites
  862. //
  863. // Draw, DrawAffine, DrawTransform -
  864. //    Draws a sprite in screen-space.  Before transformation, the sprite is
  865. //    the size of SrcRect, with its top-left corner at the origin (0,0).
  866. //    The color and alpha channels are modulated by Color.
  867. //
  868. // End -
  869. //     Restores device state to how it was when Begin was called.
  870. //
  871. // OnLostDevice, OnResetDevice -
  872. //    Call OnLostDevice() on this object before calling Reset() on the
  873. //    device, so that this object can release any stateblocks and video
  874. //    memory resources.  After Reset(), the call OnResetDevice().
  875. ///////////////////////////////////////////////////////////////////////////
  876. type
  877.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXSprite);'}
  878.   {$EXTERNALSYM ID3DXSprite}
  879.   ID3DXSprite = interface(IUnknown)
  880.     ['{13D69D15-F9B0-4e0f-B39E-C91EB33F6CE7}']
  881.     // ID3DXSprite
  882.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  883.     function _Begin: HResult; stdcall;
  884.     function Draw(pSrcTexture: IDirect3DTexture8; pSrcRect: PRect;
  885.       pScaling, pRotationCenter: PD3DXVector2; Rotation: Single;
  886.       pTranslation: PD3DXVector2; Color: TD3DColor): HResult; stdcall;
  887.     function DrawTransform(pSrcTexture: IDirect3DTexture8; pSrcRect: PRect;
  888.       const pTransform: TD3DXMatrix; Color: TD3DColor): HResult; stdcall;
  889.     function _End: HResult; stdcall;
  890.     function OnLostDevice: HResult; stdcall;
  891.     function OnResetDevice: HResult; stdcall;
  892.   end;
  893. function D3DXCreateSprite(ppDevice: IDirect3DDevice8;
  894.   out ppSprite: ID3DXSprite): HResult; stdcall; external d3dx8dll;
  895. {$EXTERNALSYM D3DXCreateSprite}
  896. ///////////////////////////////////////////////////////////////////////////
  897. // ID3DXRenderToSurface:
  898. // ---------------------
  899. // This object abstracts rendering to surfaces.  These surfaces do not
  900. // necessarily need to be render targets.  If they are not, a compatible
  901. // render target is used, and the result copied into surface at end scene.
  902. //
  903. // BeginScene, EndScene -
  904. //    Call BeginScene() and EndScene() at the beginning and ending of your
  905. //    scene.  These calls will setup and restore render targets, viewports,
  906. //    etc..
  907. //
  908. // OnLostDevice, OnResetDevice -
  909. //    Call OnLostDevice() on this object before calling Reset() on the
  910. //    device, so that this object can release any stateblocks and video
  911. //    memory resources.  After Reset(), the call OnResetDevice().
  912. ///////////////////////////////////////////////////////////////////////////
  913. type
  914.   PD3DXRTSDesc = ^TD3DXRTSDesc;
  915.   _D3DXRTS_DESC = packed record
  916.     Width: LongWord;
  917.     Height: LongWord;
  918.     Format: TD3DFormat;
  919.     DepthStencil: BOOL;
  920.     DepthStencilFormat: TD3DFormat;
  921.   end {_D3DXRTS_DESC};
  922.   {$EXTERNALSYM _D3DXRTS_DESC}
  923.   D3DXRTS_DESC = _D3DXRTS_DESC;
  924.   {$EXTERNALSYM D3DXRTS_DESC}
  925.   TD3DXRTSDesc = _D3DXRTS_DESC;
  926.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXRenderToSurface);'}
  927.   {$EXTERNALSYM ID3DXRenderToSurface}
  928.   ID3DXRenderToSurface = interface(IUnknown)
  929.     ['{82DF5B90-E34E-496e-AC1C-62117A6A5913}']
  930.     // ID3DXRenderToSurface
  931.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  932.     function GetDesc(out pDesc: TD3DXRTSDesc): HResult; stdcall;
  933.     function BeginScene(pSurface: IDirect3DSurface8; pViewport: PD3DViewport8): HResult; stdcall;
  934.     function EndScene: HResult; stdcall;
  935.     function OnLostDevice: HResult; stdcall;
  936.     function OnResetDevice: HResult; stdcall;
  937.   end;
  938. function D3DXCreateRenderToSurface(ppDevice: IDirect3DDevice8;
  939.   Width: LongWord;
  940.   Height: LongWord;
  941.   Format: TD3DFormat;
  942.   DepthStencil: BOOL;
  943.   DepthStencilFormat: TD3DFormat;
  944.   out ppRenderToSurface: ID3DXRenderToSurface): HResult; stdcall; external d3dx8dll;
  945. {$EXTERNALSYM D3DXCreateRenderToSurface}
  946. ///////////////////////////////////////////////////////////////////////////
  947. // ID3DXRenderToEnvMap:
  948. // --------------------
  949. // This object abstracts rendering to environment maps.  These surfaces
  950. // do not necessarily need to be render targets.  If they are not, a
  951. // compatible render target is used, and the result copied into the
  952. // environment map at end scene.
  953. //
  954. // BeginCube, BeginSphere, BeginHemisphere, BeginParabolic -
  955. //    This function initiates the rendering of the environment map.  As
  956. //    parameters, you pass the textures in which will get filled in with
  957. //    the resulting environment map.
  958. //
  959. // Face -
  960. //    Call this function to initiate the drawing of each face.  For each
  961. //    environment map, you will call this six times.. once for each face
  962. //    in D3DCUBEMAP_FACES.
  963. //
  964. // End -
  965. //    This will restore all render targets, and if needed compose all the
  966. //    rendered faces into the environment map surfaces.
  967. //
  968. // OnLostDevice, OnResetDevice -
  969. //    Call OnLostDevice() on this object before calling Reset() on the
  970. //    device, so that this object can release any stateblocks and video
  971. //    memory resources.  After Reset(), the call OnResetDevice().
  972. ///////////////////////////////////////////////////////////////////////////
  973. type
  974.   PD3DXRTEDesc = ^TD3DXRTEDesc;
  975.   _D3DXRTE_DESC = record
  976.     Size: LongWord;
  977.     Format: TD3DFormat;
  978.     DepthStencil: Bool;
  979.     DepthStencilFormat: TD3DFormat;
  980.   end {_D3DXRTE_DESC};
  981.   {$EXTERNALSYM _D3DXRTE_DESC}
  982.   D3DXRTE_DESC = _D3DXRTE_DESC;
  983.   {$EXTERNALSYM D3DXRTE_DESC}
  984.   TD3DXRTEDesc = _D3DXRTE_DESC;
  985.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXRenderToEnvMap);'}
  986.   {$EXTERNALSYM ID3DXRenderToEnvMap}
  987.   ID3DXRenderToEnvMap = interface(IUnknown)
  988.     ['{4E42C623-9451-44b7-8C86-ABCCDE5D52C8}']
  989.     // ID3DXRenderToEnvMap
  990.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  991.     function GetDesc(out pDesc: TD3DXRTEDesc): HResult; stdcall;
  992.     function BeginCube(pCubeTex: IDirect3DCubeTexture8): HResult; stdcall;
  993.     function BeginSphere(pTex: IDirect3DTexture8): HResult; stdcall;
  994.     function BeginHemisphere(pTexZPos, pTexZNeg: IDirect3DTexture8): HResult; stdcall;
  995.     function BeginParabolic(pTexZPos, pTexZNeg: IDirect3DTexture8): HResult; stdcall;
  996.     function Face(Face: TD3DCubemapFaces): HResult; stdcall;
  997.     function _End: HResult; stdcall;
  998.     function OnLostDevice: HResult; stdcall;
  999.     function OnResetDevice: HResult; stdcall;
  1000.   end;
  1001. function D3DXCreateRenderToEnvMap(ppDevice: IDirect3DDevice8;
  1002.   Size: LongWord;
  1003.   Format: TD3DFormat;
  1004.   DepthStencil: BOOL;
  1005.   DepthStencilFormat: TD3DFormat;
  1006.   out ppRenderToEnvMap: ID3DXRenderToEnvMap): HResult; stdcall; external d3dx8dll;
  1007. {$EXTERNALSYM D3DXCreateRenderToEnvMap}
  1008. ///////////////////////////////////////////////////////////////////////////
  1009. // Shader assemblers:
  1010. ///////////////////////////////////////////////////////////////////////////
  1011. //-------------------------------------------------------------------------
  1012. // D3DXASM flags:
  1013. // --------------
  1014. //
  1015. // D3DXASM_DEBUG
  1016. //   Generate debug info.
  1017. //
  1018. // D3DXASM_SKIPVALIDATION
  1019. //   Do not validate the generated code against known capabilities and
  1020. //   constraints.  This option is only recommended when assembling shaders
  1021. //   you KNOW will work.  (ie. have assembled before without this option.)
  1022. //-------------------------------------------------------------------------
  1023. const
  1024.   D3DXASM_DEBUG           = (1 shl 0);
  1025.   {$EXTERNALSYM D3DXASM_DEBUG}
  1026.   D3DXASM_SKIPVALIDATION  = (1 shl 1);
  1027.   {$EXTERNALSYM D3DXASM_SKIPVALIDATION}
  1028. //-------------------------------------------------------------------------
  1029. // D3DXAssembleShader:
  1030. // -------------------
  1031. // Assembles an ascii description of a vertex or pixel shader into
  1032. // binary form.
  1033. //
  1034. // Parameters:
  1035. //  pSrcFile
  1036. //      Source file name
  1037. //  hSrcModule
  1038. //      Module handle. if NULL, current module will be used.
  1039. //  pSrcResource
  1040. //      Resource name in module
  1041. //  pSrcData
  1042. //      Pointer to source code
  1043. //  SrcDataLen
  1044. //      Size of source code, in bytes
  1045. //  Flags
  1046. //      D3DXASM_xxx flags
  1047. //  ppConstants
  1048. //      Returns an ID3DXBuffer object containing constant declarations.
  1049. //  ppCompiledShader
  1050. //      Returns an ID3DXBuffer object containing the object code.
  1051. //  ppCompilationErrors
  1052. //      Returns an ID3DXBuffer object containing ascii error messages
  1053. //-------------------------------------------------------------------------
  1054. function D3DXAssembleShaderFromFileA(
  1055.   pSrcFile: PAnsiChar;
  1056.   Flags: DWord;
  1057.   ppConstants: PID3DXBuffer;
  1058.   ppCompiledShader: PID3DXBuffer;
  1059.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromFileA';
  1060. {$EXTERNALSYM D3DXAssembleShaderFromFileA}
  1061. function D3DXAssembleShaderFromFileW(
  1062.   pSrcFile: PWideChar;
  1063.   Flags: DWord;
  1064.   ppConstants: PID3DXBuffer;
  1065.   ppCompiledShader: PID3DXBuffer;
  1066.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromFileW';
  1067. {$EXTERNALSYM D3DXAssembleShaderFromFileW}
  1068. function D3DXAssembleShaderFromFile(
  1069.   pSrcFile: PChar;
  1070.   Flags: DWord;
  1071.   ppConstants: PID3DXBuffer;
  1072.   ppCompiledShader: PID3DXBuffer;
  1073.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromFileA';
  1074. {$EXTERNALSYM D3DXAssembleShaderFromFile}
  1075. function D3DXAssembleShaderFromResourceA(
  1076.   hSrcModule: HModule;
  1077.   pSrcResource: PAnsiChar;
  1078.   Flags: DWord;
  1079.   ppConstants: PID3DXBuffer;
  1080.   ppCompiledShader: PID3DXBuffer;
  1081.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromResourceA';
  1082. {$EXTERNALSYM D3DXAssembleShaderFromResourceA}
  1083. function D3DXAssembleShaderFromResourceW(
  1084.   hSrcModule: HModule;
  1085.   pSrcResource: PWideChar;
  1086.   Flags: DWord;
  1087.   ppConstants: PID3DXBuffer;
  1088.   ppCompiledShader: PID3DXBuffer;
  1089.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromResourceW';
  1090. {$EXTERNALSYM D3DXAssembleShaderFromResourceW}
  1091. function D3DXAssembleShaderFromResource(
  1092.   hSrcModule: HModule;
  1093.   pSrcResource: PChar;
  1094.   Flags: DWord;
  1095.   ppConstants: PID3DXBuffer;
  1096.   ppCompiledShader: PID3DXBuffer;
  1097.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromResourceA';
  1098. {$EXTERNALSYM D3DXAssembleShaderFromResource}
  1099. function D3DXAssembleShader(
  1100.   const pSrcData;
  1101.   SrcDataLen: LongWord;
  1102.   Flags: DWord;
  1103.   ppConstants: PID3DXBuffer;
  1104.   ppCompiledShader: PID3DXBuffer;
  1105.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1106. {$EXTERNALSYM D3DXAssembleShader}
  1107. ///////////////////////////////////////////////////////////////////////////
  1108. // Misc APIs:
  1109. ///////////////////////////////////////////////////////////////////////////
  1110. //-------------------------------------------------------------------------
  1111. // D3DXGetErrorString:
  1112. // ------------------
  1113. // Returns the error string for given an hresult.  Interprets all D3DX and
  1114. // D3D hresults.
  1115. //
  1116. // Parameters:
  1117. //  hr
  1118. //      The error code to be deciphered.
  1119. //  pBuffer
  1120. //      Pointer to the buffer to be filled in.
  1121. //  BufferLen
  1122. //      Count of characters in buffer.  Any error message longer than this
  1123. //      length will be truncated to fit.
  1124. //-------------------------------------------------------------------------
  1125. function D3DXGetErrorStringA(hr: HResult; pBuffer: PAnsiChar; BufferLen: LongWord): HResult; stdcall; external d3dx8dll name 'D3DXGetErrorStringA'; overload; 
  1126. {$EXTERNALSYM D3DXGetErrorStringA}
  1127. function D3DXGetErrorStringW(hr: HResult; pBuffer: PWideChar; BufferLen: LongWord): HResult; stdcall; external d3dx8dll name 'D3DXGetErrorStringW'; overload; 
  1128. {$EXTERNALSYM D3DXGetErrorStringW}
  1129. function D3DXGetErrorString(hr: HResult; pBuffer: PChar; BufferLen: LongWord): HResult; stdcall; external d3dx8dll name 'D3DXGetErrorStringA'; overload; 
  1130. {$EXTERNALSYM D3DXGetErrorString}
  1131. // Object Pascal support functions for D3DXGetErrorString
  1132. function D3DXGetErrorStringA(hr: HResult): String; overload;
  1133. function D3DXGetErrorStringW(hr: HResult): WideString; overload;
  1134. {$IFNDEF UNICODE}
  1135. function D3DXGetErrorString(hr: HResult): String; overload;
  1136. {$ELSE}
  1137. function D3DXGetErrorString(hr: HResult): WideString; overload;
  1138. {$ENDIF}
  1139. ///////////////////////////////////////////////////////////////////////////
  1140. //
  1141. //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  1142. //
  1143. //  File:       d3dx8effect.h
  1144. //  Content:    D3DX effect types and functions
  1145. //
  1146. ///////////////////////////////////////////////////////////////////////////
  1147. const
  1148.   D3DXFX_DONOTSAVESTATE = (1 shl 0);
  1149.   {$EXTERNALSYM D3DXFX_DONOTSAVESTATE}
  1150. type
  1151.   _D3DXPARAMETERTYPE = (
  1152.     D3DXPT_DWORD        {= 0},
  1153.     D3DXPT_FLOAT        {= 1},
  1154.     D3DXPT_VECTOR       {= 2},
  1155.     D3DXPT_MATRIX       {= 3},
  1156.     D3DXPT_TEXTURE      {= 4},
  1157.     D3DXPT_VERTEXSHADER {= 5},
  1158.     D3DXPT_PIXELSHADER  {= 6},
  1159.     D3DXPT_CONSTANT     {= 7},
  1160.     D3DXPT_STRING       {= 8}
  1161.   ); {_D3DXPARAMETERTYPE}
  1162.   {$EXTERNALSYM _D3DXPARAMETERTYPE}
  1163.   D3DXPARAMETERTYPE = _D3DXPARAMETERTYPE;
  1164.   {$EXTERNALSYM D3DXPARAMETERTYPE}
  1165.   TD3DXParameterType = _D3DXPARAMETERTYPE;
  1166. type
  1167.   PD3DXEffectDesc = ^TD3DXEffectDesc;
  1168.   _D3DXEFFECT_DESC = packed record
  1169.     Parameters: LongWord;
  1170.     Techniques: LongWord;
  1171.   end;
  1172.   {$EXTERNALSYM _D3DXEFFECT_DESC}
  1173.   D3DXEFFECT_DESC = _D3DXEFFECT_DESC;
  1174.   {$EXTERNALSYM D3DXEFFECT_DESC}
  1175.   TD3DXEffectDesc = _D3DXEFFECT_DESC;
  1176.   PD3DXParameterDesc = ^TD3DXParameterDesc;
  1177.   _D3DXPARAMETER_DESC = packed record
  1178.     Name:  PAnsiChar;
  1179.     Index: PAnsiChar;
  1180.     _Type: TD3DXParameterType;
  1181.   end;
  1182.   {$EXTERNALSYM _D3DXPARAMETER_DESC}
  1183.   D3DXPARAMETER_DESC = _D3DXPARAMETER_DESC;
  1184.   {$EXTERNALSYM D3DXPARAMETER_DESC}
  1185.   TD3DXParameterDesc = _D3DXPARAMETER_DESC;
  1186.   PD3DXTechniqueDesc = ^TD3DXTechniqueDesc;
  1187.   _D3DXTECHNIQUE_DESC = packed record
  1188.     Name:  PAnsiChar;
  1189.     Index: PAnsiChar;
  1190.     Passes: LongWord;
  1191.   end;
  1192.   {$EXTERNALSYM _D3DXTECHNIQUE_DESC}
  1193.   D3DXTECHNIQUE_DESC = _D3DXTECHNIQUE_DESC;
  1194.   {$EXTERNALSYM D3DXTECHNIQUE_DESC}
  1195.   TD3DXTechniqueDesc = _D3DXTECHNIQUE_DESC;
  1196.   PD3DXPassDesc = ^TD3DXPassDesc;
  1197.   _D3DXPASS_DESC = packed record
  1198.     Name:  PAnsiChar;
  1199.     Index: PAnsiChar;
  1200.   end;
  1201.   {$EXTERNALSYM _D3DXPASS_DESC}
  1202.   D3DXPASS_DESC = _D3DXPASS_DESC;
  1203.   {$EXTERNALSYM D3DXPASS_DESC}
  1204.   TD3DXPassDesc = _D3DXPASS_DESC;
  1205. //////////////////////////////////////////////////////////////////////////////
  1206. // ID3DXEffect ///////////////////////////////////////////////////////////////
  1207. //////////////////////////////////////////////////////////////////////////////
  1208.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXEffect);'}
  1209.   {$EXTERNALSYM ID3DXEffect}
  1210.   ID3DXEffect = interface(IUnknown)
  1211.     ['{648B1CEB-8D4E-4d66-B6FA-E44969E82E89}']
  1212.     // ID3DXEffect
  1213.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  1214.     function GetDesc(out pDesc: TD3DXEffectDesc): HResult; stdcall;
  1215.     function GetParameterDesc(pParameter: PAnsiChar; out pDesc: TD3DXParameterDesc): HResult; stdcall;
  1216.     function GetTechniqueDesc(pTechnique: PAnsiChar; out pDesc: TD3DXTechniqueDesc): HResult; stdcall;
  1217.     function GetPassDesc(pTechnique, pPass: PAnsiChar; out pDesc: TD3DXPassDesc): HResult; stdcall;
  1218.     function FindNextValidTechnique(pTechnique: PAnsiChar; out pDesc: TD3DXTechniqueDesc): HResult; stdcall;
  1219.     function CloneEffect(pDevice: IDirect3DDevice8; out ppEffect: ID3DXEffect): HResult; stdcall;
  1220.     function GetCompiledEffect(out ppCompiledEffect: ID3DXBuffer): HResult; stdcall;
  1221.     function SetTechnique(pTechnique: PAnsiChar): HResult; stdcall;
  1222.     function GetTechnique(out ppTechnique: PAnsiChar): HResult; stdcall;
  1223.     function SetDword(pParameter: PAnsiChar; dw: DWord): HResult; stdcall;
  1224.     function GetDword(pParameter: PAnsiChar; out pdw: DWord): HResult; stdcall;
  1225.     function SetFloat(pParameter: PAnsiChar; f: Single): HResult; stdcall;
  1226.     function GetFloat(pParameter: PAnsiChar; out pf: Single): HResult; stdcall;
  1227.     function SetVector(pParameter: PAnsiChar; const pVector: TD3DXVector4): HResult; stdcall;
  1228.     function GetVector(pParameter: PAnsiChar; out pVector: TD3DXVector4): HResult; stdcall;
  1229.     function SetMatrix(pParameter: PAnsiChar; const pMatrix: TD3DXMatrix): HResult; stdcall;
  1230.     function GetMatrix(pParameter: PAnsiChar; out pMatrix: TD3DXMatrix): HResult; stdcall;
  1231.     function SetTexture(pParameter: PAnsiChar; pTexture: IDirect3DBaseTexture8): HResult; stdcall;
  1232.     function GetTexture(pParameter: PAnsiChar; out ppTexture: IDirect3DBaseTexture8): HResult; stdcall;
  1233.     function SetVertexShader(pParameter: PAnsiChar; Handle: DWord): HResult; stdcall;
  1234.     function GetVertexShader(pParameter: PAnsiChar; out Handle: DWord): HResult; stdcall;
  1235.     function SetPixelShader(pParameter: PAnsiChar; Handle: DWord): HResult; stdcall;
  1236.     function GetPixelShader(pParameter: PAnsiChar; out Handle: DWord): HResult; stdcall;
  1237.     function SetString(pParameter: PAnsiChar; pString: PAnsiChar): HResult; stdcall;
  1238.     function GetString(pParameter: PAnsiChar; out ppString: PAnsiChar): HResult; stdcall;
  1239.     function IsParameterUsed(pParameter: PAnsiChar): BOOL; stdcall;
  1240.     function Validate: HResult; stdcall;
  1241.     function _Begin(out pPasses: LongWord; Flags: DWord): HResult; stdcall;
  1242.     function Pass(Pass: LongWord): HResult; stdcall;
  1243.     function _End: HResult; stdcall;
  1244.     function OnLostDevice: HResult; stdcall;
  1245.     function OnResetDevice: HResult; stdcall;
  1246.   end;
  1247. //////////////////////////////////////////////////////////////////////////////
  1248. // APIs //////////////////////////////////////////////////////////////////////
  1249. //////////////////////////////////////////////////////////////////////////////
  1250. //----------------------------------------------------------------------------
  1251. // D3DXCreateEffect:
  1252. // -----------------
  1253. // Creates an effect from an ascii or binaray effect description.
  1254. //
  1255. // Parameters:
  1256. //  pDevice
  1257. //      Pointer of the device on which to create the effect
  1258. //  pSrcFile
  1259. //      Name of the file containing the effect description
  1260. //  hSrcModule
  1261. //      Module handle. if NULL, current module will be used.
  1262. //  pSrcResource
  1263. //      Resource name in module
  1264. //  pSrcData
  1265. //      Pointer to effect description
  1266. //  SrcDataSize
  1267. //      Size of the effect description in bytes
  1268. //  ppEffect
  1269. //      Returns a buffer containing created effect.
  1270. //  ppCompilationErrors
  1271. //      Returns a buffer containing any error messages which occurred during
  1272. //      compile.  Or NULL if you do not care about the error messages.
  1273. //
  1274. //----------------------------------------------------------------------------
  1275. function D3DXCreateEffectFromFileA(
  1276.   pDevice: IDirect3DDevice8;
  1277.   pSrcFile: PAnsiChar;
  1278.   out ppEffect: ID3DXEffect;
  1279.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromFileA';
  1280. {$EXTERNALSYM D3DXCreateEffectFromFileA}
  1281. function D3DXCreateEffectFromFileW(
  1282.   pDevice: IDirect3DDevice8;
  1283.   pSrcFile: PWideChar;
  1284.   out ppEffect: ID3DXEffect;
  1285.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromFileW';
  1286. {$EXTERNALSYM D3DXCreateEffectFromFileW}
  1287. function D3DXCreateEffectFromFile(
  1288.   pDevice: IDirect3DDevice8;
  1289.   pSrcFile: PChar;
  1290.   out ppEffect: ID3DXEffect;
  1291.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromFileA';
  1292. {$EXTERNALSYM D3DXCreateEffectFromFile}
  1293. function D3DXCreateEffectFromResourceA(
  1294.   pDevice: IDirect3DDevice8;
  1295.   hSrcModule: HModule;
  1296.   pSrcResource: PAnsiChar;
  1297.   out ppEffect: ID3DXEffect;
  1298.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromResourceA';
  1299. {$EXTERNALSYM D3DXCreateEffectFromResourceA}
  1300. function D3DXCreateEffectFromResourceW(
  1301.   pDevice: IDirect3DDevice8;
  1302.   hSrcModule: HModule;
  1303.   pSrcResource: PWideChar;
  1304.   out ppEffect: ID3DXEffect;
  1305.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromResourceW';
  1306. {$EXTERNALSYM D3DXCreateEffectFromResourceW}
  1307. function D3DXCreateEffectFromResource(
  1308.   pDevice: IDirect3DDevice8;
  1309.   hSrcModule: HModule;
  1310.   pSrcResource: PChar;
  1311.   out ppEffect: ID3DXEffect;
  1312.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromResourceA';
  1313. {$EXTERNALSYM D3DXCreateEffectFromResource}
  1314. function D3DXCreateEffect(
  1315.   pDevice: IDirect3DDevice8;
  1316.   const pSrcData;
  1317.   SrcDataSize: LongWord;
  1318.   out ppEffect: ID3DXEffect;
  1319.   ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1320. {$EXTERNALSYM D3DXCreateEffect}
  1321. //////////////////////////////////////////////////////////////////////////////
  1322. //
  1323. //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  1324. //
  1325. //  File:       d3dx8mesh.h
  1326. //  Content:    D3DX mesh types and functions
  1327. //
  1328. //////////////////////////////////////////////////////////////////////////////
  1329. type
  1330.   _D3DXMESH = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1331.   {$EXTERNALSYM _D3DXMESH}
  1332.   TD3DXMesh = _D3DXMESH;
  1333. // Mesh options - lower 3 bytes only, upper byte used by _D3DXMESHOPT option flags
  1334. const
  1335.   D3DXMESH_32BIT                  = $001; // If set, then use 32 bit indices, if not set use 16 bit indices.
  1336.   {$EXTERNALSYM D3DXMESH_32BIT}
  1337.   D3DXMESH_DONOTCLIP              = $002; // Use D3DUSAGE_DONOTCLIP for VB & IB.
  1338.   {$EXTERNALSYM D3DXMESH_DONOTCLIP}
  1339.   D3DXMESH_POINTS                 = $004; // Use D3DUSAGE_POINTS for VB & IB.
  1340.   {$EXTERNALSYM D3DXMESH_POINTS}
  1341.   D3DXMESH_RTPATCHES              = $008; // Use D3DUSAGE_RTPATCHES for VB & IB.
  1342.   {$EXTERNALSYM D3DXMESH_RTPATCHES}
  1343.   D3DXMESH_NPATCHES      = $4000;// Use D3DUSAGE_NPATCHES for VB & IB.
  1344.   {$EXTERNALSYM D3DXMESH_NPATCHES}
  1345.   D3DXMESH_VB_SYSTEMMEM      = $010; // Use D3DPOOL_SYSTEMMEM for VB. Overrides D3DXMESH_MANAGEDVERTEXBUFFER
  1346.   {$EXTERNALSYM D3DXMESH_VB_SYSTEMMEM}
  1347.   D3DXMESH_VB_MANAGED             = $020; // Use D3DPOOL_MANAGED for VB.
  1348.   {$EXTERNALSYM D3DXMESH_VB_MANAGED}
  1349.   D3DXMESH_VB_WRITEONLY           = $040; // Use D3DUSAGE_WRITEONLY for VB.
  1350.   {$EXTERNALSYM D3DXMESH_VB_WRITEONLY}
  1351.   D3DXMESH_VB_DYNAMIC             = $080; // Use D3DUSAGE_DYNAMIC for VB.
  1352.   {$EXTERNALSYM D3DXMESH_VB_DYNAMIC}
  1353.   D3DXMESH_VB_SOFTWAREPROCESSING = $8000; // Use D3DUSAGE_SOFTWAREPROCESSING for VB.
  1354.   {$EXTERNALSYM D3DXMESH_VB_SOFTWAREPROCESSING}
  1355.   D3DXMESH_IB_SYSTEMMEM      = $100; // Use D3DPOOL_SYSTEMMEM for IB. Overrides D3DXMESH_MANAGEDINDEXBUFFER
  1356.   {$EXTERNALSYM D3DXMESH_IB_SYSTEMMEM}
  1357.   D3DXMESH_IB_MANAGED             = $200; // Use D3DPOOL_MANAGED for IB.
  1358.   {$EXTERNALSYM D3DXMESH_IB_MANAGED}
  1359.   D3DXMESH_IB_WRITEONLY           = $400; // Use D3DUSAGE_WRITEONLY for IB.
  1360.   {$EXTERNALSYM D3DXMESH_IB_WRITEONLY}
  1361.   D3DXMESH_IB_DYNAMIC             = $800; // Use D3DUSAGE_DYNAMIC for IB.
  1362.   {$EXTERNALSYM D3DXMESH_IB_DYNAMIC}
  1363.   D3DXMESH_IB_SOFTWAREPROCESSING= $10000; // Use D3DUSAGE_SOFTWAREPROCESSING for IB.
  1364.   {$EXTERNALSYM D3DXMESH_IB_SOFTWAREPROCESSING}
  1365.   D3DXMESH_VB_SHARE               = $1000; // Valid for Clone* calls only, forces cloned mesh/pmesh to share vertex buffer
  1366.   {$EXTERNALSYM D3DXMESH_VB_SHARE}
  1367.   D3DXMESH_USEHWONLY              = $2000; // Valid for ID3DXSkinMesh::ConvertToBlendedMesh
  1368.   {$EXTERNALSYM D3DXMESH_USEHWONLY}
  1369.   // Helper options
  1370.   D3DXMESH_SYSTEMMEM      = $110; // D3DXMESH_VB_SYSTEMMEM | D3DXMESH_IB_SYSTEMMEM
  1371.   {$EXTERNALSYM D3DXMESH_SYSTEMMEM}
  1372.   D3DXMESH_MANAGED                = $220; // D3DXMESH_VB_MANAGED | D3DXMESH_IB_MANAGED
  1373.   {$EXTERNALSYM D3DXMESH_MANAGED}
  1374.   D3DXMESH_WRITEONLY              = $440; // D3DXMESH_VB_WRITEONLY | D3DXMESH_IB_WRITEONLY
  1375.   {$EXTERNALSYM D3DXMESH_WRITEONLY}
  1376.   D3DXMESH_DYNAMIC                = $880; // D3DXMESH_VB_DYNAMIC | D3DXMESH_IB_DYNAMIC
  1377.   {$EXTERNALSYM D3DXMESH_DYNAMIC}
  1378.   D3DXMESH_SOFTWAREPROCESSING   = $18000; // D3DXMESH_VB_SOFTWAREPROCESSING | D3DXMESH_IB_SOFTWAREPROCESSING
  1379.   {$EXTERNALSYM D3DXMESH_SOFTWAREPROCESSING}
  1380. type
  1381.   // option field values for specifying min value in D3DXGeneratePMesh and D3DXSimplifyMesh
  1382.   _D3DXMESHSIMP = (
  1383.   {$IFNDEF COMPILER6_UP}
  1384.     D3DXMESHSIMP_INVALID_0{= 0x0},
  1385.     D3DXMESHSIMP_VERTEX   {= 0x1},
  1386.     D3DXMESHSIMP_FACE     {= 0x2}
  1387.   {$ELSE}
  1388.     D3DXMESHSIMP_VERTEX   = $1,
  1389.     D3DXMESHSIMP_FACE     = $2
  1390.   {$ENDIF}
  1391.   );
  1392.   {$EXTERNALSYM _D3DXMESHSIMP}
  1393.   TD3DMeshSimp = _D3DXMESHSIMP;
  1394.   _MAX_FVF_DECL_SIZE = DWord;
  1395.   {$EXTERNALSYM _MAX_FVF_DECL_SIZE}
  1396. const
  1397.   MAX_FVF_DECL_SIZE = 20;
  1398.   {$EXTERNALSYM MAX_FVF_DECL_SIZE}
  1399. type
  1400.   TFVFDeclaration = array [0..MAX_FVF_DECL_SIZE-1] of DWord;
  1401.   PD3DXAttributeRange = ^TD3DXAttributeRange;
  1402.   _D3DXATTRIBUTERANGE = packed record
  1403.     AttribId:    DWord;
  1404.     FaceStart:   DWord;
  1405.     FaceCount:   DWord;
  1406.     VertexStart: DWord;
  1407.     VertexCount: DWord;
  1408.   end;
  1409.   {$EXTERNALSYM _D3DXATTRIBUTERANGE}
  1410.   D3DXATTRIBUTERANGE = _D3DXATTRIBUTERANGE;
  1411.   {$EXTERNALSYM D3DXATTRIBUTERANGE}
  1412.   TD3DXAttributeRange = _D3DXATTRIBUTERANGE;
  1413.   PD3DXMaterial = ^TD3DXMaterial;
  1414.   D3DXMATERIAL = packed record
  1415.     MatD3D: TD3Dmaterial8;
  1416.     pTextureFilename: PAnsiChar;
  1417.   end;
  1418.   {$EXTERNALSYM D3DXMATERIAL}
  1419.   TD3DXMaterial = D3DXMATERIAL;
  1420.   PD3DXAttributeWeights = ^TD3DXAttributeWeights;
  1421.   _D3DXATTRIBUTEWEIGHTS = packed record
  1422.     Position: Single;
  1423.     Boundary: Single;
  1424.     Normal:   Single;
  1425.     Diffuse:  Single;
  1426.     Specular: Single;
  1427.     Tex: array[0..7] of Single;
  1428.   end;
  1429.   {$EXTERNALSYM _D3DXATTRIBUTEWEIGHTS}
  1430.   D3DXATTRIBUTEWEIGHTS = _D3DXATTRIBUTEWEIGHTS;
  1431.   {$EXTERNALSYM D3DXATTRIBUTEWEIGHTS}
  1432.   TD3DXAttributeWeights = _D3DXATTRIBUTEWEIGHTS;
  1433.   _D3DXWELDEPSILONSFLAGS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1434.   {$EXTERNALSYM _D3DXWELDEPSILONSFLAGS}
  1435.   TD3DXWeldEpsilonsFlags = _D3DXWELDEPSILONSFLAGS;
  1436. const
  1437.   D3DXWELDEPSILONS_WELDALL = $1;              // weld all vertices marked by adjacency as being overlapping
  1438.   {$EXTERNALSYM D3DXWELDEPSILONS_WELDALL}
  1439.   D3DXWELDEPSILONS_WELDPARTIALMATCHES = $2;   // if a given vertex component is within epsilon, modify partial matched
  1440.                                                  // vertices so that both components identical AND if all components "equal"
  1441.                                                  // remove one of the vertices
  1442.   {$EXTERNALSYM D3DXWELDEPSILONS_WELDPARTIALMATCHES}
  1443.   D3DXWELDEPSILONS_DONOTREMOVEVERTICES = $4;  // instructs weld to only allow modifications to vertices and not removal
  1444.                                                  // ONLY valid if D3DXWELDEPSILONS_WELDPARTIALMATCHES is set
  1445.                                                  // useful to modify vertices to be equal, but not allow vertices to be removed
  1446.   {$EXTERNALSYM D3DXWELDEPSILONS_DONOTREMOVEVERTICES}
  1447. type
  1448.   PD3DXWeldEpsilons = ^TD3DXWeldEpsilons;
  1449.   _D3DXWELDEPSILONS = packed record
  1450.     SkinWeights: Single;
  1451.     Normal: Single;
  1452.     Tex: array[0..7] of Single;
  1453.     Flags: DWord;
  1454.   end;
  1455.   {$EXTERNALSYM _D3DXWELDEPSILONS}
  1456.   D3DXWELDEPSILONS = _D3DXWELDEPSILONS;
  1457.   {$EXTERNALSYM D3DXWELDEPSILONS}
  1458.   TD3DXWeldEpsilons = _D3DXWELDEPSILONS;
  1459.   ID3DXMesh = interface;
  1460.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXBaseMesh);'}
  1461.   {$EXTERNALSYM ID3DXBaseMesh}
  1462.   ID3DXBaseMesh = interface(IUnknown)
  1463.     ['{2A835771-BF4D-43f4-8E14-82A809F17D8A}']
  1464.     // ID3DXBaseMesh
  1465.     function DrawSubset(AttribId: DWord): HResult; stdcall;
  1466.     function GetNumFaces: DWord; stdcall;
  1467.     function GetNumVertices: DWord; stdcall;
  1468.     function GetFVF: DWord; stdcall;
  1469.     function GetDeclaration(out Declaration: TFVFDeclaration): HResult; stdcall;
  1470.     function GetOptions: DWord; stdcall;
  1471.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  1472.     function CloneMeshFVF(Options, FVF: DWord; ppDevice: IDirect3DDevice8;
  1473.       out ppCloneMesh: ID3DXMesh): HResult; stdcall;
  1474.     function CloneMesh(Options: DWord; pDeclaration: PDWord;
  1475.       ppDevice: IDirect3DDevice8; out ppCloneMesh: ID3DXMesh): HResult; stdcall;
  1476.     function GetVertexBuffer(out ppVB: IDirect3DVertexBuffer8): HResult; stdcall;
  1477.     function GetIndexBuffer(out ppIB: IDirect3DIndexBuffer8): HResult; stdcall;
  1478.     function LockVertexBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
  1479.     function UnlockVertexBuffer: HResult; stdcall;
  1480.     function LockIndexBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
  1481.     function UnlockIndexBuffer: HResult; stdcall;
  1482.     function GetAttributeTable(pAttribTable: PD3DXAttributeRange;
  1483.       pAttribTableSize: PDWord): HResult; stdcall;
  1484.     function ConvertPointRepsToAdjacency(pPRep: PDWord; pAdjacency: PDWord): HResult; stdcall;
  1485.     function ConvertAdjacencyToPointReps(pAdjacency: PDWord; pPRep: PDWord): HResult; stdcall;
  1486.     function GenerateAdjacency(Epsilon: Single; pAdjacency: PDWord): HResult; stdcall;
  1487.   end;
  1488.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXMesh);'}
  1489.   {$EXTERNALSYM ID3DXMesh}
  1490.   ID3DXMesh = interface(ID3DXBaseMesh)
  1491.     ['{CCAE5C3B-4DD1-4d0f-997E-4684CA64557F}']
  1492.     // ID3DXMesh
  1493.     function LockAttributeBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
  1494.     function UnlockAttributeBuffer: HResult; stdcall;
  1495.     function Optimize(Flags: DWord; pAdjacencyIn, pAdjacencyOut: PDWord;
  1496.       pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer;
  1497.       out ppOptMesh: ID3DXMesh): HResult; stdcall;
  1498.     function OptimizeInplace(Flags: DWord; pAdjacencyIn, pAdjacencyOut: PDWord;
  1499.       pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer): HResult; stdcall;
  1500.   end;
  1501.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXPMesh);'}
  1502.   {$EXTERNALSYM ID3DXPMesh}
  1503.   ID3DXPMesh = interface(ID3DXBaseMesh)
  1504.     ['{19FBE386-C282-4659-97BD-CB869B084A6C}']
  1505.     // ID3DXPMesh
  1506.     function ClonePMeshFVF(Options, FVF: DWord; ppDevice: IDirect3DDevice8;
  1507.       out ppCloneMesh: ID3DXPMesh): HResult; stdcall;
  1508.     function ClonePMesh(Options: DWord; pDeclaration: PDWord;
  1509.       ppDevice: IDirect3DDevice8; out ppCloneMesh: ID3DXPMesh): HResult; stdcall;
  1510.     function SetNumFaces(Faces: DWord): HResult; stdcall;
  1511.     function SetNumVertices(Vertices: DWord): HResult; stdcall;
  1512.     function GetMaxFaces: DWord; stdcall;
  1513.     function GetMinFaces: DWord; stdcall;
  1514.     function GetMaxVertices: DWord; stdcall;
  1515.     function GetMinVertices: DWord; stdcall;
  1516.     function Save(pStream: IStream; pMaterials: PD3DXMaterial;
  1517.        NumMaterials: DWord): HResult; stdcall;
  1518.     function Optimize(Flags: DWord; pAdjacencyOut: PDWord;
  1519.       pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer;
  1520.       out ppOptMesh: ID3DXMesh): HResult; stdcall;
  1521.     function OptimizeBaseLOD(Flags: DWord; pFaceRemap: PDWord): HResult; stdcall;
  1522.     function TrimByFaces(NewFacesMin, NewFacesMax: DWord; rgiFaceRemap, rgiVertRemap: PDWord): HResult; stdcall;
  1523.     function TrimByVertices(NewVerticesMin, NewVerticesMax: DWord; rgiFaceRemap, rgiVertRemap: PDWord): HResult; stdcall;
  1524.     function GetAdjacency(pAdjacency: PDWord): HResult; stdcall;
  1525.   end;
  1526.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXSPMesh);'}
  1527.   {$EXTERNALSYM ID3DXSPMesh}
  1528.   ID3DXSPMesh = interface(IUnknown)
  1529.     ['{4E3CA05C-D4FF-4d11-8A02-16459E08F6F4}']
  1530.     // ID3DXSPMesh
  1531.     function GetNumFaces: DWord; stdcall;
  1532.     function GetNumVertices: DWord; stdcall;
  1533.     function GetFVF: DWord; stdcall;
  1534.     function GetDeclaration(out Declaration: TFVFDeclaration): HResult; stdcall;
  1535.     function GetOptions: DWord; stdcall;
  1536.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  1537.     function CloneMeshFVF(Options, FVF: DWord; ppDevice: IDirect3DDevice8;
  1538.       pAdjacencyOut, pVertexRemapOut: PDWord;
  1539.       out ppCloneMesh: ID3DXMesh): HResult; stdcall;
  1540.     function CloneMesh(Options: DWord; pDeclaration: PDWord;
  1541.       ppDevice: IDirect3DDevice8; pAdjacencyOut, pVertexRemapOut: PDWord;
  1542.       out ppCloneMesh: ID3DXMesh): HResult; stdcall;
  1543.     function ClonePMeshFVF(Options, FVF: DWord; ppDevice: IDirect3DDevice8;
  1544.       pVertexRemapOut: PDWord; out ppCloneMesh: ID3DXPMesh): HResult; stdcall;
  1545.     function ClonePMesh(Options: DWord; pDeclaration: PDWord;
  1546.       ppDevice: IDirect3DDevice8; pVertexRemapOut: PDWord;
  1547.       out ppCloneMesh: ID3DXPMesh): HResult; stdcall;
  1548.     function ReduceFaces(Faces: DWord): HResult; stdcall;
  1549.     function ReduceVertices(Vertices: DWord): HResult; stdcall;
  1550.     function GetMaxFaces: DWord; stdcall;
  1551.     function GetMaxVertices: DWord; stdcall;
  1552.     function GetVertexAttributeWeights(pVertexAttributeWeights: PD3DXAttributeWeights): HResult; stdcall;
  1553.     function GetVertexWeights(pVertexWeights: PSingle): HResult; stdcall;
  1554.   end;
  1555. const
  1556.   UNUSED16      = $ffff;
  1557.   {$EXTERNALSYM UNUSED16}
  1558.   UNUSED32      = $ffffffff;
  1559.   {$EXTERNALSYM UNUSED32}
  1560. // ID3DXMesh::Optimize options - upper byte only, lower 3 bytes used from _D3DXMESH option flags
  1561. type
  1562.   _D3DXMESHOPT = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
  1563.   {$EXTERNALSYM _D3DXMESHOPT}
  1564.   TD3DXMeshOpt = _D3DXMESHOPT;
  1565. const
  1566.   D3DXMESHOPT_COMPACT       = $01000000;
  1567.   {$EXTERNALSYM D3DXMESHOPT_COMPACT}
  1568.   D3DXMESHOPT_ATTRSORT      = $02000000;
  1569.   {$EXTERNALSYM D3DXMESHOPT_ATTRSORT}
  1570.   D3DXMESHOPT_VERTEXCACHE   = $04000000;
  1571.   {$EXTERNALSYM D3DXMESHOPT_VERTEXCACHE}
  1572.   D3DXMESHOPT_STRIPREORDER  = $08000000;
  1573.   {$EXTERNALSYM D3DXMESHOPT_STRIPREORDER}
  1574.   D3DXMESHOPT_IGNOREVERTS   = $10000000;  // optimize faces only; don't touch vertices
  1575.   {$EXTERNALSYM D3DXMESHOPT_IGNOREVERTS}
  1576.   D3DXMESHOPT_SHAREVB       =     $1000;         // same as D3DXMESH_VB_SHARE
  1577.   {$EXTERNALSYM D3DXMESHOPT_SHAREVB}
  1578. // Subset of the mesh that has the same attribute and bone combination.
  1579. // This subset can be rendered in a single draw call
  1580. type
  1581.   PDWordArray = ^TDWordArray;
  1582.   {$NODEFINE PDWordArray}
  1583.   TDWordArray = array[0..8181] of DWord;
  1584.   {$NODEFINE TDWordArray}
  1585.   PD3DXBoneCombination = ^TD3DXBoneCombination;
  1586.   _D3DXBONECOMBINATION = packed record
  1587.     AttribId: DWord;
  1588.     FaceStart: DWord;
  1589.     FaceCount: DWord;
  1590.     VertexStart: DWord;
  1591.     VertexCount: DWord;
  1592.     BoneId: PDWordArray; // [ DWORD* ]  in original d3dx8mesh.h
  1593.   end;
  1594.   {$EXTERNALSYM _D3DXBONECOMBINATION}
  1595.   D3DXBONECOMBINATION = _D3DXBONECOMBINATION;
  1596.   {$EXTERNALSYM D3DXBONECOMBINATION}
  1597.   TD3DXBoneCombination = _D3DXBONECOMBINATION;
  1598.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXSkinMesh);'}
  1599.   {$EXTERNALSYM ID3DXSkinMesh}
  1600.   ID3DXSkinMesh = interface(IUnknown)
  1601.     ['{8DB06ECC-EBFC-408a-9404-3074B4773515}']
  1602.     // close to ID3DXMesh
  1603.     function GetNumFaces: DWord; stdcall;
  1604.     function GetNumVertices: DWord; stdcall;
  1605.     function GetFVF: DWord; stdcall;
  1606.     function GetDeclaration(out Declaration: TFVFDeclaration): HResult; stdcall;
  1607.     function GetOptions: DWord; stdcall;
  1608.     function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
  1609.     function GetVertexBuffer(out ppVB: IDirect3DVertexBuffer8): HResult; stdcall;
  1610.     function GetIndexBuffer(out ppIB: IDirect3DIndexBuffer8): HResult; stdcall;
  1611.     function LockVertexBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
  1612.     function UnlockVertexBuffer: HResult; stdcall;
  1613.     function LockIndexBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
  1614.     function UnlockIndexBuffer: HResult; stdcall;
  1615.     function LockAttributeBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
  1616.     function UnlockAttributeBuffer: HResult; stdcall;
  1617.     // ID3DXSkinMesh
  1618.     function GetNumBones: DWord; stdcall;
  1619.     function GetOriginalMesh(out ppMesh: ID3DXMesh): HResult; stdcall;
  1620.     function SetBoneInfluence(bone, numInfluences: DWord; vertices: PDWord;
  1621.       weights: PSingle): HResult; stdcall;
  1622.     function GetNumBoneInfluences(bone: DWord): DWord; stdcall;
  1623.     function GetBoneInfluence(bone: DWord; vertices: PDWord;
  1624.       weights: PSingle): HResult; stdcall;
  1625.     function GetMaxVertexInfluences(out maxVertexInfluences: DWord): HResult; stdcall;
  1626.     function GetMaxFaceInfluences(out maxFaceInfluences: DWord): HResult; stdcall;
  1627.     function ConvertToBlendedMesh(Options: DWord;
  1628.       pAdjacencyIn, pAdjacencyOut: PDWord;
  1629.       out pNumBoneCombinations: DWord; out ppBoneCombinationTable: ID3DXBuffer;
  1630.       pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer;
  1631.       out ppMesh: ID3DXMesh): HResult; stdcall;
  1632.     function ConvertToIndexedBlendedMesh(Options: DWord;
  1633.       pAdjacencyIn: PDWord; paletteSize: DWord; pAdjacencyOut: PDWord;
  1634.       out pNumBoneCombinations: DWord; out ppBoneCombinationTable: ID3DXBuffer;
  1635.       pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer;
  1636.       out ppMesh: ID3DXMesh): HResult; stdcall;
  1637.     function GenerateSkinnedMesh(Options: DWord; minWeight: Single;
  1638.       pAdjacencyIn, pAdjacencyOut: PDWord;
  1639.       pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer;
  1640.       out ppMesh: ID3DXMesh): HResult; stdcall;
  1641.     function UpdateSkinnedMesh(
  1642.       const pBoneTransforms: TD3DXmatrix; pBoneInvTransforms: PD3DXmatrix;
  1643.       ppMesh: ID3DXMesh): HResult; stdcall;
  1644.   end;
  1645. type
  1646.   IID_ID3DXBaseMesh     = ID3DXBaseMesh;
  1647.   {$EXTERNALSYM IID_ID3DXBaseMesh}
  1648.   IID_ID3DXMesh         = ID3DXMesh;
  1649.   {$EXTERNALSYM IID_ID3DXMesh}
  1650.   IID_ID3DXPMesh        = ID3DXPMesh;
  1651.   {$EXTERNALSYM IID_ID3DXPMesh}
  1652.   IID_ID3DXSPMesh       = ID3DXSPMesh;
  1653.   {$EXTERNALSYM IID_ID3DXSPMesh}
  1654.   IID_ID3DXSkinMesh     = ID3DXSkinMesh;
  1655.   {$EXTERNALSYM IID_ID3DXSkinMesh}
  1656. function D3DXCreateMesh(NumFaces, NumVertices: DWord; Options: DWord;
  1657.   pDeclaration: PDWord; pD3D: IDirect3DDevice8; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
  1658. {$EXTERNALSYM D3DXCreateMesh}
  1659. function D3DXCreateMeshFVF(NumFaces, NumVertices: DWord; Options: DWord;
  1660.   FVF: DWord; pD3D: IDirect3DDevice8; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
  1661. {$EXTERNALSYM D3DXCreateMeshFVF}
  1662. function D3DXCreateSPMesh(pMesh: ID3DXMesh; pAdjacency: PDWord;
  1663.   pVertexAttributeWeights: PD3DXAttributeWeights; pVertexWeights: PSingle;
  1664.   out ppSMesh: ID3DXSPMesh): HResult; stdcall; external d3dx8dll;
  1665. {$EXTERNALSYM D3DXCreateSPMesh}
  1666. // clean a mesh up for simplification, try to make manifold
  1667. function D3DXCleanMesh(pMeshIn: ID3DXMesh; pAdjacencyIn: PDWord;
  1668.   out ppMeshOut: ID3DXMesh; pAdjacencyOut: PDWord;
  1669.   ppErrorsAndWarnings: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1670. {$EXTERNALSYM D3DXCleanMesh}
  1671. function D3DXValidMesh(pMeshIn: ID3DXMesh; pAdjacency: PDWord;
  1672.   ppErrorsAndWarnings: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1673. {$EXTERNALSYM D3DXValidMesh}
  1674. function D3DXGeneratePMesh(pMesh: ID3DXMesh; pAdjacency: PDWord;
  1675.   pVertexAttributeWeights: PD3DXAttributeWeights; pVertexWeights: PSingle;
  1676.   MinValue: DWord; Options: TD3DMeshSimp; out ppPMesh: ID3DXPMesh): HResult; stdcall; external d3dx8dll;
  1677. {$EXTERNALSYM D3DXGeneratePMesh}
  1678. function D3DXSimplifyMesh(pMesh: ID3DXMesh; pAdjacency: PDWord;
  1679.   pVertexAttributeWeights: PD3DXAttributeWeights; pVertexWeights: PSingle;
  1680.   MinValue: DWord; Options: TD3DMeshSimp; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
  1681. {$EXTERNALSYM D3DXSimplifyMesh}
  1682. function D3DXComputeBoundingSphere(const pPointsFVF; NumVertices: DWord;
  1683.   FVF: DWord; out pCenter: TD3DXVector3; out pRadius: Single): HResult; stdcall; external d3dx8dll;
  1684. {$EXTERNALSYM D3DXComputeBoundingSphere}
  1685. function D3DXComputeBoundingBox(const pPointsFVF; NumVertices: DWord;
  1686.   FVF: DWord; out pMin, pMax: TD3DXVector3): HResult; stdcall; external d3dx8dll;
  1687. {$EXTERNALSYM D3DXComputeBoundingBox}
  1688. function D3DXComputeNormals(pMesh: ID3DXBaseMesh; pAdjacency: PDWord): HResult; stdcall; external d3dx8dll;
  1689. {$EXTERNALSYM D3DXComputeNormals}
  1690. function D3DXCreateBuffer(NumBytes: DWord; out ppBuffer: ID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1691. {$EXTERNALSYM D3DXCreateBuffer}
  1692. function D3DXLoadMeshFromX(pFilename: PAnsiChar; Options: DWord;
  1693.   pD3D: IDirect3DDevice8; ppAdjacency, ppMaterials: PID3DXBuffer;
  1694.   pNumMaterials: PDWord; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
  1695. {$EXTERNALSYM D3DXLoadMeshFromX}
  1696. function D3DXLoadMeshFromXInMemory(Memory: PByte; SizeOfMemory: DWord;
  1697.   Options: DWord; pD3D: IDirect3DDevice8;
  1698.   ppAdjacency, ppMaterials: PID3DXBuffer;
  1699.   pNumMaterials: PDWord; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
  1700. {$EXTERNALSYM D3DXLoadMeshFromXInMemory}
  1701. function D3DXLoadMeshFromXResource(Module: HModule; Name: PAnsiChar; _Type: PAnsiChar;
  1702.   Options: DWord; pD3D: IDirect3DDevice8;
  1703.   ppAdjacency, ppMaterials: PID3DXBuffer;
  1704.   pNumMaterials: PDWord; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
  1705. {$EXTERNALSYM D3DXLoadMeshFromXResource}
  1706. function D3DXSaveMeshToX(pFilename: PAnsiChar; ppMesh: ID3DXMesh;
  1707.   pAdjacency: PDWord; pMaterials: PD3DXMaterial; NumMaterials: DWord;
  1708.   Format: DWord): HResult; stdcall; external d3dx8dll;
  1709. {$EXTERNALSYM D3DXSaveMeshToX}
  1710. function D3DXCreatePMeshFromStream(pStream: IStream; Options: DWord;
  1711.   pD3D: IDirect3DDevice8; ppMaterials: PID3DXBuffer;
  1712.   pNumMaterials: PDWord; out ppPMesh: ID3DXPMesh): HResult; stdcall; external d3dx8dll;
  1713. {$EXTERNALSYM D3DXCreatePMeshFromStream}
  1714. function D3DXCreateSkinMesh(NumFaces, NumVertices, NumBones, Options: DWord;
  1715.   pDeclaration: PDWord; pD3D: IDirect3DDevice8;
  1716.   out ppSkinMesh: ID3DXSkinMesh): HResult; stdcall; external d3dx8dll;
  1717. {$EXTERNALSYM D3DXCreateSkinMesh}
  1718. function D3DXCreateSkinMeshFVF(NumFaces, NumVertices, NumBones, Options: DWord;
  1719.   FVF: DWord; pD3D: IDirect3DDevice8;
  1720.   out ppSkinMesh: ID3DXSkinMesh): HResult; stdcall; external d3dx8dll;
  1721. {$EXTERNALSYM D3DXCreateSkinMeshFVF}
  1722. function D3DXCreateSkinMeshFromMesh(pMesh: ID3DXMesh; numBones: DWord;
  1723.   out ppSkinMesh: ID3DXSkinMesh): HResult; stdcall; external d3dx8dll;
  1724. {$EXTERNALSYM D3DXCreateSkinMeshFromMesh}
  1725. function D3DXLoadMeshFromXof(pXofObjMesh: IDirectXFileData;
  1726.   Options: DWord; pD3D: IDirect3DDevice8;
  1727.   ppAdjacency, ppMaterials: PID3DXBuffer;
  1728.   pNumMaterials: PDWord; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
  1729. {$EXTERNALSYM D3DXLoadMeshFromXof}
  1730. function D3DXLoadSkinMeshFromXof(pXofObjMesh: IDirectXFileData;
  1731.   Options: DWord; pD3D: IDirect3DDevice8;
  1732.   ppAdjacency, ppMaterials: PID3DXBuffer;
  1733.   pmMatOut: PDWord; ppBoneNames, ppBoneTransforms: PID3DXBuffer;
  1734.   out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
  1735. {$EXTERNALSYM D3DXLoadSkinMeshFromXof}
  1736. function D3DXTessellateNPatches(pMeshIn: ID3DXMesh;
  1737.   pAdjacencyIn: PDWord; NumSegs: Single;
  1738.   QuadraticInterpNormals: BOOL; // if false use linear intrep for normals, if true use quadratic
  1739.   out ppMeshOut: ID3DXMesh; ppAdjacencyOut: PDWord): HResult; stdcall; external d3dx8dll;
  1740. {$EXTERNALSYM D3DXTessellateNPatches}
  1741. function D3DXGetFVFVertexSize(FVF: DWord): LongWord; stdcall; external d3dx8dll;
  1742. {$EXTERNALSYM D3DXGetFVFVertexSize}
  1743. function D3DXDeclaratorFromFVF(FVF: DWord; out Declaration: TFVFDeclaration): HResult; stdcall; external d3dx8dll;
  1744. {$EXTERNALSYM D3DXDeclaratorFromFVF}
  1745. function D3DXFVFFromDeclarator(pDeclarator: PDWord; out pFVF: DWord): HResult; stdcall; external d3dx8dll;
  1746. {$EXTERNALSYM D3DXFVFFromDeclarator}
  1747. function D3DXWeldVertices(pMesh: ID3DXMesh; pEpsilons: PD3DXWeldEpsilons;
  1748.   rgdwAdjacencyIn, rgdwAdjacencyOut, pFaceRemap: PDWord;
  1749.   ppVertexRemap: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1750. {$EXTERNALSYM D3DXWeldVertices}
  1751. type
  1752.   PD3DXIntersectInfo = ^TD3DXIntersectInfo;
  1753.   _D3DXINTERSECTINFO = packed record
  1754.     FaceIndex: DWord;                // index of face intersected
  1755.     U: Single;                       // Barycentric Hit Coordinates
  1756.     V: Single;                       // Barycentric Hit Coordinates
  1757.     Dist: Single;                    // Ray-Intersection Parameter Distance
  1758.   end;
  1759.   {$EXTERNALSYM _D3DXINTERSECTINFO}
  1760.   D3DXINTERSECTINFO = _D3DXINTERSECTINFO;
  1761.   {$EXTERNALSYM D3DXINTERSECTINFO}
  1762.   TD3DXIntersectInfo = _D3DXINTERSECTINFO;
  1763. function D3DXIntersect(pMesh: ID3DXBaseMesh;
  1764.   const pRayPos, pRayDir: TD3DXVector3;
  1765.   out pHit: BOOL;                   // True if any faces were intersected
  1766.   pFaceIndex: PDWord;               // index of closest face intersected
  1767.   pU: PSingle;                      // Barycentric Hit Coordinates
  1768.   pV: PSingle;                      // Barycentric Hit Coordinates
  1769.   pDist: PSingle;                   // Ray-Intersection Parameter Distance
  1770.   ppAllHits: PID3DXBuffer;          // Array of D3DXINTERSECTINFOs for all hits (not just closest)
  1771.   pCountOfHits: PDWord              // Number of entries in AllHits array
  1772.  ): HResult; stdcall; external d3dx8dll;
  1773. {$EXTERNALSYM D3DXIntersect}
  1774. function D3DXIntersectSubset(pMesh: ID3DXBaseMesh; AttribId: DWord;
  1775.   const pRayPos, pRayDir: TD3DXVector3;
  1776.   out pHit: BOOL;                   // True if any faces were intersected
  1777.   pFaceIndex: PDWord;               // index of closest face intersected
  1778.   pU: PSingle;                      // Barycentric Hit Coordinates
  1779.   pV: PSingle;                      // Barycentric Hit Coordinates
  1780.   pDist: PSingle;                   // Ray-Intersection Parameter Distance
  1781.   ppAllHits: PID3DXBuffer;          // Array of D3DXINTERSECTINFOs for all hits (not just closest)
  1782.   pCountOfHits: PDWord              // Number of entries in AllHits array
  1783.  ): HResult; stdcall; external d3dx8dll;
  1784. {$EXTERNALSYM D3DXIntersectSubset}
  1785. function D3DXSplitMesh(pMeshIn: ID3DXMesh; pAdjacencyIn: PDWord;
  1786.   MaxSize, Options: DWord;
  1787.   out pMeshesOut: DWord; out ppMeshArrayOut: ID3DXBuffer;
  1788.   ppAdjacencyArrayOut, ppFaceRemapArrayOut, ppVertRemapArrayOut: PID3DXBuffer
  1789.  ): HResult; stdcall; external d3dx8dll;
  1790. {$EXTERNALSYM D3DXSplitMesh}
  1791. function D3DXIntersectTri(
  1792.     const p0: TD3DXVector3;           // Triangle vertex 0 position
  1793.     const p1: TD3DXVector3;           // Triangle vertex 1 position
  1794.     const p2: TD3DXVector3;           // Triangle vertex 2 position
  1795.     const pRayPos: TD3DXVector3;      // Ray origin
  1796.     const pRayDir: TD3DXVector3;      // Ray direction
  1797.     out pU: Single;                   // Barycentric Hit Coordinates
  1798.     out pV: Single;                   // Barycentric Hit Coordinates
  1799.     out pDist: Single                 // Ray-Intersection Parameter Distance
  1800.  ): HResult; stdcall; external d3dx8dll;
  1801. {$EXTERNALSYM D3DXIntersectTri}
  1802. function D3DXSphereBoundProbe(const pCenter: TD3DXVector3; Radius: Single;
  1803.   out pRayPosition, pRayDirection: TD3DXVector3): BOOL; stdcall; external d3dx8dll;
  1804. {$EXTERNALSYM D3DXSphereBoundProbe}
  1805. function D3DXBoxBoundProbe(const pMin, pMax: TD3DXVector3;
  1806.   out pRayPosition, pRayDirection: TD3DXVector3): BOOL; stdcall; external d3dx8dll;
  1807. {$EXTERNALSYM D3DXBoxBoundProbe}
  1808. type
  1809.   _D3DXERR = HResult;
  1810.   {$EXTERNALSYM _D3DXERR}
  1811. {$IFDEF DXG_COMPAT}
  1812. const
  1813.   MAKE_D3DHRESULT_R = MAKE_D3DHRESULT;
  1814. {$ENDIF}
  1815. const
  1816.   D3DXERR_CANNOTMODIFYINDEXBUFFER       = HResult(MAKE_D3DHRESULT_R or 2900);
  1817.   {$EXTERNALSYM D3DXERR_CANNOTMODIFYINDEXBUFFER}
  1818.   D3DXERR_INVALIDMESH      = HResult(MAKE_D3DHRESULT_R or 2901);
  1819.   {$EXTERNALSYM D3DXERR_INVALIDMESH}
  1820.   D3DXERR_CANNOTATTRSORT                = HResult(MAKE_D3DHRESULT_R or 2902);
  1821.   {$EXTERNALSYM D3DXERR_CANNOTATTRSORT}
  1822.   D3DXERR_SKINNINGNOTSUPPORTED    = HResult(MAKE_D3DHRESULT_R or 2903);
  1823.   {$EXTERNALSYM D3DXERR_SKINNINGNOTSUPPORTED}
  1824.   D3DXERR_TOOMANYINFLUENCES    = HResult(MAKE_D3DHRESULT_R or 2904);
  1825.   {$EXTERNALSYM D3DXERR_TOOMANYINFLUENCES}
  1826.   D3DXERR_INVALIDDATA                   = HResult(MAKE_D3DHRESULT_R or 2905);
  1827.   {$EXTERNALSYM D3DXERR_INVALIDDATA}
  1828.   D3DXERR_LOADEDMESHASNODATA            = HResult(MAKE_D3DHRESULT_R or 2906);
  1829.   {$EXTERNALSYM D3DXERR_LOADEDMESHASNODATA}
  1830. const
  1831.   D3DX_COMP_TANGENT_NONE = $FFFFFFFF;
  1832.   {$EXTERNALSYM D3DX_COMP_TANGENT_NONE}
  1833. function D3DXComputeTangent(InMesh: ID3DXMesh; TexStage: DWord;
  1834.   OutMesh: ID3DXMesh; TexStageUVec, TexStageVVec: DWord;
  1835.   Wrap: DWord; Adjacency: PDWord): HResult; stdcall; external d3dx8dll;
  1836. {$EXTERNALSYM D3DXComputeTangent}
  1837. function D3DXConvertMeshSubsetToSingleStrip(MeshIn: ID3DXBaseMesh;
  1838.   AttribId: DWord; IBOptions: DWord;
  1839.   out ppIndexBuffer: IDirect3DIndexBuffer8; pNumIndices: PDWord
  1840.  ): HResult; stdcall; external d3dx8dll;
  1841. {$EXTERNALSYM D3DXConvertMeshSubsetToSingleStrip}
  1842. function D3DXConvertMeshSubsetToStrips(MeshIn: ID3DXBaseMesh;
  1843.   AttribId: DWord; IBOptions: DWord;
  1844.   out ppIndexBuffer: IDirect3DIndexBuffer8; pNumIndices: PDWord;
  1845.   ppStripLengths: PID3DXBuffer; pNumStrips: PDWord): HResult; stdcall; external d3dx8dll;
  1846. {$EXTERNALSYM D3DXConvertMeshSubsetToStrips}
  1847. ///////////////////////////////////////////////////////////////////////////
  1848. //
  1849. //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  1850. //
  1851. //  File:       d3dx8shapes.h
  1852. //  Content:    D3DX simple shapes
  1853. //
  1854. ///////////////////////////////////////////////////////////////////////////
  1855. ///////////////////////////////////////////////////////////////////////////
  1856. // Functions:
  1857. ///////////////////////////////////////////////////////////////////////////
  1858. //-------------------------------------------------------------------------
  1859. // D3DXCreatePolygon:
  1860. // ------------------
  1861. // Creates a mesh containing an n-sided polygon.  The polygon is centered
  1862. // at the origin.
  1863. //
  1864. // Parameters:
  1865. //
  1866. //  pDevice     The D3D device with which the mesh is going to be used.
  1867. //  Length      Length of each side.
  1868. //  Sides       Number of sides the polygon has.  (Must be >= 3)
  1869. //  ppMesh      The mesh object which will be created
  1870. //  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.
  1871. //-------------------------------------------------------------------------
  1872. function D3DXCreatePolygon(ppDevice: IDirect3DDevice8;
  1873.   Length: Single;
  1874.   Sides: LongWord;
  1875.   out ppMesh: ID3DXMesh;
  1876.   ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1877. {$EXTERNALSYM D3DXCreatePolygon}
  1878. //-------------------------------------------------------------------------
  1879. // D3DXCreateBox:
  1880. // --------------
  1881. // Creates a mesh containing an axis-aligned box.  The box is centered at
  1882. // the origin.
  1883. //
  1884. // Parameters:
  1885. //
  1886. //  pDevice     The D3D device with which the mesh is going to be used.
  1887. //  Width       Width of box (along X-axis)
  1888. //  Height      Height of box (along Y-axis)
  1889. //  Depth       Depth of box (along Z-axis)
  1890. //  ppMesh      The mesh object which will be created
  1891. //  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.
  1892. //-------------------------------------------------------------------------
  1893. function D3DXCreateBox(ppDevice: IDirect3DDevice8;
  1894.   Width,
  1895.   Height,
  1896.   Depth: Single;
  1897.   out ppMesh: ID3DXMesh;
  1898.   ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1899. {$EXTERNALSYM D3DXCreateBox}
  1900. //-------------------------------------------------------------------------
  1901. // D3DXCreateCylinder:
  1902. // -------------------
  1903. // Creates a mesh containing a cylinder.  The generated cylinder is
  1904. // centered at the origin, and its axis is aligned with the Z-axis.
  1905. //
  1906. // Parameters:
  1907. //
  1908. //  pDevice     The D3D device with which the mesh is going to be used.
  1909. //  Radius1     Radius at -Z end (should be >= 0.0f)
  1910. //  Radius2     Radius at +Z end (should be >= 0.0f)
  1911. //  Length      Length of cylinder (along Z-axis)
  1912. //  Slices      Number of slices about the main axis
  1913. //  Stacks      Number of stacks along the main axis
  1914. //  ppMesh      The mesh object which will be created
  1915. //  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.
  1916. //-------------------------------------------------------------------------
  1917. function D3DXCreateCylinder(ppDevice: IDirect3DDevice8;
  1918.   Radius1,
  1919.   Radius2,
  1920.   Length: Single;
  1921.   Slices,
  1922.   Stacks: LongWord;
  1923.   out ppMesh: ID3DXMesh;
  1924.   ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1925. {$EXTERNALSYM D3DXCreateCylinder}
  1926. //-------------------------------------------------------------------------
  1927. // D3DXCreateSphere:
  1928. // -----------------
  1929. // Creates a mesh containing a sphere.  The sphere is centered at the
  1930. // origin.
  1931. //
  1932. // Parameters:
  1933. //
  1934. //  pDevice     The D3D device with which the mesh is going to be used.
  1935. //  Radius      Radius of the sphere (should be >= 0.0f)
  1936. //  Slices      Number of slices about the main axis
  1937. //  Stacks      Number of stacks along the main axis
  1938. //  ppMesh      The mesh object which will be created
  1939. //  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.
  1940. //-------------------------------------------------------------------------
  1941. function D3DXCreateSphere(ppDevice: IDirect3DDevice8;
  1942.   Radius: Single;
  1943.   Slices,
  1944.   Stacks: LongWord;
  1945.   out ppMesh: ID3DXMesh;
  1946.   ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1947. {$EXTERNALSYM D3DXCreateSphere}
  1948. //-------------------------------------------------------------------------
  1949. // D3DXCreateTorus:
  1950. // ----------------
  1951. // Creates a mesh containing a torus.  The generated torus is centered at
  1952. // the origin, and its axis is aligned with the Z-axis.
  1953. //
  1954. // Parameters:
  1955. //
  1956. //  pDevice     The D3D device with which the mesh is going to be used.
  1957. //  InnerRadius Inner radius of the torus (should be >= 0.0f)
  1958. //  OuterRadius Outer radius of the torue (should be >= 0.0f)
  1959. //  Sides       Number of sides in a cross-section (must be >= 3)
  1960. //  Rings       Number of rings making up the torus (must be >= 3)
  1961. //  ppMesh      The mesh object which will be created
  1962. //  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.
  1963. //-------------------------------------------------------------------------
  1964. function D3DXCreateTorus(ppDevice: IDirect3DDevice8;
  1965.   InnerRadius,
  1966.   OuterRadius: Single;
  1967.   Sides,
  1968.   Rings: LongWord;
  1969.   out ppMesh: ID3DXMesh;
  1970.   ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1971. {$EXTERNALSYM D3DXCreateTorus}
  1972. //-------------------------------------------------------------------------
  1973. // D3DXCreateTeapot:
  1974. // -----------------
  1975. // Creates a mesh containing a teapot.
  1976. //
  1977. // Parameters:
  1978. //
  1979. //  pDevice     The D3D device with which the mesh is going to be used.
  1980. //  ppMesh      The mesh object which will be created
  1981. //  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.
  1982. //-------------------------------------------------------------------------
  1983. function D3DXCreateTeapot(ppDevice: IDirect3DDevice8;
  1984.   out ppMesh: ID3DXMesh;
  1985.   ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
  1986. {$EXTERNALSYM D3DXCreateTeapot}
  1987. //-------------------------------------------------------------------------
  1988. // D3DXCreateText:
  1989. // ---------------
  1990. // Creates a mesh containing the specified text using the font associated
  1991. // with the device context.
  1992. //
  1993. // Parameters:
  1994. //
  1995. //  pDevice       The D3D device with which the mesh is going to be used.
  1996. //  hDC           Device context, with desired font selected
  1997. //  pText         Text to generate
  1998. //  Deviation     Maximum chordal deviation from true font outlines
  1999. //  Extrusion     Amount to extrude text in -Z direction
  2000. //  ppMesh        The mesh object which will be created
  2001. //  pGlyphMetrics Address of buffer to receive glyph metric data (or NULL)
  2002. //-------------------------------------------------------------------------
  2003. function D3DXCreateTextA(ppDevice: IDirect3DDevice8;
  2004.   hDC: HDC;
  2005.   pText: PAnsiChar;
  2006.   Deviation: Single;
  2007.   Extrusion: Single;
  2008.   out ppMesh: ID3DXMesh;
  2009.   ppAdjacency: PID3DXBuffer;
  2010.   pGlyphMetrics: PGlyphMetricsFloat): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextA';
  2011. {$EXTERNALSYM D3DXCreateTextA}
  2012. function D3DXCreateTextW(ppDevice: IDirect3DDevice8;
  2013.   hDC: HDC;
  2014.   pText: PWideChar;
  2015.   Deviation: Single;
  2016.   Extrusion: Single;
  2017.   out ppMesh: ID3DXMesh;
  2018.   ppAdjacency: PID3DXBuffer;
  2019.   pGlyphMetrics: PGlyphMetricsFloat): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextW';
  2020. {$EXTERNALSYM D3DXCreateTextW}
  2021. function D3DXCreateText(ppDevice: IDirect3DDevice8;
  2022.   hDC: HDC;
  2023.   pText: PChar;
  2024.   Deviation: Single;
  2025.   Extrusion: Single;
  2026.   out ppMesh: ID3DXMesh;
  2027.   ppAdjacency: PID3DXBuffer;
  2028.   pGlyphMetrics: PGlyphMetricsFloat): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextA';
  2029. {$EXTERNALSYM D3DXCreateText}