D3DX8.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:175k
- {******************************************************************************}
- {* *}
- {* Copyright (C) Microsoft Corporation. All Rights Reserved. *}
- {* *}
- {* File: d3dx8.h, d3dx8core.h, d3dx8math.h, d3dx8math.inl, *}
- {* d3dx8effect.h, d3dx8mesh.h, d3dx8shape.h, d3dx8tex.h *}
- {* Content: Direct3DX 8.1 headers *}
- {* *}
- {* Direct3DX 8.1 Delphi adaptation by Alexey Barkovoy *}
- {* E-Mail: clootie@reactor.ru *}
- {* *}
- {* Modified: 27-Apr-2003 *}
- {* *}
- {* Partly based upon : *}
- {* Direct3DX 7.0 Delphi adaptation by *}
- {* Arne Sch鋚ers, e-Mail: [look at www.delphi-jedi.org/DelphiGraphics/] *}
- {* *}
- {* Latest version can be downloaded from: *}
- {* http://clootie.narod.ru/delphi *}
- {* *}
- {* This File contains only Direct3DX 8.x Definitions. *}
- {* If you want to use D3DX7 version of D3DX use translation by Arne Sch鋚ers *}
- {* *}
- {******************************************************************************)
- { }
- { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
- { }
- { The contents of this file are used with permission, subject to the Mozilla }
- { Public License Version 1.1 (the "License"); you may not use this file except }
- { in compliance with the License. You may obtain a copy of the License at }
- { http://www.mozilla.org/MPL/MPL-1.1.html }
- { }
- { Software distributed under the License is distributed on an "AS IS" basis, }
- { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
- { the specific language governing rights and limitations under the License. }
- { }
- { Alternatively, the contents of this file may be used under the terms of the }
- { GNU Lesser General Public License (the "LGPL License"), in which case the }
- { provisions of the LGPL License are applicable instead of those above. }
- { If you wish to allow use of your version of this file only under the terms }
- { of the LGPL License and not to allow others to use your version of this file }
- { under the MPL, indicate your decision by deleting the provisions above and }
- { replace them with the notice and other provisions required by the LGPL }
- { License. If you do not delete the provisions above, a recipient may use }
- { your version of this file under either the MPL or the LGPL License. }
- { }
- { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
- { }
- {******************************************************************************}
- // Original source contained in "D3DX8.par"
- {$I DirectX.inc}
- unit D3DX8;
- interface
- // Remove "dot" below to link with debug version of D3DX8
- // (only in JEDI or TMT pascal version)
- {.$DEFINE DEBUG}
- // Remove "dot" below to link with DirectXGraphics and Direct3D
- {.$DEFINE DXG_COMPAT}
- (*$HPPEMIT '#include "d3dx8.h"' *)
- (*$HPPEMIT '#include "dxfile.h"' *)
- // Do not emit <DXFile.hpp> to C++Builder
- (*$NOINCLUDE DXFile *)
- (*$HPPEMIT 'namespace D3dx8' *)
- (*$HPPEMIT '{' *)
- uses
- Windows,
- ActiveX,
- SysUtils,
- {$I UseD3D8.inc},
- DXFile;
- const
- //////////// DLL export definitions ///////////////////////////////////////
- d3dx8dll ={$IFDEF DEBUG} 'd3dx8d.dll'{$ELSE} 'D3DX81ab.dll'{$ENDIF};
- ///////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) Microsoft Corporation. All Rights Reserved.
- //
- // File: d3dx8.h
- // Content: D3DX utility library
- //
- ///////////////////////////////////////////////////////////////////////////
- const
- // #define D3DX_DEFAULT ULONG_MAX
- D3DX_DEFAULT = $FFFFFFFF;
- {$EXTERNALSYM D3DX_DEFAULT}
- var
- // #define D3DX_DEFAULT_FLOAT FLT_MAX
- // Forced to define as 'var' cos pascal compiler treats all consts as Double
- D3DX_DEFAULT_FLOAT: Single = 3.402823466e+38; // max single value
- {$EXTERNALSYM D3DX_DEFAULT_FLOAT}
- //////////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) Microsoft Corporation. All Rights Reserved.
- //
- // File: d3dx8math.h
- // Content: D3DX math types and functions
- //
- //////////////////////////////////////////////////////////////////////////////
- //===========================================================================
- //
- // General purpose utilities
- //
- //===========================================================================
- const
- D3DX_PI: Single = 3.141592654;
- {$EXTERNALSYM D3DX_PI}
- D3DX_1BYPI: Single = 0.318309886;
- {$EXTERNALSYM D3DX_1BYPI}
- //#define D3DXToRadian( degree ) ((degree) * (D3DX_PI / 180.0f))
- function D3DXToRadian(Degree: Single): Single;
- {$EXTERNALSYM D3DXToRadian}
- //#define D3DXToDegree( radian ) ((radian) * (180.0f / D3DX_PI))
- function D3DXToDegree(Radian: Single): Single;
- {$EXTERNALSYM D3DXToDegree}
- //===========================================================================
- //
- // Vectors
- //
- //===========================================================================
- //--------------------------
- // 2D Vector
- //--------------------------
- type
- {$HPPEMIT 'typedef D3DXVECTOR2 TD3DXVector2;'}
- {$HPPEMIT 'typedef D3DXVECTOR2 *PD3DXVector2;'}
- PD3DXVector2 = ^TD3DXVector2;
- {$NODEFINE PD3DXVector2}
- TD3DXVector2 = packed record
- x, y: Single;
- end;
- {$NODEFINE TD3DXVector2}
- // Some pascal equalents of C++ class functions & operators
- const D3DXVector2Zero: TD3DXVector2 = (x:0; y:0); // (0,0)
- function D3DXVector2(_x, _y: Single): TD3DXVector2;
- function D3DXVector2Equal(const v1, v2: TD3DXVector2): Boolean;
- //--------------------------
- // 3D Vector
- //--------------------------
- type
- {$HPPEMIT 'typedef D3DXVECTOR3 TD3DXVector3;'}
- {$HPPEMIT 'typedef D3DXVECTOR3 *PD3DXVector3;'}
- PD3DXVector3 = ^TD3DXVector3;
- {$NODEFINE PD3DXVector3}
- TD3DXVector3 = TD3DVector;
- {$NODEFINE TD3DXVector3}
- // Some pascal equalents of C++ class functions & operators
- const D3DXVector3Zero: TD3DXVector3 = (x:0; y:0; z:0); // (0,0,0)
- function D3DXVector3(_x, _y, _z: Single): TD3DXVector3;
- function D3DXVector3Equal(const v1, v2: TD3DXVector3): Boolean;
- //--------------------------
- // 4D Vector
- //--------------------------
- type
- {$HPPEMIT 'typedef D3DXVECTOR4 TD3DXVector4;'}
- {$HPPEMIT 'typedef D3DXVECTOR4 *PD3DXVector4;'}
- PD3DXVector4 = ^TD3DXVector4;
- {$NODEFINE PD3DXVector4}
- TD3DXVector4 = packed record
- x, y, z, w: Single;
- end;
- {$NODEFINE TD3DXVector4}
- // Some pascal equalents of C++ class functions & operators
- const D3DXVector4Zero: TD3DXVector4 = (x:0; y:0; z:0; w:0); // (0,0,0,0)
- function D3DXVector4(_x, _y, _z, _w: Single): TD3DXVector4;
- function D3DXVector4Equal(const v1, v2: TD3DXVector4): Boolean;
- //===========================================================================
- //
- // Matrices
- //
- //===========================================================================
- type
- {$HPPEMIT 'typedef D3DXMATRIX TD3DXMatrix;'}
- {$HPPEMIT 'typedef D3DXMATRIX *PD3DXMatrix;'}
- PD3DXMatrix = ^TD3DXMatrix;
- {$NODEFINE PD3DXMatrix}
- TD3DXMatrix = TD3DMatrix;
- {$NODEFINE TD3DXMatrix}
- // Some pascal equalents of C++ class functions & operators
- function D3DXMatrix(
- _m00, _m01, _m02, _m03,
- _m10, _m11, _m12, _m13,
- _m20, _m21, _m22, _m23,
- _m30, _m31, _m32, _m33: Single): TD3DXMatrix;
- function D3DXMatrixAdd(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix;
- function D3DXMatrixSubtract(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix;
- function D3DXMatrixMul(out mOut: TD3DXMatrix; const m: TD3DXMatrix; MulBy: Single): PD3DXMatrix;
- function D3DXMatrixEqual(const m1, m2: TD3DXMatrix): Boolean;
- //===========================================================================
- //
- // Aligned Matrices
- //
- // This class helps keep matrices 16-byte aligned as preferred by P4 cpus.
- // It aligns matrices on the stack and on the heap or in global scope.
- // It does this using __declspec(align(16)) which works on VC7 and on VC 6
- // with the processor pack. Unfortunately there is no way to detect the
- // latter so this is turned on only on VC7. On other compilers this is the
- // the same as D3DXMATRIX.
- // Using this class on a compiler that does not actually do the alignment
- // can be dangerous since it will not expose bugs that ignore alignment.
- // E.g if an object of this class in inside a struct or class, and some code
- // memcopys data in it assuming tight packing. This could break on a compiler
- // that eventually start aligning the matrix.
- //
- //===========================================================================
- // Translator comments: None of current pascal compilers can even align data
- // inside records to 16 byte boundary, so we just leave aligned matrix
- // declaration equal to standart matrix
- type
- PD3DXMatrixA16 = ^TD3DXMatrixA16;
- TD3DXMatrixA16 = TD3DXMatrix;
- //===========================================================================
- //
- // Quaternions
- //
- //===========================================================================
- type
- PD3DXQuaternion = ^TD3DXQuaternion;
- TD3DXQuaternion = packed record
- x, y, z, w: Single;
- end;
- {$NODEFINE TD3DXQuaternion}
- {$HPPEMIT 'typedef D3DXQUATERNION TD3DXQuaternion;'}
- // Some pascal equalents of C++ class functions & operators
- function D3DXQuaternion(_x, _y, _z, _w: Single): TD3DXQuaternion;
- function D3DXQuaternionAdd(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;
- function D3DXQuaternionSubtract(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;
- function D3DXQuaternionEqual(const q1, q2: TD3DXQuaternion): Boolean;
- function D3DXQuaternionScale(out qOut: TD3DXQuaternion; const q: TD3DXQuaternion;
- s: Single): PD3DXQuaternion;
- //===========================================================================
- //
- // Planes
- //
- //===========================================================================
- type
- PD3DXPlane = ^TD3DXPlane;
- TD3DXPlane = packed record
- a, b, c, d: Single;
- end;
- {$NODEFINE TD3DXPlane}
- {$HPPEMIT 'typedef D3DXPLANE TD3DXPlane;'}
- // Some pascal equalents of C++ class functions & operators
- const D3DXPlaneZero: TD3DXPlane = (a:0; b:0; c:0; d:0); // (0,0,0,0)
- function D3DXPlane(_a, _b, _c, _d: Single): TD3DXPlane;
- function D3DXPlaneEqual(const p1, p2: TD3DXPlane): Boolean;
- //===========================================================================
- //
- // Colors
- //
- //===========================================================================
- type
- {$HPPEMIT 'typedef D3DXCOLOR TD3DXColor;'}
- {$HPPEMIT 'typedef D3DXCOLOR *PD3DXColor;'}
- PD3DXColor = PD3DColorValue;
- {$NODEFINE PD3DXColor}
- TD3DXColor = TD3DColorValue;
- {$NODEFINE TD3DXColor}
- function D3DXColor(_r, _g, _b, _a: Single): TD3DXColor;
- function D3DXColorToDWord(c: TD3DXColor): DWord;
- function D3DXColorFromDWord(c: DWord): TD3DXColor;
- function D3DXColorEqual(const c1, c2: TD3DXColor): Boolean;
- //===========================================================================
- //
- // D3DX math functions:
- //
- // NOTE:
- // * All these functions can take the same object as in and out parameters.
- //
- // * Out parameters are typically also returned as return values, so that
- // the output of one function may be used as a parameter to another.
- //
- //===========================================================================
- //--------------------------
- // 2D Vector
- //--------------------------
- // inline
- function D3DXVec2Length(const v: TD3DXVector2): Single;
- {$EXTERNALSYM D3DXVec2Length}
- function D3DXVec2LengthSq(const v: TD3DXVector2): Single;
- {$EXTERNALSYM D3DXVec2LengthSq}
- function D3DXVec2Dot(const v1, v2: TD3DXVector2): Single;
- {$EXTERNALSYM D3DXVec2Dot}
- // Z component of ((x1,y1,0) cross (x2,y2,0))
- function D3DXVec2CCW(const v1, v2: TD3DXVector2): Single;
- {$EXTERNALSYM D3DXVec2CCW}
- function D3DXVec2Add(const v1, v2: TD3DXVector2): TD3DXVector2;
- {$EXTERNALSYM D3DXVec2Add}
- function D3DXVec2Subtract(const v1, v2: TD3DXVector2): TD3DXVector2;
- {$EXTERNALSYM D3DXVec2Subtract}
- // Minimize each component. x = min(x1, x2), y = min(y1, y2)
- function D3DXVec2Minimize(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2): PD3DXVector2;
- {$EXTERNALSYM D3DXVec2Minimize}
- // Maximize each component. x = max(x1, x2), y = max(y1, y2)
- function D3DXVec2Maximize(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2): PD3DXVector2;
- {$EXTERNALSYM D3DXVec2Maximize}
- function D3DXVec2Scale(out vOut: TD3DXVector2; const v: TD3DXVector2; s: Single): PD3DXVector2;
- {$EXTERNALSYM D3DXVec2Scale}
- // Linear interpolation. V1 + s(V2-V1)
- function D3DXVec2Lerp(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2; s: Single): PD3DXVector2;
- {$EXTERNALSYM D3DXVec2Lerp}
- // non-inline
- function D3DXVec2Normalize(out vOut: TD3DXVector2; const v: TD3DXVector2): PD3DXVector2; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec2Normalize}
- // Hermite interpolation between position V1, tangent T1 (when s == 0)
- // and position V2, tangent T2 (when s == 1).
- function D3DXVec2Hermite(out vOut: TD3DXVector2;
- const v1, t1, v2, t2: TD3DXVector2; s: Single): PD3DXVector2; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec2Hermite}
- // CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1)
- function D3DXVec2CatmullRom(out vOut: TD3DXVector2;
- const v0, v1, v2: TD3DXVector2; s: Single): PD3DXVector2; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec2CatmullRom}
- // Barycentric coordinates. V1 + f(V2-V1) + g(V3-V1)
- function D3DXVec2BaryCentric(out vOut: TD3DXVector2;
- const v1, v2, v3: TD3DXVector2; f, g: Single): PD3DXVector2; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec2BaryCentric}
- // Transform (x, y, 0, 1) by matrix.
- function D3DXVec2Transform(out vOut: TD3DXVector4;
- const v: TD3DXVector2; const m: TD3DXMatrix): PD3DXVector4; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec2Transform}
- // Transform (x, y, 0, 1) by matrix, project result back into w=1.
- function D3DXVec2TransformCoord(out vOut: TD3DXVector2;
- const v: TD3DXVector2; const m: TD3DXMatrix): PD3DXVector2; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec2TransformCoord}
- // Transform (x, y, 0, 0) by matrix.
- function D3DXVec2TransformNormal(out vOut: TD3DXVector2;
- const v: TD3DXVector2; const m: TD3DXMatrix): PD3DXVector2; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec2TransformNormal}
- //--------------------------
- // 3D Vector
- //--------------------------
- // inline
- function D3DXVec3Length(const v: TD3DXVector3): Single;
- {$EXTERNALSYM D3DXVec3Length}
- function D3DXVec3LengthSq(const v: TD3DXVector3): Single;
- {$EXTERNALSYM D3DXVec3LengthSq}
- function D3DXVec3Dot(const v1, v2: TD3DXVector3): Single;
- {$EXTERNALSYM D3DXVec3Dot}
- function D3DXVec3Cross(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
- {$EXTERNALSYM D3DXVec3Cross}
- function D3DXVec3Add(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
- {$EXTERNALSYM D3DXVec3Add}
- function D3DXVec3Subtract(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
- {$EXTERNALSYM D3DXVec3Subtract}
- // Minimize each component. x = min(x1, x2), y = min(y1, y2), ...
- function D3DXVec3Minimize(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
- {$EXTERNALSYM D3DXVec3Minimize}
- // Maximize each component. x = max(x1, x2), y = max(y1, y2), ...
- function D3DXVec3Maximize(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
- {$EXTERNALSYM D3DXVec3Maximize}
- function D3DXVec3Scale(out vOut: TD3DXVector3; const v: TD3DXVector3; s: Single): PD3DXVector3;
- {$EXTERNALSYM D3DXVec3Scale}
- // Linear interpolation. V1 + s(V2-V1)
- function D3DXVec3Lerp(out vOut: TD3DXVector3;
- const v1, v2: TD3DXVector3; s: Single): PD3DXVector3;
- {$EXTERNALSYM D3DXVec3Lerp}
- // non-inline
- function D3DXVec3Normalize(out vOut: TD3DXVector3;
- const v: TD3DXVector3): PD3DXVector3; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec3Normalize}
- // Hermite interpolation between position V1, tangent T1 (when s == 0)
- // and position V2, tangent T2 (when s == 1).
- function D3DXVec3Hermite(out vOut: TD3DXVector3;
- const v1, t1, v2, t2: TD3DXVector3; s: Single): PD3DXVector3; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec3Hermite}
- // CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1)
- function D3DXVec3CatmullRom(out vOut: TD3DXVector3;
- const v1, v2, v3: TD3DXVector3; s: Single): PD3DXVector3; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec3CatmullRom}
- // Barycentric coordinates. V1 + f(V2-V1) + g(V3-V1)
- function D3DXVec3BaryCentric(out vOut: TD3DXVector3;
- const v1, v2, v3: TD3DXVector3; f, g: Single): PD3DXVector3; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec3BaryCentric}
- // Transform (x, y, z, 1) by matrix.
- function D3DXVec3Transform(out vOut: TD3DXVector4;
- const v: TD3DXVector3; const m: TD3DXMatrix): PD3DXVector4; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec3Transform}
- // Transform (x, y, z, 1) by matrix, project result back into w=1.
- function D3DXVec3TransformCoord(out vOut: TD3DXVector3;
- const v: TD3DXVector3; const m: TD3DXMatrix): PD3DXVector3; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec3TransformCoord}
- // Transform (x, y, z, 0) by matrix. If you transforming a normal by a
- // non-affine matrix, the matrix you pass to this function should be the
- // transpose of the inverse of the matrix you would use to transform a coord.
- function D3DXVec3TransformNormal(out vOut: TD3DXVector3;
- const v: TD3DXVector3; const m: TD3DXMatrix): PD3DXVector3; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec3TransformNormal}
- // Project vector from object space into screen space
- function D3DXVec3Project(out vOut: TD3DXVector3;
- const v: TD3DXVector3; const pViewport: TD3DViewport8;
- const pProjection, pView, pWorld: TD3DXMatrix): PD3DXVector3; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec3Project}
- // Project vector from screen space into object space
- function D3DXVec3Unproject(out vOut: TD3DXVector3;
- const v: TD3DXVector3; const pViewport: TD3DViewport8;
- const pProjection, pView, pWorld: TD3DXMatrix): PD3DXVector3; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec3Unproject}
- //--------------------------
- // 4D Vector
- //--------------------------
- // inline
- function D3DXVec4Length(const v: TD3DXVector4): Single;
- {$EXTERNALSYM D3DXVec4Length}
- function D3DXVec4LengthSq(const v: TD3DXVector4): Single;
- {$EXTERNALSYM D3DXVec4LengthSq}
- function D3DXVec4Dot(const v1, v2: TD3DXVector4): Single;
- {$EXTERNALSYM D3DXVec4Dot}
- function D3DXVec4Add(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
- {$EXTERNALSYM D3DXVec4Add}
- function D3DXVec4Subtract(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
- {$EXTERNALSYM D3DXVec4Subtract}
- // Minimize each component. x = min(x1, x2), y = min(y1, y2), ...
- function D3DXVec4Minimize(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
- {$EXTERNALSYM D3DXVec4Minimize}
- // Maximize each component. x = max(x1, x2), y = max(y1, y2), ...
- function D3DXVec4Maximize(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
- {$EXTERNALSYM D3DXVec4Maximize}
- function D3DXVec4Scale(out vOut: TD3DXVector4; const v: TD3DXVector4; s: Single): PD3DXVector4;
- {$EXTERNALSYM D3DXVec4Scale}
- // Linear interpolation. V1 + s(V2-V1)
- function D3DXVec4Lerp(out vOut: TD3DXVector4;
- const v1, v2: TD3DXVector4; s: Single): PD3DXVector4;
- {$EXTERNALSYM D3DXVec4Lerp}
- // non-inline
- // Cross-product in 4 dimensions.
- function D3DXVec4Cross(out vOut: TD3DXVector4;
- const v1, v2, v3: TD3DXVector4): PD3DXVector4; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec4Cross}
- function D3DXVec4Normalize(out vOut: TD3DXVector4;
- const v: TD3DXVector4): PD3DXVector4; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec4Normalize}
- // Hermite interpolation between position V1, tangent T1 (when s == 0)
- // and position V2, tangent T2 (when s == 1).
- function D3DXVec4Hermite(out vOut: TD3DXVector4;
- const v1, t1, v2, t2: TD3DXVector4; s: Single): PD3DXVector4; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec4Hermite}
- // CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1)
- function D3DXVec4CatmullRom(out vOut: TD3DXVector4;
- const v0, v1, v2, v3: TD3DXVector4; s: Single): PD3DXVector4; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec4CatmullRom}
- // Barycentric coordinates. V1 + f(V2-V1) + g(V3-V1)
- function D3DXVec4BaryCentric(out vOut: TD3DXVector4;
- const v1, v2, v3: TD3DXVector4; f, g: Single): PD3DXVector4; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec4BaryCentric}
- // Transform vector by matrix.
- function D3DXVec4Transform(out vOut: TD3DXVector4;
- const v: TD3DXVector4; const m: TD3DXMatrix): PD3DXVector4; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXVec4Transform}
- //--------------------------
- // 4D Matrix
- //--------------------------
- // inline
- function D3DXMatrixIdentity(out mOut: TD3DXMatrix): PD3DXMatrix;
- {$EXTERNALSYM D3DXMatrixIdentity}
- function D3DXMatrixIsIdentity(const m: TD3DXMatrix): BOOL;
- {$EXTERNALSYM D3DXMatrixIsIdentity}
- // non-inline
- function D3DXMatrixfDeterminant(const m: TD3DXMatrix): Single; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixfDeterminant}
- function D3DXMatrixTranspose(out pOut: TD3DXMatrix; const pM: TD3DXMatrix): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixTranspose}
- // Matrix multiplication. The result represents the transformation M2
- // followed by the transformation M1. (Out = M1 * M2)
- function D3DXMatrixMultiply(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixMultiply}
- // Matrix multiplication, followed by a transpose. (Out = T(M1 * M2))
- function D3DXMatrixMultiplyTranspose(out pOut: TD3DXMatrix; const pM1, pM2: TD3DXMatrix): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixMultiplyTranspose}
- // Calculate inverse of matrix. Inversion my fail, in which case NULL will
- // be returned. The determinant of pM is also returned it pfDeterminant
- // is non-NULL.
- function D3DXMatrixInverse(out mOut: TD3DXMatrix; pfDeterminant: PSingle;
- const m: TD3DXMatrix): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixInverse}
- // Build a matrix which scales by (sx, sy, sz)
- function D3DXMatrixScaling(out mOut: TD3DXMatrix; sx, sy, sz: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixScaling}
- // Build a matrix which translates by (x, y, z)
- function D3DXMatrixTranslation(out mOut: TD3DXMatrix; x, y, z: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixTranslation}
- // Build a matrix which rotates around the X axis
- function D3DXMatrixRotationX(out mOut: TD3DXMatrix; angle: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixRotationX}
- // Build a matrix which rotates around the Y axis
- function D3DXMatrixRotationY(out mOut: TD3DXMatrix; angle: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixRotationY}
- // Build a matrix which rotates around the Z axis
- function D3DXMatrixRotationZ(out mOut: TD3DXMatrix; angle: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixRotationZ}
- // Build a matrix which rotates around an arbitrary axis
- function D3DXMatrixRotationAxis(out mOut: TD3DXMatrix; const v: TD3DXVector3;
- angle: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixRotationAxis}
- // Build a matrix from a quaternion
- function D3DXMatrixRotationQuaternion(out mOut: TD3DXMatrix; const Q: TD3DXQuaternion): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixRotationQuaternion}
- // Yaw around the Y axis, a pitch around the X axis,
- // and a roll around the Z axis.
- function D3DXMatrixRotationYawPitchRoll(out mOut: TD3DXMatrix; yaw, pitch, roll: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixRotationYawPitchRoll}
- // Build transformation matrix. NULL arguments are treated as identity.
- // Mout = Msc-1 * Msr-1 * Ms * Msr * Msc * Mrc-1 * Mr * Mrc * Mt
- function D3DXMatrixTransformation(out mOut: TD3DXMatrix;
- pScalingCenter: PD3DXVector3;
- pScalingRotation: PD3DXQuaternion; pScaling, pRotationCenter: PD3DXVector3;
- pRotation: PD3DXQuaternion; pTranslation: PD3DXVector3): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixTransformation}
- // Build affine transformation matrix. NULL arguments are treated as identity.
- // Mout = Ms * Mrc-1 * Mr * Mrc * Mt
- function D3DXMatrixAffineTransformation(out mOut: TD3DXMatrix;
- Scaling: Single; pRotationCenter: PD3DXVector3;
- pRotation: PD3DXQuaternion; pTranslation: PD3DXVector3): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixAffineTransformation}
- // Build a lookat matrix. (right-handed)
- function D3DXMatrixLookAtRH(out mOut: TD3DXMatrix; const Eye, At, Up: TD3DXVector3): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixLookAtRH}
- // Build a lookat matrix. (left-handed)
- function D3DXMatrixLookAtLH(out mOut: TD3DXMatrix; const Eye, At, Up: TD3DXVector3): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixLookAtLH}
- // Build a perspective projection matrix. (right-handed)
- function D3DXMatrixPerspectiveRH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixPerspectiveRH}
- // Build a perspective projection matrix. (left-handed)
- function D3DXMatrixPerspectiveLH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixPerspectiveLH}
- // Build a perspective projection matrix. (right-handed)
- function D3DXMatrixPerspectiveFovRH(out mOut: TD3DXMatrix; flovy, aspect, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixPerspectiveFovRH}
- // Build a perspective projection matrix. (left-handed)
- function D3DXMatrixPerspectiveFovLH(out mOut: TD3DXMatrix; flovy, aspect, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixPerspectiveFovLH}
- // Build a perspective projection matrix. (right-handed)
- function D3DXMatrixPerspectiveOffCenterRH(out mOut: TD3DXMatrix;
- l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixPerspectiveOffCenterRH}
- // Build a perspective projection matrix. (left-handed)
- function D3DXMatrixPerspectiveOffCenterLH(out mOut: TD3DXMatrix;
- l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixPerspectiveOffCenterLH}
- // Build an ortho projection matrix. (right-handed)
- function D3DXMatrixOrthoRH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixOrthoRH}
- // Build an ortho projection matrix. (left-handed)
- function D3DXMatrixOrthoLH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixOrthoLH}
- // Build an ortho projection matrix. (right-handed)
- function D3DXMatrixOrthoOffCenterRH(out mOut: TD3DXMatrix;
- l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixOrthoOffCenterRH}
- // Build an ortho projection matrix. (left-handed)
- function D3DXMatrixOrthoOffCenterLH(out mOut: TD3DXMatrix;
- l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixOrthoOffCenterLH}
- // Build a matrix which flattens geometry into a plane, as if casting
- // a shadow from a light.
- function D3DXMatrixShadow(out mOut: TD3DXMatrix;
- const Light: TD3DXVector4; const Plane: TD3DXPlane): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixShadow}
- // Build a matrix which reflects the coordinate system about a plane
- function D3DXMatrixReflect(out mOut: TD3DXMatrix;
- const Plane: TD3DXPlane): PD3DXMatrix; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXMatrixReflect}
- //--------------------------
- // Quaternion
- //--------------------------
- // inline
- function D3DXQuaternionLength(const q: TD3DXQuaternion): Single;
- {$EXTERNALSYM D3DXQuaternionLength}
- // Length squared, or "norm"
- function D3DXQuaternionLengthSq(const q: TD3DXQuaternion): Single;
- {$EXTERNALSYM D3DXQuaternionLengthSq}
- function D3DXQuaternionDot(const q1, q2: TD3DXQuaternion): Single;
- {$EXTERNALSYM D3DXQuaternionDot}
- // (0, 0, 0, 1)
- function D3DXQuaternionIdentity(out qOut: TD3DXQuaternion): PD3DXQuaternion;
- {$EXTERNALSYM D3DXQuaternionIdentity}
- function D3DXQuaternionIsIdentity (const q: TD3DXQuaternion): BOOL;
- {$EXTERNALSYM D3DXQuaternionIsIdentity}
- // (-x, -y, -z, w)
- function D3DXQuaternionConjugate(out qOut: TD3DXQuaternion;
- const q: TD3DXQuaternion): PD3DXQuaternion;
- {$EXTERNALSYM D3DXQuaternionConjugate}
- // non-inline
- // Compute a quaternin's axis and angle of rotation. Expects unit quaternions.
- procedure D3DXQuaternionToAxisAngle(const q: TD3DXQuaternion;
- out Axis: TD3DXVector3; out Angle: Single); stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionToAxisAngle}
- // Build a quaternion from a rotation matrix.
- function D3DXQuaternionRotationMatrix(out qOut: TD3DXQuaternion;
- const m: TD3DXMatrix): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionRotationMatrix}
- // Rotation about arbitrary axis.
- function D3DXQuaternionRotationAxis(out qOut: TD3DXQuaternion;
- const v: TD3DXVector3; Angle: Single): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionRotationAxis}
- // Yaw around the Y axis, a pitch around the X axis,
- // and a roll around the Z axis.
- function D3DXQuaternionRotationYawPitchRoll(out qOut: TD3DXQuaternion;
- yaw, pitch, roll: Single): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionRotationYawPitchRoll}
- // Quaternion multiplication. The result represents the rotation Q2
- // followed by the rotation Q1. (Out = Q2 * Q1)
- function D3DXQuaternionMultiply(out qOut: TD3DXQuaternion;
- const q1, q2: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionMultiply}
- function D3DXQuaternionNormalize(out qOut: TD3DXQuaternion;
- const q: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionNormalize}
- // Conjugate and re-norm
- function D3DXQuaternionInverse(out qOut: TD3DXQuaternion;
- const q: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionInverse}
- // Expects unit quaternions.
- // if q = (cos(theta), sin(theta) * v); ln(q) = (0, theta * v)
- function D3DXQuaternionLn(out qOut: TD3DXQuaternion;
- const q: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionLn}
- // Expects pure quaternions. (w == 0) w is ignored in calculation.
- // if q = (0, theta * v); exp(q) = (cos(theta), sin(theta) * v)
- function D3DXQuaternionExp(out qOut: TD3DXQuaternion;
- const q: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionExp}
- // Spherical linear interpolation between Q1 (s == 0) and Q2 (s == 1).
- // Expects unit quaternions.
- function D3DXQuaternionSlerp(out qOut: TD3DXQuaternion;
- const q1, q2: TD3DXQuaternion; t: Single): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionSlerp}
- // Spherical quadrangle interpolation.
- // Slerp(Slerp(Q1, C, t), Slerp(A, B, t), 2t(1-t))
- function D3DXQuaternionSquad(out qOut: TD3DXQuaternion;
- const pQ1, pA, pB, pC: TD3DXQuaternion; t: Single): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionSquad}
- // Setup control points for spherical quadrangle interpolation
- // from Q1 to Q2. The control points are chosen in such a way
- // to ensure the continuity of tangents with adjacent segments.
- procedure D3DXQuaternionSquadSetup(out pAOut, pBOut, pCOut: TD3DXQuaternion;
- const pQ0, pQ1, pQ2, pQ3: TD3DXQuaternion); stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionSquadSetup}
- // Barycentric interpolation.
- // Slerp(Slerp(Q1, Q2, f+g), Slerp(Q1, Q3, f+g), g/(f+g))
- function D3DXQuaternionBaryCentric(out qOut: TD3DXQuaternion;
- const q1, q2, q3: TD3DXQuaternion; f, g: Single): PD3DXQuaternion; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXQuaternionBaryCentric}
- //--------------------------
- // Plane
- //--------------------------
- // inline
- // ax + by + cz + dw
- function D3DXPlaneDot(const p: TD3DXPlane; const v: TD3DXVector4): Single;
- {$EXTERNALSYM D3DXPlaneDot}
- // ax + by + cz + d
- function D3DXPlaneDotCoord(const p: TD3DXPlane; const v: TD3DXVector3): Single;
- {$EXTERNALSYM D3DXPlaneDotCoord}
- // ax + by + cz
- function D3DXPlaneDotNormal(const p: TD3DXPlane; const v: TD3DXVector3): Single;
- {$EXTERNALSYM D3DXPlaneDotNormal}
- // non-inline
- // Normalize plane (so that |a,b,c| == 1)
- function D3DXPlaneNormalize(out pOut: TD3DXPlane; const p: TD3DXPlane): PD3DXPlane; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXPlaneNormalize}
- // Find the intersection between a plane and a line. If the line is
- // parallel to the plane, NULL is returned.
- function D3DXPlaneIntersectLine(out vOut: TD3DXVector3;
- const p: TD3DXPlane; const v1, v2: TD3DXVector3): PD3DXVector3; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXPlaneIntersectLine}
- // Construct a plane from a point and a normal
- function D3DXPlaneFromPointNormal(out pOut: TD3DXPlane;
- const vPoint, vNormal: TD3DXVector3): PD3DXPlane; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXPlaneFromPointNormal}
- // Construct a plane from 3 points
- function D3DXPlaneFromPoints(out pOut: TD3DXPlane;
- const v1, v2, v3: TD3DXVector3): PD3DXPlane; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXPlaneFromPoints}
- // Transform a plane by a matrix. The vector (a,b,c) must be normal.
- // M should be the inverse transpose of the transformation desired.
- function D3DXPlaneTransform(out pOut: TD3DXPlane; const m: TD3DXMatrix): PD3DXPlane; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXPlaneTransform}
- //--------------------------
- // Color
- //--------------------------
- // inline
- // (1-r, 1-g, 1-b, a)
- function D3DXColorNegative(out cOut: TD3DXColor; const c: TD3DXColor): PD3DXColor;
- {$EXTERNALSYM D3DXColorNegative}
- function D3DXColorAdd(out cOut: TD3DXColor; const c1, c2: TD3DXColor): PD3DXColor;
- {$EXTERNALSYM D3DXColorAdd}
- function D3DXColorSubtract(out cOut: TD3DXColor; const c1, c2: TD3DXColor): PD3DXColor;
- {$EXTERNALSYM D3DXColorSubtract}
- function D3DXColorScale(out cOut: TD3DXColor; const c: TD3DXColor; s: Single): PD3DXColor;
- {$EXTERNALSYM D3DXColorScale}
- // (r1*r2, g1*g2, b1*b2, a1*a2)
- function D3DXColorModulate(out cOut: TD3DXColor; const c1, c2: TD3DXColor): PD3DXColor;
- {$EXTERNALSYM D3DXColorModulate}
- // Linear interpolation of r,g,b, and a. C1 + s(C2-C1)
- function D3DXColorLerp(out cOut: TD3DXColor; const c1, c2: TD3DXColor; s: Single): PD3DXColor;
- {$EXTERNALSYM D3DXColorLerp}
- // non-inline
- // Interpolate r,g,b between desaturated color and color.
- // DesaturatedColor + s(Color - DesaturatedColor)
- function D3DXColorAdjustSaturation(out cOut: TD3DXColor;
- const pC: TD3DXColor; s: Single): PD3DXColor; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXColorAdjustSaturation}
- // Interpolate r,g,b between 50% grey and color. Grey + s(Color - Grey)
- function D3DXColorAdjustContrast(out cOut: TD3DXColor;
- const pC: TD3DXColor; c: Single): PD3DXColor; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXColorAdjustContrast}
- //--------------------------
- // Misc
- //--------------------------
- // Calculate Fresnel term given the cosine of theta (likely obtained by
- // taking the dot of two normals), and the refraction index of the material.
- function D3DXFresnelTerm(CosTheta, RefractionIndex: Single): Single; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXFresnelTerm}
- //===========================================================================
- //
- // Matrix Stack
- //
- //===========================================================================
- type
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXMatrixStack);'}
- {$EXTERNALSYM ID3DXMatrixStack}
- ID3DXMatrixStack = interface(IUnknown)
- ['{E3357330-CC5E-11d2-A434-00A0C90629A8}']
- //
- // ID3DXMatrixStack methods
- //
- // Pops the top of the stack, returns the current top
- // *after* popping the top.
- function Pop: HResult; stdcall;
- // Pushes the stack by one, duplicating the current matrix.
- function Push: HResult; stdcall;
- // Loads identity in the current matrix.
- function LoadIdentity: HResult; stdcall;
- // Loads the given matrix into the current matrix
- function LoadMatrix(const M: TD3DXMatrix): HResult; stdcall;
- // Right-Multiplies the given matrix to the current matrix.
- // (transformation is about the current world origin)
- function MultMatrix(const M: TD3DXMatrix): HResult; stdcall;
- // Left-Multiplies the given matrix to the current matrix
- // (transformation is about the local origin of the object)
- function MultMatrixLocal(const M: TD3DXMatrix): HResult; stdcall;
- // Right multiply the current matrix with the computed rotation
- // matrix, counterclockwise about the given axis with the given angle.
- // (rotation is about the current world origin)
- function RotateAxis(const V: TD3DXVector3; Angle: Single): HResult; stdcall;
- // Left multiply the current matrix with the computed rotation
- // matrix, counterclockwise about the given axis with the given angle.
- // (rotation is about the local origin of the object)
- function RotateAxisLocal(const V: TD3DXVector3; Angle: Single): HResult; stdcall;
- // Right multiply the current matrix with the computed rotation
- // matrix. All angles are counterclockwise. (rotation is about the
- // current world origin)
- // The rotation is composed of a yaw around the Y axis, a pitch around
- // the X axis, and a roll around the Z axis.
- function RotateYawPitchRoll(yaw, pitch, roll: Single): HResult; stdcall;
- // Left multiply the current matrix with the computed rotation
- // matrix. All angles are counterclockwise. (rotation is about the
- // local origin of the object)
- // The rotation is composed of a yaw around the Y axis, a pitch around
- // the X axis, and a roll around the Z axis.
- function RotateYawPitchRollLocal(yaw, pitch, roll: Single): HResult; stdcall;
- // Right multiply the current matrix with the computed scale
- // matrix. (transformation is about the current world origin)
- function Scale(x, y, z: Single): HResult; stdcall;
- // Left multiply the current matrix with the computed scale
- // matrix. (transformation is about the local origin of the object)
- function ScaleLocal(x, y, z: Single): HResult; stdcall;
- // Right multiply the current matrix with the computed translation
- // matrix. (transformation is about the current world origin)
- function Translate(x, y, z: Single): HResult; stdcall;
- // Left multiply the current matrix with the computed translation
- // matrix. (transformation is about the local origin of the object)
- function TranslateLocal(x, y, z: Single): HResult; stdcall;
- // Obtain the current matrix at the top of the stack
- function GetTop: PD3DXMatrix; stdcall;
- end;
- type
- IID_ID3DXMatrixStack = ID3DXMatrixStack;
- {$EXTERNALSYM IID_ID3DXMatrixStack}
- function D3DXCreateMatrixStack(Flags: DWord; out Stack: ID3DXMatrixStack): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateMatrixStack}
- ///////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) Microsoft Corporation. All Rights Reserved.
- //
- // File: d3dx8core.h
- // Content: D3DX core types and functions
- //
- ///////////////////////////////////////////////////////////////////////////
- type
- ///////////////////////////////////////////////////////////////////////////
- // ID3DXBuffer:
- // ------------
- // The buffer object is used by D3DX to return arbitrary size data.
- //
- // GetBufferPointer -
- // Returns a pointer to the beginning of the buffer.
- //
- // GetBufferSize -
- // Returns the size of the buffer, in bytes.
- ///////////////////////////////////////////////////////////////////////////
- PID3DXBuffer = ^ID3DXBuffer;
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXBuffer);'}
- {$EXTERNALSYM ID3DXBuffer}
- ID3DXBuffer = interface(IUnknown)
- ['{932E6A7E-C68E-45dd-A7BF-53D19C86DB1F}']
- // ID3DXBuffer
- function GetBufferPointer: Pointer; stdcall;
- function GetBufferSize: DWord; stdcall;
- end;
- ///////////////////////////////////////////////////////////////////////////
- // ID3DXFont:
- // ----------
- // Font objects contain the textures and resources needed to render
- // a specific font on a specific device.
- //
- // Begin -
- // Prepartes device for drawing text. This is optional.. if DrawText
- // is called outside of Begin/End, it will call Begin and End for you.
- //
- // DrawText -
- // Draws formatted text on a D3D device. Some parameters are
- // surprisingly similar to those of GDI's DrawText function. See GDI
- // documentation for a detailed description of these parameters.
- //
- // End -
- // Restores device state to how it was when Begin was called.
- //
- // OnLostDevice, OnResetDevice -
- // Call OnLostDevice() on this object before calling Reset() on the
- // device, so that this object can release any stateblocks and video
- // memory resources. After Reset(), the call OnResetDevice().
- //
- ///////////////////////////////////////////////////////////////////////////
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXFont);'}
- {$EXTERNALSYM ID3DXFont}
- ID3DXFont = interface(IUnknown)
- ['{89FAD6A5-024D-49af-8FE7-F51123B85E25}']
- // ID3DXFont
- function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
- function GetLogFont(out pLogFont: TLogFont): HResult; stdcall;
- function _Begin: HResult; stdcall;
- function DrawTextA(pString: PAnsiChar; Count: Integer; const pRect: TRect; Format: DWord; Color: TD3DColor): Integer; stdcall;
- function DrawTextW(pString: PWideChar; Count: Integer; const pRect: TRect; Format: DWord; Color: TD3DColor): Integer; stdcall;
- function _End: HResult; stdcall;
- function OnLostDevice: HResult; stdcall;
- function OnResetDevice: HResult; stdcall;
- end;
- function D3DXCreateFont(pDevice: IDirect3DDevice8; hFont: HFONT;
- out ppFont: ID3DXFont): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateFont}
- function D3DXCreateFontIndirect(pDevice: IDirect3DDevice8;
- const pLogFont: TLogFont; out ppFont: ID3DXFont): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateFontIndirect}
- ///////////////////////////////////////////////////////////////////////////
- // ID3DXSprite:
- // ------------
- // This object intends to provide an easy way to drawing sprites using D3D.
- //
- // Begin -
- // Prepares device for drawing sprites
- //
- // Draw, DrawAffine, DrawTransform -
- // Draws a sprite in screen-space. Before transformation, the sprite is
- // the size of SrcRect, with its top-left corner at the origin (0,0).
- // The color and alpha channels are modulated by Color.
- //
- // End -
- // Restores device state to how it was when Begin was called.
- //
- // OnLostDevice, OnResetDevice -
- // Call OnLostDevice() on this object before calling Reset() on the
- // device, so that this object can release any stateblocks and video
- // memory resources. After Reset(), the call OnResetDevice().
- ///////////////////////////////////////////////////////////////////////////
- type
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXSprite);'}
- {$EXTERNALSYM ID3DXSprite}
- ID3DXSprite = interface(IUnknown)
- ['{13D69D15-F9B0-4e0f-B39E-C91EB33F6CE7}']
- // ID3DXSprite
- function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
- function _Begin: HResult; stdcall;
- function Draw(pSrcTexture: IDirect3DTexture8; pSrcRect: PRect;
- pScaling, pRotationCenter: PD3DXVector2; Rotation: Single;
- pTranslation: PD3DXVector2; Color: TD3DColor): HResult; stdcall;
- function DrawTransform(pSrcTexture: IDirect3DTexture8; pSrcRect: PRect;
- const pTransform: TD3DXMatrix; Color: TD3DColor): HResult; stdcall;
- function _End: HResult; stdcall;
- function OnLostDevice: HResult; stdcall;
- function OnResetDevice: HResult; stdcall;
- end;
- function D3DXCreateSprite(ppDevice: IDirect3DDevice8;
- out ppSprite: ID3DXSprite): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateSprite}
- ///////////////////////////////////////////////////////////////////////////
- // ID3DXRenderToSurface:
- // ---------------------
- // This object abstracts rendering to surfaces. These surfaces do not
- // necessarily need to be render targets. If they are not, a compatible
- // render target is used, and the result copied into surface at end scene.
- //
- // BeginScene, EndScene -
- // Call BeginScene() and EndScene() at the beginning and ending of your
- // scene. These calls will setup and restore render targets, viewports,
- // etc..
- //
- // OnLostDevice, OnResetDevice -
- // Call OnLostDevice() on this object before calling Reset() on the
- // device, so that this object can release any stateblocks and video
- // memory resources. After Reset(), the call OnResetDevice().
- ///////////////////////////////////////////////////////////////////////////
- type
- PD3DXRTSDesc = ^TD3DXRTSDesc;
- _D3DXRTS_DESC = packed record
- Width: LongWord;
- Height: LongWord;
- Format: TD3DFormat;
- DepthStencil: BOOL;
- DepthStencilFormat: TD3DFormat;
- end {_D3DXRTS_DESC};
- {$EXTERNALSYM _D3DXRTS_DESC}
- D3DXRTS_DESC = _D3DXRTS_DESC;
- {$EXTERNALSYM D3DXRTS_DESC}
- TD3DXRTSDesc = _D3DXRTS_DESC;
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXRenderToSurface);'}
- {$EXTERNALSYM ID3DXRenderToSurface}
- ID3DXRenderToSurface = interface(IUnknown)
- ['{82DF5B90-E34E-496e-AC1C-62117A6A5913}']
- // ID3DXRenderToSurface
- function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
- function GetDesc(out pDesc: TD3DXRTSDesc): HResult; stdcall;
- function BeginScene(pSurface: IDirect3DSurface8; pViewport: PD3DViewport8): HResult; stdcall;
- function EndScene: HResult; stdcall;
- function OnLostDevice: HResult; stdcall;
- function OnResetDevice: HResult; stdcall;
- end;
- function D3DXCreateRenderToSurface(ppDevice: IDirect3DDevice8;
- Width: LongWord;
- Height: LongWord;
- Format: TD3DFormat;
- DepthStencil: BOOL;
- DepthStencilFormat: TD3DFormat;
- out ppRenderToSurface: ID3DXRenderToSurface): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateRenderToSurface}
- ///////////////////////////////////////////////////////////////////////////
- // ID3DXRenderToEnvMap:
- // --------------------
- // This object abstracts rendering to environment maps. These surfaces
- // do not necessarily need to be render targets. If they are not, a
- // compatible render target is used, and the result copied into the
- // environment map at end scene.
- //
- // BeginCube, BeginSphere, BeginHemisphere, BeginParabolic -
- // This function initiates the rendering of the environment map. As
- // parameters, you pass the textures in which will get filled in with
- // the resulting environment map.
- //
- // Face -
- // Call this function to initiate the drawing of each face. For each
- // environment map, you will call this six times.. once for each face
- // in D3DCUBEMAP_FACES.
- //
- // End -
- // This will restore all render targets, and if needed compose all the
- // rendered faces into the environment map surfaces.
- //
- // OnLostDevice, OnResetDevice -
- // Call OnLostDevice() on this object before calling Reset() on the
- // device, so that this object can release any stateblocks and video
- // memory resources. After Reset(), the call OnResetDevice().
- ///////////////////////////////////////////////////////////////////////////
- type
- PD3DXRTEDesc = ^TD3DXRTEDesc;
- _D3DXRTE_DESC = record
- Size: LongWord;
- Format: TD3DFormat;
- DepthStencil: Bool;
- DepthStencilFormat: TD3DFormat;
- end {_D3DXRTE_DESC};
- {$EXTERNALSYM _D3DXRTE_DESC}
- D3DXRTE_DESC = _D3DXRTE_DESC;
- {$EXTERNALSYM D3DXRTE_DESC}
- TD3DXRTEDesc = _D3DXRTE_DESC;
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXRenderToEnvMap);'}
- {$EXTERNALSYM ID3DXRenderToEnvMap}
- ID3DXRenderToEnvMap = interface(IUnknown)
- ['{4E42C623-9451-44b7-8C86-ABCCDE5D52C8}']
- // ID3DXRenderToEnvMap
- function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
- function GetDesc(out pDesc: TD3DXRTEDesc): HResult; stdcall;
- function BeginCube(pCubeTex: IDirect3DCubeTexture8): HResult; stdcall;
- function BeginSphere(pTex: IDirect3DTexture8): HResult; stdcall;
- function BeginHemisphere(pTexZPos, pTexZNeg: IDirect3DTexture8): HResult; stdcall;
- function BeginParabolic(pTexZPos, pTexZNeg: IDirect3DTexture8): HResult; stdcall;
- function Face(Face: TD3DCubemapFaces): HResult; stdcall;
- function _End: HResult; stdcall;
- function OnLostDevice: HResult; stdcall;
- function OnResetDevice: HResult; stdcall;
- end;
- function D3DXCreateRenderToEnvMap(ppDevice: IDirect3DDevice8;
- Size: LongWord;
- Format: TD3DFormat;
- DepthStencil: BOOL;
- DepthStencilFormat: TD3DFormat;
- out ppRenderToEnvMap: ID3DXRenderToEnvMap): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateRenderToEnvMap}
- ///////////////////////////////////////////////////////////////////////////
- // Shader assemblers:
- ///////////////////////////////////////////////////////////////////////////
- //-------------------------------------------------------------------------
- // D3DXASM flags:
- // --------------
- //
- // D3DXASM_DEBUG
- // Generate debug info.
- //
- // D3DXASM_SKIPVALIDATION
- // Do not validate the generated code against known capabilities and
- // constraints. This option is only recommended when assembling shaders
- // you KNOW will work. (ie. have assembled before without this option.)
- //-------------------------------------------------------------------------
- const
- D3DXASM_DEBUG = (1 shl 0);
- {$EXTERNALSYM D3DXASM_DEBUG}
- D3DXASM_SKIPVALIDATION = (1 shl 1);
- {$EXTERNALSYM D3DXASM_SKIPVALIDATION}
- //-------------------------------------------------------------------------
- // D3DXAssembleShader:
- // -------------------
- // Assembles an ascii description of a vertex or pixel shader into
- // binary form.
- //
- // Parameters:
- // pSrcFile
- // Source file name
- // hSrcModule
- // Module handle. if NULL, current module will be used.
- // pSrcResource
- // Resource name in module
- // pSrcData
- // Pointer to source code
- // SrcDataLen
- // Size of source code, in bytes
- // Flags
- // D3DXASM_xxx flags
- // ppConstants
- // Returns an ID3DXBuffer object containing constant declarations.
- // ppCompiledShader
- // Returns an ID3DXBuffer object containing the object code.
- // ppCompilationErrors
- // Returns an ID3DXBuffer object containing ascii error messages
- //-------------------------------------------------------------------------
- function D3DXAssembleShaderFromFileA(
- pSrcFile: PAnsiChar;
- Flags: DWord;
- ppConstants: PID3DXBuffer;
- ppCompiledShader: PID3DXBuffer;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromFileA';
- {$EXTERNALSYM D3DXAssembleShaderFromFileA}
- function D3DXAssembleShaderFromFileW(
- pSrcFile: PWideChar;
- Flags: DWord;
- ppConstants: PID3DXBuffer;
- ppCompiledShader: PID3DXBuffer;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromFileW';
- {$EXTERNALSYM D3DXAssembleShaderFromFileW}
- function D3DXAssembleShaderFromFile(
- pSrcFile: PChar;
- Flags: DWord;
- ppConstants: PID3DXBuffer;
- ppCompiledShader: PID3DXBuffer;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromFileA';
- {$EXTERNALSYM D3DXAssembleShaderFromFile}
- function D3DXAssembleShaderFromResourceA(
- hSrcModule: HModule;
- pSrcResource: PAnsiChar;
- Flags: DWord;
- ppConstants: PID3DXBuffer;
- ppCompiledShader: PID3DXBuffer;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromResourceA';
- {$EXTERNALSYM D3DXAssembleShaderFromResourceA}
- function D3DXAssembleShaderFromResourceW(
- hSrcModule: HModule;
- pSrcResource: PWideChar;
- Flags: DWord;
- ppConstants: PID3DXBuffer;
- ppCompiledShader: PID3DXBuffer;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromResourceW';
- {$EXTERNALSYM D3DXAssembleShaderFromResourceW}
- function D3DXAssembleShaderFromResource(
- hSrcModule: HModule;
- pSrcResource: PChar;
- Flags: DWord;
- ppConstants: PID3DXBuffer;
- ppCompiledShader: PID3DXBuffer;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXAssembleShaderFromResourceA';
- {$EXTERNALSYM D3DXAssembleShaderFromResource}
- function D3DXAssembleShader(
- const pSrcData;
- SrcDataLen: LongWord;
- Flags: DWord;
- ppConstants: PID3DXBuffer;
- ppCompiledShader: PID3DXBuffer;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXAssembleShader}
- ///////////////////////////////////////////////////////////////////////////
- // Misc APIs:
- ///////////////////////////////////////////////////////////////////////////
- //-------------------------------------------------------------------------
- // D3DXGetErrorString:
- // ------------------
- // Returns the error string for given an hresult. Interprets all D3DX and
- // D3D hresults.
- //
- // Parameters:
- // hr
- // The error code to be deciphered.
- // pBuffer
- // Pointer to the buffer to be filled in.
- // BufferLen
- // Count of characters in buffer. Any error message longer than this
- // length will be truncated to fit.
- //-------------------------------------------------------------------------
- function D3DXGetErrorStringA(hr: HResult; pBuffer: PAnsiChar; BufferLen: LongWord): HResult; stdcall; external d3dx8dll name 'D3DXGetErrorStringA'; overload;
- {$EXTERNALSYM D3DXGetErrorStringA}
- function D3DXGetErrorStringW(hr: HResult; pBuffer: PWideChar; BufferLen: LongWord): HResult; stdcall; external d3dx8dll name 'D3DXGetErrorStringW'; overload;
- {$EXTERNALSYM D3DXGetErrorStringW}
- function D3DXGetErrorString(hr: HResult; pBuffer: PChar; BufferLen: LongWord): HResult; stdcall; external d3dx8dll name 'D3DXGetErrorStringA'; overload;
- {$EXTERNALSYM D3DXGetErrorString}
- // Object Pascal support functions for D3DXGetErrorString
- function D3DXGetErrorStringA(hr: HResult): String; overload;
- function D3DXGetErrorStringW(hr: HResult): WideString; overload;
- {$IFNDEF UNICODE}
- function D3DXGetErrorString(hr: HResult): String; overload;
- {$ELSE}
- function D3DXGetErrorString(hr: HResult): WideString; overload;
- {$ENDIF}
- ///////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) Microsoft Corporation. All Rights Reserved.
- //
- // File: d3dx8effect.h
- // Content: D3DX effect types and functions
- //
- ///////////////////////////////////////////////////////////////////////////
- const
- D3DXFX_DONOTSAVESTATE = (1 shl 0);
- {$EXTERNALSYM D3DXFX_DONOTSAVESTATE}
- type
- _D3DXPARAMETERTYPE = (
- D3DXPT_DWORD {= 0},
- D3DXPT_FLOAT {= 1},
- D3DXPT_VECTOR {= 2},
- D3DXPT_MATRIX {= 3},
- D3DXPT_TEXTURE {= 4},
- D3DXPT_VERTEXSHADER {= 5},
- D3DXPT_PIXELSHADER {= 6},
- D3DXPT_CONSTANT {= 7},
- D3DXPT_STRING {= 8}
- ); {_D3DXPARAMETERTYPE}
- {$EXTERNALSYM _D3DXPARAMETERTYPE}
- D3DXPARAMETERTYPE = _D3DXPARAMETERTYPE;
- {$EXTERNALSYM D3DXPARAMETERTYPE}
- TD3DXParameterType = _D3DXPARAMETERTYPE;
- type
- PD3DXEffectDesc = ^TD3DXEffectDesc;
- _D3DXEFFECT_DESC = packed record
- Parameters: LongWord;
- Techniques: LongWord;
- end;
- {$EXTERNALSYM _D3DXEFFECT_DESC}
- D3DXEFFECT_DESC = _D3DXEFFECT_DESC;
- {$EXTERNALSYM D3DXEFFECT_DESC}
- TD3DXEffectDesc = _D3DXEFFECT_DESC;
- PD3DXParameterDesc = ^TD3DXParameterDesc;
- _D3DXPARAMETER_DESC = packed record
- Name: PAnsiChar;
- Index: PAnsiChar;
- _Type: TD3DXParameterType;
- end;
- {$EXTERNALSYM _D3DXPARAMETER_DESC}
- D3DXPARAMETER_DESC = _D3DXPARAMETER_DESC;
- {$EXTERNALSYM D3DXPARAMETER_DESC}
- TD3DXParameterDesc = _D3DXPARAMETER_DESC;
- PD3DXTechniqueDesc = ^TD3DXTechniqueDesc;
- _D3DXTECHNIQUE_DESC = packed record
- Name: PAnsiChar;
- Index: PAnsiChar;
- Passes: LongWord;
- end;
- {$EXTERNALSYM _D3DXTECHNIQUE_DESC}
- D3DXTECHNIQUE_DESC = _D3DXTECHNIQUE_DESC;
- {$EXTERNALSYM D3DXTECHNIQUE_DESC}
- TD3DXTechniqueDesc = _D3DXTECHNIQUE_DESC;
- PD3DXPassDesc = ^TD3DXPassDesc;
- _D3DXPASS_DESC = packed record
- Name: PAnsiChar;
- Index: PAnsiChar;
- end;
- {$EXTERNALSYM _D3DXPASS_DESC}
- D3DXPASS_DESC = _D3DXPASS_DESC;
- {$EXTERNALSYM D3DXPASS_DESC}
- TD3DXPassDesc = _D3DXPASS_DESC;
- //////////////////////////////////////////////////////////////////////////////
- // ID3DXEffect ///////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXEffect);'}
- {$EXTERNALSYM ID3DXEffect}
- ID3DXEffect = interface(IUnknown)
- ['{648B1CEB-8D4E-4d66-B6FA-E44969E82E89}']
- // ID3DXEffect
- function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
- function GetDesc(out pDesc: TD3DXEffectDesc): HResult; stdcall;
- function GetParameterDesc(pParameter: PAnsiChar; out pDesc: TD3DXParameterDesc): HResult; stdcall;
- function GetTechniqueDesc(pTechnique: PAnsiChar; out pDesc: TD3DXTechniqueDesc): HResult; stdcall;
- function GetPassDesc(pTechnique, pPass: PAnsiChar; out pDesc: TD3DXPassDesc): HResult; stdcall;
- function FindNextValidTechnique(pTechnique: PAnsiChar; out pDesc: TD3DXTechniqueDesc): HResult; stdcall;
- function CloneEffect(pDevice: IDirect3DDevice8; out ppEffect: ID3DXEffect): HResult; stdcall;
- function GetCompiledEffect(out ppCompiledEffect: ID3DXBuffer): HResult; stdcall;
- function SetTechnique(pTechnique: PAnsiChar): HResult; stdcall;
- function GetTechnique(out ppTechnique: PAnsiChar): HResult; stdcall;
- function SetDword(pParameter: PAnsiChar; dw: DWord): HResult; stdcall;
- function GetDword(pParameter: PAnsiChar; out pdw: DWord): HResult; stdcall;
- function SetFloat(pParameter: PAnsiChar; f: Single): HResult; stdcall;
- function GetFloat(pParameter: PAnsiChar; out pf: Single): HResult; stdcall;
- function SetVector(pParameter: PAnsiChar; const pVector: TD3DXVector4): HResult; stdcall;
- function GetVector(pParameter: PAnsiChar; out pVector: TD3DXVector4): HResult; stdcall;
- function SetMatrix(pParameter: PAnsiChar; const pMatrix: TD3DXMatrix): HResult; stdcall;
- function GetMatrix(pParameter: PAnsiChar; out pMatrix: TD3DXMatrix): HResult; stdcall;
- function SetTexture(pParameter: PAnsiChar; pTexture: IDirect3DBaseTexture8): HResult; stdcall;
- function GetTexture(pParameter: PAnsiChar; out ppTexture: IDirect3DBaseTexture8): HResult; stdcall;
- function SetVertexShader(pParameter: PAnsiChar; Handle: DWord): HResult; stdcall;
- function GetVertexShader(pParameter: PAnsiChar; out Handle: DWord): HResult; stdcall;
- function SetPixelShader(pParameter: PAnsiChar; Handle: DWord): HResult; stdcall;
- function GetPixelShader(pParameter: PAnsiChar; out Handle: DWord): HResult; stdcall;
- function SetString(pParameter: PAnsiChar; pString: PAnsiChar): HResult; stdcall;
- function GetString(pParameter: PAnsiChar; out ppString: PAnsiChar): HResult; stdcall;
- function IsParameterUsed(pParameter: PAnsiChar): BOOL; stdcall;
- function Validate: HResult; stdcall;
- function _Begin(out pPasses: LongWord; Flags: DWord): HResult; stdcall;
- function Pass(Pass: LongWord): HResult; stdcall;
- function _End: HResult; stdcall;
- function OnLostDevice: HResult; stdcall;
- function OnResetDevice: HResult; stdcall;
- end;
- //////////////////////////////////////////////////////////////////////////////
- // APIs //////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- //----------------------------------------------------------------------------
- // D3DXCreateEffect:
- // -----------------
- // Creates an effect from an ascii or binaray effect description.
- //
- // Parameters:
- // pDevice
- // Pointer of the device on which to create the effect
- // pSrcFile
- // Name of the file containing the effect description
- // hSrcModule
- // Module handle. if NULL, current module will be used.
- // pSrcResource
- // Resource name in module
- // pSrcData
- // Pointer to effect description
- // SrcDataSize
- // Size of the effect description in bytes
- // ppEffect
- // Returns a buffer containing created effect.
- // ppCompilationErrors
- // Returns a buffer containing any error messages which occurred during
- // compile. Or NULL if you do not care about the error messages.
- //
- //----------------------------------------------------------------------------
- function D3DXCreateEffectFromFileA(
- pDevice: IDirect3DDevice8;
- pSrcFile: PAnsiChar;
- out ppEffect: ID3DXEffect;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromFileA';
- {$EXTERNALSYM D3DXCreateEffectFromFileA}
- function D3DXCreateEffectFromFileW(
- pDevice: IDirect3DDevice8;
- pSrcFile: PWideChar;
- out ppEffect: ID3DXEffect;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromFileW';
- {$EXTERNALSYM D3DXCreateEffectFromFileW}
- function D3DXCreateEffectFromFile(
- pDevice: IDirect3DDevice8;
- pSrcFile: PChar;
- out ppEffect: ID3DXEffect;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromFileA';
- {$EXTERNALSYM D3DXCreateEffectFromFile}
- function D3DXCreateEffectFromResourceA(
- pDevice: IDirect3DDevice8;
- hSrcModule: HModule;
- pSrcResource: PAnsiChar;
- out ppEffect: ID3DXEffect;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromResourceA';
- {$EXTERNALSYM D3DXCreateEffectFromResourceA}
- function D3DXCreateEffectFromResourceW(
- pDevice: IDirect3DDevice8;
- hSrcModule: HModule;
- pSrcResource: PWideChar;
- out ppEffect: ID3DXEffect;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromResourceW';
- {$EXTERNALSYM D3DXCreateEffectFromResourceW}
- function D3DXCreateEffectFromResource(
- pDevice: IDirect3DDevice8;
- hSrcModule: HModule;
- pSrcResource: PChar;
- out ppEffect: ID3DXEffect;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll name 'D3DXCreateEffectFromResourceA';
- {$EXTERNALSYM D3DXCreateEffectFromResource}
- function D3DXCreateEffect(
- pDevice: IDirect3DDevice8;
- const pSrcData;
- SrcDataSize: LongWord;
- out ppEffect: ID3DXEffect;
- ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateEffect}
- //////////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) Microsoft Corporation. All Rights Reserved.
- //
- // File: d3dx8mesh.h
- // Content: D3DX mesh types and functions
- //
- //////////////////////////////////////////////////////////////////////////////
- type
- _D3DXMESH = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
- {$EXTERNALSYM _D3DXMESH}
- TD3DXMesh = _D3DXMESH;
- // Mesh options - lower 3 bytes only, upper byte used by _D3DXMESHOPT option flags
- const
- D3DXMESH_32BIT = $001; // If set, then use 32 bit indices, if not set use 16 bit indices.
- {$EXTERNALSYM D3DXMESH_32BIT}
- D3DXMESH_DONOTCLIP = $002; // Use D3DUSAGE_DONOTCLIP for VB & IB.
- {$EXTERNALSYM D3DXMESH_DONOTCLIP}
- D3DXMESH_POINTS = $004; // Use D3DUSAGE_POINTS for VB & IB.
- {$EXTERNALSYM D3DXMESH_POINTS}
- D3DXMESH_RTPATCHES = $008; // Use D3DUSAGE_RTPATCHES for VB & IB.
- {$EXTERNALSYM D3DXMESH_RTPATCHES}
- D3DXMESH_NPATCHES = $4000;// Use D3DUSAGE_NPATCHES for VB & IB.
- {$EXTERNALSYM D3DXMESH_NPATCHES}
- D3DXMESH_VB_SYSTEMMEM = $010; // Use D3DPOOL_SYSTEMMEM for VB. Overrides D3DXMESH_MANAGEDVERTEXBUFFER
- {$EXTERNALSYM D3DXMESH_VB_SYSTEMMEM}
- D3DXMESH_VB_MANAGED = $020; // Use D3DPOOL_MANAGED for VB.
- {$EXTERNALSYM D3DXMESH_VB_MANAGED}
- D3DXMESH_VB_WRITEONLY = $040; // Use D3DUSAGE_WRITEONLY for VB.
- {$EXTERNALSYM D3DXMESH_VB_WRITEONLY}
- D3DXMESH_VB_DYNAMIC = $080; // Use D3DUSAGE_DYNAMIC for VB.
- {$EXTERNALSYM D3DXMESH_VB_DYNAMIC}
- D3DXMESH_VB_SOFTWAREPROCESSING = $8000; // Use D3DUSAGE_SOFTWAREPROCESSING for VB.
- {$EXTERNALSYM D3DXMESH_VB_SOFTWAREPROCESSING}
- D3DXMESH_IB_SYSTEMMEM = $100; // Use D3DPOOL_SYSTEMMEM for IB. Overrides D3DXMESH_MANAGEDINDEXBUFFER
- {$EXTERNALSYM D3DXMESH_IB_SYSTEMMEM}
- D3DXMESH_IB_MANAGED = $200; // Use D3DPOOL_MANAGED for IB.
- {$EXTERNALSYM D3DXMESH_IB_MANAGED}
- D3DXMESH_IB_WRITEONLY = $400; // Use D3DUSAGE_WRITEONLY for IB.
- {$EXTERNALSYM D3DXMESH_IB_WRITEONLY}
- D3DXMESH_IB_DYNAMIC = $800; // Use D3DUSAGE_DYNAMIC for IB.
- {$EXTERNALSYM D3DXMESH_IB_DYNAMIC}
- D3DXMESH_IB_SOFTWAREPROCESSING= $10000; // Use D3DUSAGE_SOFTWAREPROCESSING for IB.
- {$EXTERNALSYM D3DXMESH_IB_SOFTWAREPROCESSING}
- D3DXMESH_VB_SHARE = $1000; // Valid for Clone* calls only, forces cloned mesh/pmesh to share vertex buffer
- {$EXTERNALSYM D3DXMESH_VB_SHARE}
- D3DXMESH_USEHWONLY = $2000; // Valid for ID3DXSkinMesh::ConvertToBlendedMesh
- {$EXTERNALSYM D3DXMESH_USEHWONLY}
- // Helper options
- D3DXMESH_SYSTEMMEM = $110; // D3DXMESH_VB_SYSTEMMEM | D3DXMESH_IB_SYSTEMMEM
- {$EXTERNALSYM D3DXMESH_SYSTEMMEM}
- D3DXMESH_MANAGED = $220; // D3DXMESH_VB_MANAGED | D3DXMESH_IB_MANAGED
- {$EXTERNALSYM D3DXMESH_MANAGED}
- D3DXMESH_WRITEONLY = $440; // D3DXMESH_VB_WRITEONLY | D3DXMESH_IB_WRITEONLY
- {$EXTERNALSYM D3DXMESH_WRITEONLY}
- D3DXMESH_DYNAMIC = $880; // D3DXMESH_VB_DYNAMIC | D3DXMESH_IB_DYNAMIC
- {$EXTERNALSYM D3DXMESH_DYNAMIC}
- D3DXMESH_SOFTWAREPROCESSING = $18000; // D3DXMESH_VB_SOFTWAREPROCESSING | D3DXMESH_IB_SOFTWAREPROCESSING
- {$EXTERNALSYM D3DXMESH_SOFTWAREPROCESSING}
- type
- // option field values for specifying min value in D3DXGeneratePMesh and D3DXSimplifyMesh
- _D3DXMESHSIMP = (
- {$IFNDEF COMPILER6_UP}
- D3DXMESHSIMP_INVALID_0{= 0x0},
- D3DXMESHSIMP_VERTEX {= 0x1},
- D3DXMESHSIMP_FACE {= 0x2}
- {$ELSE}
- D3DXMESHSIMP_VERTEX = $1,
- D3DXMESHSIMP_FACE = $2
- {$ENDIF}
- );
- {$EXTERNALSYM _D3DXMESHSIMP}
- TD3DMeshSimp = _D3DXMESHSIMP;
- _MAX_FVF_DECL_SIZE = DWord;
- {$EXTERNALSYM _MAX_FVF_DECL_SIZE}
- const
- MAX_FVF_DECL_SIZE = 20;
- {$EXTERNALSYM MAX_FVF_DECL_SIZE}
- type
- TFVFDeclaration = array [0..MAX_FVF_DECL_SIZE-1] of DWord;
- PD3DXAttributeRange = ^TD3DXAttributeRange;
- _D3DXATTRIBUTERANGE = packed record
- AttribId: DWord;
- FaceStart: DWord;
- FaceCount: DWord;
- VertexStart: DWord;
- VertexCount: DWord;
- end;
- {$EXTERNALSYM _D3DXATTRIBUTERANGE}
- D3DXATTRIBUTERANGE = _D3DXATTRIBUTERANGE;
- {$EXTERNALSYM D3DXATTRIBUTERANGE}
- TD3DXAttributeRange = _D3DXATTRIBUTERANGE;
- PD3DXMaterial = ^TD3DXMaterial;
- D3DXMATERIAL = packed record
- MatD3D: TD3Dmaterial8;
- pTextureFilename: PAnsiChar;
- end;
- {$EXTERNALSYM D3DXMATERIAL}
- TD3DXMaterial = D3DXMATERIAL;
- PD3DXAttributeWeights = ^TD3DXAttributeWeights;
- _D3DXATTRIBUTEWEIGHTS = packed record
- Position: Single;
- Boundary: Single;
- Normal: Single;
- Diffuse: Single;
- Specular: Single;
- Tex: array[0..7] of Single;
- end;
- {$EXTERNALSYM _D3DXATTRIBUTEWEIGHTS}
- D3DXATTRIBUTEWEIGHTS = _D3DXATTRIBUTEWEIGHTS;
- {$EXTERNALSYM D3DXATTRIBUTEWEIGHTS}
- TD3DXAttributeWeights = _D3DXATTRIBUTEWEIGHTS;
- _D3DXWELDEPSILONSFLAGS = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
- {$EXTERNALSYM _D3DXWELDEPSILONSFLAGS}
- TD3DXWeldEpsilonsFlags = _D3DXWELDEPSILONSFLAGS;
- const
- D3DXWELDEPSILONS_WELDALL = $1; // weld all vertices marked by adjacency as being overlapping
- {$EXTERNALSYM D3DXWELDEPSILONS_WELDALL}
- D3DXWELDEPSILONS_WELDPARTIALMATCHES = $2; // if a given vertex component is within epsilon, modify partial matched
- // vertices so that both components identical AND if all components "equal"
- // remove one of the vertices
- {$EXTERNALSYM D3DXWELDEPSILONS_WELDPARTIALMATCHES}
- D3DXWELDEPSILONS_DONOTREMOVEVERTICES = $4; // instructs weld to only allow modifications to vertices and not removal
- // ONLY valid if D3DXWELDEPSILONS_WELDPARTIALMATCHES is set
- // useful to modify vertices to be equal, but not allow vertices to be removed
- {$EXTERNALSYM D3DXWELDEPSILONS_DONOTREMOVEVERTICES}
- type
- PD3DXWeldEpsilons = ^TD3DXWeldEpsilons;
- _D3DXWELDEPSILONS = packed record
- SkinWeights: Single;
- Normal: Single;
- Tex: array[0..7] of Single;
- Flags: DWord;
- end;
- {$EXTERNALSYM _D3DXWELDEPSILONS}
- D3DXWELDEPSILONS = _D3DXWELDEPSILONS;
- {$EXTERNALSYM D3DXWELDEPSILONS}
- TD3DXWeldEpsilons = _D3DXWELDEPSILONS;
- ID3DXMesh = interface;
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXBaseMesh);'}
- {$EXTERNALSYM ID3DXBaseMesh}
- ID3DXBaseMesh = interface(IUnknown)
- ['{2A835771-BF4D-43f4-8E14-82A809F17D8A}']
- // ID3DXBaseMesh
- function DrawSubset(AttribId: DWord): HResult; stdcall;
- function GetNumFaces: DWord; stdcall;
- function GetNumVertices: DWord; stdcall;
- function GetFVF: DWord; stdcall;
- function GetDeclaration(out Declaration: TFVFDeclaration): HResult; stdcall;
- function GetOptions: DWord; stdcall;
- function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
- function CloneMeshFVF(Options, FVF: DWord; ppDevice: IDirect3DDevice8;
- out ppCloneMesh: ID3DXMesh): HResult; stdcall;
- function CloneMesh(Options: DWord; pDeclaration: PDWord;
- ppDevice: IDirect3DDevice8; out ppCloneMesh: ID3DXMesh): HResult; stdcall;
- function GetVertexBuffer(out ppVB: IDirect3DVertexBuffer8): HResult; stdcall;
- function GetIndexBuffer(out ppIB: IDirect3DIndexBuffer8): HResult; stdcall;
- function LockVertexBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
- function UnlockVertexBuffer: HResult; stdcall;
- function LockIndexBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
- function UnlockIndexBuffer: HResult; stdcall;
- function GetAttributeTable(pAttribTable: PD3DXAttributeRange;
- pAttribTableSize: PDWord): HResult; stdcall;
- function ConvertPointRepsToAdjacency(pPRep: PDWord; pAdjacency: PDWord): HResult; stdcall;
- function ConvertAdjacencyToPointReps(pAdjacency: PDWord; pPRep: PDWord): HResult; stdcall;
- function GenerateAdjacency(Epsilon: Single; pAdjacency: PDWord): HResult; stdcall;
- end;
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXMesh);'}
- {$EXTERNALSYM ID3DXMesh}
- ID3DXMesh = interface(ID3DXBaseMesh)
- ['{CCAE5C3B-4DD1-4d0f-997E-4684CA64557F}']
- // ID3DXMesh
- function LockAttributeBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
- function UnlockAttributeBuffer: HResult; stdcall;
- function Optimize(Flags: DWord; pAdjacencyIn, pAdjacencyOut: PDWord;
- pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer;
- out ppOptMesh: ID3DXMesh): HResult; stdcall;
- function OptimizeInplace(Flags: DWord; pAdjacencyIn, pAdjacencyOut: PDWord;
- pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer): HResult; stdcall;
- end;
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXPMesh);'}
- {$EXTERNALSYM ID3DXPMesh}
- ID3DXPMesh = interface(ID3DXBaseMesh)
- ['{19FBE386-C282-4659-97BD-CB869B084A6C}']
- // ID3DXPMesh
- function ClonePMeshFVF(Options, FVF: DWord; ppDevice: IDirect3DDevice8;
- out ppCloneMesh: ID3DXPMesh): HResult; stdcall;
- function ClonePMesh(Options: DWord; pDeclaration: PDWord;
- ppDevice: IDirect3DDevice8; out ppCloneMesh: ID3DXPMesh): HResult; stdcall;
- function SetNumFaces(Faces: DWord): HResult; stdcall;
- function SetNumVertices(Vertices: DWord): HResult; stdcall;
- function GetMaxFaces: DWord; stdcall;
- function GetMinFaces: DWord; stdcall;
- function GetMaxVertices: DWord; stdcall;
- function GetMinVertices: DWord; stdcall;
- function Save(pStream: IStream; pMaterials: PD3DXMaterial;
- NumMaterials: DWord): HResult; stdcall;
- function Optimize(Flags: DWord; pAdjacencyOut: PDWord;
- pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer;
- out ppOptMesh: ID3DXMesh): HResult; stdcall;
- function OptimizeBaseLOD(Flags: DWord; pFaceRemap: PDWord): HResult; stdcall;
- function TrimByFaces(NewFacesMin, NewFacesMax: DWord; rgiFaceRemap, rgiVertRemap: PDWord): HResult; stdcall;
- function TrimByVertices(NewVerticesMin, NewVerticesMax: DWord; rgiFaceRemap, rgiVertRemap: PDWord): HResult; stdcall;
- function GetAdjacency(pAdjacency: PDWord): HResult; stdcall;
- end;
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXSPMesh);'}
- {$EXTERNALSYM ID3DXSPMesh}
- ID3DXSPMesh = interface(IUnknown)
- ['{4E3CA05C-D4FF-4d11-8A02-16459E08F6F4}']
- // ID3DXSPMesh
- function GetNumFaces: DWord; stdcall;
- function GetNumVertices: DWord; stdcall;
- function GetFVF: DWord; stdcall;
- function GetDeclaration(out Declaration: TFVFDeclaration): HResult; stdcall;
- function GetOptions: DWord; stdcall;
- function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
- function CloneMeshFVF(Options, FVF: DWord; ppDevice: IDirect3DDevice8;
- pAdjacencyOut, pVertexRemapOut: PDWord;
- out ppCloneMesh: ID3DXMesh): HResult; stdcall;
- function CloneMesh(Options: DWord; pDeclaration: PDWord;
- ppDevice: IDirect3DDevice8; pAdjacencyOut, pVertexRemapOut: PDWord;
- out ppCloneMesh: ID3DXMesh): HResult; stdcall;
- function ClonePMeshFVF(Options, FVF: DWord; ppDevice: IDirect3DDevice8;
- pVertexRemapOut: PDWord; out ppCloneMesh: ID3DXPMesh): HResult; stdcall;
- function ClonePMesh(Options: DWord; pDeclaration: PDWord;
- ppDevice: IDirect3DDevice8; pVertexRemapOut: PDWord;
- out ppCloneMesh: ID3DXPMesh): HResult; stdcall;
- function ReduceFaces(Faces: DWord): HResult; stdcall;
- function ReduceVertices(Vertices: DWord): HResult; stdcall;
- function GetMaxFaces: DWord; stdcall;
- function GetMaxVertices: DWord; stdcall;
- function GetVertexAttributeWeights(pVertexAttributeWeights: PD3DXAttributeWeights): HResult; stdcall;
- function GetVertexWeights(pVertexWeights: PSingle): HResult; stdcall;
- end;
- const
- UNUSED16 = $ffff;
- {$EXTERNALSYM UNUSED16}
- UNUSED32 = $ffffffff;
- {$EXTERNALSYM UNUSED32}
- // ID3DXMesh::Optimize options - upper byte only, lower 3 bytes used from _D3DXMESH option flags
- type
- _D3DXMESHOPT = {$IFDEF TYPE_IDENTITY}type {$ENDIF}DWord;
- {$EXTERNALSYM _D3DXMESHOPT}
- TD3DXMeshOpt = _D3DXMESHOPT;
- const
- D3DXMESHOPT_COMPACT = $01000000;
- {$EXTERNALSYM D3DXMESHOPT_COMPACT}
- D3DXMESHOPT_ATTRSORT = $02000000;
- {$EXTERNALSYM D3DXMESHOPT_ATTRSORT}
- D3DXMESHOPT_VERTEXCACHE = $04000000;
- {$EXTERNALSYM D3DXMESHOPT_VERTEXCACHE}
- D3DXMESHOPT_STRIPREORDER = $08000000;
- {$EXTERNALSYM D3DXMESHOPT_STRIPREORDER}
- D3DXMESHOPT_IGNOREVERTS = $10000000; // optimize faces only; don't touch vertices
- {$EXTERNALSYM D3DXMESHOPT_IGNOREVERTS}
- D3DXMESHOPT_SHAREVB = $1000; // same as D3DXMESH_VB_SHARE
- {$EXTERNALSYM D3DXMESHOPT_SHAREVB}
- // Subset of the mesh that has the same attribute and bone combination.
- // This subset can be rendered in a single draw call
- type
- PDWordArray = ^TDWordArray;
- {$NODEFINE PDWordArray}
- TDWordArray = array[0..8181] of DWord;
- {$NODEFINE TDWordArray}
- PD3DXBoneCombination = ^TD3DXBoneCombination;
- _D3DXBONECOMBINATION = packed record
- AttribId: DWord;
- FaceStart: DWord;
- FaceCount: DWord;
- VertexStart: DWord;
- VertexCount: DWord;
- BoneId: PDWordArray; // [ DWORD* ] in original d3dx8mesh.h
- end;
- {$EXTERNALSYM _D3DXBONECOMBINATION}
- D3DXBONECOMBINATION = _D3DXBONECOMBINATION;
- {$EXTERNALSYM D3DXBONECOMBINATION}
- TD3DXBoneCombination = _D3DXBONECOMBINATION;
- {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXSkinMesh);'}
- {$EXTERNALSYM ID3DXSkinMesh}
- ID3DXSkinMesh = interface(IUnknown)
- ['{8DB06ECC-EBFC-408a-9404-3074B4773515}']
- // close to ID3DXMesh
- function GetNumFaces: DWord; stdcall;
- function GetNumVertices: DWord; stdcall;
- function GetFVF: DWord; stdcall;
- function GetDeclaration(out Declaration: TFVFDeclaration): HResult; stdcall;
- function GetOptions: DWord; stdcall;
- function GetDevice(out ppDevice: IDirect3DDevice8): HResult; stdcall;
- function GetVertexBuffer(out ppVB: IDirect3DVertexBuffer8): HResult; stdcall;
- function GetIndexBuffer(out ppIB: IDirect3DIndexBuffer8): HResult; stdcall;
- function LockVertexBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
- function UnlockVertexBuffer: HResult; stdcall;
- function LockIndexBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
- function UnlockIndexBuffer: HResult; stdcall;
- function LockAttributeBuffer(Flags: DWord; out ppData: PByte): HResult; stdcall;
- function UnlockAttributeBuffer: HResult; stdcall;
- // ID3DXSkinMesh
- function GetNumBones: DWord; stdcall;
- function GetOriginalMesh(out ppMesh: ID3DXMesh): HResult; stdcall;
- function SetBoneInfluence(bone, numInfluences: DWord; vertices: PDWord;
- weights: PSingle): HResult; stdcall;
- function GetNumBoneInfluences(bone: DWord): DWord; stdcall;
- function GetBoneInfluence(bone: DWord; vertices: PDWord;
- weights: PSingle): HResult; stdcall;
- function GetMaxVertexInfluences(out maxVertexInfluences: DWord): HResult; stdcall;
- function GetMaxFaceInfluences(out maxFaceInfluences: DWord): HResult; stdcall;
- function ConvertToBlendedMesh(Options: DWord;
- pAdjacencyIn, pAdjacencyOut: PDWord;
- out pNumBoneCombinations: DWord; out ppBoneCombinationTable: ID3DXBuffer;
- pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer;
- out ppMesh: ID3DXMesh): HResult; stdcall;
- function ConvertToIndexedBlendedMesh(Options: DWord;
- pAdjacencyIn: PDWord; paletteSize: DWord; pAdjacencyOut: PDWord;
- out pNumBoneCombinations: DWord; out ppBoneCombinationTable: ID3DXBuffer;
- pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer;
- out ppMesh: ID3DXMesh): HResult; stdcall;
- function GenerateSkinnedMesh(Options: DWord; minWeight: Single;
- pAdjacencyIn, pAdjacencyOut: PDWord;
- pFaceRemap: PDWord; ppVertexRemap: PID3DXBuffer;
- out ppMesh: ID3DXMesh): HResult; stdcall;
- function UpdateSkinnedMesh(
- const pBoneTransforms: TD3DXmatrix; pBoneInvTransforms: PD3DXmatrix;
- ppMesh: ID3DXMesh): HResult; stdcall;
- end;
- type
- IID_ID3DXBaseMesh = ID3DXBaseMesh;
- {$EXTERNALSYM IID_ID3DXBaseMesh}
- IID_ID3DXMesh = ID3DXMesh;
- {$EXTERNALSYM IID_ID3DXMesh}
- IID_ID3DXPMesh = ID3DXPMesh;
- {$EXTERNALSYM IID_ID3DXPMesh}
- IID_ID3DXSPMesh = ID3DXSPMesh;
- {$EXTERNALSYM IID_ID3DXSPMesh}
- IID_ID3DXSkinMesh = ID3DXSkinMesh;
- {$EXTERNALSYM IID_ID3DXSkinMesh}
- function D3DXCreateMesh(NumFaces, NumVertices: DWord; Options: DWord;
- pDeclaration: PDWord; pD3D: IDirect3DDevice8; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateMesh}
- function D3DXCreateMeshFVF(NumFaces, NumVertices: DWord; Options: DWord;
- FVF: DWord; pD3D: IDirect3DDevice8; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateMeshFVF}
- function D3DXCreateSPMesh(pMesh: ID3DXMesh; pAdjacency: PDWord;
- pVertexAttributeWeights: PD3DXAttributeWeights; pVertexWeights: PSingle;
- out ppSMesh: ID3DXSPMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateSPMesh}
- // clean a mesh up for simplification, try to make manifold
- function D3DXCleanMesh(pMeshIn: ID3DXMesh; pAdjacencyIn: PDWord;
- out ppMeshOut: ID3DXMesh; pAdjacencyOut: PDWord;
- ppErrorsAndWarnings: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCleanMesh}
- function D3DXValidMesh(pMeshIn: ID3DXMesh; pAdjacency: PDWord;
- ppErrorsAndWarnings: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXValidMesh}
- function D3DXGeneratePMesh(pMesh: ID3DXMesh; pAdjacency: PDWord;
- pVertexAttributeWeights: PD3DXAttributeWeights; pVertexWeights: PSingle;
- MinValue: DWord; Options: TD3DMeshSimp; out ppPMesh: ID3DXPMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXGeneratePMesh}
- function D3DXSimplifyMesh(pMesh: ID3DXMesh; pAdjacency: PDWord;
- pVertexAttributeWeights: PD3DXAttributeWeights; pVertexWeights: PSingle;
- MinValue: DWord; Options: TD3DMeshSimp; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXSimplifyMesh}
- function D3DXComputeBoundingSphere(const pPointsFVF; NumVertices: DWord;
- FVF: DWord; out pCenter: TD3DXVector3; out pRadius: Single): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXComputeBoundingSphere}
- function D3DXComputeBoundingBox(const pPointsFVF; NumVertices: DWord;
- FVF: DWord; out pMin, pMax: TD3DXVector3): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXComputeBoundingBox}
- function D3DXComputeNormals(pMesh: ID3DXBaseMesh; pAdjacency: PDWord): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXComputeNormals}
- function D3DXCreateBuffer(NumBytes: DWord; out ppBuffer: ID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateBuffer}
- function D3DXLoadMeshFromX(pFilename: PAnsiChar; Options: DWord;
- pD3D: IDirect3DDevice8; ppAdjacency, ppMaterials: PID3DXBuffer;
- pNumMaterials: PDWord; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXLoadMeshFromX}
- function D3DXLoadMeshFromXInMemory(Memory: PByte; SizeOfMemory: DWord;
- Options: DWord; pD3D: IDirect3DDevice8;
- ppAdjacency, ppMaterials: PID3DXBuffer;
- pNumMaterials: PDWord; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXLoadMeshFromXInMemory}
- function D3DXLoadMeshFromXResource(Module: HModule; Name: PAnsiChar; _Type: PAnsiChar;
- Options: DWord; pD3D: IDirect3DDevice8;
- ppAdjacency, ppMaterials: PID3DXBuffer;
- pNumMaterials: PDWord; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXLoadMeshFromXResource}
- function D3DXSaveMeshToX(pFilename: PAnsiChar; ppMesh: ID3DXMesh;
- pAdjacency: PDWord; pMaterials: PD3DXMaterial; NumMaterials: DWord;
- Format: DWord): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXSaveMeshToX}
- function D3DXCreatePMeshFromStream(pStream: IStream; Options: DWord;
- pD3D: IDirect3DDevice8; ppMaterials: PID3DXBuffer;
- pNumMaterials: PDWord; out ppPMesh: ID3DXPMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreatePMeshFromStream}
- function D3DXCreateSkinMesh(NumFaces, NumVertices, NumBones, Options: DWord;
- pDeclaration: PDWord; pD3D: IDirect3DDevice8;
- out ppSkinMesh: ID3DXSkinMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateSkinMesh}
- function D3DXCreateSkinMeshFVF(NumFaces, NumVertices, NumBones, Options: DWord;
- FVF: DWord; pD3D: IDirect3DDevice8;
- out ppSkinMesh: ID3DXSkinMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateSkinMeshFVF}
- function D3DXCreateSkinMeshFromMesh(pMesh: ID3DXMesh; numBones: DWord;
- out ppSkinMesh: ID3DXSkinMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateSkinMeshFromMesh}
- function D3DXLoadMeshFromXof(pXofObjMesh: IDirectXFileData;
- Options: DWord; pD3D: IDirect3DDevice8;
- ppAdjacency, ppMaterials: PID3DXBuffer;
- pNumMaterials: PDWord; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXLoadMeshFromXof}
- function D3DXLoadSkinMeshFromXof(pXofObjMesh: IDirectXFileData;
- Options: DWord; pD3D: IDirect3DDevice8;
- ppAdjacency, ppMaterials: PID3DXBuffer;
- pmMatOut: PDWord; ppBoneNames, ppBoneTransforms: PID3DXBuffer;
- out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXLoadSkinMeshFromXof}
- function D3DXTessellateNPatches(pMeshIn: ID3DXMesh;
- pAdjacencyIn: PDWord; NumSegs: Single;
- QuadraticInterpNormals: BOOL; // if false use linear intrep for normals, if true use quadratic
- out ppMeshOut: ID3DXMesh; ppAdjacencyOut: PDWord): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXTessellateNPatches}
- function D3DXGetFVFVertexSize(FVF: DWord): LongWord; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXGetFVFVertexSize}
- function D3DXDeclaratorFromFVF(FVF: DWord; out Declaration: TFVFDeclaration): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXDeclaratorFromFVF}
- function D3DXFVFFromDeclarator(pDeclarator: PDWord; out pFVF: DWord): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXFVFFromDeclarator}
- function D3DXWeldVertices(pMesh: ID3DXMesh; pEpsilons: PD3DXWeldEpsilons;
- rgdwAdjacencyIn, rgdwAdjacencyOut, pFaceRemap: PDWord;
- ppVertexRemap: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXWeldVertices}
- type
- PD3DXIntersectInfo = ^TD3DXIntersectInfo;
- _D3DXINTERSECTINFO = packed record
- FaceIndex: DWord; // index of face intersected
- U: Single; // Barycentric Hit Coordinates
- V: Single; // Barycentric Hit Coordinates
- Dist: Single; // Ray-Intersection Parameter Distance
- end;
- {$EXTERNALSYM _D3DXINTERSECTINFO}
- D3DXINTERSECTINFO = _D3DXINTERSECTINFO;
- {$EXTERNALSYM D3DXINTERSECTINFO}
- TD3DXIntersectInfo = _D3DXINTERSECTINFO;
- function D3DXIntersect(pMesh: ID3DXBaseMesh;
- const pRayPos, pRayDir: TD3DXVector3;
- out pHit: BOOL; // True if any faces were intersected
- pFaceIndex: PDWord; // index of closest face intersected
- pU: PSingle; // Barycentric Hit Coordinates
- pV: PSingle; // Barycentric Hit Coordinates
- pDist: PSingle; // Ray-Intersection Parameter Distance
- ppAllHits: PID3DXBuffer; // Array of D3DXINTERSECTINFOs for all hits (not just closest)
- pCountOfHits: PDWord // Number of entries in AllHits array
- ): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXIntersect}
- function D3DXIntersectSubset(pMesh: ID3DXBaseMesh; AttribId: DWord;
- const pRayPos, pRayDir: TD3DXVector3;
- out pHit: BOOL; // True if any faces were intersected
- pFaceIndex: PDWord; // index of closest face intersected
- pU: PSingle; // Barycentric Hit Coordinates
- pV: PSingle; // Barycentric Hit Coordinates
- pDist: PSingle; // Ray-Intersection Parameter Distance
- ppAllHits: PID3DXBuffer; // Array of D3DXINTERSECTINFOs for all hits (not just closest)
- pCountOfHits: PDWord // Number of entries in AllHits array
- ): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXIntersectSubset}
- function D3DXSplitMesh(pMeshIn: ID3DXMesh; pAdjacencyIn: PDWord;
- MaxSize, Options: DWord;
- out pMeshesOut: DWord; out ppMeshArrayOut: ID3DXBuffer;
- ppAdjacencyArrayOut, ppFaceRemapArrayOut, ppVertRemapArrayOut: PID3DXBuffer
- ): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXSplitMesh}
- function D3DXIntersectTri(
- const p0: TD3DXVector3; // Triangle vertex 0 position
- const p1: TD3DXVector3; // Triangle vertex 1 position
- const p2: TD3DXVector3; // Triangle vertex 2 position
- const pRayPos: TD3DXVector3; // Ray origin
- const pRayDir: TD3DXVector3; // Ray direction
- out pU: Single; // Barycentric Hit Coordinates
- out pV: Single; // Barycentric Hit Coordinates
- out pDist: Single // Ray-Intersection Parameter Distance
- ): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXIntersectTri}
- function D3DXSphereBoundProbe(const pCenter: TD3DXVector3; Radius: Single;
- out pRayPosition, pRayDirection: TD3DXVector3): BOOL; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXSphereBoundProbe}
- function D3DXBoxBoundProbe(const pMin, pMax: TD3DXVector3;
- out pRayPosition, pRayDirection: TD3DXVector3): BOOL; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXBoxBoundProbe}
- type
- _D3DXERR = HResult;
- {$EXTERNALSYM _D3DXERR}
- {$IFDEF DXG_COMPAT}
- const
- MAKE_D3DHRESULT_R = MAKE_D3DHRESULT;
- {$ENDIF}
- const
- D3DXERR_CANNOTMODIFYINDEXBUFFER = HResult(MAKE_D3DHRESULT_R or 2900);
- {$EXTERNALSYM D3DXERR_CANNOTMODIFYINDEXBUFFER}
- D3DXERR_INVALIDMESH = HResult(MAKE_D3DHRESULT_R or 2901);
- {$EXTERNALSYM D3DXERR_INVALIDMESH}
- D3DXERR_CANNOTATTRSORT = HResult(MAKE_D3DHRESULT_R or 2902);
- {$EXTERNALSYM D3DXERR_CANNOTATTRSORT}
- D3DXERR_SKINNINGNOTSUPPORTED = HResult(MAKE_D3DHRESULT_R or 2903);
- {$EXTERNALSYM D3DXERR_SKINNINGNOTSUPPORTED}
- D3DXERR_TOOMANYINFLUENCES = HResult(MAKE_D3DHRESULT_R or 2904);
- {$EXTERNALSYM D3DXERR_TOOMANYINFLUENCES}
- D3DXERR_INVALIDDATA = HResult(MAKE_D3DHRESULT_R or 2905);
- {$EXTERNALSYM D3DXERR_INVALIDDATA}
- D3DXERR_LOADEDMESHASNODATA = HResult(MAKE_D3DHRESULT_R or 2906);
- {$EXTERNALSYM D3DXERR_LOADEDMESHASNODATA}
- const
- D3DX_COMP_TANGENT_NONE = $FFFFFFFF;
- {$EXTERNALSYM D3DX_COMP_TANGENT_NONE}
- function D3DXComputeTangent(InMesh: ID3DXMesh; TexStage: DWord;
- OutMesh: ID3DXMesh; TexStageUVec, TexStageVVec: DWord;
- Wrap: DWord; Adjacency: PDWord): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXComputeTangent}
- function D3DXConvertMeshSubsetToSingleStrip(MeshIn: ID3DXBaseMesh;
- AttribId: DWord; IBOptions: DWord;
- out ppIndexBuffer: IDirect3DIndexBuffer8; pNumIndices: PDWord
- ): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXConvertMeshSubsetToSingleStrip}
- function D3DXConvertMeshSubsetToStrips(MeshIn: ID3DXBaseMesh;
- AttribId: DWord; IBOptions: DWord;
- out ppIndexBuffer: IDirect3DIndexBuffer8; pNumIndices: PDWord;
- ppStripLengths: PID3DXBuffer; pNumStrips: PDWord): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXConvertMeshSubsetToStrips}
- ///////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) Microsoft Corporation. All Rights Reserved.
- //
- // File: d3dx8shapes.h
- // Content: D3DX simple shapes
- //
- ///////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////
- // Functions:
- ///////////////////////////////////////////////////////////////////////////
- //-------------------------------------------------------------------------
- // D3DXCreatePolygon:
- // ------------------
- // Creates a mesh containing an n-sided polygon. The polygon is centered
- // at the origin.
- //
- // Parameters:
- //
- // pDevice The D3D device with which the mesh is going to be used.
- // Length Length of each side.
- // Sides Number of sides the polygon has. (Must be >= 3)
- // ppMesh The mesh object which will be created
- // ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
- //-------------------------------------------------------------------------
- function D3DXCreatePolygon(ppDevice: IDirect3DDevice8;
- Length: Single;
- Sides: LongWord;
- out ppMesh: ID3DXMesh;
- ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreatePolygon}
- //-------------------------------------------------------------------------
- // D3DXCreateBox:
- // --------------
- // Creates a mesh containing an axis-aligned box. The box is centered at
- // the origin.
- //
- // Parameters:
- //
- // pDevice The D3D device with which the mesh is going to be used.
- // Width Width of box (along X-axis)
- // Height Height of box (along Y-axis)
- // Depth Depth of box (along Z-axis)
- // ppMesh The mesh object which will be created
- // ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
- //-------------------------------------------------------------------------
- function D3DXCreateBox(ppDevice: IDirect3DDevice8;
- Width,
- Height,
- Depth: Single;
- out ppMesh: ID3DXMesh;
- ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateBox}
- //-------------------------------------------------------------------------
- // D3DXCreateCylinder:
- // -------------------
- // Creates a mesh containing a cylinder. The generated cylinder is
- // centered at the origin, and its axis is aligned with the Z-axis.
- //
- // Parameters:
- //
- // pDevice The D3D device with which the mesh is going to be used.
- // Radius1 Radius at -Z end (should be >= 0.0f)
- // Radius2 Radius at +Z end (should be >= 0.0f)
- // Length Length of cylinder (along Z-axis)
- // Slices Number of slices about the main axis
- // Stacks Number of stacks along the main axis
- // ppMesh The mesh object which will be created
- // ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
- //-------------------------------------------------------------------------
- function D3DXCreateCylinder(ppDevice: IDirect3DDevice8;
- Radius1,
- Radius2,
- Length: Single;
- Slices,
- Stacks: LongWord;
- out ppMesh: ID3DXMesh;
- ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateCylinder}
- //-------------------------------------------------------------------------
- // D3DXCreateSphere:
- // -----------------
- // Creates a mesh containing a sphere. The sphere is centered at the
- // origin.
- //
- // Parameters:
- //
- // pDevice The D3D device with which the mesh is going to be used.
- // Radius Radius of the sphere (should be >= 0.0f)
- // Slices Number of slices about the main axis
- // Stacks Number of stacks along the main axis
- // ppMesh The mesh object which will be created
- // ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
- //-------------------------------------------------------------------------
- function D3DXCreateSphere(ppDevice: IDirect3DDevice8;
- Radius: Single;
- Slices,
- Stacks: LongWord;
- out ppMesh: ID3DXMesh;
- ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateSphere}
- //-------------------------------------------------------------------------
- // D3DXCreateTorus:
- // ----------------
- // Creates a mesh containing a torus. The generated torus is centered at
- // the origin, and its axis is aligned with the Z-axis.
- //
- // Parameters:
- //
- // pDevice The D3D device with which the mesh is going to be used.
- // InnerRadius Inner radius of the torus (should be >= 0.0f)
- // OuterRadius Outer radius of the torue (should be >= 0.0f)
- // Sides Number of sides in a cross-section (must be >= 3)
- // Rings Number of rings making up the torus (must be >= 3)
- // ppMesh The mesh object which will be created
- // ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
- //-------------------------------------------------------------------------
- function D3DXCreateTorus(ppDevice: IDirect3DDevice8;
- InnerRadius,
- OuterRadius: Single;
- Sides,
- Rings: LongWord;
- out ppMesh: ID3DXMesh;
- ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateTorus}
- //-------------------------------------------------------------------------
- // D3DXCreateTeapot:
- // -----------------
- // Creates a mesh containing a teapot.
- //
- // Parameters:
- //
- // pDevice The D3D device with which the mesh is going to be used.
- // ppMesh The mesh object which will be created
- // ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
- //-------------------------------------------------------------------------
- function D3DXCreateTeapot(ppDevice: IDirect3DDevice8;
- out ppMesh: ID3DXMesh;
- ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx8dll;
- {$EXTERNALSYM D3DXCreateTeapot}
- //-------------------------------------------------------------------------
- // D3DXCreateText:
- // ---------------
- // Creates a mesh containing the specified text using the font associated
- // with the device context.
- //
- // Parameters:
- //
- // pDevice The D3D device with which the mesh is going to be used.
- // hDC Device context, with desired font selected
- // pText Text to generate
- // Deviation Maximum chordal deviation from true font outlines
- // Extrusion Amount to extrude text in -Z direction
- // ppMesh The mesh object which will be created
- // pGlyphMetrics Address of buffer to receive glyph metric data (or NULL)
- //-------------------------------------------------------------------------
- function D3DXCreateTextA(ppDevice: IDirect3DDevice8;
- hDC: HDC;
- pText: PAnsiChar;
- Deviation: Single;
- Extrusion: Single;
- out ppMesh: ID3DXMesh;
- ppAdjacency: PID3DXBuffer;
- pGlyphMetrics: PGlyphMetricsFloat): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextA';
- {$EXTERNALSYM D3DXCreateTextA}
- function D3DXCreateTextW(ppDevice: IDirect3DDevice8;
- hDC: HDC;
- pText: PWideChar;
- Deviation: Single;
- Extrusion: Single;
- out ppMesh: ID3DXMesh;
- ppAdjacency: PID3DXBuffer;
- pGlyphMetrics: PGlyphMetricsFloat): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextW';
- {$EXTERNALSYM D3DXCreateTextW}
- function D3DXCreateText(ppDevice: IDirect3DDevice8;
- hDC: HDC;
- pText: PChar;
- Deviation: Single;
- Extrusion: Single;
- out ppMesh: ID3DXMesh;
- ppAdjacency: PID3DXBuffer;
- pGlyphMetrics: PGlyphMetricsFloat): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextA';
- {$EXTERNALSYM D3DXCreateText}