D3DX8.pas
上传用户:yj_qiu
上传日期:2022-08-08
资源大小:23636k
文件大小:174k
源码类别:

游戏引擎

开发平台:

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