{******************************************************************************}
{* *}
{* 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�pers, 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�pers *}
{* *}
{******************************************************************************)
{ }
{ 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}
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
// File: d3dx8tex.h
// Content: D3DX texturing APIs
//
//////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------
// D3DX_FILTER flags:
// ------------------
//
// A valid filter must contain one of these values:
//
// D3DX_FILTER_NONE
// No scaling or filtering will take place. Pixels outside the bounds
// of the source image are assumed to be transparent black.
// D3DX_FILTER_POINT
// Each destination pixel is computed by sampling the nearest pixel
// from the source image.
// D3DX_FILTER_LINEAR
// Each destination pixel is computed by linearly interpolating between
// the nearest pixels in the source image. This filter works best
// when the scale on each axis is less than 2.
// D3DX_FILTER_TRIANGLE
// Every pixel in the source image contributes equally to the
// destination image. This is the slowest of all the filters.
// D3DX_FILTER_BOX
// Each pixel is computed by averaging a 2x2(x2) box pixels from
// the source image. Only works when the dimensions of the
// destination are half those of the source. (as with mip maps)
//
// And can be OR'd with any of these optional flags:
//
// D3DX_FILTER_MIRROR_U
// Indicates that pixels off the edge of the texture on the U-axis
// should be mirrored, not wraped.
// D3DX_FILTER_MIRROR_V
// Indicates that pixels off the edge of the texture on the V-axis
// should be mirrored, not wraped.
// D3DX_FILTER_MIRROR_W
// Indicates that pixels off the edge of the texture on the W-axis
// should be mirrored, not wraped.
// D3DX_FILTER_MIRROR
// Same as specifying D3DX_FILTER_MIRROR_U | D3DX_FILTER_MIRROR_V |
// D3DX_FILTER_MIRROR_V
// D3DX_FILTER_DITHER
// Dithers the resulting image.
//
//----------------------------------------------------------------------------
const
D3DX_FILTER_NONE = (1 shl 0);
{$EXTERNALSYM D3DX_FILTER_NONE}
D3DX_FILTER_POINT = (2 shl 0);
{$EXTERNALSYM D3DX_FILTER_POINT}
D3DX_FILTER_LINEAR = (3 shl 0);
{$EXTERNALSYM D3DX_FILTER_LINEAR}
D3DX_FILTER_TRIANGLE = (4 shl 0);
{$EXTERNALSYM D3DX_FILTER_TRIANGLE}
D3DX_FILTER_BOX = (5 shl 0);
{$EXTERNALSYM D3DX_FILTER_BOX}
D3DX_FILTER_MIRROR_U = (1 shl 16);
{$EXTERNALSYM D3DX_FILTER_MIRROR_U}
D3DX_FILTER_MIRROR_V = (2 shl 16);
{$EXTERNALSYM D3DX_FILTER_MIRROR_V}
D3DX_FILTER_MIRROR_W = (4 shl 16);
{$EXTERNALSYM D3DX_FILTER_MIRROR_W}
D3DX_FILTER_MIRROR = (7 shl 16);
{$EXTERNALSYM D3DX_FILTER_MIRROR}
D3DX_FILTER_DITHER = (8 shl 16);
{$EXTERNALSYM D3DX_FILTER_DITHER}
//----------------------------------------------------------------------------
// D3DX_NORMALMAP flags:
// ---------------------
// These flags are used to control how D3DXComputeNormalMap generates normal
// maps. Any number of these flags may be OR'd together in any combination.
//
// D3DX_NORMALMAP_MIRROR_U
// Indicates that pixels off the edge of the texture on the U-axis
// should be mirrored, not wraped.
// D3DX_NORMALMAP_MIRROR_V
// Indicates that pixels off the edge of the texture on the V-axis
// should be mirrored, not wraped.
// D3DX_NORMALMAP_MIRROR
// Same as specifying D3DX_NORMALMAP_MIRROR_U | D3DX_NORMALMAP_MIRROR_V
// D3DX_NORMALMAP_INVERTSIGN
// Inverts the direction of each normal
// D3DX_NORMALMAP_COMPUTE_OCCLUSION
// Compute the per pixel Occlusion term and encodes it into the alpha.
// An Alpha of 1 means that the pixel is not obscured in anyway, and
// an alpha of 0 would mean that the pixel is completly obscured.
//
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
const
D3DX_NORMALMAP_MIRROR_U = (1 shl 16);
{$EXTERNALSYM D3DX_NORMALMAP_MIRROR_U}
D3DX_NORMALMAP_MIRROR_V = (2 shl 16);
{$EXTERNALSYM D3DX_NORMALMAP_MIRROR_V}
D3DX_NORMALMAP_MIRROR = (3 shl 16);
{$EXTERNALSYM D3DX_NORMALMAP_MIRROR}
D3DX_NORMALMAP_INVERTSIGN = (8 shl 16);
{$EXTERNALSYM D3DX_NORMALMAP_INVERTSIGN}
D3DX_NORMALMAP_COMPUTE_OCCLUSION = (16 shl 16);
{$EXTERNALSYM D3DX_NORMALMAP_COMPUTE_OCCLUSION}
//----------------------------------------------------------------------------
// D3DX_CHANNEL flags:
// -------------------
// These flags are used by functions which operate on or more channels
// in a texture.
//
// D3DX_CHANNEL_RED
// Indicates the red channel should be used
// D3DX_CHANNEL_BLUE
// Indicates the blue channel should be used
// D3DX_CHANNEL_GREEN
// Indicates the green channel should be used
// D3DX_CHANNEL_ALPHA
// Indicates the alpha channel should be used
// D3DX_CHANNEL_LUMINANCE
// Indicates the luminaces of the red green and blue channels should be
// used.
//
//----------------------------------------------------------------------------
const
D3DX_CHANNEL_RED = (1 shl 0);
{$EXTERNALSYM D3DX_CHANNEL_RED}
D3DX_CHANNEL_BLUE = (1 shl 1);
{$EXTERNALSYM D3DX_CHANNEL_BLUE}
D3DX_CHANNEL_GREEN = (1 shl 2);
{$EXTERNALSYM D3DX_CHANNEL_GREEN}
D3DX_CHANNEL_ALPHA = (1 shl 3);
{$EXTERNALSYM D3DX_CHANNEL_ALPHA}
D3DX_CHANNEL_LUMINANCE = (1 shl 4);
{$EXTERNALSYM D3DX_CHANNEL_LUMINANCE}
//----------------------------------------------------------------------------
// D3DXIMAGE_FILEFORMAT:
// ---------------------
// This enum is used to describe supported image file formats.
//
//----------------------------------------------------------------------------
type
PD3DXImageFileFormat = ^TD3DXImageFileFormat;
_D3DXIMAGE_FILEFORMAT = (
D3DXIFF_BMP {= 0},
D3DXIFF_JPG {= 1},
D3DXIFF_TGA {= 2},
D3DXIFF_PNG {= 3},
D3DXIFF_DDS {= 4},
D3DXIFF_PPM {= 5},
D3DXIFF_DIB {= 6}
);
{$EXTERNALSYM _D3DXIMAGE_FILEFORMAT}
D3DXIMAGE_FILEFORMAT = _D3DXIMAGE_FILEFORMAT;
{$EXTERNALSYM D3DXIMAGE_FILEFORMAT}
TD3DXImageFileFormat = _D3DXIMAGE_FILEFORMAT;
//----------------------------------------------------------------------------
// LPD3DXFILL2D and LPD3DXFILL3D:
// ------------------------------
// Function types used by the texture fill functions.
//
// Parameters:
// pOut
// Pointer to a vector which the function uses to return its result.
// X,Y,Z,W will be mapped to R,G,B,A respectivly.
// pTexCoord
// Pointer to a vector containing the coordinates of the texel currently
// being evaluated. Textures and VolumeTexture texcoord components
// range from 0 to 1. CubeTexture texcoord component range from -1 to 1.
// pTexelSize
// Pointer to a vector containing the dimensions of the current texel.
// pData
// Pointer to user data.
//
//----------------------------------------------------------------------------
type
// typedef VOID (*LPD3DXFILL2D)(D3DXVECTOR4 *pOut, D3DXVECTOR2 *pTexCoord, D3DXVECTOR2 *pTexelSize, LPVOID pData);
LPD3DXFILL2D = procedure (out pOut: TD3DXVector4; const pTexCoord, pTexelSize: TD3DXVector2; var pData);
{$EXTERNALSYM LPD3DXFILL2D}
TD3DXFill2D = LPD3DXFILL2D;
// typedef VOID (*LPD3DXFILL3D)(D3DXVECTOR4 *pOut, D3DXVECTOR3 *pTexCoord, D3DXVECTOR3 *pTexelSize, LPVOID pData);
LPD3DXFILL3D = procedure (out pOut: TD3DXVector4; const pTexCoord, pTexelSize: TD3DXVector3; var pData);
{$EXTERNALSYM LPD3DXFILL3D}
TD3DXFill3D = LPD3DXFILL3D;
//----------------------------------------------------------------------------
// D3DXIMAGE_INFO:
// ---------------
// This structure is used to return a rough description of what the
// the original contents of an image file looked like.
//
// Width
// Width of original image in pixels
// Height
// Height of original image in pixels
// Depth
// Depth of original image in pixels
// MipLevels
// Number of mip levels in original image
// Format
// D3D format which most closely describes the data in original image
// ResourceType
// D3DRESOURCETYPE representing the type of texture stored in the file.
// D3DRTYPE_TEXTURE, D3DRTYPE_VOLUMETEXTURE, or D3DRTYPE_CUBETEXTURE.
// ImageFileFormat
// D3DXIMAGE_FILEFORMAT representing the format of the image file.
//
//----------------------------------------------------------------------------
type
PD3DXImageInfo = ^TD3DXImageInfo;
_D3DXIMAGE_INFO = packed record
Width: LongWord;
Height: LongWord;
Depth: LongWord;
MipLevels: LongWord;
Format: TD3DFormat;
ResourceType: TD3DResourceType;
ImageFileFormat: TD3DXImageFileFormat;
end;
{$EXTERNALSYM _D3DXIMAGE_INFO}
D3DXIMAGE_INFO = _D3DXIMAGE_INFO;
{$EXTERNALSYM D3DXIMAGE_INFO}
TD3DXImageInfo = _D3DXIMAGE_INFO;
//////////////////////////////////////////////////////////////////////////////
// Image File APIs ///////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------
// GetImageInfoFromFile/Resource:
// ------------------------------
// Fills in a D3DXIMAGE_INFO struct with information about an image file.
//
// Parameters:
// pSrcFile
// File name of the source image.
// pSrcModule
// Module where resource is located, or NULL for module associated
// with image the os used to create the current process.
// pSrcResource
// Resource name
// pSrcData
// Pointer to file in memory.
// SrcDataSize
// Size in bytes of file in memory.
// pSrcInfo
// Pointer to a D3DXIMAGE_INFO structure to be filled in with the
// description of the data in the source image file.
//
//----------------------------------------------------------------------------
function D3DXGetImageInfoFromFileA(
pSrcFile: PAnsiChar;
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromFileA';
{$EXTERNALSYM D3DXGetImageInfoFromFileA}
function D3DXGetImageInfoFromFileW(
pSrcFile: PWideChar;
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromFileW';
{$EXTERNALSYM D3DXGetImageInfoFromFileW}
function D3DXGetImageInfoFromFile(
pSrcFile: PChar;
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromFileA';
{$EXTERNALSYM D3DXGetImageInfoFromFile}
function D3DXGetImageInfoFromResourceA(
hSrcModule: HModule;
pSrcResource: PAnsiChar;
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromResourceA';
{$EXTERNALSYM D3DXGetImageInfoFromResourceA}
function D3DXGetImageInfoFromResourceW(
hSrcModule: HModule;
pSrcResource: PWideChar;
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromResourceW';
{$EXTERNALSYM D3DXGetImageInfoFromResourceW}
function D3DXGetImageInfoFromResource(
hSrcModule: HModule;
pSrcResource: PChar;
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXGetImageInfoFromResourceA';
{$EXTERNALSYM D3DXGetImageInfoFromResource}
function D3DXGetImageInfoFromFileInMemory(
const pSrcData;
SrcDataSize: LongWord;
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXGetImageInfoFromFileInMemory}
//////////////////////////////////////////////////////////////////////////////
// Load/Save Surface APIs ////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------
// D3DXLoadSurfaceFromFile/Resource:
// ---------------------------------
// Load surface from a file or resource
//
// Parameters:
// pDestSurface
// Destination surface, which will receive the image.
// pDestPalette
// Destination palette of 256 colors, or NULL
// pDestRect
// Destination rectangle, or NULL for entire surface
// pSrcFile
// File name of the source image.
// pSrcModule
// Module where resource is located, or NULL for module associated
// with image the os used to create the current process.
// pSrcResource
// Resource name
// pSrcData
// Pointer to file in memory.
// SrcDataSize
// Size in bytes of file in memory.
// pSrcRect
// Source rectangle, or NULL for entire image
// Filter
// D3DX_FILTER flags controlling how the image is filtered.
// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
// ColorKey
// Color to replace with transparent black, or 0 to disable colorkey.
// This is always a 32-bit ARGB color, independent of the source image
// format. Alpha is significant, and should usually be set to FF for
// opaque colorkeys. (ex. Opaque black == 0xff000000)
// pSrcInfo
// Pointer to a D3DXIMAGE_INFO structure to be filled in with the
// description of the data in the source image file, or NULL.
//
//----------------------------------------------------------------------------
function D3DXLoadSurfaceFromFileA(
pDestSurface: IDirect3DSurface8;
pDestPalette: PPaletteEntry;
pDestRect: PRect;
pSrcFile: PAnsiChar;
pSrcRect: PRect;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromFileA';
{$EXTERNALSYM D3DXLoadSurfaceFromFileA}
function D3DXLoadSurfaceFromFileW(
pDestSurface: IDirect3DSurface8;
pDestPalette: PPaletteEntry;
pDestRect: PRect;
pSrcFile: PWideChar;
pSrcRect: PRect;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromFileW';
{$EXTERNALSYM D3DXLoadSurfaceFromFileW}
function D3DXLoadSurfaceFromFile(
pDestSurface: IDirect3DSurface8;
pDestPalette: PPaletteEntry;
pDestRect: PRect;
pSrcFile: PChar;
pSrcRect: PRect;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromFileA';
{$EXTERNALSYM D3DXLoadSurfaceFromFile}
function D3DXLoadSurfaceFromResourceA(
pDestSurface: IDirect3DSurface8;
pDestPalette: PPaletteEntry;
pDestRect: PRect;
hSrcModule: HModule;
pSrcResource: PAnsiChar;
pSrcRect: PRect;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromResourceA';
{$EXTERNALSYM D3DXLoadSurfaceFromResourceA}
function D3DXLoadSurfaceFromResourceW(
pDestSurface: IDirect3DSurface8;
pDestPalette: PPaletteEntry;
pDestRect: PRect;
hSrcModule: HModule;
pSrcResource: PWideChar;
pSrcRect: PRect;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromResourceW';
{$EXTERNALSYM D3DXLoadSurfaceFromResourceW}
function D3DXLoadSurfaceFromResource(
pDestSurface: IDirect3DSurface8;
pDestPalette: PPaletteEntry;
pDestRect: PRect;
hSrcModule: HModule;
pSrcResource: PChar;
pSrcRect: PRect;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadSurfaceFromResourceA';
{$EXTERNALSYM D3DXLoadSurfaceFromResource}
function D3DXLoadSurfaceFromFileInMemory(
pDestSurface: IDirect3DSurface8;
pDestPalette: PPaletteEntry;
pDestRect: PRect;
const pSrcData;
SrcDataSize: LongWord;
pSrcRect: PRect;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXLoadSurfaceFromFileInMemory}
//----------------------------------------------------------------------------
// D3DXLoadSurfaceFromSurface:
// ---------------------------
// Load surface from another surface (with color conversion)
//
// Parameters:
// pDestSurface
// Destination surface, which will receive the image.
// pDestPalette
// Destination palette of 256 colors, or NULL
// pDestRect
// Destination rectangle, or NULL for entire surface
// pSrcSurface
// Source surface
// pSrcPalette
// Source palette of 256 colors, or NULL
// pSrcRect
// Source rectangle, or NULL for entire surface
// Filter
// D3DX_FILTER flags controlling how the image is filtered.
// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
// ColorKey
// Color to replace with transparent black, or 0 to disable colorkey.
// This is always a 32-bit ARGB color, independent of the source image
// format. Alpha is significant, and should usually be set to FF for
// opaque colorkeys. (ex. Opaque black == 0xff000000)
//
//----------------------------------------------------------------------------
function D3DXLoadSurfaceFromSurface(
pDestSurface: IDirect3DSurface8;
pDestPalette: PPaletteEntry;
pDestRect: PRect;
pSrcSurface: IDirect3DSurface8;
pSrcPalette: PPaletteEntry;
pSrcRect: PRect;
Filter: DWord;
ColorKey: TD3DColor): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXLoadSurfaceFromSurface}
//----------------------------------------------------------------------------
// D3DXLoadSurfaceFromMemory:
// ---------------------------
// Load surface from memory.
//
// Parameters:
// pDestSurface
// Destination surface, which will receive the image.
// pDestPalette
// Destination palette of 256 colors, or NULL
// pDestRect
// Destination rectangle, or NULL for entire surface
// pSrcMemory
// Pointer to the top-left corner of the source image in memory
// SrcFormat
// Pixel format of the source image.
// SrcPitch
// Pitch of source image, in bytes. For DXT formats, this number
// should represent the width of one row of cells, in bytes.
// pSrcPalette
// Source palette of 256 colors, or NULL
// pSrcRect
// Source rectangle.
// Filter
// D3DX_FILTER flags controlling how the image is filtered.
// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
// ColorKey
// Color to replace with transparent black, or 0 to disable colorkey.
// This is always a 32-bit ARGB color, independent of the source image
// format. Alpha is significant, and should usually be set to FF for
// opaque colorkeys. (ex. Opaque black == 0xff000000)
//
//----------------------------------------------------------------------------
function D3DXLoadSurfaceFromMemory(
pDestSurface: IDirect3DSurface8;
pDestPalette: PPaletteEntry;
pDestRect: PRect;
const pSrcMemory;
SrcFormat: TD3DFormat;
SrcPitch: LongWord;
pSrcPalette: PPaletteEntry;
pSrcRect: PRect;
Filter: DWord;
ColorKey: TD3DColor): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXLoadSurfaceFromMemory}
//----------------------------------------------------------------------------
// D3DXSaveSurfaceToFile:
// ----------------------
// Save a surface to a image file.
//
// Parameters:
// pDestFile
// File name of the destination file
// DestFormat
// D3DXIMAGE_FILEFORMAT specifying file format to use when saving.
// pSrcSurface
// Source surface, containing the image to be saved
// pSrcPalette
// Source palette of 256 colors, or NULL
// pSrcRect
// Source rectangle, or NULL for the entire image
//
//----------------------------------------------------------------------------
function D3DXSaveSurfaceToFileA(
pDestFile: PAnsiChar;
DestFormat: TD3DXImageFileFormat;
pSrcSurface: IDirect3DSurface8;
pSrcPalette: PPaletteEntry;
pSrcRect: PRect): HResult; stdcall; external d3dx8dll name 'D3DXSaveSurfaceToFileA';
{$EXTERNALSYM D3DXSaveSurfaceToFileA}
function D3DXSaveSurfaceToFileW(
pDestFile: PWideChar;
DestFormat: TD3DXImageFileFormat;
pSrcSurface: IDirect3DSurface8;
pSrcPalette: PPaletteEntry;
pSrcRect: PRect): HResult; stdcall; external d3dx8dll name 'D3DXSaveSurfaceToFileW';
{$EXTERNALSYM D3DXSaveSurfaceToFileW}
function D3DXSaveSurfaceToFile(
pDestFile: PChar;
DestFormat: TD3DXImageFileFormat;
pSrcSurface: IDirect3DSurface8;
pSrcPalette: PPaletteEntry;
pSrcRect: PRect): HResult; stdcall; external d3dx8dll name 'D3DXSaveSurfaceToFileA';
{$EXTERNALSYM D3DXSaveSurfaceToFile}
//////////////////////////////////////////////////////////////////////////////
// Load/Save Volume APIs /////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------
// D3DXLoadVolumeFromFile/Resource:
// --------------------------------
// Load volume from a file or resource
//
// Parameters:
// pDestVolume
// Destination volume, which will receive the image.
// pDestPalette
// Destination palette of 256 colors, or NULL
// pDestBox
// Destination box, or NULL for entire volume
// pSrcFile
// File name of the source image.
// pSrcModule
// Module where resource is located, or NULL for module associated
// with image the os used to create the current process.
// pSrcResource
// Resource name
// pSrcData
// Pointer to file in memory.
// SrcDataSize
// Size in bytes of file in memory.
// pSrcBox
// Source box, or NULL for entire image
// Filter
// D3DX_FILTER flags controlling how the image is filtered.
// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
// ColorKey
// Color to replace with transparent black, or 0 to disable colorkey.
// This is always a 32-bit ARGB color, independent of the source image
// format. Alpha is significant, and should usually be set to FF for
// opaque colorkeys. (ex. Opaque black == 0xff000000)
// pSrcInfo
// Pointer to a D3DXIMAGE_INFO structure to be filled in with the
// description of the data in the source image file, or NULL.
//
//----------------------------------------------------------------------------
function D3DXLoadVolumeFromFileA(
pDestVolume: IDirect3DVolume8;
pDestPalette: PPaletteEntry;
pDestBox: TD3DBox;
pSrcFile: PAnsiChar;
pSrcBox: TD3DBox;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromFileA';
{$EXTERNALSYM D3DXLoadVolumeFromFileA}
function D3DXLoadVolumeFromFileW(
pDestVolume: IDirect3DVolume8;
pDestPalette: PPaletteEntry;
pDestBox: TD3DBox;
pSrcFile: PWideChar;
pSrcBox: TD3DBox;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromFileW';
{$EXTERNALSYM D3DXLoadVolumeFromFileW}
function D3DXLoadVolumeFromFile(
pDestVolume: IDirect3DVolume8;
pDestPalette: PPaletteEntry;
pDestBox: TD3DBox;
pSrcFile: PChar;
pSrcBox: TD3DBox;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromFileA';
{$EXTERNALSYM D3DXLoadVolumeFromFile}
function D3DXLoadVolumeFromResourceA(
pDestVolume: IDirect3DVolume8;
pDestPalette: PPaletteEntry;
pDestBox: TD3DBox;
hSrcModule: HModule;
pSrcResource: PAnsiChar;
pSrcBox: TD3DBox;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromResourceA';
{$EXTERNALSYM D3DXLoadVolumeFromResourceA}
function D3DXLoadVolumeFromResourceW(
pDestVolume: IDirect3DVolume8;
pDestPalette: PPaletteEntry;
pDestBox: TD3DBox;
hSrcModule: HModule;
pSrcResource: PWideChar;
pSrcBox: TD3DBox;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromResourceW';
{$EXTERNALSYM D3DXLoadVolumeFromResourceW}
function D3DXLoadVolumeFromResource(
pDestVolume: IDirect3DVolume8;
pDestPalette: PPaletteEntry;
pDestBox: TD3DBox;
hSrcModule: HModule;
pSrcResource: PChar;
pSrcBox: TD3DBox;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll name 'D3DXLoadVolumeFromResourceA';
{$EXTERNALSYM D3DXLoadVolumeFromResource}
function D3DXLoadVolumeFromFileInMemory(
pDestVolume: IDirect3DVolume8;
pDestPalette: PPaletteEntry;
pDestBox: TD3DBox;
const pSrcData;
SrcDataSize: LongWord;
pSrcBox: TD3DBox;
Filter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXLoadVolumeFromFileInMemory}
//----------------------------------------------------------------------------
// D3DXLoadVolumeFromVolume:
// ---------------------------
// Load volume from another volume (with color conversion)
//
// Parameters:
// pDestVolume
// Destination volume, which will receive the image.
// pDestPalette
// Destination palette of 256 colors, or NULL
// pDestBox
// Destination box, or NULL for entire volume
// pSrcVolume
// Source volume
// pSrcPalette
// Source palette of 256 colors, or NULL
// pSrcBox
// Source box, or NULL for entire volume
// Filter
// D3DX_FILTER flags controlling how the image is filtered.
// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
// ColorKey
// Color to replace with transparent black, or 0 to disable colorkey.
// This is always a 32-bit ARGB color, independent of the source image
// format. Alpha is significant, and should usually be set to FF for
// opaque colorkeys. (ex. Opaque black == 0xff000000)
//
//----------------------------------------------------------------------------
function D3DXLoadVolumeFromVolume(
pDestVolume: IDirect3DVolume8;
pDestPalette: PPaletteEntry;
pDestBox: TD3DBox;
pSrcVolume: IDirect3DVolume8;
pSrcPalette: PPaletteEntry;
pSrcBox: TD3DBox;
Filter: DWord;
ColorKey: TD3DColor): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXLoadVolumeFromVolume}
//----------------------------------------------------------------------------
// D3DXLoadVolumeFromMemory:
// ---------------------------
// Load volume from memory.
//
// Parameters:
// pDestVolume
// Destination volume, which will receive the image.
// pDestPalette
// Destination palette of 256 colors, or NULL
// pDestBox
// Destination box, or NULL for entire volume
// pSrcMemory
// Pointer to the top-left corner of the source volume in memory
// SrcFormat
// Pixel format of the source volume.
// SrcRowPitch
// Pitch of source image, in bytes. For DXT formats, this number
// should represent the size of one row of cells, in bytes.
// SrcSlicePitch
// Pitch of source image, in bytes. For DXT formats, this number
// should represent the size of one slice of cells, in bytes.
// pSrcPalette
// Source palette of 256 colors, or NULL
// pSrcBox
// Source box.
// Filter
// D3DX_FILTER flags controlling how the image is filtered.
// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
// ColorKey
// Color to replace with transparent black, or 0 to disable colorkey.
// This is always a 32-bit ARGB color, independent of the source image
// format. Alpha is significant, and should usually be set to FF for
// opaque colorkeys. (ex. Opaque black == 0xff000000)
//
//----------------------------------------------------------------------------
function D3DXLoadVolumeFromMemory(
pDestVolume: IDirect3DVolume8;
pDestPalette: PPaletteEntry;
pDestBox: TD3DBox;
const pSrcMemory;
SrcFormat: TD3DFormat;
SrcRowPitch: LongWord;
SrcSlicePitch: LongWord;
pSrcPalette: PPaletteEntry;
pSrcBox: TD3DBox;
Filter: DWord;
ColorKey: TD3DColor): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXLoadVolumeFromMemory}
//----------------------------------------------------------------------------
// D3DXSaveVolumeToFile:
// ---------------------
// Save a volume to a image file.
//
// Parameters:
// pDestFile
// File name of the destination file
// DestFormat
// D3DXIMAGE_FILEFORMAT specifying file format to use when saving.
// pSrcVolume
// Source volume, containing the image to be saved
// pSrcPalette
// Source palette of 256 colors, or NULL
// pSrcBox
// Source box, or NULL for the entire volume
//
//----------------------------------------------------------------------------
function D3DXSaveVolumeToFileA(
pDestFile: PAnsiChar;
DestFormat: TD3DXImageFileFormat;
pSrcVolume: IDirect3DVolume8;
pSrcPalette: PPaletteEntry;
pSrcBox: TD3DBox): HResult; stdcall; external d3dx8dll name 'D3DXSaveVolumeToFileA';
{$EXTERNALSYM D3DXSaveVolumeToFileA}
function D3DXSaveVolumeToFileW(
pDestFile: PWideChar;
DestFormat: TD3DXImageFileFormat;
pSrcVolume: IDirect3DVolume8;
pSrcPalette: PPaletteEntry;
pSrcBox: TD3DBox): HResult; stdcall; external d3dx8dll name 'D3DXSaveVolumeToFileW';
{$EXTERNALSYM D3DXSaveVolumeToFileW}
function D3DXSaveVolumeToFile(
pDestFile: PChar;
DestFormat: TD3DXImageFileFormat;
pSrcVolume: IDirect3DVolume8;
pSrcPalette: PPaletteEntry;
pSrcBox: TD3DBox): HResult; stdcall; external d3dx8dll name 'D3DXSaveVolumeToFileA';
{$EXTERNALSYM D3DXSaveVolumeToFile}
//////////////////////////////////////////////////////////////////////////////
// Create/Save Texture APIs //////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------
// D3DXCheckTextureRequirements:
// -----------------------------
// Checks texture creation parameters. If parameters are invalid, this
// function returns corrected parameters.
//
// Parameters:
//
// pDevice
// The D3D device to be used
// pWidth, pHeight, pDepth, pSize
// Desired size in pixels, or NULL. Returns corrected size.
// pNumMipLevels
// Number of desired mipmap levels, or NULL. Returns corrected number.
// Usage
// Texture usage flags
// pFormat
// Desired pixel format, or NULL. Returns corrected format.
// Pool
// Memory pool to be used to create texture
//
//----------------------------------------------------------------------------
function D3DXCheckTextureRequirements(
pDevice: IDirect3DDevice8;
pWidth: PLongWord;
pHeight: PLongWord;
pNumMipLevels: PLongWord;
Usage: DWord;
pFormat: PD3DFormat;
Pool: TD3DPool): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCheckTextureRequirements}
function D3DXCheckCubeTextureRequirements(
pDevice: IDirect3DDevice8;
pSize: PLongWord;
pNumMipLevels: PLongWord;
Usage: DWord;
pFormat: PD3DFormat;
Pool: TD3DPool): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCheckCubeTextureRequirements}
function D3DXCheckVolumeTextureRequirements(
pDevice: IDirect3DDevice8;
pWidth: PLongWord;
pHeight: PLongWord;
pDepth: PLongWord;
pNumMipLevels: PLongWord;
Usage: DWord;
pFormat: PD3DFormat;
Pool: TD3DPool): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCheckVolumeTextureRequirements}
//----------------------------------------------------------------------------
// D3DXCreateTexture:
// ------------------
// Create an empty texture
//
// Parameters:
//
// pDevice
// The D3D device with which the texture is going to be used.
// Width, Height, Depth, Size
// size in pixels; these must be non-zero
// MipLevels
// number of mip levels desired; if zero or D3DX_DEFAULT, a complete
// mipmap chain will be created.
// Usage
// Texture usage flags
// Format
// Pixel format.
// Pool
// Memory pool to be used to create texture
// ppTexture, ppCubeTexture, ppVolumeTexture
// The texture object that will be created
//
//----------------------------------------------------------------------------
function D3DXCreateTexture(
Device: IDirect3DDevice8;
Width: LongWord;
Height: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCreateTexture}
function D3DXCreateCubeTexture(
Device: IDirect3DDevice8;
Size: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCreateCubeTexture}
function D3DXCreateVolumeTexture(
Device: IDirect3DDevice8;
Width: LongWord;
Height: LongWord;
Depth: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCreateVolumeTexture}
//----------------------------------------------------------------------------
// D3DXCreateTextureFromFile/Resource:
// -----------------------------------
// Create a texture object from a file or resource.
//
// Parameters:
//
// pDevice
// The D3D device with which the texture is going to be used.
// pSrcFile
// File name.
// hSrcModule
// Module handle. if NULL, current module will be used.
// pSrcResource
// Resource name in module
// pvSrcData
// Pointer to file in memory.
// SrcDataSize
// Size in bytes of file in memory.
// Width, Height, Depth, Size
// Size in pixels; if zero or D3DX_DEFAULT, the size will be taken
// from the file.
// MipLevels
// Number of mip levels; if zero or D3DX_DEFAULT, a complete mipmap
// chain will be created.
// Usage
// Texture usage flags
// Format
// Desired pixel format. If D3DFMT_UNKNOWN, the format will be
// taken from the file.
// Pool
// Memory pool to be used to create texture
// Filter
// D3DX_FILTER flags controlling how the image is filtered.
// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE.
// MipFilter
// D3DX_FILTER flags controlling how each miplevel is filtered.
// Or D3DX_DEFAULT for D3DX_FILTER_BOX,
// ColorKey
// Color to replace with transparent black, or 0 to disable colorkey.
// This is always a 32-bit ARGB color, independent of the source image
// format. Alpha is significant, and should usually be set to FF for
// opaque colorkeys. (ex. Opaque black == 0xff000000)
// pSrcInfo
// Pointer to a D3DXIMAGE_INFO structure to be filled in with the
// description of the data in the source image file, or NULL.
// pPalette
// 256 color palette to be filled in, or NULL
// ppTexture, ppCubeTexture, ppVolumeTexture
// The texture object that will be created
//
//----------------------------------------------------------------------------
// FromFile
function D3DXCreateTextureFromFileA(
Device: IDirect3DDevice8;
pSrcFile: PAnsiChar;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileA';
{$EXTERNALSYM D3DXCreateTextureFromFileA}
function D3DXCreateTextureFromFileW(
Device: IDirect3DDevice8;
pSrcFile: PWideChar;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileW';
{$EXTERNALSYM D3DXCreateTextureFromFileW}
function D3DXCreateTextureFromFile(
Device: IDirect3DDevice8;
pSrcFile: PChar;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileA';
{$EXTERNALSYM D3DXCreateTextureFromFile}
function D3DXCreateCubeTextureFromFileA(
Device: IDirect3DDevice8;
pSrcFile: PAnsiChar;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileA';
{$EXTERNALSYM D3DXCreateCubeTextureFromFileA}
function D3DXCreateCubeTextureFromFileW(
Device: IDirect3DDevice8;
pSrcFile: PWideChar;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileW';
{$EXTERNALSYM D3DXCreateCubeTextureFromFileW}
function D3DXCreateCubeTextureFromFile(
Device: IDirect3DDevice8;
pSrcFile: PChar;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileA';
{$EXTERNALSYM D3DXCreateCubeTextureFromFile}
function D3DXCreateVolumeTextureFromFileA(
Device: IDirect3DDevice8;
pSrcFile: PAnsiChar;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileA';
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileA}
function D3DXCreateVolumeTextureFromFileW(
Device: IDirect3DDevice8;
pSrcFile: PWideChar;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileW';
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileW}
function D3DXCreateVolumeTextureFromFile(
Device: IDirect3DDevice8;
pSrcFile: PChar;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileA';
{$EXTERNALSYM D3DXCreateVolumeTextureFromFile}
// FromResource
function D3DXCreateTextureFromResourceA(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PAnsiChar;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceA';
{$EXTERNALSYM D3DXCreateTextureFromResourceA}
function D3DXCreateTextureFromResourceW(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PWideChar;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceW';
{$EXTERNALSYM D3DXCreateTextureFromResourceW}
function D3DXCreateTextureFromResource(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PChar;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceA';
{$EXTERNALSYM D3DXCreateTextureFromResource}
function D3DXCreateCubeTextureFromResourceA(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PAnsiChar;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceA';
{$EXTERNALSYM D3DXCreateCubeTextureFromResourceA}
function D3DXCreateCubeTextureFromResourceW(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PWideChar;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceW';
{$EXTERNALSYM D3DXCreateCubeTextureFromResourceW}
function D3DXCreateCubeTextureFromResource(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PChar;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceA';
{$EXTERNALSYM D3DXCreateCubeTextureFromResource}
function D3DXCreateVolumeTextureFromResourceA(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PAnsiChar;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceA';
{$EXTERNALSYM D3DXCreateVolumeTextureFromResourceA}
function D3DXCreateVolumeTextureFromResourceW(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PWideChar;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceW';
{$EXTERNALSYM D3DXCreateVolumeTextureFromResourceW}
function D3DXCreateVolumeTextureFromResource(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PChar;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceA';
{$EXTERNALSYM D3DXCreateVolumeTextureFromResource}
// FromFileEx
function D3DXCreateTextureFromFileExA(
Device: IDirect3DDevice8;
pSrcFile: PAnsiChar;
Width: LongWord;
Height: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileExA';
{$EXTERNALSYM D3DXCreateTextureFromFileExA}
function D3DXCreateTextureFromFileExW(
Device: IDirect3DDevice8;
pSrcFile: PWideChar;
Width: LongWord;
Height: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileExW';
{$EXTERNALSYM D3DXCreateTextureFromFileExW}
function D3DXCreateTextureFromFileEx(
Device: IDirect3DDevice8;
pSrcFile: PChar;
Width: LongWord;
Height: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromFileExA';
{$EXTERNALSYM D3DXCreateTextureFromFileEx}
function D3DXCreateCubeTextureFromFileExA(
Device: IDirect3DDevice8;
pSrcFile: PAnsiChar;
Size: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileExA';
{$EXTERNALSYM D3DXCreateCubeTextureFromFileExA}
function D3DXCreateCubeTextureFromFileExW(
Device: IDirect3DDevice8;
pSrcFile: PWideChar;
Size: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileExW';
{$EXTERNALSYM D3DXCreateCubeTextureFromFileExW}
function D3DXCreateCubeTextureFromFileEx(
Device: IDirect3DDevice8;
pSrcFile: PChar;
Size: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromFileExA';
{$EXTERNALSYM D3DXCreateCubeTextureFromFileEx}
function D3DXCreateVolumeTextureFromFileExA(
Device: IDirect3DDevice8;
pSrcFile: PAnsiChar;
Width: LongWord;
Height: LongWord;
Depth: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileExA';
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileExA}
function D3DXCreateVolumeTextureFromFileExW(
Device: IDirect3DDevice8;
pSrcFile: PWideChar;
Width: LongWord;
Height: LongWord;
Depth: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileExW';
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileExW}
function D3DXCreateVolumeTextureFromFileEx(
Device: IDirect3DDevice8;
pSrcFile: PChar;
Width: LongWord;
Height: LongWord;
Depth: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromFileExA';
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileEx}
// FromResourceEx
function D3DXCreateTextureFromResourceExA(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PAnsiChar;
Width: LongWord;
Height: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceExA';
{$EXTERNALSYM D3DXCreateTextureFromResourceExA}
function D3DXCreateTextureFromResourceExW(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PWideChar;
Width: LongWord;
Height: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceExW';
{$EXTERNALSYM D3DXCreateTextureFromResourceExW}
function D3DXCreateTextureFromResourceEx(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PChar;
Width: LongWord;
Height: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateTextureFromResourceExA';
{$EXTERNALSYM D3DXCreateTextureFromResourceEx}
function D3DXCreateCubeTextureFromResourceExA(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PAnsiChar;
Size: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceExA';
{$EXTERNALSYM D3DXCreateCubeTextureFromResourceExA}
function D3DXCreateCubeTextureFromResourceExW(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PWideChar;
Size: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceExW';
{$EXTERNALSYM D3DXCreateCubeTextureFromResourceExW}
function D3DXCreateCubeTextureFromResourceEx(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PChar;
Size: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateCubeTextureFromResourceExA';
{$EXTERNALSYM D3DXCreateCubeTextureFromResourceEx}
function D3DXCreateVolumeTextureFromResourceExA(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PAnsiChar;
Width: LongWord;
Height: LongWord;
Depth: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceExA';
{$EXTERNALSYM D3DXCreateVolumeTextureFromResourceExA}
function D3DXCreateVolumeTextureFromResourceExW(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PWideChar;
Width: LongWord;
Height: LongWord;
Depth: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceExW';
{$EXTERNALSYM D3DXCreateVolumeTextureFromResourceExW}
function D3DXCreateVolumeTextureFromResourceEx(
Device: IDirect3DDevice8;
hSrcModule: HModule;
pSrcResource: PChar;
Width: LongWord;
Height: LongWord;
Depth: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll name 'D3DXCreateVolumeTextureFromResourceExA';
{$EXTERNALSYM D3DXCreateVolumeTextureFromResourceEx}
// FromFileInMemory
function D3DXCreateTextureFromFileInMemory(
Device: IDirect3DDevice8;
const pSrcData;
SrcDataSize: LongWord;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCreateTextureFromFileInMemory}
function D3DXCreateCubeTextureFromFileInMemory(
Device: IDirect3DDevice8;
const pSrcData;
SrcDataSize: LongWord;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCreateCubeTextureFromFileInMemory}
function D3DXCreateVolumeTextureFromFileInMemory(
Device: IDirect3DDevice8;
const pSrcData;
SrcDataSize: LongWord;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileInMemory}
// FromFileInMemoryEx
function D3DXCreateTextureFromFileInMemoryEx(
Device: IDirect3DDevice8;
const pSrcData;
SrcDataSize: LongWord;
Width: LongWord;
Height: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppTexture: IDirect3DTexture8): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCreateTextureFromFileInMemoryEx}
function D3DXCreateCubeTextureFromFileInMemoryEx(
Device: IDirect3DDevice8;
const pSrcData;
SrcDataSize: LongWord;
Size: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppCubeTexture: IDirect3DCubeTexture8): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCreateCubeTextureFromFileInMemoryEx}
function D3DXCreateVolumeTextureFromFileInMemoryEx(
Device: IDirect3DDevice8;
const pSrcData;
SrcDataSize: LongWord;
Width: LongWord;
Height: LongWord;
Depth: LongWord;
MipLevels: LongWord;
Usage: DWord;
Format: TD3DFormat;
Pool: TD3DPool;
Filter: DWord;
MipFilter: DWord;
ColorKey: TD3DColor;
pSrcInfo: PD3DXImageInfo;
pPalette: PPaletteEntry;
out ppVolumeTexture: IDirect3DVolumeTexture8): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileInMemoryEx}
//----------------------------------------------------------------------------
// D3DXSaveTextureToFile:
// ----------------------
// Save a texture to a file.
//
// Parameters:
// pDestFile
// File name of the destination file
// DestFormat
// D3DXIMAGE_FILEFORMAT specifying file format to use when saving.
// pSrcTexture
// Source texture, containing the image to be saved
// pSrcPalette
// Source palette of 256 colors, or NULL
//
//----------------------------------------------------------------------------
function D3DXSaveTextureToFileA(
pDestFile: PAnsiChar;
DestFormat: TD3DXImageFileFormat;
pSrcTexture: IDirect3DBaseTexture8;
pSrcPalette: PPaletteEntry): HResult; stdcall; external d3dx8dll name 'D3DXSaveTextureToFileA';
{$EXTERNALSYM D3DXSaveTextureToFileA}
function D3DXSaveTextureToFileW(
pDestFile: PWideChar;
DestFormat: TD3DXImageFileFormat;
pSrcTexture: IDirect3DBaseTexture8;
pSrcPalette: PPaletteEntry): HResult; stdcall; external d3dx8dll name 'D3DXSaveTextureToFileW';
{$EXTERNALSYM D3DXSaveTextureToFileW}
function D3DXSaveTextureToFile(
pDestFile: PChar;
DestFormat: TD3DXImageFileFormat;
pSrcTexture: IDirect3DBaseTexture8;
pSrcPalette: PPaletteEntry): HResult; stdcall; external d3dx8dll name 'D3DXSaveTextureToFileA';
{$EXTERNALSYM D3DXSaveTextureToFile}
//////////////////////////////////////////////////////////////////////////////
// Misc Texture APIs /////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------
// D3DXFilterTexture:
// ------------------
// Filters mipmaps levels of a texture.
//
// Parameters:
// pBaseTexture
// The texture object to be filtered
// pPalette
// 256 color palette to be used, or NULL for non-palettized formats
// SrcLevel
// The level whose image is used to generate the subsequent levels.
// Filter
// D3DX_FILTER flags controlling how each miplevel is filtered.
// Or D3DX_DEFAULT for D3DX_FILTER_BOX,
//
//-------------------------------------------------------------------------
function D3DXFilterTexture(
pTexture: IDirect3DTexture8;
pPalette: PPaletteEntry;
SrcLevel: LongWord;
Filter: DWord): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXFilterTexture}
// #define D3DXFilterCubeTexture D3DXFilterTexture
// In Pascal this mapped to DLL-exported "D3DXFilterTexture" function
function D3DXFilterCubeTexture(
pTexture: IDirect3DCubeTexture8;
pPalette: PPaletteEntry;
SrcLevel: LongWord;
Filter: DWord): HResult; stdcall; external d3dx8dll name 'D3DXFilterTexture';
{$EXTERNALSYM D3DXFilterCubeTexture}
// #define D3DXFilterVolumeTexture D3DXFilterTexture
// In Pascal this mapped to DLL-exported "D3DXFilterTexture" function
function D3DXFilterVolumeTexture(
pTexture: IDirect3DVolumeTexture8;
pPalette: PPaletteEntry;
SrcLevel: LongWord;
Filter: DWord): HResult; stdcall; external d3dx8dll name 'D3DXFilterTexture';
{$EXTERNALSYM D3DXFilterVolumeTexture}
//----------------------------------------------------------------------------
// D3DXFillTexture:
// ----------------
// Uses a user provided function to fill each texel of each mip level of a
// given texture.
//
// Paramters:
// pTexture, pCubeTexture, pVolumeTexture
// Pointer to the texture to be filled.
// pFunction
// Pointer to user provided evalutor function which will be used to
// compute the value of each texel.
// pData
// Pointer to an arbitrary block of user defined data. This pointer
// will be passed to the function provided in pFunction
//-----------------------------------------------------------------------------
function D3DXFillTexture(
pTexture: IDirect3DTexture8;
pFunction: TD3DXFill2D;
const pData): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXFillTexture}
function D3DXFillCubeTexture(
pCubeTexture: IDirect3DCubeTexture8;
pFunction: TD3DXFill2D;
const pData): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXFillCubeTexture}
function D3DXFillVolumeTexture(
pVolumeTexture: IDirect3DVolumeTexture8;
pFunction: TD3DXFill3D;
const pData): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXFillVolumeTexture}
//----------------------------------------------------------------------------
// D3DXComputeNormalMap:
// ---------------------
// Converts a height map into a normal map. The (x,y,z) components of each
// normal are mapped to the (r,g,b) channels of the output texture.
//
// Parameters
// pTexture
// Pointer to the destination texture
// pSrcTexture
// Pointer to the source heightmap texture
// pSrcPalette
// Source palette of 256 colors, or NULL
// Flags
// D3DX_NORMALMAP flags
// Channel
// D3DX_CHANNEL specifying source of height information
// Amplitude
// The constant value which the height information is multiplied by.
//---------------------------------------------------------------------------
function D3DXComputeNormalMap(
pTexture: IDirect3DTexture8;
pSrcTexture: IDirect3DTexture8;
pSrcPalette: PPaletteEntry;
Flags: DWord;
Channel: DWord;
Amplitude: Single): HResult; stdcall; external d3dx8dll;
{$EXTERNALSYM D3DXComputeNormalMap}
//********************************************************************
// Introduced types for compatibility with "REVISED" D3DX8.pas translation
// by Ampaze (Tim Baumgarten) from www.Delphi-Jedi.org/DelphiGraphics
type
PD3DXEffect_Desc = PD3DXEffectDesc;
PD3DXImage_Info = PD3DXImageInfo;
PD3DXParameter_Desc = PD3DXParameterDesc;
PD3DXPass_Desc = PD3DXPassDesc;
PD3DXRTE_Desc = PD3DXRTEDesc;
PD3DXRTS_Desc = PD3DXRTSDesc;
PD3DXTechnique_Desc = PD3DXTechniqueDesc;
TD3DXEffect_Desc = TD3DXEffectDesc;
TD3DXImage_Info = TD3DXImageInfo;
TD3DXParameter_Desc = TD3DXParameterDesc;
TD3DXPass_Desc = TD3DXPassDesc;
TD3DXRTE_Desc = TD3DXRTEDesc;
TD3DXRTS_Desc = TD3DXRTSDesc;
TD3DXTechnique_Desc = TD3DXTechniqueDesc;
PD3DXImage_FileFormat = PD3DXImageFileFormat;
TD3DXImage_FileFormat = TD3DXImageFileFormat;
(*$HPPEMIT '} /* namespace D3dx8 */' *)
//***************************************************************************//
//***************************************************************************//
//***************************************************************************//
implementation
//***************************************************************************//
//***************************************************************************//
//***************************************************************************//
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
// File: d3dx8math.h
// Content: D3DX math types and functions
//
//////////////////////////////////////////////////////////////////////////////
//===========================================================================
//
// General purpose utilities
//
//===========================================================================
function D3DXToRadian(Degree: Single): Single;
begin
Result:= Degree * (D3DX_PI / 180.0);
end;
function D3DXToDegree(Radian: Single): Single;
begin
Result:= Radian * (180.0 / D3DX_PI);
end;
//--------------------------
// 2D Vector
//--------------------------
function D3DXVector2(_x, _y: Single): TD3DXVector2;
begin
Result.x:= _x; Result.y:= _y;
end;
function D3DXVector2Equal(const v1, v2: TD3DXVector2): Boolean;
begin
Result:= (v1.x = v2.x) and (v1.y = v2.y);
end;
//--------------------------
// 3D Vector
//--------------------------
function D3DXVector3(_x, _y, _z: Single): TD3DXVector3;
begin
Result.x:= _x; Result.y:= _y; Result.z:=_z;
end;
function D3DXVector3Equal(const v1, v2: TD3DXVector3): Boolean;
begin
Result:= (v1.x = v2.x) and (v1.y = v2.y) and (v1.z = v2.z);
end;
//--------------------------
// 4D Vector
//--------------------------
function D3DXVector4(_x, _y, _z, _w: Single): TD3DXVector4;
begin
with Result do
begin
x:= _x; y:= _y; z:= _z; w:= _w;
end;
end;
function D3DXVector4Equal(const v1, v2: TD3DXVector4): Boolean;
begin
Result:= (v1.x = v2.x) and (v1.y = v2.y) and
(v1.z = v2.z) and (v1.w = v2.w);
end;
//--------------------------
// 4D Matrix
//--------------------------
function D3DXMatrix(
_m00, _m01, _m02, _m03,
_m10, _m11, _m12, _m13,
_m20, _m21, _m22, _m23,
_m30, _m31, _m32, _m33: Single): TD3DXMatrix;
begin
with Result do
begin
m[0,0]:= _m00; m[0,1]:= _m01; m[0,2]:= _m02; m[0,3]:= _m03;
m[1,0]:= _m10; m[1,1]:= _m11; m[1,2]:= _m12; m[1,3]:= _m13;
m[2,0]:= _m20; m[2,1]:= _m21; m[2,2]:= _m22; m[2,3]:= _m23;
m[3,0]:= _m30; m[3,1]:= _m31; m[3,2]:= _m32; m[3,3]:= _m33;
end;
end;
function D3DXMatrixAdd(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix;
var
pOut, p1, p2: PSingle; x: Integer;
begin
pOut:= @mOut._11; p1:= @m1._11; p2:= @m2._11;
for x:= 0 to 15 do
begin
pOut^:= p1^+p2^;
Inc(pOut); Inc(p1); Inc(p2);
end;
Result:= @mOut;
end;
function D3DXMatrixSubtract(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix;
var
pOut, p1, p2: PSingle; x: Integer;
begin
pOut:= @mOut._11; p1:= @m1._11; p2:= @m2._11;
for x:= 0 to 15 do
begin
pOut^:= p1^-p2^;
Inc(pOut); Inc(p1); Inc(p2);
end;
Result:= @mOut;
end;
function D3DXMatrixMul(out mOut: TD3DXMatrix; const m: TD3DXMatrix; MulBy: Single): PD3DXMatrix;
var
pOut, p: PSingle; x: Integer;
begin
pOut:= @mOut._11; p:= @m._11;
for x:= 0 to 15 do
begin
pOut^:= p^* MulBy;
Inc(pOut); Inc(p);
end;
Result:= @mOut;
end;
function D3DXMatrixEqual(const m1, m2: TD3DXMatrix): Boolean;
begin
Result:= CompareMem(@m1, @m2, SizeOf(TD3DXMatrix));
end;
//--------------------------
// Quaternion
//--------------------------
function D3DXQuaternion(_x, _y, _z, _w: Single): TD3DXQuaternion;
begin
with Result do
begin
x:= _x; y:= _y; z:= _z; w:= _w;
end;
end;
function D3DXQuaternionAdd(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;
begin
with Result do
begin
x:= q1.x+q2.x; y:= q1.y+q2.y; z:= q1.z+q2.z; w:= q1.w+q2.w;
end;
end;
function D3DXQuaternionSubtract(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;
begin
with Result do
begin
x:= q1.x-q2.x; y:= q1.y-q2.y; z:= q1.z-q2.z; w:= q1.w-q2.w;
end;
end;
function D3DXQuaternionEqual(const q1, q2: TD3DXQuaternion): Boolean;
begin
Result:= (q1.x = q2.x) and (q1.y = q2.y) and
(q1.z = q2.z) and (q1.w = q2.w);
end;
function D3DXQuaternionScale(out qOut: TD3DXQuaternion; const q: TD3DXQuaternion;
s: Single): PD3DXQuaternion;
begin
with qOut do
begin
x:= q.x*s; y:= q.y*s; z:= q.z*s; w:= q.w*s;
end;
Result:= @qOut;
end;
//--------------------------
// Plane
//--------------------------
function D3DXPlane(_a, _b, _c, _d: Single): TD3DXPlane;
begin
with Result do
begin
a:= _a; b:= _b; c:= _c; d:= _d;
end;
end;
function D3DXPlaneEqual(const p1, p2: TD3DXPlane): Boolean;
begin
Result:=
(p1.a = p2.a) and (p1.b = p2.b) and
(p1.c = p2.c) and (p1.d = p2.d);
end;
//--------------------------
// Color
//--------------------------
function D3DXColor(_r, _g, _b, _a: Single): TD3DXColor;
begin
with Result do
begin
r:= _r; g:= _g; b:= _b; a:= _a;
end;
end;
function D3DXColorToDWord(c: TD3DXColor): DWord;
function ColorLimit(const x: Single): DWord;
begin
if x > 1.0 then Result:= 255
else if x < 0 then Result:= 0
else Result:= Trunc(x * 255.0 + 0.5);
end;
begin
Result:= ColorLimit(c.a) shl 24 or ColorLimit(c.r) shl 16
or ColorLimit(c.g) shl 8 or ColorLimit(c.b);
end;
function D3DXColorFromDWord(c: DWord): TD3DXColor;
const
f: Single = 1/255;
begin
with Result do
begin
r:= f * Byte(c shr 16);
g:= f * Byte(c shr 8);
b:= f * Byte(c shr 0);
a:= f * Byte(c shr 24);
end;
end;
function D3DXColorEqual(const c1, c2: TD3DXColor): Boolean;
begin
Result:= (c1.r = c2.r) and (c1.g = c2.g) and (c1.b = c2.b) and (c1.a = c2.a);
end;
//===========================================================================
//
// 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;
begin
with v do Result:= Sqrt(x*x + y*y);
end;
function D3DXVec2LengthSq(const v: TD3DXVector2): Single;
begin
with v do Result:= x*x + y*y;
end;
function D3DXVec2Dot(const v1, v2: TD3DXVector2): Single;
begin
Result:= v1.x*v2.x + v1.y*v2.y;
end;
// Z component of ((x1,y1,0) cross (x2,y2,0))
function D3DXVec2CCW(const v1, v2: TD3DXVector2): Single;
begin
Result:= v1.x*v2.y - v1.y*v2.x;
end;
function D3DXVec2Add(const v1, v2: TD3DXVector2): TD3DXVector2;
begin
Result.x:= v1.x + v2.x;
Result.y:= v1.y + v2.y;
end;
function D3DXVec2Subtract(const v1, v2: TD3DXVector2): TD3DXVector2;
begin
Result.x:= v1.x - v2.x;
Result.y:= v1.y - v2.y;
end;
// Minimize each component. x = min(x1, x2), y = min(y1, y2)
function D3DXVec2Minimize(out vOut: TD3DXVector2; const v1, v2: TD3DXVEctor2): PD3DXVector2;
begin
if v1.x < v2.x then vOut.x:= v1.x else vOut.y:= v2.x;
if v1.y < v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
Result:= @vOut;
end;
// Maximize each component. x = max(x1, x2), y = max(y1, y2)
function D3DXVec2Maximize(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2): PD3DXVector2;
begin
if v1.x > v2.x then vOut.x:= v1.x else vOut.y:= v2.x;
if v1.y > v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
Result:= @vOut;
end;
function D3DXVec2Scale(out vOut: TD3DXVector2; const v: TD3DXVector2; s: Single): PD3DXVector2;
begin
vOut.x:= v.x*s; vOut.y:= v.y*s;
Result:= @vOut;
end;
// Linear interpolation. V1 + s(V2-V1)
function D3DXVec2Lerp(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2; s: Single): PD3DXVector2;
begin
vOut.x:= v1.x + s * (v2.x-v1.x);
vOut.y:= v1.y + s * (v2.y-v1.y);
Result:= @vOut;
end;
//--------------------------
// 3D Vector
//--------------------------
function D3DXVec3Length(const v: TD3DXVector3): Single;
begin
with v do Result:= Sqrt(x*x + y*y + z*z);
end;
function D3DXVec3LengthSq(const v: TD3DXVector3): Single;
begin
with v do Result:= x*x + y*y + z*z;
end;
function D3DXVec3Dot(const v1, v2: TD3DXVector3): Single;
begin
Result:= v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
end;
function D3DXVec3Cross(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
begin
vOut.x:= v1.y * v2.z - v1.z * v2.y;
vOut.y:= v1.z * v2.x - v1.x * v2.z;
vOut.z:= v1.x * v2.y - v1.y * v2.x;
Result:= @vOut;
end;
function D3DXVec3Add(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
begin
with vOut do
begin
x:= v1.x + v2.x;
y:= v1.y + v2.y;
z:= v1.z + v2.z;
end;
Result:= @vOut;
end;
function D3DXVec3Subtract(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
begin
with vOut do
begin
x:= v1.x - v2.x;
y:= v1.y - v2.y;
z:= v1.z - v2.z;
end;
Result:= @vOut;
end;
// Minimize each component. x = min(x1, x2), y = min(y1, y2)
function D3DXVec3Minimize(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
begin
if v1.x < v2.x then vOut.x:= v1.x else vOut.x:= v2.x;
if v1.y < v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
if v1.z < v2.z then vOut.z:= v1.z else vOut.z:= v2.z;
Result:= @vOut;
end;
// Maximize each component. x = max(x1, x2), y = max(y1, y2)
function D3DXVec3Maximize(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;
begin
if v1.x > v2.x then vOut.x:= v1.x else vOut.x:= v2.x;
if v1.y > v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
if v1.z > v2.z then vOut.z:= v1.z else vOut.z:= v2.z;
Result:= @vOut;
end;
function D3DXVec3Scale(out vOut: TD3DXVector3; const v: TD3DXVector3; s: Single): PD3DXVector3;
begin
with vOut do
begin
x:= v.x * s; y:= v.y * s; z:= v.z * s;
end;
Result:= @vOut;
end;
// Linear interpolation. V1 + s(V2-V1)
function D3DXVec3Lerp(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3; s: Single): PD3DXVector3;
begin
vOut.x:= v1.x + s * (v2.x-v1.x);
vOut.y:= v1.y + s * (v2.y-v1.y);
vOut.z:= v1.z + s * (v2.z-v1.z);
Result:= @vOut;
end;
//--------------------------
// 4D Vector
//--------------------------
function D3DXVec4Length(const v: TD3DXVector4): Single;
begin
with v do Result:= Sqrt(x*x + y*y + z*z + w*w);
end;
function D3DXVec4LengthSq(const v: TD3DXVector4): Single;
begin
with v do Result:= x*x + y*y + z*z + w*w
end;
function D3DXVec4Dot(const v1, v2: TD3DXVector4): Single;
begin
Result:= v1.x * v2.x + v1.y * v2.y + v1.z * v2.z + v1.w * v2.w;
end;
function D3DXVec4Add(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
begin
with vOut do
begin
x:= v1.x + v2.x;
y:= v1.y + v2.y;
z:= v1.z + v2.z;
w:= v1.w + v2.w;
end;
Result:= @vOut;
end;
function D3DXVec4Subtract(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
begin
with vOut do
begin
x:= v1.x - v2.x;
y:= v1.y - v2.y;
z:= v1.z - v2.z;
w:= v1.w - v2.w;
end;
Result:= @vOut;
end;
// Minimize each component. x = min(x1, x2), y = min(y1, y2)
function D3DXVec4Minimize(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
begin
if v1.x < v2.x then vOut.x:= v1.x else vOut.x:= v2.x;
if v1.y < v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
if v1.z < v2.z then vOut.z:= v1.z else vOut.z:= v2.z;
if v1.w < v2.w then vOut.w:= v1.w else vOut.w:= v2.w;
Result:= @vOut;
end;
// Maximize each component. x = max(x1, x2), y = max(y1, y2)
function D3DXVec4Maximize(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;
begin
if v1.x > v2.x then vOut.x:= v1.x else vOut.x:= v2.x;
if v1.y > v2.y then vOut.y:= v1.y else vOut.y:= v2.y;
if v1.z > v2.z then vOut.z:= v1.z else vOut.z:= v2.z;
if v1.w > v2.w then vOut.w:= v1.w else vOut.w:= v2.w;
Result:= @vOut;
end;
function D3DXVec4Scale(out vOut: TD3DXVector4; const v: TD3DXVector4; s: Single): PD3DXVector4;
begin
with vOut do
begin
x:= v.x * s; y:= v.y * s; z:= v.z * s; w:= v.w * s;
end;
Result:= @vOut;
end;
// Linear interpolation. V1 + s(V2-V1)
function D3DXVec4Lerp(out vOut: TD3DXVector4;
const v1, v2: TD3DXVector4; s: Single): PD3DXVector4;
begin
with vOut do
begin
x:= v1.x + s * (v2.x - v1.x);
y:= v1.y + s * (v2.y - v1.y);
z:= v1.z + s * (v2.z - v1.z);
w:= v1.w + s * (v2.w - v1.w);
end;
Result:= @vOut;
end;
//--------------------------
// 4D Matrix
//--------------------------
// inline
function D3DXMatrixIdentity(out mOut: TD3DXMatrix): PD3DXMatrix;
begin
FillChar(mOut, SizeOf(mOut), 0);
mOut._11:= 1; mOut._22:= 1; mOut._33:= 1; mOut._44:= 1;
Result:= @mOut;
end;
function D3DXMatrixIsIdentity(const m: TD3DXMatrix): BOOL;
begin
with m do Result:=
(_11 = 1) and (_12 = 0) and (_13 = 0) and (_14 = 0) and
(_21 = 0) and (_22 = 1) and (_23 = 0) and (_24 = 0) and
(_31 = 0) and (_32 = 0) and (_33 = 1) and (_34 = 0) and
(_41 = 0) and (_42 = 0) and (_43 = 0) and (_44 = 1);
end;
//--------------------------
// Quaternion
//--------------------------
// inline
function D3DXQuaternionLength(const q: TD3DXQuaternion): Single;
begin
with q do Result:= Sqrt(x*x + y*y + z*z + w*w);
end;
// Length squared, or "norm"
function D3DXQuaternionLengthSq(const q: TD3DXQuaternion): Single;
begin
with q do Result:= x*x + y*y + z*z + w*w;
end;
function D3DXQuaternionDot(const q1, q2: TD3DXQuaternion): Single;
begin
Result:= q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w;
end;
function D3DXQuaternionIdentity(out qOut: TD3DXQuaternion): PD3DXQuaternion;
begin
with qOut do
begin
x:= 0; y:= 0; z:= 0; w:= 1.0;
end;
Result:= @qOut;
end;
function D3DXQuaternionIsIdentity(const q: TD3DXQuaternion): BOOL;
begin
with q do Result:= (x = 0) and (y = 0) and (z = 0) and (w = 1);
end;
// (-x, -y, -z, w)
function D3DXQuaternionConjugate(out qOut: TD3DXQuaternion;
const q: TD3DXQuaternion): PD3DXQuaternion;
begin
with qOut do
begin
x:= -q.x; y:= -q.y; z:= -q.z; w:= q.w;
end;
Result:= @qOut;
end;
//--------------------------
// Plane
//--------------------------
// ax + by + cz + dw
function D3DXPlaneDot(const p: TD3DXPlane; const v: TD3DXVector4): Single;
begin
with p,v do Result:= a*x + b*y + c*z + d*w;
end;
// ax + by + cz + d
function D3DXPlaneDotCoord(const p: TD3DXPlane; const v: TD3DXVector3): Single;
begin
with p,v do Result:= a*x + b*y + c*z + d;
end;
// ax + by + cz
function D3DXPlaneDotNormal(const p: TD3DXPlane; const v: TD3DXVector3): Single;
begin
with p,v do Result:= a*x + b*y + c*z;
end;
//--------------------------
// Color
//--------------------------
// inline
function D3DXColorNegative(out cOut: TD3DXColor; const c: TD3DXColor): PD3DXColor;
begin
with cOut do
begin
r:= 1.0 - c.r; g:= 1.0 - c.g; b:= 1.0 - c.b;
a:= c.a;
end;
Result:= @cOut;
end;
function D3DXColorAdd(out cOut: TD3DXColor; const c1,c2: TD3DXColor): PD3DXColor;
begin
with cOut do
begin
r:= c1.r + c2.r; g:= c1.g + c2.g; b:= c1.b + c2.b;
a:= c1.a + c2.a;
end;
Result:= @cOut;
end;
function D3DXColorSubtract(out cOut: TD3DXColor; const c1,c2: TD3DXColor): PD3DXColor;
begin
with cOut do
begin
r:= c1.r - c2.r; g:= c1.g - c2.g; b:= c1.b - c2.b;
a:= c1.a - c2.a;
end;
Result:= @cOut;
end;
function D3DXColorScale(out cOut: TD3DXColor; const c: TD3DXColor; s: Single): PD3DXColor;
begin
with cOut do
begin
r:= c.r * s; g:= c.g * s;
b:= c.b * s; a:= c.a * s;
end;
Result:= @cOut;
end;
// (r1*r2, g1*g2, b1*b2, a1*a2)
function D3DXColorModulate(out cOut: TD3DXColor; const c1,c2: TD3DXColor): PD3DXColor;
begin
with cOut do
begin
r:= c1.r * c2.r; g:= c1.g * c2.g;
b:= c1.b * c2.b; a:= c1.a * c2.a;
end;
Result:= @cOut;
end;
// Linear interpolation of r,g,b, and a. C1 + s(C2-C1)
function D3DXColorLerp(out cOut: TD3DXColor; const c1,c2: TD3DXColor; s: Single): PD3DXColor;
begin
with cOut do
begin
r:= c1.r + s * (c2.r - c1.r);
g:= c1.g + s * (c2.g - c1.g);
b:= c1.b + s * (c2.b - c1.b);
a:= c1.a + s * (c2.a - c1.a);
end;
Result:= @cOut;
end;
///////////////////////////////////////////////////////////////////////////
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//
// File: d3dx8core.h
// Content: D3DX core types and functions
//
///////////////////////////////////////////////////////////////////////////
// Object Pascal support functions for D3DXGetErrorString
function D3DXGetErrorStringA(hr: HResult): String;
var
Buffer: array [0..254] of Char;
begin
D3DXGetErrorString(hr, PAnsiChar(@Buffer), 255);
SetLength(Result, StrLen(PAnsiChar(@Buffer)));
Move(Buffer, Result[1], Length(Result));
end;
function D3DXGetErrorStringW(hr: HResult): WideString;
function WStrLen(Str: PWideChar): Integer;
begin
Result := 0;
while Str[Result] <> #0 do Inc(Result);
end;
begin
SetLength(Result, 255);
D3DXGetErrorStringW(hr, PWideChar(Result), Length(Result));
SetLength(Result, WStrLen(PWideChar(Result)));
end;
{$IFNDEF UNICODE}
function D3DXGetErrorString(hr: HResult): String;
var
Buffer: array [0..254] of Char;
begin
D3DXGetErrorString(hr, PAnsiChar(@Buffer), 255);
SetLength(Result, StrLen(PAnsiChar(@Buffer)));
Move(Buffer, Result[1], Length(Result));
end;
{$ELSE}
function D3DXGetErrorString(hr: HResult): WideString;
function WStrLen(Str: PWideChar): Integer;
begin
Result := 0;
while Str[Result] <> #0 do Inc(Result);
end;
begin
SetLength(Result, 255);
D3DXGetErrorStringW(hr, PWideChar(Result), Length(Result));
SetLength(Result, WStrLen(PWideChar(Result)));
end;
{$ENDIF}
end.