11334 lines
446 KiB
ObjectPascal
11334 lines
446 KiB
ObjectPascal
{******************************************************************************}
|
|
{* *}
|
|
{* Copyright (C) Microsoft Corporation. All Rights Reserved. *}
|
|
{* *}
|
|
{* File: d3dx9.h, d3dx9anim.h, d3dx9core.h, d3dx9effect.h, *}
|
|
{* d3dx9math.h, d3dx9math.inl, d3dx9mesh.h, d3dx9shader.h, *}
|
|
{* d3dx9shape.h, d3dx9tex.h, d3dx9xof.h *}
|
|
{* *}
|
|
{* Content: Direct3DX 9.0 headers *}
|
|
{* *}
|
|
{* Direct3DX 9.0 April 2007 Delphi adaptation by Alexey Barkovoy *}
|
|
{* E-Mail: directx@clootie.ru *}
|
|
{* *}
|
|
{* Latest version can be downloaded from: *}
|
|
{* http://www.clootie.ru *}
|
|
{* http://sourceforge.net/projects/delphi-dx9sdk *}
|
|
{* *}
|
|
{*----------------------------------------------------------------------------*}
|
|
{* $Id: D3DX9.par,v 1.36 2007/04/14 21:35:00 clootie Exp $ }
|
|
{******************************************************************************}
|
|
{ }
|
|
{ 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 "D3DX9.par"
|
|
|
|
{$I DirectX.inc}
|
|
|
|
unit D3DX9;
|
|
|
|
interface
|
|
|
|
// Remove "dot" below to link with debug version of D3DX9
|
|
// (for Delphi it works only in JEDI version of headers)
|
|
{.$DEFINE DEBUG}
|
|
|
|
// Remove "dot" below to link with separate DLL's (one DLL per part of D3DX9 API)
|
|
// instead of monolithic "all-in-one" version of D3DX9 (not supported currently)
|
|
{.$DEFINE D3DX_SEPARATE}
|
|
|
|
(*$HPPEMIT '#include "d3dx9.h"' *)
|
|
|
|
(*$HPPEMIT 'namespace D3dx9' *)
|
|
|
|
(*$HPPEMIT '{' *)
|
|
|
|
//Clootie: has to temporary disable INLINE support for FreePascal
|
|
// due to bug in compiler
|
|
{$IFDEF SUPPORTS_INLINE}
|
|
{$DEFINE ALLOW_INLINE}
|
|
{$ENDIF}
|
|
|
|
uses
|
|
Windows, ActiveX,
|
|
SysUtils, Direct3D9, DXTypes;
|
|
|
|
const
|
|
//////////// DLL export definitions ///////////////////////////////////////
|
|
d3dx9MicrosoftDLL = 'd3dx9_33.dll';
|
|
d3dx9MicrosoftDebugDLL = 'd3dx9d_33.dll';
|
|
d3dx9BorlandDLL = d3dx9MicrosoftDLL; // Compatibility with previous header releases
|
|
d3dx9dll = {$IFDEF DEBUG}d3dx9MicrosoftDebugDLL{$ELSE}d3dx9MicrosoftDLL{$ENDIF};
|
|
{$UNDEF D3DX_SEPARATE}
|
|
d3dx9mathDLL = {$IFDEF D3DX_SEPARATE}'d3dx9abMath.dll'{$ELSE}d3dx9dll{$ENDIF};
|
|
d3dx9coreDLL = {$IFDEF D3DX_SEPARATE}'d3dx9abCore.dll'{$ELSE}d3dx9dll{$ENDIF};
|
|
d3dx9shaderDLL = {$IFDEF D3DX_SEPARATE}'d3dx9abShader.dll'{$ELSE}d3dx9dll{$ENDIF};
|
|
d3dx9effectDLL = {$IFDEF D3DX_SEPARATE}'d3dx9abEffect.dll'{$ELSE}d3dx9dll{$ENDIF};
|
|
d3dx9meshDLL = {$IFDEF D3DX_SEPARATE}'d3dx9abMesh.dll'{$ELSE}d3dx9dll{$ENDIF};
|
|
d3dx9shapesDLL = {$IFDEF D3DX_SEPARATE}'d3dx9abShapes.dll'{$ELSE}d3dx9dll{$ENDIF};
|
|
d3dx9texDLL = {$IFDEF D3DX_SEPARATE}'d3dx9abTex.dll'{$ELSE}d3dx9dll{$ENDIF};
|
|
d3dx9animDLL = {$IFDEF D3DX_SEPARATE}'d3dx9abAnim.dll'{$ELSE}d3dx9dll{$ENDIF};
|
|
|
|
|
|
{$IFNDEF COMPILER6_UP}
|
|
type
|
|
PPointer = ^Pointer;
|
|
PPAnsiChar = ^PAnsiChar;
|
|
|
|
{$ENDIF}
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// File: d3dx9.h
|
|
// Content: D3DX utility library
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
const
|
|
// #define D3DX_DEFAULT ULONG_MAX
|
|
// #define D3DX_DEFAULT ((UINT) -1)
|
|
D3DX_DEFAULT = Cardinal(-1);
|
|
{$EXTERNALSYM D3DX_DEFAULT}
|
|
// #define D3DX_DEFAULT_NONPOW2 ((UINT) -2)
|
|
D3DX_DEFAULT_NONPOW2 = Cardinal(-2);
|
|
{$EXTERNALSYM D3DX_DEFAULT_NONPOW2}
|
|
|
|
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}
|
|
|
|
const
|
|
D3DX_FROM_FILE = LongWord(-3);
|
|
{$EXTERNALSYM D3DX_FROM_FILE}
|
|
D3DFMT_FROM_FILE = TD3DFormat(-3);
|
|
{$EXTERNALSYM D3DFMT_FROM_FILE}
|
|
|
|
type
|
|
_D3DXERR = HResult;
|
|
{$EXTERNALSYM _D3DXERR}
|
|
|
|
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}
|
|
D3DXERR_DUPLICATENAMEDFRAGMENT = HResult(MAKE_D3DHRESULT_R or 2907);
|
|
{$EXTERNALSYM D3DXERR_DUPLICATENAMEDFRAGMENT}
|
|
D3DXERR_CANNOTREMOVELASTITEM = HResult(MAKE_D3DHRESULT_R or 2908);
|
|
{$EXTERNALSYM D3DXERR_CANNOTREMOVELASTITEM}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// File: d3dx9math.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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXToRadian}
|
|
//#define D3DXToDegree( radian ) ((radian) * (180.0f / D3DX_PI))
|
|
function D3DXToDegree(Radian: Single): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXToDegree}
|
|
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// 16 bit floating point numbers
|
|
//
|
|
//===========================================================================
|
|
|
|
const
|
|
D3DX_16F_DIG = 3; // # of decimal digits of precision
|
|
{$EXTERNALSYM D3DX_16F_DIG}
|
|
D3DX_16F_EPSILON = 4.8875809e-4; // smallest such that 1.0 + epsilon <> 1.0
|
|
{$EXTERNALSYM D3DX_16F_EPSILON}
|
|
D3DX_16F_MANT_DIG = 11; // # of bits in mantissa
|
|
{$EXTERNALSYM D3DX_16F_MANT_DIG}
|
|
D3DX_16F_MAX = 6.550400e+004; // max value
|
|
{$EXTERNALSYM D3DX_16F_MAX}
|
|
D3DX_16F_MAX_10_EXP = 4; // max decimal exponent
|
|
{$EXTERNALSYM D3DX_16F_MAX_10_EXP}
|
|
D3DX_16F_MAX_EXP = 15; // max binary exponent
|
|
{$EXTERNALSYM D3DX_16F_MAX_EXP}
|
|
D3DX_16F_MIN = 6.1035156e-5; // min positive value
|
|
{$EXTERNALSYM D3DX_16F_MIN}
|
|
D3DX_16F_MIN_10_EXP = -4; // min decimal exponent
|
|
{$EXTERNALSYM D3DX_16F_MIN_10_EXP}
|
|
D3DX_16F_MIN_EXP = -14; // min binary exponent
|
|
{$EXTERNALSYM D3DX_16F_MIN_EXP}
|
|
D3DX_16F_RADIX = 2; // exponent radix
|
|
{$EXTERNALSYM D3DX_16F_RADIX}
|
|
D3DX_16F_ROUNDS = 1; // addition rounding: near
|
|
{$EXTERNALSYM D3DX_16F_ROUNDS}
|
|
|
|
|
|
type
|
|
(*$HPPEMIT 'typedef D3DXFLOAT16 TD3DXFloat16;' *)
|
|
(*$HPPEMIT 'typedef D3DXFLOAT16 *PD3DXFloat16;' *)
|
|
PD3DXFloat16 = ^TD3DXFloat16;
|
|
{$EXTERNALSYM PD3DXFloat16}
|
|
TD3DXFloat16 = packed record
|
|
value: Word;
|
|
end;
|
|
{$NODEFINE TD3DXFloat16}
|
|
|
|
// Some pascal equalents of C++ class functions & operators
|
|
const D3DXFloat16Zero: TD3DXFloat16 = (value:0); // 0
|
|
function D3DXFloat16(value: Single): TD3DXFloat16;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXFloat16Equal(const v1, v2: TD3DXFloat16): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXFloat16ToFloat(value: TD3DXFloat16): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// Vectors
|
|
//
|
|
//===========================================================================
|
|
|
|
|
|
//--------------------------
|
|
// 2D Vector
|
|
//--------------------------
|
|
type
|
|
(*$HPPEMIT 'typedef D3DXVECTOR2 TD3DXVector2;' *)
|
|
(*$HPPEMIT 'typedef D3DXVECTOR2 *PD3DXVector2;' *)
|
|
PD3DXVector2 = ^TD3DXVector2;
|
|
{$EXTERNALSYM PD3DXVector2}
|
|
TD3DXVector2 = 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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector2Equal(const v1, v2: TD3DXVector2): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
|
|
//--------------------------
|
|
// 2D Vector (16 bit)
|
|
//--------------------------
|
|
type
|
|
(*$HPPEMIT 'typedef D3DXVECTOR2_16F TD3DXVector2_16F;' *)
|
|
(*$HPPEMIT 'typedef D3DXVECTOR2_16F *PD3DXVector2_16F;' *)
|
|
PD3DXVector2_16F = ^TD3DXVector2_16F;
|
|
{$EXTERNALSYM PD3DXVector2_16F}
|
|
TD3DXVector2_16F = packed record
|
|
x, y: TD3DXFloat16;
|
|
end;
|
|
{$NODEFINE TD3DXVector2_16F}
|
|
|
|
// Some pascal equalents of C++ class functions & operators
|
|
const D3DXVector2_16fZero: TD3DXVector2_16F = (x:(value:0); y:(value:0)); // (0,0)
|
|
function D3DXVector2_16F(_x, _y: TD3DXFloat16): TD3DXVector2_16F;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector2_16fEqual(const v1, v2: TD3DXVector2_16F): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector2_16fFromVector2(const v: TD3DXVector2): TD3DXVector2_16f;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector2FromVector2_16f(const v: TD3DXVector2_16f): TD3DXVector2;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
|
|
//--------------------------
|
|
// 3D Vector
|
|
//--------------------------
|
|
type
|
|
(*$HPPEMIT 'typedef D3DXVECTOR3 TD3DXVector3;' *)
|
|
(*$HPPEMIT 'typedef D3DXVECTOR3 *PD3DXVector3;' *)
|
|
PD3DXVector3 = ^TD3DXVector3;
|
|
{$EXTERNALSYM 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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector3Equal(const v1, v2: TD3DXVector3): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
|
|
//--------------------------
|
|
// 3D Vector (16 bit)
|
|
//--------------------------
|
|
type
|
|
(*$HPPEMIT 'typedef D3DXVECTOR3_16F TD3DXVector3_16F;' *)
|
|
(*$HPPEMIT 'typedef D3DXVECTOR3_16F *PD3DXVector3_16F;' *)
|
|
PD3DXVector3_16F = ^TD3DXVector3_16F;
|
|
{$EXTERNALSYM PD3DXVector3}
|
|
TD3DXVector3_16F = packed record
|
|
x, y, z: TD3DXFloat16;
|
|
end;
|
|
{$NODEFINE TD3DXVector3_16F}
|
|
|
|
// Some pascal equalents of C++ class functions & operators
|
|
const D3DXVector3_16fZero: TD3DXVector3_16F = (x:(value:0); y:(value:0); z:(value:0)); // (0,0,0)
|
|
function D3DXVector3_16F(_x, _y, _z: TD3DXFloat16): TD3DXVector3_16F;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector3_16fEqual(const v1, v2: TD3DXVector3_16F): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector3_16fFromVector3(const v: TD3DXVector3): TD3DXVector3_16f;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector3FromVector3_16f(const v: TD3DXVector3_16f): TD3DXVector3;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
|
|
//--------------------------
|
|
// 4D Vector
|
|
//--------------------------
|
|
type
|
|
(*$HPPEMIT 'typedef D3DXVECTOR4 TD3DXVector4;' *)
|
|
(*$HPPEMIT 'typedef D3DXVECTOR4 *PD3DXVector4;' *)
|
|
PD3DXVector4 = ^TD3DXVector4;
|
|
{$EXTERNALSYM PD3DXVector4}
|
|
TD3DXVector4 = 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; overload;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector4(xyz: TD3DXVector3; _w: Single): TD3DXVector4; overload;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector4Equal(const v1, v2: TD3DXVector4): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
|
|
//--------------------------
|
|
// 4D Vector (16 bit)
|
|
//--------------------------
|
|
type
|
|
(*$HPPEMIT 'typedef D3DXVECTOR4_16F TD3DXVector4_16F;' *)
|
|
(*$HPPEMIT 'typedef D3DXVECTOR4_16F *PD3DXVector4_16F;' *)
|
|
PD3DXVector4_16F = ^TD3DXVector4_16F;
|
|
{$EXTERNALSYM PD3DXVector4_16F}
|
|
TD3DXVector4_16F = packed record
|
|
x, y, z, w: TD3DXFloat16;
|
|
end;
|
|
{$NODEFINE TD3DXVector4_16F}
|
|
|
|
// Some pascal equalents of C++ class functions & operators
|
|
const D3DXVector4_16fZero: TD3DXVector4_16F = (x:(value:0); y:(value:0); z:(value:0); w:(value:0)); // (0,0,0,0)
|
|
function D3DXVector4_16F(_x, _y, _z, _w: TD3DXFloat16): TD3DXVector4_16F; overload;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector4_16F(xyz: TD3DXVector3_16f; _w: TD3DXFloat16): TD3DXVector4_16F; overload;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector4_16fEqual(const v1, v2: TD3DXVector4_16F): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector4_16fFromVector4(const v: TD3DXVector4): TD3DXVector4_16f;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXVector4FromVector4_16f(const v: TD3DXVector4_16f): TD3DXVector4;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// Matrices
|
|
//
|
|
//===========================================================================
|
|
type
|
|
(*$HPPEMIT 'typedef D3DXMATRIX TD3DXMatrix;' *)
|
|
(*$HPPEMIT 'typedef D3DXMATRIX *PD3DXMatrix;' *)
|
|
(*$HPPEMIT 'typedef D3DXMATRIX **PPD3DXMatrix;' *)
|
|
PPD3DXMatrix = ^PD3DXMatrix;
|
|
PD3DXMatrix = ^TD3DXMatrix;
|
|
{$EXTERNALSYM 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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXMatrixAdd(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXMatrixSubtract(out mOut: TD3DXMatrix; const m1, m2: TD3DXMatrix): PD3DXMatrix;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXMatrixMul(out mOut: TD3DXMatrix; const m: TD3DXMatrix; MulBy: Single): PD3DXMatrix;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXMatrixEqual(const m1, m2: TD3DXMatrix): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// 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
|
|
(*$HPPEMIT 'typedef D3DXQUATERNION TD3DXQuaternion;' *)
|
|
PD3DXQuaternion = ^TD3DXQuaternion;
|
|
TD3DXQuaternion = record
|
|
x, y, z, w: Single;
|
|
end;
|
|
{$NODEFINE TD3DXQuaternion}
|
|
|
|
// Some pascal equalents of C++ class functions & operators
|
|
function D3DXQuaternion(_x, _y, _z, _w: Single): TD3DXQuaternion;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXQuaternionAdd(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXQuaternionSubtract(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXQuaternionEqual(const q1, q2: TD3DXQuaternion): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXQuaternionScale(out qOut: TD3DXQuaternion; const q: TD3DXQuaternion;
|
|
s: Single): PD3DXQuaternion;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// Planes
|
|
//
|
|
//===========================================================================
|
|
type
|
|
(*$HPPEMIT 'typedef D3DXPLANE TD3DXPlane;' *)
|
|
PD3DXPlane = ^TD3DXPlane;
|
|
TD3DXPlane = record
|
|
a, b, c, d: Single;
|
|
end;
|
|
{$NODEFINE 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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXPlaneEqual(const p1, p2: TD3DXPlane): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// Colors
|
|
//
|
|
//===========================================================================
|
|
type
|
|
(*$HPPEMIT 'typedef D3DXCOLOR TD3DXColor;' *)
|
|
(*$HPPEMIT 'typedef D3DXCOLOR *PD3DXColor;' *)
|
|
PD3DXColor = PD3DColorValue;
|
|
{$EXTERNALSYM PD3DXColor}
|
|
TD3DXColor = TD3DColorValue;
|
|
{$EXTERNALSYM TD3DXColor}
|
|
|
|
function D3DXColor(_r, _g, _b, _a: Single): TD3DXColor;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXColorToDWord(c: TD3DXColor): DWord;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXColorFromDWord(c: DWord): TD3DXColor;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
function D3DXColorEqual(const c1, c2: TD3DXColor): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// 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.
|
|
//
|
|
//===========================================================================
|
|
|
|
//--------------------------
|
|
// Float16
|
|
//--------------------------
|
|
|
|
// non-inline
|
|
|
|
// Converts an array 32-bit floats to 16-bit floats
|
|
function D3DXFloat32To16Array(pOut: PD3DXFloat16; pIn: PSingle; n: LongWord): PD3DXFloat16; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXFloat32To16Array}
|
|
|
|
// Converts an array 16-bit floats to 32-bit floats
|
|
function D3DXFloat16To32Array(pOut: PSingle; pIn: PD3DXFloat16; n: LongWord): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXFloat16To32Array}
|
|
|
|
|
|
//--------------------------
|
|
// 2D Vector
|
|
//--------------------------
|
|
|
|
// inline
|
|
|
|
function D3DXVec2Length(const v: TD3DXVector2): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec2Length}
|
|
|
|
function D3DXVec2LengthSq(const v: TD3DXVector2): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec2LengthSq}
|
|
|
|
function D3DXVec2Dot(const v1, v2: TD3DXVector2): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec2Dot}
|
|
|
|
// Z component of ((x1,y1,0) cross (x2,y2,0))
|
|
function D3DXVec2CCW(const v1, v2: TD3DXVector2): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec2CCW}
|
|
|
|
function D3DXVec2Add(const v1, v2: TD3DXVector2): TD3DXVector2;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec2Add}
|
|
|
|
function D3DXVec2Subtract(const v1, v2: TD3DXVector2): TD3DXVector2;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec2Subtract}
|
|
|
|
// Minimize each component. x = min(x1, x2), y = min(y1, y2)
|
|
function D3DXVec2Minimize(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2): PD3DXVector2;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec2Minimize}
|
|
|
|
// Maximize each component. x = max(x1, x2), y = max(y1, y2)
|
|
function D3DXVec2Maximize(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2): PD3DXVector2;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec2Maximize}
|
|
|
|
function D3DXVec2Scale(out vOut: TD3DXVector2; const v: TD3DXVector2; s: Single): PD3DXVector2;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec2Scale}
|
|
|
|
// Linear interpolation. V1 + s(V2-V1)
|
|
function D3DXVec2Lerp(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2; s: Single): PD3DXVector2;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec2Lerp}
|
|
|
|
// non-inline
|
|
function D3DXVec2Normalize(out vOut: TD3DXVector2; const v: TD3DXVector2): PD3DXVector2; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec2Hermite}
|
|
|
|
// CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1)
|
|
function D3DXVec2CatmullRom(out vOut: TD3DXVector2;
|
|
const v0, v1, v2, v3: TD3DXVector2; s: Single): PD3DXVector2; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec2BaryCentric}
|
|
|
|
// Transform (x, y, 0, 1) by matrix.
|
|
function D3DXVec2Transform(out vOut: TD3DXVector4;
|
|
const v: TD3DXVector2; const m: TD3DXMatrix): PD3DXVector4; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec2TransformCoord}
|
|
|
|
// Transform (x, y, 0, 0) by matrix.
|
|
function D3DXVec2TransformNormal(out vOut: TD3DXVector2;
|
|
const v: TD3DXVector2; const m: TD3DXMatrix): PD3DXVector2; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec2TransformNormal}
|
|
|
|
|
|
// Transform Array (x, y, 0, 1) by matrix.
|
|
function D3DXVec2TransformArray(pOut: PD3DXVector4; OutStride: LongWord;
|
|
pV: PD3DXVector2; VStride: LongWord; const m: TD3DXMatrix; n: LongWord): PD3DXVector4; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec2TransformArray}
|
|
|
|
// Transform Array (x, y, 0, 1) by matrix, project result back into w=1.
|
|
function D3DXVec2TransformCoordArray(pOut: PD3DXVector2; OutStride: LongWord;
|
|
pV: PD3DXVector2; VStride: LongWord; const m: TD3DXMatrix; n: LongWord): PD3DXVector2; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec2TransformCoordArray}
|
|
|
|
// Transform Array (x, y, 0, 0) by matrix.
|
|
function D3DXVec2TransformNormalArray(pOut: PD3DXVector2; OutStride: LongWord;
|
|
pV: PD3DXVector2; VStride: LongWord; const m: TD3DXMatrix; n: LongWord): PD3DXVector2; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec2TransformNormalArray}
|
|
|
|
|
|
//--------------------------
|
|
// 3D Vector
|
|
//--------------------------
|
|
|
|
// inline
|
|
|
|
function D3DXVec3Length(const v: TD3DXVector3): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec3Length}
|
|
|
|
function D3DXVec3LengthSq(const v: TD3DXVector3): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec3LengthSq}
|
|
|
|
function D3DXVec3Dot(const v1, v2: TD3DXVector3): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec3Dot}
|
|
|
|
function D3DXVec3Cross(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec3Cross}
|
|
|
|
function D3DXVec3Add(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec3Add}
|
|
|
|
function D3DXVec3Subtract(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec3Subtract}
|
|
|
|
// Minimize each component. x = min(x1, x2), y = min(y1, y2), ...
|
|
function D3DXVec3Minimize(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec3Minimize}
|
|
|
|
// Maximize each component. x = max(x1, x2), y = max(y1, y2), ...
|
|
function D3DXVec3Maximize(out vOut: TD3DXVector3; const v1, v2: TD3DXVector3): PD3DXVector3;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec3Maximize}
|
|
|
|
function D3DXVec3Scale(out vOut: TD3DXVector3; const v: TD3DXVector3; s: Single): PD3DXVector3;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec3Scale}
|
|
|
|
// Linear interpolation. V1 + s(V2-V1)
|
|
function D3DXVec3Lerp(out vOut: TD3DXVector3;
|
|
const v1, v2: TD3DXVector3; s: Single): PD3DXVector3;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec3Lerp}
|
|
|
|
// non-inline
|
|
|
|
function D3DXVec3Normalize(out vOut: TD3DXVector3;
|
|
const v: TD3DXVector3): PD3DXVector3; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec3Hermite}
|
|
|
|
// CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1)
|
|
function D3DXVec3CatmullRom(out vOut: TD3DXVector3;
|
|
const v0, v1, v2, v3: TD3DXVector3; s: Single): PD3DXVector3; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec3BaryCentric}
|
|
|
|
// Transform (x, y, z, 1) by matrix.
|
|
function D3DXVec3Transform(out vOut: TD3DXVector4;
|
|
const v: TD3DXVector3; const m: TD3DXMatrix): PD3DXVector4; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec3TransformNormal}
|
|
|
|
|
|
// Transform Array (x, y, z, 1) by matrix.
|
|
function D3DXVec3TransformArray(pOut: PD3DXVector4; OutStride: LongWord;
|
|
pV: PD3DXVector3; VStride: LongWord; const m: TD3DXMatrix; n: LongWord): PD3DXVector4; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec3TransformArray}
|
|
|
|
// Transform Array (x, y, z, 1) by matrix, project result back into w=1.
|
|
function D3DXVec3TransformCoordArray(pOut: PD3DXVector3; OutStride: LongWord;
|
|
pV: PD3DXVector3; VStride: LongWord; const m: TD3DXMatrix; n: LongWord): PD3DXVector3; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec3TransformCoordArray}
|
|
|
|
// 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 D3DXVec3TransformNormalArray(pOut: PD3DXVector3; OutStride: LongWord;
|
|
pV: PD3DXVector3; VStride: LongWord; const m: TD3DXMatrix; n: LongWord): PD3DXVector3; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec3TransformNormalArray}
|
|
|
|
// Project vector from object space into screen space
|
|
function D3DXVec3Project(out vOut: TD3DXVector3;
|
|
const v: TD3DXVector3; const pViewport: TD3DViewport9;
|
|
const pProjection, pView, pWorld: TD3DXMatrix): PD3DXVector3; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec3Project}
|
|
|
|
// Project vector from screen space into object space
|
|
function D3DXVec3Unproject(out vOut: TD3DXVector3;
|
|
const v: TD3DXVector3; const pViewport: TD3DViewport9;
|
|
const pProjection, pView, pWorld: TD3DXMatrix): PD3DXVector3; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec3Unproject}
|
|
|
|
// Project vector Array from object space into screen space
|
|
function D3DXVec3ProjectArray(pOut: PD3DXVector3; OutStride: LongWord;
|
|
pV: PD3DXVector3; VStride: LongWord; const pViewport: TD3DViewport9;
|
|
const pProjection, pView, pWorld: TD3DXMatrix; n: LongWord): PD3DXVector3; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec3ProjectArray}
|
|
|
|
// Project vector Array from screen space into object space
|
|
function D3DXVec3UnprojectArray(pOut: PD3DXVector3; OutStride: LongWord;
|
|
pV: PD3DXVector3; VStride: LongWord; const pViewport: TD3DViewport9;
|
|
const pProjection, pView, pWorld: TD3DXMatrix; n: LongWord): PD3DXVector3; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec3UnprojectArray}
|
|
|
|
|
|
//--------------------------
|
|
// 4D Vector
|
|
//--------------------------
|
|
|
|
// inline
|
|
|
|
function D3DXVec4Length(const v: TD3DXVector4): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec4Length}
|
|
|
|
function D3DXVec4LengthSq(const v: TD3DXVector4): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec4LengthSq}
|
|
|
|
function D3DXVec4Dot(const v1, v2: TD3DXVector4): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec4Dot}
|
|
|
|
function D3DXVec4Add(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec4Add}
|
|
|
|
function D3DXVec4Subtract(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec4Subtract}
|
|
|
|
// Minimize each component. x = min(x1, x2), y = min(y1, y2), ...
|
|
function D3DXVec4Minimize(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec4Minimize}
|
|
|
|
// Maximize each component. x = max(x1, x2), y = max(y1, y2), ...
|
|
function D3DXVec4Maximize(out vOut: TD3DXVector4; const v1, v2: TD3DXVector4): PD3DXVector4;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec4Maximize}
|
|
|
|
function D3DXVec4Scale(out vOut: TD3DXVector4; const v: TD3DXVector4; s: Single): PD3DXVector4;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec4Scale}
|
|
|
|
// Linear interpolation. V1 + s(V2-V1)
|
|
function D3DXVec4Lerp(out vOut: TD3DXVector4;
|
|
const v1, v2: TD3DXVector4; s: Single): PD3DXVector4;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXVec4Lerp}
|
|
|
|
// non-inline
|
|
|
|
// Cross-product in 4 dimensions.
|
|
function D3DXVec4Cross(out vOut: TD3DXVector4;
|
|
const v1, v2, v3: TD3DXVector4): PD3DXVector4; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec4Cross}
|
|
|
|
function D3DXVec4Normalize(out vOut: TD3DXVector4;
|
|
const v: TD3DXVector4): PD3DXVector4; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec4BaryCentric}
|
|
|
|
// Transform vector by matrix.
|
|
function D3DXVec4Transform(out vOut: TD3DXVector4;
|
|
const v: TD3DXVector4; const m: TD3DXMatrix): PD3DXVector4; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec4Transform}
|
|
|
|
// Transform vector array by matrix.
|
|
function D3DXVec4TransformArray(pOut: PD3DXVector4; OutStride: LongWord;
|
|
pV: PD3DXVector4; VStride: LongWord; const m: TD3DXMatrix; n: LongWord): PD3DXVector4; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXVec4TransformArray}
|
|
|
|
|
|
//--------------------------
|
|
// 4D Matrix
|
|
//--------------------------
|
|
|
|
// inline
|
|
|
|
function D3DXMatrixIdentity(out mOut: TD3DXMatrix): PD3DXMatrix;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXMatrixIdentity}
|
|
|
|
function D3DXMatrixIsIdentity(const m: TD3DXMatrix): BOOL;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXMatrixIsIdentity}
|
|
|
|
// non-inline
|
|
|
|
function D3DXMatrixDeterminant(const m: TD3DXMatrix): Single; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixDeterminant}
|
|
|
|
function D3DXMatrixDecompose(pOutScale: PD3DXVector3; pOutRotation: PD3DXQuaternion;
|
|
pOutTranslation: PD3DXVector3; const M: TD3DXMatrix): HRESULT; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixDecompose}
|
|
|
|
function D3DXMatrixTranspose(out pOut: TD3DXMatrix; const pM: TD3DXMatrix): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixMultiply}
|
|
|
|
// Matrix multiplication, followed by a transpose. (Out = T(M1 * M2))
|
|
function D3DXMatrixMultiplyTranspose(out pOut: TD3DXMatrix; const pM1, pM2: TD3DXMatrix): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixInverse}
|
|
|
|
// Build a matrix which scales by (sx, sy, sz)
|
|
function D3DXMatrixScaling(out mOut: TD3DXMatrix; sx, sy, sz: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixScaling}
|
|
|
|
// Build a matrix which translates by (x, y, z)
|
|
function D3DXMatrixTranslation(out mOut: TD3DXMatrix; x, y, z: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixTranslation}
|
|
|
|
// Build a matrix which rotates around the X axis
|
|
function D3DXMatrixRotationX(out mOut: TD3DXMatrix; angle: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixRotationX}
|
|
|
|
// Build a matrix which rotates around the Y axis
|
|
function D3DXMatrixRotationY(out mOut: TD3DXMatrix; angle: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixRotationY}
|
|
|
|
// Build a matrix which rotates around the Z axis
|
|
function D3DXMatrixRotationZ(out mOut: TD3DXMatrix; angle: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixRotationZ}
|
|
|
|
// Build a matrix which rotates around an arbitrary axis
|
|
function D3DXMatrixRotationAxis(out mOut: TD3DXMatrix; const v: TD3DXVector3;
|
|
angle: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixRotationAxis}
|
|
|
|
// Build a matrix from a quaternion
|
|
function D3DXMatrixRotationQuaternion(out mOut: TD3DXMatrix; const Q: TD3DXQuaternion): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixTransformation}
|
|
|
|
// Build 2D transformation matrix in XY plane. NULL arguments are treated as identity.
|
|
// Mout = Msc-1 * Msr-1 * Ms * Msr * Msc * Mrc-1 * Mr * Mrc * Mt
|
|
function D3DXMatrixTransformation2D(out pOut: TD3DXMatrix;
|
|
pScalingCenter: PD3DXVector2;
|
|
ScalingRotation: Single; pScaling: PD3DXVector2; pRotationCenter: PD3DXVector2;
|
|
Rotation: Single; pTranslation: PD3DXVector2): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixTransformation2D}
|
|
|
|
// 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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixAffineTransformation}
|
|
|
|
// Build 2D affine transformation matrix in XY plane. NULL arguments are treated as identity.
|
|
// Mout = Ms * Mrc-1 * Mr * Mrc * Mt
|
|
function D3DXMatrixAffineTransformation2D(out mOut: TD3DXMatrix;
|
|
Scaling: Single; pRotationCenter: PD3DXVector2;
|
|
Rotation: Single; pTranslation: PD3DXVector2): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixAffineTransformation2D}
|
|
|
|
// Build a lookat matrix. (right-handed)
|
|
function D3DXMatrixLookAtRH(out mOut: TD3DXMatrix; const Eye, At, Up: TD3DXVector3): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixLookAtRH}
|
|
|
|
// Build a lookat matrix. (left-handed)
|
|
function D3DXMatrixLookAtLH(out mOut: TD3DXMatrix; const Eye, At, Up: TD3DXVector3): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixLookAtLH}
|
|
|
|
// Build a perspective projection matrix. (right-handed)
|
|
function D3DXMatrixPerspectiveRH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixPerspectiveRH}
|
|
|
|
// Build a perspective projection matrix. (left-handed)
|
|
function D3DXMatrixPerspectiveLH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixPerspectiveLH}
|
|
|
|
// Build a perspective projection matrix. (right-handed)
|
|
function D3DXMatrixPerspectiveFovRH(out mOut: TD3DXMatrix; flovy, aspect, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixPerspectiveFovRH}
|
|
|
|
// Build a perspective projection matrix. (left-handed)
|
|
function D3DXMatrixPerspectiveFovLH(out mOut: TD3DXMatrix; flovy, aspect, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixPerspectiveFovLH}
|
|
|
|
// Build a perspective projection matrix. (right-handed)
|
|
function D3DXMatrixPerspectiveOffCenterRH(out mOut: TD3DXMatrix;
|
|
l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixPerspectiveOffCenterRH}
|
|
|
|
// Build a perspective projection matrix. (left-handed)
|
|
function D3DXMatrixPerspectiveOffCenterLH(out mOut: TD3DXMatrix;
|
|
l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixPerspectiveOffCenterLH}
|
|
|
|
// Build an ortho projection matrix. (right-handed)
|
|
function D3DXMatrixOrthoRH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixOrthoRH}
|
|
|
|
// Build an ortho projection matrix. (left-handed)
|
|
function D3DXMatrixOrthoLH(out mOut: TD3DXMatrix; w, h, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixOrthoLH}
|
|
|
|
// Build an ortho projection matrix. (right-handed)
|
|
function D3DXMatrixOrthoOffCenterRH(out mOut: TD3DXMatrix;
|
|
l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixOrthoOffCenterRH}
|
|
|
|
// Build an ortho projection matrix. (left-handed)
|
|
function D3DXMatrixOrthoOffCenterLH(out mOut: TD3DXMatrix;
|
|
l, r, b, t, zn, zf: Single): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixShadow}
|
|
|
|
// Build a matrix which reflects the coordinate system about a plane
|
|
function D3DXMatrixReflect(out mOut: TD3DXMatrix;
|
|
const Plane: TD3DXPlane): PD3DXMatrix; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXMatrixReflect}
|
|
|
|
|
|
//--------------------------
|
|
// Quaternion
|
|
//--------------------------
|
|
|
|
// inline
|
|
|
|
function D3DXQuaternionLength(const q: TD3DXQuaternion): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXQuaternionLength}
|
|
|
|
// Length squared, or "norm"
|
|
function D3DXQuaternionLengthSq(const q: TD3DXQuaternion): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXQuaternionLengthSq}
|
|
|
|
function D3DXQuaternionDot(const q1, q2: TD3DXQuaternion): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXQuaternionDot}
|
|
|
|
// (0, 0, 0, 1)
|
|
function D3DXQuaternionIdentity(out qOut: TD3DXQuaternion): PD3DXQuaternion;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXQuaternionIdentity}
|
|
|
|
function D3DXQuaternionIsIdentity (const q: TD3DXQuaternion): BOOL;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXQuaternionIsIdentity}
|
|
|
|
// (-x, -y, -z, w)
|
|
function D3DXQuaternionConjugate(out qOut: TD3DXQuaternion;
|
|
const q: TD3DXQuaternion): PD3DXQuaternion;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXQuaternionToAxisAngle}
|
|
|
|
// Build a quaternion from a rotation matrix.
|
|
function D3DXQuaternionRotationMatrix(out qOut: TD3DXQuaternion;
|
|
const m: TD3DXMatrix): PD3DXQuaternion; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXQuaternionRotationMatrix}
|
|
|
|
// Rotation about arbitrary axis.
|
|
function D3DXQuaternionRotationAxis(out qOut: TD3DXQuaternion;
|
|
const v: TD3DXVector3; Angle: Single): PD3DXQuaternion; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXQuaternionMultiply}
|
|
|
|
function D3DXQuaternionNormalize(out qOut: TD3DXQuaternion;
|
|
const q: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXQuaternionNormalize}
|
|
|
|
// Conjugate and re-norm
|
|
function D3DXQuaternionInverse(out qOut: TD3DXQuaternion;
|
|
const q: TD3DXQuaternion): PD3DXQuaternion; stdcall; external d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXQuaternionBaryCentric}
|
|
|
|
|
|
//--------------------------
|
|
// Plane
|
|
//--------------------------
|
|
|
|
// inline
|
|
|
|
// ax + by + cz + dw
|
|
function D3DXPlaneDot(const p: TD3DXPlane; const v: TD3DXVector4): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXPlaneDot}
|
|
|
|
// ax + by + cz + d
|
|
function D3DXPlaneDotCoord(const p: TD3DXPlane; const v: TD3DXVector3): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXPlaneDotCoord}
|
|
|
|
// ax + by + cz
|
|
function D3DXPlaneDotNormal(const p: TD3DXPlane; const v: TD3DXVector3): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXPlaneDotNormal}
|
|
|
|
function D3DXPlaneScale(out pOut: TD3DXPlane; const pP: TD3DXPlane; s: Single): PD3DXPlane;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXPlaneScale}
|
|
|
|
|
|
// non-inline
|
|
|
|
// Normalize plane (so that |a,b,c| == 1)
|
|
function D3DXPlaneNormalize(out pOut: TD3DXPlane; const p: TD3DXPlane): PD3DXPlane; stdcall; external d3dx9mathDLL;
|
|
{$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 pOut: TD3DXVector3;
|
|
const p: TD3DXPlane; const v1, v2: TD3DXVector3): PD3DXVector3; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXPlaneIntersectLine}
|
|
|
|
// Construct a plane from a point and a normal
|
|
function D3DXPlaneFromPointNormal(out pOut: TD3DXPlane;
|
|
const vPoint, vNormal: TD3DXVector3): PD3DXPlane; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXPlaneFromPointNormal}
|
|
|
|
// Construct a plane from 3 points
|
|
function D3DXPlaneFromPoints(out pOut: TD3DXPlane;
|
|
const v1, v2, v3: TD3DXVector3): PD3DXPlane; stdcall; external d3dx9mathDLL;
|
|
{$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 p: TD3DXPlane; const m: TD3DXMatrix): PD3DXPlane; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXPlaneTransform}
|
|
|
|
// Transform an array of planes by a matrix. The vectors (a,b,c) must be normal.
|
|
// M should be the inverse transpose of the transformation desired.
|
|
function D3DXPlaneTransformArray(pOut: PD3DXPlane; OutStride: LongWord;
|
|
pP: PD3DXPlane; PStride: LongWord; const m: TD3DXMatrix; n: LongWord): PD3DXPlane; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXPlaneTransformArray}
|
|
|
|
|
|
//--------------------------
|
|
// Color
|
|
//--------------------------
|
|
|
|
// inline
|
|
|
|
// (1-r, 1-g, 1-b, a)
|
|
function D3DXColorNegative(out cOut: TD3DXColor; const c: TD3DXColor): PD3DXColor;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXColorNegative}
|
|
|
|
function D3DXColorAdd(out cOut: TD3DXColor; const c1, c2: TD3DXColor): PD3DXColor;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXColorAdd}
|
|
|
|
function D3DXColorSubtract(out cOut: TD3DXColor; const c1, c2: TD3DXColor): PD3DXColor;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXColorSubtract}
|
|
|
|
function D3DXColorScale(out cOut: TD3DXColor; const c: TD3DXColor; s: Single): PD3DXColor;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DXColorScale}
|
|
|
|
// (r1*r2, g1*g2, b1*b2, a1*a2)
|
|
function D3DXColorModulate(out cOut: TD3DXColor; const c1, c2: TD3DXColor): PD3DXColor;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXFresnelTerm}
|
|
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// Matrix Stack
|
|
//
|
|
//===========================================================================
|
|
|
|
type
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXMatrixStack);'}
|
|
{$EXTERNALSYM ID3DXMatrixStack}
|
|
ID3DXMatrixStack = interface(IUnknown)
|
|
['{C7885BA7-F990-4fe7-922D-8515E477DD85}']
|
|
//
|
|
// 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 d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXCreateMatrixStack}
|
|
|
|
//===========================================================================
|
|
//
|
|
// Spherical Harmonic Runtime Routines
|
|
//
|
|
// NOTE:
|
|
// * Most of these functions can take the same object as in and out parameters.
|
|
// The exceptions are the rotation functions.
|
|
//
|
|
// * Out parameters are typically also returned as return values, so that
|
|
// the output of one function may be used as a parameter to another.
|
|
//
|
|
//============================================================================
|
|
|
|
|
|
//============================================================================
|
|
//
|
|
// Basic Spherical Harmonic math routines
|
|
//
|
|
//============================================================================
|
|
|
|
const
|
|
D3DXSH_MINORDER = 2;
|
|
{$EXTERNALSYM D3DXSH_MINORDER}
|
|
D3DXSH_MAXORDER = 6;
|
|
{$EXTERNALSYM D3DXSH_MAXORDER}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHEvalDirection:
|
|
// --------------------
|
|
// Evaluates the Spherical Harmonic basis functions
|
|
//
|
|
// Parameters:
|
|
// pOut
|
|
// Output SH coefficients - basis function Ylm is stored at l*l + m+l
|
|
// This is the pointer that is returned.
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// pDir
|
|
// Direction to evaluate in - assumed to be normalized
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHEvalDirection(pOut: PSingle; Order: LongWord;
|
|
const pDir: TD3DXVector3): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHEvalDirection}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHRotate:
|
|
// --------------------
|
|
// Rotates SH vector by a rotation matrix
|
|
//
|
|
// Parameters:
|
|
// pOut
|
|
// Output SH coefficients - basis function Ylm is stored at l*l + m+l
|
|
// This is the pointer that is returned (should not alias with pIn.)
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// pMatrix
|
|
// Matrix used for rotation - rotation sub matrix should be orthogonal
|
|
// and have a unit determinant.
|
|
// pIn
|
|
// Input SH coeffs (rotated), incorect results if this is also output.
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHRotate(pOut: PSingle; Order: LongWord;
|
|
const pMatrix: TD3DXMatrix; pIn: PSingle): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHRotate}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHRotateZ:
|
|
// --------------------
|
|
// Rotates the SH vector in the Z axis by an angle
|
|
//
|
|
// Parameters:
|
|
// pOut
|
|
// Output SH coefficients - basis function Ylm is stored at l*l + m+l
|
|
// This is the pointer that is returned (should not alias with pIn.)
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// Angle
|
|
// Angle in radians to rotate around the Z axis.
|
|
// pIn
|
|
// Input SH coeffs (rotated), incorect results if this is also output.
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHRotateZ(pOut: PSingle; Order: LongWord;
|
|
Angle: Single; pIn: PSingle): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHRotateZ}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHAdd:
|
|
// --------------------
|
|
// Adds two SH vectors, pOut[i] = pA[i] + pB[i];
|
|
//
|
|
// Parameters:
|
|
// pOut
|
|
// Output SH coefficients - basis function Ylm is stored at l*l + m+l
|
|
// This is the pointer that is returned.
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// pA
|
|
// Input SH coeffs.
|
|
// pB
|
|
// Input SH coeffs (second vector.)
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHAdd(pOut: PSingle; Order: LongWord;
|
|
pA, pB: PSingle): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHAdd}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHScale:
|
|
// --------------------
|
|
// Adds two SH vectors, pOut[i] = pA[i]*Scale;
|
|
//
|
|
// Parameters:
|
|
// pOut
|
|
// Output SH coefficients - basis function Ylm is stored at l*l + m+l
|
|
// This is the pointer that is returned.
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// pIn
|
|
// Input SH coeffs.
|
|
// Scale
|
|
// Scale factor.
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHScale(pOut: PSingle; Order: LongWord;
|
|
pIn: PSingle; Scale: Single): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHScale}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHDot:
|
|
// --------------------
|
|
// Computes the dot product of two SH vectors
|
|
//
|
|
// Parameters:
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// pA
|
|
// Input SH coeffs.
|
|
// pB
|
|
// Second set of input SH coeffs.
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHDot(Order: LongWord; pA, pB: PSingle): Single; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHDot}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHMultiply[O]:
|
|
// --------------------
|
|
// Computes the product of two functions represented using SH (f and g), where:
|
|
// pOut[i] = int(y_i(s) * f(s) * g(s)), where y_i(s) is the ith SH basis
|
|
// function, f(s) and g(s) are SH functions (sum_i(y_i(s)*c_i)). The order O
|
|
// determines the lengths of the arrays, where there should always be O^2
|
|
// coefficients. In general the product of two SH functions of order O generates
|
|
// and SH function of order 2*O - 1, but we truncate the result. This means
|
|
// that the product commutes (f*g == g*f) but doesn't associate
|
|
// (f*(g*h) != (f*g)*h.
|
|
//
|
|
// Parameters:
|
|
// pOut
|
|
// Output SH coefficients - basis function Ylm is stored at l*l + m+l
|
|
// This is the pointer that is returned.
|
|
// pF
|
|
// Input SH coeffs for first function.
|
|
// pG
|
|
// Second set of input SH coeffs.
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHMultiply2(pOut: PSingle; const pF, pG: PSingle): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHMultiply2}
|
|
function D3DXSHMultiply3(pOut: PSingle; const pF, pG: PSingle): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHMultiply3}
|
|
function D3DXSHMultiply4(pOut: PSingle; const pF, pG: PSingle): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHMultiply4}
|
|
function D3DXSHMultiply5(pOut: PSingle; const pF, pG: PSingle): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHMultiply5}
|
|
function D3DXSHMultiply6(pOut: PSingle; const pF, pG: PSingle): PSingle; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHMultiply6}
|
|
|
|
//============================================================================
|
|
//
|
|
// Basic Spherical Harmonic lighting routines
|
|
//
|
|
//============================================================================
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHEvalDirectionalLight:
|
|
// --------------------
|
|
// Evaluates a directional light and returns spectral SH data. The output
|
|
// vector is computed so that if the intensity of R/G/B is unit the resulting
|
|
// exit radiance of a point directly under the light on a diffuse object with
|
|
// an albedo of 1 would be 1.0. This will compute 3 spectral samples, pROut
|
|
// has to be specified, while pGout and pBout are optional.
|
|
//
|
|
// Parameters:
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// pDir
|
|
// Direction light is coming from (assumed to be normalized.)
|
|
// RIntensity
|
|
// Red intensity of light.
|
|
// GIntensity
|
|
// Green intensity of light.
|
|
// BIntensity
|
|
// Blue intensity of light.
|
|
// pROut
|
|
// Output SH vector for Red.
|
|
// pGOut
|
|
// Output SH vector for Green (optional.)
|
|
// pBOut
|
|
// Output SH vector for Blue (optional.)
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHEvalDirectionalLight(Order: LongWord; const pDir: TD3DXVector3;
|
|
RIntensity: Single; GIntensity: Single; BIntensity: Single;
|
|
pROut, pGOut, pBOut: PSingle): HResult; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHEvalDirectionalLight}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHEvalSphericalLight:
|
|
// --------------------
|
|
// Evaluates a spherical light and returns spectral SH data. There is no
|
|
// normalization of the intensity of the light like there is for directional
|
|
// lights, care has to be taken when specifiying the intensities. This will
|
|
// compute 3 spectral samples, pROut has to be specified, while pGout and
|
|
// pBout are optional.
|
|
//
|
|
// Parameters:
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// pPos
|
|
// Position of light - reciever is assumed to be at the origin.
|
|
// Radius
|
|
// Radius of the spherical light source.
|
|
// RIntensity
|
|
// Red intensity of light.
|
|
// GIntensity
|
|
// Green intensity of light.
|
|
// BIntensity
|
|
// Blue intensity of light.
|
|
// pROut
|
|
// Output SH vector for Red.
|
|
// pGOut
|
|
// Output SH vector for Green (optional.)
|
|
// pBOut
|
|
// Output SH vector for Blue (optional.)
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHEvalSphericalLight(Order: LongWord; const pPos: TD3DXVector3; Radius: Single;
|
|
RIntensity: Single; GIntensity: Single; BIntensity: Single;
|
|
pROut, pGOut, pBOut: PSingle): HResult; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHEvalSphericalLight}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHEvalConeLight:
|
|
// --------------------
|
|
// Evaluates a light that is a cone of constant intensity and returns spectral
|
|
// SH data. The output vector is computed so that if the intensity of R/G/B is
|
|
// unit the resulting exit radiance of a point directly under the light oriented
|
|
// in the cone direction on a diffuse object with an albedo of 1 would be 1.0.
|
|
// This will compute 3 spectral samples, pROut has to be specified, while pGout
|
|
// and pBout are optional.
|
|
//
|
|
// Parameters:
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// pDir
|
|
// Direction light is coming from (assumed to be normalized.)
|
|
// Radius
|
|
// Radius of cone in radians.
|
|
// RIntensity
|
|
// Red intensity of light.
|
|
// GIntensity
|
|
// Green intensity of light.
|
|
// BIntensity
|
|
// Blue intensity of light.
|
|
// pROut
|
|
// Output SH vector for Red.
|
|
// pGOut
|
|
// Output SH vector for Green (optional.)
|
|
// pBOut
|
|
// Output SH vector for Blue (optional.)
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHEvalConeLight(Order: LongWord; const pDir: TD3DXVector3; Radius: Single;
|
|
RIntensity: Single; GIntensity: Single; BIntensity: Single;
|
|
pROut, pGOut, pBOut: PSingle): HResult; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHEvalConeLight}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHEvalHemisphereLight:
|
|
// --------------------
|
|
// Evaluates a light that is a linear interpolant between two colors over the
|
|
// sphere. The interpolant is linear along the axis of the two points, not
|
|
// over the surface of the sphere (ie: if the axis was (0,0,1) it is linear in
|
|
// Z, not in the azimuthal angle.) The resulting spherical lighting function
|
|
// is normalized so that a point on a perfectly diffuse surface with no
|
|
// shadowing and a normal pointed in the direction pDir would result in exit
|
|
// radiance with a value of 1 if the top color was white and the bottom color
|
|
// was black. This is a very simple model where Top represents the intensity
|
|
// of the "sky" and Bottom represents the intensity of the "ground".
|
|
//
|
|
// Parameters:
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// pDir
|
|
// Axis of the hemisphere.
|
|
// Top
|
|
// Color of the upper hemisphere.
|
|
// Bottom
|
|
// Color of the lower hemisphere.
|
|
// pROut
|
|
// Output SH vector for Red.
|
|
// pGOut
|
|
// Output SH vector for Green
|
|
// pBOut
|
|
// Output SH vector for Blue
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHEvalHemisphereLight(Order: LongWord; const pDir: TD3DXVector3;
|
|
Top, Bottom: TD3DXColor;
|
|
pROut, pGOut, pBOut: PSingle): HResult; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHEvalHemisphereLight}
|
|
|
|
//============================================================================
|
|
//
|
|
// Basic Spherical Harmonic projection routines
|
|
//
|
|
//============================================================================
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHProjectCubeMap:
|
|
// --------------------
|
|
// Projects a function represented on a cube map into spherical harmonics.
|
|
//
|
|
// Parameters:
|
|
// Order
|
|
// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1
|
|
// pCubeMap
|
|
// CubeMap that is going to be projected into spherical harmonics
|
|
// pROut
|
|
// Output SH vector for Red.
|
|
// pGOut
|
|
// Output SH vector for Green
|
|
// pBOut
|
|
// Output SH vector for Blue
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHProjectCubeMap(Order: LongWord; pCubeMap: IDirect3DCubeTexture9;
|
|
pROut, pGOut, pBOut: PSingle): HResult; stdcall; external d3dx9mathDLL;
|
|
{$EXTERNALSYM D3DXSHProjectCubeMap}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// File: d3dx9core.h
|
|
// Content: D3DX core types and functions
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// D3DX_SDK_VERSION:
|
|
// -----------------
|
|
// This identifier is passed to D3DXCheckVersion in order to ensure that an
|
|
// application was built against the correct header files and lib files.
|
|
// This number is incremented whenever a header (or other) change would
|
|
// require applications to be rebuilt. If the version doesn't match,
|
|
// D3DXCheckVersion will return FALSE. (The number itself has no meaning.)
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
const
|
|
D3DX_VERSION = $0902;
|
|
{$EXTERNALSYM D3DX_VERSION}
|
|
D3DX_SDK_VERSION = 33;
|
|
{$EXTERNALSYM D3DX_SDK_VERSION}
|
|
|
|
function D3DXCheckVersion(D3DSdkVersion, D3DXSdkVersion: LongWord): BOOL; stdcall; external d3dx9coreDLL;
|
|
{$EXTERNALSYM D3DXCheckVersion}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// D3DXDebugMute
|
|
// Mutes D3DX and D3D debug spew (TRUE - mute, FALSE - not mute)
|
|
//
|
|
// returns previous mute value
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
function D3DXDebugMute(Mute: BOOL): BOOL; stdcall; external d3dx9coreDLL;
|
|
{$EXTERNALSYM D3DXDebugMute}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// D3DXGetDriverLevel:
|
|
// Returns driver version information:
|
|
//
|
|
// 700 - DX7 level driver
|
|
// 800 - DX8 level driver
|
|
// 900 - DX9 level driver
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
function D3DXGetDriverLevel(pDevice: IDirect3DDevice9): LongWord; stdcall; external d3dx9coreDLL;
|
|
{$EXTERNALSYM D3DXGetDriverLevel}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// 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.
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
type
|
|
PID3DXBuffer = ^ID3DXBuffer;
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXBuffer);'}
|
|
{$EXTERNALSYM ID3DXBuffer}
|
|
ID3DXBuffer = interface(IUnknown)
|
|
['{8BA5FB08-5195-40e2-AC58-0D989C3A0102}']
|
|
// ID3DXBuffer
|
|
function GetBufferPointer: Pointer; stdcall;
|
|
function GetBufferSize: DWord; stdcall;
|
|
end;
|
|
|
|
IID_ID3DXBuffer = ID3DXBuffer;
|
|
{$EXTERNALSYM IID_ID3DXBuffer}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// D3DXSPRITE flags:
|
|
// -----------------
|
|
// D3DXSPRITE_DONOTSAVESTATE
|
|
// Specifies device state is not to be saved and restored in Begin/End.
|
|
// D3DXSPRITE_DONOTMODIFY_RENDERSTATE
|
|
// Specifies device render state is not to be changed in Begin. The device
|
|
// is assumed to be in a valid state to draw vertices containing POSITION0,
|
|
// TEXCOORD0, and COLOR0 data.
|
|
// D3DXSPRITE_OBJECTSPACE
|
|
// The WORLD, VIEW, and PROJECTION transforms are NOT modified. The
|
|
// transforms currently set to the device are used to transform the sprites
|
|
// when the batch is drawn (at Flush or End). If this is not specified,
|
|
// WORLD, VIEW, and PROJECTION transforms are modified so that sprites are
|
|
// drawn in screenspace coordinates.
|
|
// D3DXSPRITE_BILLBOARD
|
|
// Rotates each sprite about its center so that it is facing the viewer.
|
|
// D3DXSPRITE_ALPHABLEND
|
|
// Enables ALPHABLEND(SRCALPHA, INVSRCALPHA) and ALPHATEST(alpha > 0).
|
|
// ID3DXFont expects this to be set when drawing text.
|
|
// D3DXSPRITE_SORT_TEXTURE
|
|
// Sprites are sorted by texture prior to drawing. This is recommended when
|
|
// drawing non-overlapping sprites of uniform depth. For example, drawing
|
|
// screen-aligned text with ID3DXFont.
|
|
// D3DXSPRITE_SORT_DEPTH_FRONTTOBACK
|
|
// Sprites are sorted by depth front-to-back prior to drawing. This is
|
|
// recommended when drawing opaque sprites of varying depths.
|
|
// D3DXSPRITE_SORT_DEPTH_BACKTOFRONT
|
|
// Sprites are sorted by depth back-to-front prior to drawing. This is
|
|
// recommended when drawing transparent sprites of varying depths.
|
|
// D3DXSPRITE_DO_NOT_ADDREF_TEXTURE
|
|
// Disables calling AddRef() on every draw, and Release() on Flush() for
|
|
// better performance.
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
const
|
|
D3DXSPRITE_DONOTSAVESTATE = (1 shl 0);
|
|
{$EXTERNALSYM D3DXSPRITE_DONOTSAVESTATE}
|
|
D3DXSPRITE_DONOTMODIFY_RENDERSTATE = (1 shl 1);
|
|
{$EXTERNALSYM D3DXSPRITE_DONOTMODIFY_RENDERSTATE}
|
|
D3DXSPRITE_OBJECTSPACE = (1 shl 2);
|
|
{$EXTERNALSYM D3DXSPRITE_OBJECTSPACE}
|
|
D3DXSPRITE_BILLBOARD = (1 shl 3);
|
|
{$EXTERNALSYM D3DXSPRITE_BILLBOARD}
|
|
D3DXSPRITE_ALPHABLEND = (1 shl 4);
|
|
{$EXTERNALSYM D3DXSPRITE_ALPHABLEND}
|
|
D3DXSPRITE_SORT_TEXTURE = (1 shl 5);
|
|
{$EXTERNALSYM D3DXSPRITE_SORT_TEXTURE}
|
|
D3DXSPRITE_SORT_DEPTH_FRONTTOBACK = (1 shl 6);
|
|
{$EXTERNALSYM D3DXSPRITE_SORT_DEPTH_FRONTTOBACK}
|
|
D3DXSPRITE_SORT_DEPTH_BACKTOFRONT = (1 shl 7);
|
|
{$EXTERNALSYM D3DXSPRITE_SORT_DEPTH_BACKTOFRONT}
|
|
D3DXSPRITE_DO_NOT_ADDREF_TEXTURE = (1 shl 8);
|
|
{$EXTERNALSYM D3DXSPRITE_DO_NOT_ADDREF_TEXTURE}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXSprite:
|
|
// ------------
|
|
// This object intends to provide an easy way to drawing sprites using D3D.
|
|
//
|
|
// Begin -
|
|
// Prepares device for drawing sprites.
|
|
//
|
|
// Draw -
|
|
// Draws a sprite. Before transformation, the sprite is the size of
|
|
// SrcRect, with its top-left corner specified by Position. The color
|
|
// and alpha channels are modulated by Color.
|
|
//
|
|
// Flush -
|
|
// Forces all batched sprites to submitted to the device.
|
|
//
|
|
// 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)
|
|
['{BA0B762D-7D28-43ec-B9DC-2F84443B0614}']
|
|
// ID3DXSprite
|
|
function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
|
|
|
|
function GetTransform(out pTransform: TD3DXMatrix): HResult; stdcall;
|
|
function SetTransform(const pTransform: TD3DXMatrix): HResult; stdcall;
|
|
|
|
function SetWorldViewRH(pWorld, pView: PD3DXMatrix): HResult; stdcall;
|
|
function SetWorldViewLH(pWorld, pView: PD3DXMatrix): HResult; stdcall;
|
|
|
|
function _Begin(Flags: DWORD): HResult; stdcall;
|
|
function Draw(pTexture: IDirect3DTexture9; pSrcRect: PRect; pCenter, pPosition: PD3DXVector3; Color: TD3DColor): HResult; stdcall;
|
|
function Flush: HResult; stdcall;
|
|
function _End: HResult; stdcall;
|
|
|
|
function OnLostDevice: HResult; stdcall;
|
|
function OnResetDevice: HResult; stdcall;
|
|
end;
|
|
|
|
IID_ID3DXSprite = ID3DXSprite;
|
|
{$EXTERNALSYM IID_ID3DXSprite}
|
|
|
|
function D3DXCreateSprite(pDevice: IDirect3DDevice9;
|
|
out ppSprite: ID3DXSprite): HResult; stdcall; external d3dx9coreDLL;
|
|
{$EXTERNALSYM D3DXCreateSprite}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXFont:
|
|
// ----------
|
|
// Font objects contain the textures and resources needed to render a specific
|
|
// font on a specific device.
|
|
//
|
|
// GetGlyphData -
|
|
// Returns glyph cache data, for a given glyph.
|
|
//
|
|
// PreloadCharacters/PreloadGlyphs/PreloadText -
|
|
// Preloads glyphs into the glyph cache textures.
|
|
//
|
|
// 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.
|
|
// If pSprite is NULL, an internal sprite object will be used.
|
|
//
|
|
// 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
|
|
PD3DXFontDescA = ^TD3DXFontDescA;
|
|
PD3DXFontDescW = ^TD3DXFontDescW;
|
|
PD3DXFontDesc = PD3DXFontDescA;
|
|
_D3DXFONT_DESCA = record
|
|
Height: Integer;
|
|
Width: Longint;
|
|
Weight: LongWord;
|
|
MipLevels: LongWord;
|
|
Italic: BOOL;
|
|
CharSet: Byte;
|
|
OutputPrecision: Byte;
|
|
Quality: Byte;
|
|
PitchAndFamily: Byte;
|
|
FaceName: array[0..LF_FACESIZE-1] of AnsiChar;
|
|
end;
|
|
{$EXTERNALSYM _D3DXFONT_DESCA}
|
|
_D3DXFONT_DESCW = record
|
|
Height: Integer;
|
|
Width: Longint;
|
|
Weight: LongWord;
|
|
MipLevels: LongWord;
|
|
Italic: BOOL;
|
|
CharSet: Byte;
|
|
OutputPrecision: Byte;
|
|
Quality: Byte;
|
|
PitchAndFamily: Byte;
|
|
FaceName: array[0..LF_FACESIZE-1] of WideChar;
|
|
end;
|
|
{$EXTERNALSYM _D3DXFONT_DESCW}
|
|
_D3DXFONT_DESC = _D3DXFONT_DESCA;
|
|
{$EXTERNALSYM _D3DXFONT_DESC}
|
|
D3DXFONT_DESCA = _D3DXFONT_DESCA;
|
|
{$EXTERNALSYM D3DXFONT_DESCA}
|
|
D3DXFONT_DESCW = _D3DXFONT_DESCW;
|
|
{$EXTERNALSYM D3DXFONT_DESCW}
|
|
D3DXFONT_DESC = D3DXFONT_DESCA;
|
|
{$EXTERNALSYM D3DXFONT_DESC}
|
|
TD3DXFontDescA = _D3DXFONT_DESCA;
|
|
TD3DXFontDescW = _D3DXFONT_DESCW;
|
|
TD3DXFontDesc = TD3DXFontDescA;
|
|
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXFont);'}
|
|
{$EXTERNALSYM ID3DXFont}
|
|
ID3DXFont = interface(IUnknown)
|
|
['{D79DBB70-5F21-4d36-BBC2-FF525C213CDC}']
|
|
// ID3DXFont
|
|
function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
|
|
function GetDescA(out pDesc: TD3DXFontDescA): HResult; stdcall;
|
|
function GetDescW(out pDesc: TD3DXFontDescW): HResult; stdcall;
|
|
function GetTextMetricsA(out pTextMetrics: TTextMetricA): BOOL; stdcall;
|
|
function GetTextMetricsW(out pTextMetrics: TTextMetricW): BOOL; stdcall;
|
|
|
|
function GetDC: HDC; stdcall;
|
|
function GetGlyphData(Glyph: LongWord; out ppTexture: IDirect3DTexture9; pBlackBox: PRect; pCellInc: PPoint): HResult; stdcall;
|
|
|
|
function PreloadCharacters(First, Last: LongWord): HResult; stdcall;
|
|
function PreloadGlyphs(First, Last: LongWord): HResult; stdcall;
|
|
function PreloadTextA(pString: PAnsiChar; Count: Integer): HResult; stdcall;
|
|
function PreloadTextW(pString: PWideChar; Count: Integer): HResult; stdcall;
|
|
|
|
function DrawTextA(pSprite: ID3DXSprite; pString: PAnsiChar; Count: Integer; pRect: PRect; Format: DWORD; Color: TD3DColor): Integer; stdcall;
|
|
function DrawTextW(pSprite: ID3DXSprite; pString: PWideChar; Count: Integer; pRect: PRect; Format: DWORD; Color: TD3DColor): Integer; stdcall;
|
|
|
|
function OnLostDevice: HResult; stdcall;
|
|
function OnResetDevice: HResult; stdcall;
|
|
end;
|
|
|
|
IID_ID3DXFont = ID3DXFont;
|
|
{$EXTERNALSYM IID_ID3DXFont}
|
|
|
|
|
|
function D3DXCreateFontA(
|
|
pDevice: IDirect3DDevice9;
|
|
Height: Integer;
|
|
Width: Longint;
|
|
Weight: LongWord;
|
|
MipLevels: LongWord;
|
|
Italic: BOOL;
|
|
CharSet: DWORD;
|
|
OutputPrecision: DWORD;
|
|
Quality: DWORD;
|
|
PitchAndFamily: DWORD;
|
|
pFaceName: PAnsiChar;
|
|
out ppFont: ID3DXFont): HResult; stdcall; external d3dx9coreDLL name 'D3DXCreateFontA';
|
|
{$EXTERNALSYM D3DXCreateFontA}
|
|
|
|
function D3DXCreateFontW(
|
|
pDevice: IDirect3DDevice9;
|
|
Height: Integer;
|
|
Width: Longint;
|
|
Weight: LongWord;
|
|
MipLevels: LongWord;
|
|
Italic: BOOL;
|
|
CharSet: DWORD;
|
|
OutputPrecision: DWORD;
|
|
Quality: DWORD;
|
|
PitchAndFamily: DWORD;
|
|
pFaceName: PWideChar;
|
|
out ppFont: ID3DXFont): HResult; stdcall; external d3dx9coreDLL name 'D3DXCreateFontW';
|
|
{$EXTERNALSYM D3DXCreateFontW}
|
|
|
|
function D3DXCreateFont(
|
|
pDevice: IDirect3DDevice9;
|
|
Height: Integer;
|
|
Width: Longint;
|
|
Weight: LongWord;
|
|
MipLevels: LongWord;
|
|
Italic: BOOL;
|
|
CharSet: DWORD;
|
|
OutputPrecision: DWORD;
|
|
Quality: DWORD;
|
|
PitchAndFamily: DWORD;
|
|
pFaceName: PChar;
|
|
out ppFont: ID3DXFont): HResult; stdcall; external d3dx9coreDLL name 'D3DXCreateFontA';
|
|
{$EXTERNALSYM D3DXCreateFont}
|
|
|
|
|
|
function D3DXCreateFontIndirectA(
|
|
pDevice: IDirect3DDevice9;
|
|
const pDesc: TD3DXFontDescA;
|
|
out ppFont: ID3DXFont): HResult; stdcall; external d3dx9coreDLL name 'D3DXCreateFontIndirectA';
|
|
{$EXTERNALSYM D3DXCreateFontIndirectA}
|
|
|
|
function D3DXCreateFontIndirectW(
|
|
pDevice: IDirect3DDevice9;
|
|
const pDesc: TD3DXFontDescW;
|
|
out ppFont: ID3DXFont): HResult; stdcall; external d3dx9coreDLL name 'D3DXCreateFontIndirectW';
|
|
{$EXTERNALSYM D3DXCreateFontIndirectW}
|
|
|
|
function D3DXCreateFontIndirect(
|
|
pDevice: IDirect3DDevice9;
|
|
const pDesc: TD3DXFontDesc;
|
|
out ppFont: ID3DXFont): HResult; stdcall; external d3dx9coreDLL name 'D3DXCreateFontIndirectA';
|
|
{$EXTERNALSYM D3DXCreateFontIndirect}
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// 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 = 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)
|
|
['{6985F346-2C3D-43b3-BE8B-DAAE8A03D894}']
|
|
// ID3DXRenderToSurface
|
|
function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
|
|
function GetDesc(out pDesc: TD3DXRTSDesc): HResult; stdcall;
|
|
|
|
function BeginScene(pSurface: IDirect3DSurface9; pViewport: PD3DViewport9): HResult; stdcall;
|
|
function EndScene(MipFilter: DWORD): HResult; stdcall;
|
|
|
|
function OnLostDevice: HResult; stdcall;
|
|
function OnResetDevice: HResult; stdcall;
|
|
end;
|
|
|
|
IID_ID3DXRenderToSurface = ID3DXRenderToSurface;
|
|
{$EXTERNALSYM IID_ID3DXRenderToSurface}
|
|
|
|
|
|
function D3DXCreateRenderToSurface(ppDevice: IDirect3DDevice9;
|
|
Width: LongWord;
|
|
Height: LongWord;
|
|
Format: TD3DFormat;
|
|
DepthStencil: BOOL;
|
|
DepthStencilFormat: TD3DFormat;
|
|
out ppRenderToSurface: ID3DXRenderToSurface): HResult; stdcall; external d3dx9coreDLL;
|
|
{$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;
|
|
MipLevels: 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)
|
|
['{313F1B4B-C7B0-4fa2-9D9D-8D380B64385E}']
|
|
// ID3DXRenderToEnvMap
|
|
function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
|
|
function GetDesc(out pDesc: TD3DXRTEDesc): HResult; stdcall;
|
|
|
|
function BeginCube(pCubeTex: IDirect3DCubeTexture9): HResult; stdcall;
|
|
|
|
function BeginSphere(pTex: IDirect3DTexture9): HResult; stdcall;
|
|
|
|
function BeginHemisphere(pTexZPos, pTexZNeg: IDirect3DTexture9): HResult; stdcall;
|
|
|
|
function BeginParabolic(pTexZPos, pTexZNeg: IDirect3DTexture9): HResult; stdcall;
|
|
|
|
function Face(Face: TD3DCubemapFaces; MipFilter: DWORD): HResult; stdcall;
|
|
function _End(MipFilter: DWORD): HResult; stdcall;
|
|
|
|
function OnLostDevice: HResult; stdcall;
|
|
function OnResetDevice: HResult; stdcall;
|
|
end;
|
|
|
|
IID_ID3DXRenderToEnvMap = ID3DXRenderToEnvMap;
|
|
{$EXTERNALSYM IID_ID3DXRenderToEnvMap}
|
|
|
|
|
|
function D3DXCreateRenderToEnvMap(ppDevice: IDirect3DDevice9;
|
|
Size: LongWord;
|
|
MipLevels: LongWord;
|
|
Format: TD3DFormat;
|
|
DepthStencil: BOOL;
|
|
DepthStencilFormat: TD3DFormat;
|
|
out ppRenderToEnvMap: ID3DXRenderToEnvMap): HResult; stdcall; external d3dx9coreDLL;
|
|
{$EXTERNALSYM D3DXCreateRenderToEnvMap}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// ID3DXLine:
|
|
// ------------
|
|
// This object intends to provide an easy way to draw lines using D3D.
|
|
//
|
|
// Begin -
|
|
// Prepares device for drawing lines
|
|
//
|
|
// Draw -
|
|
// Draws a line strip in screen-space.
|
|
// Input is in the form of a array defining points on the line strip. of D3DXVECTOR2
|
|
//
|
|
// DrawTransform -
|
|
// Draws a line in screen-space with a specified input transformation matrix.
|
|
//
|
|
// End -
|
|
// Restores device state to how it was when Begin was called.
|
|
//
|
|
// SetPattern -
|
|
// Applies a stipple pattern to the line. Input is one 32-bit
|
|
// DWORD which describes the stipple pattern. 1 is opaque, 0 is
|
|
// transparent.
|
|
//
|
|
// SetPatternScale -
|
|
// Stretches the stipple pattern in the u direction. Input is one
|
|
// floating-point value. 0.0f is no scaling, whereas 1.0f doubles
|
|
// the length of the stipple pattern.
|
|
//
|
|
// SetWidth -
|
|
// Specifies the thickness of the line in the v direction. Input is
|
|
// one floating-point value.
|
|
//
|
|
// SetAntialias -
|
|
// Toggles line antialiasing. Input is a BOOL.
|
|
// TRUE = Antialiasing on.
|
|
// FALSE = Antialiasing off.
|
|
//
|
|
// SetGLLines -
|
|
// Toggles non-antialiased OpenGL line emulation. Input is a BOOL.
|
|
// TRUE = OpenGL line emulation on.
|
|
// FALSE = OpenGL line emulation off.
|
|
//
|
|
// OpenGL line: Regular line:
|
|
// *\ *\
|
|
// | \ / \
|
|
// | \ *\ \
|
|
// *\ \ \ \
|
|
// \ \ \ \
|
|
// \ * \ *
|
|
// \ | \ /
|
|
// \| *
|
|
// *
|
|
//
|
|
// 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(ID3DXLine);'}
|
|
{$EXTERNALSYM ID3DXLine}
|
|
ID3DXLine = interface(IUnknown)
|
|
['{D379BA7F-9042-4ac4-9F5E-58192A4C6BD8}']
|
|
// ID3DXLine
|
|
function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
|
|
|
|
function _Begin: HResult; stdcall;
|
|
|
|
function Draw(pVertexList: PD3DXVector2; dwVertexListCount: DWORD; Color: TD3DColor): HResult; stdcall;
|
|
|
|
function DrawTransform(pVertexList: PD3DXVector3; dwVertexListCount: DWORD;
|
|
const pTransform: TD3DXMatrix; Color: TD3DColor): HResult; stdcall;
|
|
|
|
function SetPattern(dwPattern: DWORD): HResult; stdcall;
|
|
function GetPattern: DWORD; stdcall;
|
|
|
|
function SetPatternScale(fPatternScale: Single): HResult; stdcall;
|
|
function GetPatternScale: Single; stdcall;
|
|
|
|
function SetWidth(fWidth: Single): HResult; stdcall;
|
|
function GetWidth: Single; stdcall;
|
|
|
|
function SetAntialias(bAntialias: BOOL): HResult; stdcall;
|
|
function GetAntialias: BOOL; stdcall;
|
|
|
|
function SetGLLines(bGLLines: BOOL): HResult; stdcall;
|
|
function GetGLLines: BOOL; stdcall;
|
|
|
|
function _End: HResult; stdcall;
|
|
|
|
function OnLostDevice: HResult; stdcall;
|
|
function OnResetDevice: HResult; stdcall;
|
|
end;
|
|
|
|
IID_ID3DXLine = ID3DXLine;
|
|
{$EXTERNALSYM IID_ID3DXLine}
|
|
|
|
|
|
function D3DXCreateLine(ppDevice: IDirect3DDevice9;
|
|
out ppLine: ID3DXLine): HResult; stdcall; external d3dx9coreDLL;
|
|
{$EXTERNALSYM D3DXCreateLine}
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// File: d3dx9shader.h
|
|
// Content: D3DX Shader APIs
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// D3DXTX_VERSION:
|
|
// --------------
|
|
// Version token used to create a procedural texture filler in effects
|
|
// Used by D3DXFill[]TX functions
|
|
//---------------------------------------------------------------------------
|
|
// #define D3DXTX_VERSION(_Major,_Minor) (('T' << 24) | ('X' << 16) | ((_Major) << 8) | (_Minor))
|
|
function D3DXTX_VERSION(_Major, _Minor: Byte): DWORD;
|
|
{$EXTERNALSYM D3DXTX_VERSION}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXSHADER flags:
|
|
// -----------------
|
|
// D3DXSHADER_DEBUG
|
|
// Insert debug file/line/type/symbol information.
|
|
//
|
|
// D3DXSHADER_SKIPVALIDATION
|
|
// Do not validate the generated code against known capabilities and
|
|
// constraints. This option is only recommended when compiling shaders
|
|
// you KNOW will work. (ie. have compiled before without this option.)
|
|
// Shaders are always validated by D3D before they are set to the device.
|
|
//
|
|
// D3DXSHADER_SKIPOPTIMIZATION
|
|
// Instructs the compiler to skip optimization steps during code generation.
|
|
// Unless you are trying to isolate a problem in your code using this option
|
|
// is not recommended.
|
|
//
|
|
// D3DXSHADER_PACKMATRIX_ROWMAJOR
|
|
// Unless explicitly specified, matrices will be packed in row-major order
|
|
// on input and output from the shader.
|
|
//
|
|
// D3DXSHADER_PACKMATRIX_COLUMNMAJOR
|
|
// Unless explicitly specified, matrices will be packed in column-major
|
|
// order on input and output from the shader. This is generally more
|
|
// efficient, since it allows vector-matrix multiplication to be performed
|
|
// using a series of dot-products.
|
|
//
|
|
// D3DXSHADER_PARTIALPRECISION
|
|
// Force all computations in resulting shader to occur at partial precision.
|
|
// This may result in faster evaluation of shaders on some hardware.
|
|
//
|
|
// D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
|
|
// Force compiler to compile against the next highest available software
|
|
// target for vertex shaders. This flag also turns optimizations off,
|
|
// and debugging on.
|
|
//
|
|
// D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
|
|
// Force compiler to compile against the next highest available software
|
|
// target for pixel shaders. This flag also turns optimizations off,
|
|
// and debugging on.
|
|
//
|
|
// D3DXSHADER_NO_PRESHADER
|
|
// Disables Preshaders. Using this flag will cause the compiler to not
|
|
// pull out static expression for evaluation on the host cpu
|
|
//
|
|
// D3DXSHADER_AVOID_FLOW_CONTROL
|
|
// Hint compiler to avoid flow-control constructs where possible.
|
|
//
|
|
// D3DXSHADER_PREFER_FLOW_CONTROL
|
|
// Hint compiler to prefer flow-control constructs where possible.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
const
|
|
D3DXSHADER_DEBUG = (1 shl 0);
|
|
{$EXTERNALSYM D3DXSHADER_DEBUG}
|
|
D3DXSHADER_SKIPVALIDATION = (1 shl 1);
|
|
{$EXTERNALSYM D3DXSHADER_SKIPVALIDATION}
|
|
D3DXSHADER_SKIPOPTIMIZATION = (1 shl 2);
|
|
{$EXTERNALSYM D3DXSHADER_SKIPOPTIMIZATION}
|
|
D3DXSHADER_PACKMATRIX_ROWMAJOR = (1 shl 3);
|
|
{$EXTERNALSYM D3DXSHADER_PACKMATRIX_ROWMAJOR}
|
|
D3DXSHADER_PACKMATRIX_COLUMNMAJOR = (1 shl 4);
|
|
{$EXTERNALSYM D3DXSHADER_PACKMATRIX_COLUMNMAJOR}
|
|
D3DXSHADER_PARTIALPRECISION = (1 shl 5);
|
|
{$EXTERNALSYM D3DXSHADER_PARTIALPRECISION}
|
|
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT = (1 shl 6);
|
|
{$EXTERNALSYM D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT}
|
|
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT = (1 shl 7);
|
|
{$EXTERNALSYM D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT}
|
|
D3DXSHADER_NO_PRESHADER = (1 shl 8);
|
|
{$EXTERNALSYM D3DXSHADER_NO_PRESHADER}
|
|
D3DXSHADER_AVOID_FLOW_CONTROL = (1 shl 9);
|
|
{$EXTERNALSYM D3DXSHADER_AVOID_FLOW_CONTROL}
|
|
D3DXSHADER_PREFER_FLOW_CONTROL = (1 shl 10);
|
|
{$EXTERNALSYM D3DXSHADER_PREFER_FLOW_CONTROL}
|
|
D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY = (1 shl 12);
|
|
{$EXTERNALSYM D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY}
|
|
D3DXSHADER_IEEE_STRICTNESS = (1 shl 13);
|
|
{$EXTERNALSYM D3DXSHADER_IEEE_STRICTNESS}
|
|
D3DXSHADER_USE_LEGACY_D3DX9_31_DLL = (1 shl 16);
|
|
{$EXTERNALSYM D3DXSHADER_USE_LEGACY_D3DX9_31_DLL}
|
|
|
|
|
|
// optimization level flags
|
|
D3DXSHADER_OPTIMIZATION_LEVEL0 = (1 shl 14);
|
|
{$EXTERNALSYM D3DXSHADER_OPTIMIZATION_LEVEL0}
|
|
D3DXSHADER_OPTIMIZATION_LEVEL1 = 0;
|
|
{$EXTERNALSYM D3DXSHADER_OPTIMIZATION_LEVEL1}
|
|
D3DXSHADER_OPTIMIZATION_LEVEL2 = ((1 shl 14) or (1 shl 15));
|
|
{$EXTERNALSYM D3DXSHADER_OPTIMIZATION_LEVEL2}
|
|
D3DXSHADER_OPTIMIZATION_LEVEL3 = (1 shl 15);
|
|
{$EXTERNALSYM D3DXSHADER_OPTIMIZATION_LEVEL3}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXHANDLE:
|
|
// -----------
|
|
// Handle values used to efficiently reference shader and effect parameters.
|
|
// Strings can be used as handles. However, handles are not always strings.
|
|
//----------------------------------------------------------------------------
|
|
|
|
type
|
|
{$HPPEMIT 'typedef D3DXHANDLE TD3DXHandle;'}
|
|
{$HPPEMIT 'typedef D3DXHANDLE *PD3DXHandle;'}
|
|
PD3DXHandle = ^TD3DXHandle;
|
|
{$EXTERNALSYM PD3DXHandle}
|
|
TD3DXHandle = {$IFDEF TYPE_IDENTITY}type {$ENDIF}PAnsiChar;
|
|
{$NODEFINE TD3DXHandle}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXMACRO:
|
|
// ----------
|
|
// Preprocessor macro definition. The application pass in a NULL-terminated
|
|
// array of this structure to various D3DX APIs. This enables the application
|
|
// to #define tokens at runtime, before the file is parsed.
|
|
//----------------------------------------------------------------------------
|
|
|
|
PD3DXMacro = ^TD3DXMacro;
|
|
_D3DXMACRO = record
|
|
Name: PAnsiChar;
|
|
Definition: PAnsiChar;
|
|
end;
|
|
{$EXTERNALSYM _D3DXMACRO}
|
|
D3DXMACRO = _D3DXMACRO;
|
|
{$EXTERNALSYM D3DXMACRO}
|
|
TD3DXMacro = _D3DXMACRO;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXSEMANTIC:
|
|
//----------------------------------------------------------------------------
|
|
|
|
PD3DXSemantic = ^TD3DXSemantic;
|
|
_D3DXSEMANTIC = record
|
|
Usage: LongWord;
|
|
UsageIndex: LongWord;
|
|
end;
|
|
{$EXTERNALSYM _D3DXSEMANTIC}
|
|
D3DXSEMANTIC = _D3DXSEMANTIC;
|
|
{$EXTERNALSYM D3DXSEMANTIC}
|
|
TD3DXSemantic = _D3DXSEMANTIC;
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFRAGMENT_DESC:
|
|
//----------------------------------------------------------------------------
|
|
|
|
PD3DXFragmentDesc = ^TD3DXFragmentDesc;
|
|
_D3DXFRAGMENT_DESC = record
|
|
Name: PAnsiChar;
|
|
Target: DWORD;
|
|
end;
|
|
{$EXTERNALSYM _D3DXFRAGMENT_DESC}
|
|
D3DXFRAGMENT_DESC = _D3DXFRAGMENT_DESC;
|
|
{$EXTERNALSYM D3DXFRAGMENT_DESC}
|
|
TD3DXFragmentDesc = _D3DXFRAGMENT_DESC;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXREGISTER_SET:
|
|
//----------------------------------------------------------------------------
|
|
|
|
_D3DXREGISTER_SET = (
|
|
D3DXRS_BOOL,
|
|
D3DXRS_INT4,
|
|
D3DXRS_FLOAT4,
|
|
D3DXRS_SAMPLER
|
|
);
|
|
{$EXTERNALSYM _D3DXREGISTER_SET}
|
|
D3DXREGISTER_SET = _D3DXREGISTER_SET;
|
|
{$EXTERNALSYM D3DXREGISTER_SET}
|
|
TD3DXRegisterSet = _D3DXREGISTER_SET;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXPARAMETER_CLASS:
|
|
//----------------------------------------------------------------------------
|
|
|
|
_D3DXPARAMETER_CLASS = (
|
|
D3DXPC_SCALAR,
|
|
D3DXPC_VECTOR,
|
|
D3DXPC_MATRIX_ROWS,
|
|
D3DXPC_MATRIX_COLUMNS,
|
|
D3DXPC_OBJECT,
|
|
D3DXPC_STRUCT
|
|
);
|
|
{$EXTERNALSYM _D3DXPARAMETER_CLASS}
|
|
D3DXPARAMETER_CLASS = _D3DXPARAMETER_CLASS;
|
|
{$EXTERNALSYM D3DXPARAMETER_CLASS}
|
|
TD3DXParameterClass = _D3DXPARAMETER_CLASS;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXPARAMETER_TYPE:
|
|
//----------------------------------------------------------------------------
|
|
|
|
_D3DXPARAMETER_TYPE = (
|
|
D3DXPT_VOID,
|
|
D3DXPT_BOOL,
|
|
D3DXPT_INT,
|
|
D3DXPT_FLOAT,
|
|
D3DXPT_STRING,
|
|
D3DXPT_TEXTURE,
|
|
D3DXPT_TEXTURE1D,
|
|
D3DXPT_TEXTURE2D,
|
|
D3DXPT_TEXTURE3D,
|
|
D3DXPT_TEXTURECUBE,
|
|
D3DXPT_SAMPLER,
|
|
D3DXPT_SAMPLER1D,
|
|
D3DXPT_SAMPLER2D,
|
|
D3DXPT_SAMPLER3D,
|
|
D3DXPT_SAMPLERCUBE,
|
|
D3DXPT_PIXELSHADER,
|
|
D3DXPT_VERTEXSHADER,
|
|
D3DXPT_PIXELFRAGMENT,
|
|
D3DXPT_VERTEXFRAGMENT,
|
|
D3DXPT_UNSUPPORTED
|
|
);
|
|
{$EXTERNALSYM _D3DXPARAMETER_TYPE}
|
|
D3DXPARAMETER_TYPE = _D3DXPARAMETER_TYPE;
|
|
{$EXTERNALSYM D3DXPARAMETER_TYPE}
|
|
TD3DXParameterType = _D3DXPARAMETER_TYPE;
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCONSTANTTABLE_DESC:
|
|
//----------------------------------------------------------------------------
|
|
|
|
PD3DXConstantTableDesc = ^TD3DXConstantTableDesc;
|
|
_D3DXCONSTANTTABLE_DESC = record
|
|
Creator: PAnsiChar; // Creator string
|
|
Version: DWORD; // Shader version
|
|
Constants: LongWord; // Number of constants
|
|
end;
|
|
{$EXTERNALSYM _D3DXCONSTANTTABLE_DESC}
|
|
D3DXCONSTANTTABLE_DESC = _D3DXCONSTANTTABLE_DESC;
|
|
{$EXTERNALSYM D3DXCONSTANTTABLE_DESC}
|
|
TD3DXConstantTableDesc = _D3DXCONSTANTTABLE_DESC;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCONSTANT_DESC:
|
|
//----------------------------------------------------------------------------
|
|
|
|
PD3DXConstantDesc = ^TD3DXConstantDesc;
|
|
_D3DXCONSTANT_DESC = record
|
|
Name: PAnsiChar; // Constant name
|
|
|
|
RegisterSet: TD3DXRegisterSet; // Register set
|
|
RegisterIndex: LongWord; // Register index
|
|
RegisterCount: LongWord; // Number of registers occupied
|
|
|
|
_Class: TD3DXParameterClass; // Class
|
|
_Type: TD3DXParameterType; // Component type
|
|
|
|
Rows: LongWord; // Number of rows
|
|
Columns: LongWord; // Number of columns
|
|
Elements: LongWord; // Number of array elements
|
|
StructMembers: LongWord; // Number of structure member sub-parameters
|
|
|
|
Bytes: LongWord; // Data size, in bytes
|
|
DefaultValue: Pointer; // Pointer to default value
|
|
end;
|
|
{$EXTERNALSYM _D3DXCONSTANT_DESC}
|
|
D3DXCONSTANT_DESC = _D3DXCONSTANT_DESC;
|
|
{$EXTERNALSYM D3DXCONSTANT_DESC}
|
|
TD3DXConstantDesc = _D3DXCONSTANT_DESC;
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXConstantTable:
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
PID3DXConstantTable = ^ID3DXConstantTable;
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXConstantTable);'}
|
|
{$EXTERNALSYM ID3DXConstantTable}
|
|
ID3DXConstantTable = interface(ID3DXBuffer)
|
|
['{AB3C758F-093E-4356-B762-4DB18F1B3A01}']
|
|
// Descs
|
|
function GetDesc(out pDesc: TD3DXConstantTableDesc): HResult; stdcall;
|
|
function GetConstantDesc(hConstant: TD3DXHandle; pConstantDesc: PD3DXConstantDesc; var pCount: LongWord): HResult; stdcall;
|
|
function GetSamplerIndex(hConstant: TD3DXHandle): LongWord; stdcall;
|
|
|
|
// Handle operations
|
|
function GetConstant(hConstant: TD3DXHandle; Index: LongWord): TD3DXHandle; stdcall;
|
|
function GetConstantByName(hConstant: TD3DXHandle; pName: PAnsiChar): TD3DXHandle; stdcall;
|
|
function GetConstantElement(hConstant: TD3DXHandle; Index: LongWord): TD3DXHandle; stdcall;
|
|
|
|
// Set Constants
|
|
function SetDefaults(pDevice: IDirect3DDevice9): HResult; stdcall;
|
|
function SetValue(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; pData: Pointer; Bytes: LongWord): HResult; stdcall;
|
|
function SetBool(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; b: BOOL): HResult; stdcall;
|
|
function SetBoolArray(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; pb: PBOOL; Count: LongWord): HResult; stdcall;
|
|
function SetInt(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; n: Integer): HResult; stdcall;
|
|
function SetIntArray(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; pn: PInteger; Count: LongWord): HResult; stdcall;
|
|
function SetFloat(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; f: Single): HResult; stdcall;
|
|
function SetFloatArray(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; pf: PSingle; Count: LongWord): HResult; stdcall;
|
|
function SetVector(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; const pVector: TD3DXVector4): HResult; stdcall;
|
|
function SetVectorArray(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; pVector: PD3DXVector4; Count: LongWord): HResult; stdcall;
|
|
function SetMatrix(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; const pMatrix: TD3DXMatrix): HResult; stdcall;
|
|
function SetMatrixArray(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; pMatrix: PD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function SetMatrixPointerArray(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; ppMatrix: PPD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function SetMatrixTranspose(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; const pMatrix: TD3DXMatrix): HResult; stdcall;
|
|
function SetMatrixTransposeArray(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; pMatrix: PD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function SetMatrixTransposePointerArray(pDevice: IDirect3DDevice9; hConstant: TD3DXHandle; ppMatrix: PPD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
end;
|
|
|
|
IID_ID3DXConstantTable = ID3DXConstantTable;
|
|
{$EXTERNALSYM IID_ID3DXConstantTable}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXTextureShader:
|
|
//----------------------------------------------------------------------------
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXTextureShader);'}
|
|
{$EXTERNALSYM ID3DXTextureShader}
|
|
ID3DXTextureShader = interface(IUnknown)
|
|
['{3E3D67F8-AA7A-405d-A857-BA01D4758426}']
|
|
// Gets
|
|
function GetFunction(out ppFunction: ID3DXBuffer): HResult; stdcall;
|
|
function GetConstantBuffer(out ppConstantBuffer: ID3DXBuffer): HResult; stdcall;
|
|
|
|
// Descs
|
|
function GetDesc(out pDesc: TD3DXConstantTableDesc): HResult; stdcall;
|
|
function GetConstantDesc(hConstant: TD3DXHandle; pConstantDesc: PD3DXConstantDesc; out pCount: LongWord): HResult; stdcall;
|
|
|
|
// Handle operations
|
|
function GetConstant(hConstant: TD3DXHandle; Index: LongWord): TD3DXHandle; stdcall;
|
|
function GetConstantByName(hConstant: TD3DXHandle; pName: PAnsiChar): TD3DXHandle; stdcall;
|
|
function GetConstantElement(hConstant: TD3DXHandle; Index: LongWord): TD3DXHandle; stdcall;
|
|
|
|
// Set Constants
|
|
function SetDefaults: HResult; stdcall;
|
|
function SetValue(hConstant: TD3DXHandle; pData: Pointer; Bytes: LongWord): HResult; stdcall;
|
|
function SetBool(hConstant: TD3DXHandle; b: BOOL): HResult; stdcall;
|
|
function SetBoolArray(hConstant: TD3DXHandle; const pb: PBOOL; Count: LongWord): HResult; stdcall;
|
|
function SetInt(hConstant: TD3DXHandle; n: Integer): HResult; stdcall;
|
|
function SetIntArray(hConstant: TD3DXHandle; const pn: PInteger; Count: LongWord): HResult; stdcall;
|
|
function SetFloat(hConstant: TD3DXHandle; f: Single): HResult; stdcall;
|
|
function SetFloatArray(hConstant: TD3DXHandle; const pf: PSingle; Count: LongWord): HResult; stdcall;
|
|
function SetVector(hConstant: TD3DXHandle; const pVector: TD3DXVector4): HResult; stdcall;
|
|
function SetVectorArray(hConstant: TD3DXHandle; const pVector: PD3DXVector4; Count: LongWord): HResult; stdcall;
|
|
function SetMatrix(hConstant: TD3DXHandle; const pMatrix: TD3DXMatrix): HResult; stdcall;
|
|
function SetMatrixArray(hConstant: TD3DXHandle; const pMatrix: PD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function SetMatrixPointerArray(hConstant: TD3DXHandle; const ppMatrix: PPD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function SetMatrixTranspose(hConstant: TD3DXHandle; const pMatrix: TD3DXMatrix): HResult; stdcall;
|
|
function SetMatrixTransposeArray(hConstant: TD3DXHandle; const pMatrix: PD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function SetMatrixTransposePointerArray(hConstant: TD3DXHandle; const ppMatrix: PPD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
end;
|
|
|
|
IID_ID3DXTextureShader = ID3DXTextureShader;
|
|
{$EXTERNALSYM IID_ID3DXTextureShader}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXFragmentLinker
|
|
//----------------------------------------------------------------------------
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXFragmentLinker);'}
|
|
{$EXTERNALSYM ID3DXFragmentLinker}
|
|
ID3DXFragmentLinker = interface(IUnknown)
|
|
['{1A2C0CC2-E5B6-4ebc-9E8D-390E057811B6}']
|
|
// ID3DXFragmentLinker
|
|
|
|
// fragment access and information retrieval functions
|
|
function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
|
|
function GetNumberOfFragments: LongWord; stdcall;
|
|
|
|
function GetFragmentHandleByIndex(Index: LongWord): TD3DXHandle; stdcall;
|
|
function GetFragmentHandleByName(Name: PAnsiChar): TD3DXHandle; stdcall;
|
|
function GetFragmentDesc(Name: TD3DXHandle; out FragDesc: TD3DXFragmentDesc): HResult; stdcall;
|
|
|
|
// add the fragments in the buffer to the linker
|
|
function AddFragments(Fragments: PDWORD): HResult; stdcall;
|
|
|
|
// Create a buffer containing the fragments. Suitable for saving to disk
|
|
function GetAllFragments(out ppBuffer: ID3DXBuffer): HResult; stdcall;
|
|
function GetFragment(Name: TD3DXHandle; out ppBuffer: ID3DXBuffer): HResult; stdcall;
|
|
|
|
function LinkShader(pProfile: PAnsiChar; Flags: DWORD; rgFragmentHandles: PD3DXHandle; cFragments: LongWord; out ppBuffer: ID3DXBuffer; ppErrorMsgs: PID3DXBuffer): HResult; stdcall;
|
|
function LinkVertexShader(pProfile: PAnsiChar; Flags: DWORD; rgFragmentHandles: PD3DXHandle; cFragments: LongWord; out pVShader: IDirect3DVertexShader9; ppErrorMsgs: PID3DXBuffer): HResult; stdcall;
|
|
function LinkPixelShader(pProfile: PAnsiChar; Flags: DWORD; rgFragmentHandles: PD3DXHandle; cFragments: LongWord; out pPShader: IDirect3DPixelShader9; ppErrorMsgs: PID3DXBuffer): HResult; stdcall;
|
|
|
|
function ClearCache: HResult; stdcall;
|
|
end;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXINCLUDE_TYPE:
|
|
//----------------------------------------------------------------------------
|
|
type
|
|
PD3DXIncludeType = ^TD3DXIncludeType;
|
|
_D3DXINCLUDE_TYPE = (
|
|
D3DXINC_LOCAL,
|
|
D3DXINC_SYSTEM
|
|
);
|
|
{$EXTERNALSYM _D3DXINCLUDE_TYPE}
|
|
D3DXINCLUDE_TYPE = _D3DXINCLUDE_TYPE;
|
|
{$EXTERNALSYM D3DXINCLUDE_TYPE}
|
|
TD3DXIncludeType = _D3DXINCLUDE_TYPE;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXInclude:
|
|
// -------------
|
|
// This interface is intended to be implemented by the application, and can
|
|
// be used by various D3DX APIs. This enables application-specific handling
|
|
// of #include directives in source files.
|
|
//
|
|
// Open()
|
|
// Opens an include file. If successful, it should fill in ppData and
|
|
// pBytes. The data pointer returned must remain valid until Close is
|
|
// subsequently called.
|
|
// Close()
|
|
// Closes an include file. If Open was successful, Close is guaranteed
|
|
// to be called before the API using this interface returns.
|
|
//----------------------------------------------------------------------------
|
|
|
|
PID3DXInclude = ^ID3DXInclude;
|
|
{$EXTERNALSYM ID3DXInclude}
|
|
ID3DXInclude = class
|
|
function Open(IncludeType: TD3DXIncludeType; pFileName: PAnsiChar; pParentData: Pointer; out ppData: Pointer; out pBytes: LongWord): HResult; virtual; stdcall; abstract;
|
|
function Close(pData: Pointer): HResult; virtual; stdcall; abstract;
|
|
end;
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// APIs //////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXAssembleShader:
|
|
// -------------------
|
|
// Assembles a shader.
|
|
//
|
|
// 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
|
|
// pDefines
|
|
// Optional NULL-terminated array of preprocessor macro definitions.
|
|
// pInclude
|
|
// Optional interface pointer to use for handling #include directives.
|
|
// If this parameter is NULL, #includes will be honored when assembling
|
|
// from file, and will error when assembling from resource or memory.
|
|
// Flags
|
|
// See D3DXSHADER_xxx flags
|
|
// ppShader
|
|
// Returns a buffer containing the created shader. This buffer contains
|
|
// the assembled shader code, as well as any embedded debug info.
|
|
// ppErrorMsgs
|
|
// Returns a buffer containing a listing of errors and warnings that were
|
|
// encountered during assembly. If you are running in a debugger,
|
|
// these are the same messages you will see in your debug output.
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXAssembleShaderFromFileA(
|
|
pSrcFile: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXAssembleShaderFromFileA';
|
|
{$EXTERNALSYM D3DXAssembleShaderFromFileA}
|
|
|
|
function D3DXAssembleShaderFromFileW(
|
|
pSrcFile: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXAssembleShaderFromFileW';
|
|
{$EXTERNALSYM D3DXAssembleShaderFromFileW}
|
|
|
|
function D3DXAssembleShaderFromFile(
|
|
pSrcFile: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXAssembleShaderFromFileA';
|
|
{$EXTERNALSYM D3DXAssembleShaderFromFile}
|
|
|
|
|
|
function D3DXAssembleShaderFromResourceA(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWord;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXAssembleShaderFromResourceA';
|
|
{$EXTERNALSYM D3DXAssembleShaderFromResourceA}
|
|
|
|
function D3DXAssembleShaderFromResourceW(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWord;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXAssembleShaderFromResourceW';
|
|
{$EXTERNALSYM D3DXAssembleShaderFromResourceW}
|
|
|
|
function D3DXAssembleShaderFromResource(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWord;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXAssembleShaderFromResourceA';
|
|
{$EXTERNALSYM D3DXAssembleShaderFromResource}
|
|
|
|
|
|
function D3DXAssembleShader(
|
|
pSrcData: PAnsiChar;
|
|
SrcDataLen: LongWord;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWord;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXAssembleShader}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCompileShader:
|
|
// ------------------
|
|
// Compiles a shader.
|
|
//
|
|
// 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.
|
|
// pDefines
|
|
// Optional NULL-terminated array of preprocessor macro definitions.
|
|
// pInclude
|
|
// Optional interface pointer to use for handling #include directives.
|
|
// If this parameter is NULL, #includes will be honored when compiling
|
|
// from file, and will error when compiling from resource or memory.
|
|
// pFunctionName
|
|
// Name of the entrypoint function where execution should begin.
|
|
// pProfile
|
|
// Instruction set to be used when generating code. Currently supported
|
|
// profiles are "vs_1_1", "vs_2_0", "vs_2_a", "vs_2_sw", "ps_1_1",
|
|
// "ps_1_2", "ps_1_3", "ps_1_4", "ps_2_0", "ps_2_a", "ps_2_sw", "tx_1_0"
|
|
// Flags
|
|
// See D3DXSHADER_xxx flags.
|
|
// ppShader
|
|
// Returns a buffer containing the created shader. This buffer contains
|
|
// the compiled shader code, as well as any embedded debug and symbol
|
|
// table info. (See D3DXGetShaderConstantTable)
|
|
// ppErrorMsgs
|
|
// Returns a buffer containing a listing of errors and warnings that were
|
|
// encountered during the compile. If you are running in a debugger,
|
|
// these are the same messages you will see in your debug output.
|
|
// ppConstantTable
|
|
// Returns a ID3DXConstantTable object which can be used to set
|
|
// shader constants to the device. Alternatively, an application can
|
|
// parse the D3DXSHADER_CONSTANTTABLE block embedded as a comment within
|
|
// the shader.
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXCompileShaderFromFileA(
|
|
pSrcFile: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pFunctionName: PAnsiChar;
|
|
pProfile: PAnsiChar;
|
|
Flags: DWORD;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer;
|
|
ppConstantTable: PID3DXConstantTable): HResult; stdcall; external d3dx9shaderDLL name 'D3DXCompileShaderFromFileA';
|
|
{$EXTERNALSYM D3DXCompileShaderFromFileA}
|
|
|
|
function D3DXCompileShaderFromFileW(
|
|
pSrcFile: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pFunctionName: PAnsiChar;
|
|
pProfile: PAnsiChar;
|
|
Flags: DWORD;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer;
|
|
ppConstantTable: PID3DXConstantTable): HResult; stdcall; external d3dx9shaderDLL name 'D3DXCompileShaderFromFileW';
|
|
{$EXTERNALSYM D3DXCompileShaderFromFileW}
|
|
|
|
function D3DXCompileShaderFromFile(
|
|
pSrcFile: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pFunctionName: PAnsiChar;
|
|
pProfile: PAnsiChar;
|
|
Flags: DWORD;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer;
|
|
ppConstantTable: PID3DXConstantTable): HResult; stdcall; external d3dx9shaderDLL name 'D3DXCompileShaderFromFileA';
|
|
{$EXTERNALSYM D3DXCompileShaderFromFile}
|
|
|
|
|
|
function D3DXCompileShaderFromResourceA(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pFunctionName: PAnsiChar;
|
|
pProfile: PAnsiChar;
|
|
Flags: DWORD;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer;
|
|
ppConstantTable: PID3DXConstantTable): HResult; stdcall; external d3dx9shaderDLL name 'D3DXCompileShaderFromResourceA';
|
|
{$EXTERNALSYM D3DXCompileShaderFromResourceA}
|
|
|
|
function D3DXCompileShaderFromResourceW(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pFunctionName: PAnsiChar;
|
|
pProfile: PAnsiChar;
|
|
Flags: DWORD;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer;
|
|
ppConstantTable: PID3DXConstantTable): HResult; stdcall; external d3dx9shaderDLL name 'D3DXCompileShaderFromResourceW';
|
|
{$EXTERNALSYM D3DXCompileShaderFromResourceW}
|
|
|
|
function D3DXCompileShaderFromResource(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pFunctionName: PAnsiChar;
|
|
pProfile: PAnsiChar;
|
|
Flags: DWORD;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer;
|
|
ppConstantTable: PID3DXConstantTable): HResult; stdcall; external d3dx9shaderDLL name 'D3DXCompileShaderFromResourceA';
|
|
{$EXTERNALSYM D3DXCompileShaderFromResource}
|
|
|
|
|
|
function D3DXCompileShader(
|
|
pSrcData: PAnsiChar;
|
|
SrcDataLen: LongWord;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pFunctionName: PAnsiChar;
|
|
pProfile: PAnsiChar;
|
|
Flags: DWORD;
|
|
ppShader: PID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer;
|
|
ppConstantTable: PID3DXConstantTable): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXCompileShader}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXDisassembleShader:
|
|
// ----------------------
|
|
// Takes a binary shader, and returns a buffer containing text assembly.
|
|
//
|
|
// Parameters:
|
|
// pShader
|
|
// Pointer to the shader byte code.
|
|
// ShaderSizeInBytes
|
|
// Size of the shader byte code in bytes.
|
|
// EnableColorCode
|
|
// Emit HTML tags for color coding the output?
|
|
// pComments
|
|
// Pointer to a comment string to include at the top of the shader.
|
|
// ppDisassembly
|
|
// Returns a buffer containing the disassembled shader.
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXDisassembleShader(
|
|
const pShader: PDWORD;
|
|
EnableColorCode: BOOL;
|
|
pComments: PAnsiChar;
|
|
out ppDisassembly: ID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXDisassembleShader}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXGetPixelShaderProfile/D3DXGetVertexShaderProfile:
|
|
// -----------------------------------------------------
|
|
// Returns the name of the HLSL profile best suited to a given device.
|
|
//
|
|
// Parameters:
|
|
// pDevice
|
|
// Pointer to the device in question
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXGetPixelShaderProfile(pDevice: IDirect3DDevice9): PAnsiChar; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXGetPixelShaderProfile}
|
|
|
|
function D3DXGetVertexShaderProfile(pDevice: IDirect3DDevice9): PAnsiChar; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXGetVertexShaderProfile}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFindShaderComment:
|
|
// ----------------------
|
|
// Searches through a shader for a particular comment, denoted by a FourCC in
|
|
// the first DWORD of the comment. If the comment is not found, and no other
|
|
// error has occurred, S_FALSE is returned.
|
|
//
|
|
// Parameters:
|
|
// pFunction
|
|
// Pointer to the function DWORD stream
|
|
// FourCC
|
|
// FourCC used to identify the desired comment block.
|
|
// ppData
|
|
// Returns a pointer to the comment data (not including comment token
|
|
// and FourCC). Can be NULL.
|
|
// pSizeInBytes
|
|
// Returns the size of the comment data in bytes. Can be NULL.
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXFindShaderComment(
|
|
pFunction: PDWORD;
|
|
FourCC: DWORD;
|
|
ppData: PPointer;
|
|
pSizeInBytes: PLongWord): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXFindShaderComment}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXGetShaderSize:
|
|
// ------------------
|
|
// Returns the size of the shader byte-code, in bytes.
|
|
//
|
|
// Parameters:
|
|
// pFunction
|
|
// Pointer to the function DWORD stream
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXGetShaderSize(const pFunction: PDWORD): LongWord; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXGetShaderSize}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXGetShaderVersion:
|
|
// -----------------------
|
|
// Returns the shader version of a given shader. Returns zero if the shader
|
|
// function is NULL.
|
|
//
|
|
// Parameters:
|
|
// pFunction
|
|
// Pointer to the function DWORD stream
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXGetShaderVersion(pFunction: PDWORD): DWORD; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXGetShaderVersion}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXGetShaderSemantics:
|
|
// -----------------------
|
|
// Gets semantics for all input elements referenced inside a given shader.
|
|
//
|
|
// Parameters:
|
|
// pFunction
|
|
// Pointer to the function DWORD stream
|
|
// pSemantics
|
|
// Pointer to an array of D3DXSEMANTIC structures. The function will
|
|
// fill this array with the semantics for each input element referenced
|
|
// inside the shader. This array is assumed to contain at least
|
|
// MAXD3DDECLLENGTH elements.
|
|
// pCount
|
|
// Returns the number of elements referenced by the shader
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXGetShaderInputSemantics(
|
|
pFunction: PDWORD;
|
|
pSemantics: PD3DXSemantic;
|
|
pCount: PLongWord): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXGetShaderInputSemantics}
|
|
|
|
function D3DXGetShaderOutputSemantics(
|
|
pFunction: PDWORD;
|
|
pSemantics: PD3DXSemantic;
|
|
pCount: PLongWord): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXGetShaderOutputSemantics}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXGetShaderSamplers:
|
|
// ----------------------
|
|
// Gets semantics for all input elements referenced inside a given shader.
|
|
//
|
|
// pFunction
|
|
// Pointer to the function DWORD stream
|
|
// pSamplers
|
|
// Pointer to an array of LPCSTRs. The function will fill this array
|
|
// with pointers to the sampler names contained within pFunction, for
|
|
// each sampler referenced inside the shader. This array is assumed to
|
|
// contain at least 16 elements.
|
|
// pCount
|
|
// Returns the number of samplers referenced by the shader
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXGetShaderSamplers(
|
|
pFunction: PDWORD;
|
|
pSamplers: PPAnsiChar;
|
|
pCount: PLongWord): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXGetShaderSamplers}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXGetShaderConstantTable:
|
|
// ---------------------------
|
|
// Gets shader constant table embedded inside shader. A constant table is
|
|
// generated by D3DXAssembleShader and D3DXCompileShader, and is embedded in
|
|
// the body of the shader.
|
|
//
|
|
// Parameters:
|
|
// pFunction
|
|
// Pointer to the function DWORD stream
|
|
// ppConstantTable
|
|
// Returns a ID3DXConstantTable object which can be used to set
|
|
// shader constants to the device. Alternatively, an application can
|
|
// parse the D3DXSHADER_CONSTANTTABLE block embedded as a comment within
|
|
// the shader.
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXGetShaderConstantTable(
|
|
pFunction: PDWORD;
|
|
out ppConstantTable: ID3DXConstantTable): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXGetShaderConstantTable}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCreateTextureShader:
|
|
// ------------------------
|
|
// Creates a texture shader object, given the compiled shader.
|
|
//
|
|
// Parameters
|
|
// pFunction
|
|
// Pointer to the function DWORD stream
|
|
// ppTextureShader
|
|
// Returns a ID3DXTextureShader object which can be used to procedurally
|
|
// fill the contents of a texture using the D3DXFillTextureTX functions.
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXCreateTextureShader(
|
|
const pFunction: PDWORD;
|
|
out ppTextureShader: ID3DXTextureShader): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXCreateTextureShader}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXGatherFragments:
|
|
// -------------------
|
|
// Assembles shader fragments into a buffer to be passed to a fragment linker.
|
|
// will generate shader fragments for all fragments in the file
|
|
//
|
|
// 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
|
|
// pDefines
|
|
// Optional NULL-terminated array of preprocessor macro definitions.
|
|
// pInclude
|
|
// Optional interface pointer to use for handling #include directives.
|
|
// If this parameter is NULL, #includes will be honored when assembling
|
|
// from file, and will error when assembling from resource or memory.
|
|
// Flags
|
|
// See D3DXSHADER_xxx flags
|
|
// ppShader
|
|
// Returns a buffer containing the created shader fragments. This buffer contains
|
|
// the assembled shader code, as well as any embedded debug info.
|
|
// ppErrorMsgs
|
|
// Returns a buffer containing a listing of errors and warnings that were
|
|
// encountered during assembly. If you are running in a debugger,
|
|
// these are the same messages you will see in your debug output.
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
function D3DXGatherFragmentsFromFileA(
|
|
pSrcFile: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
out ppShader: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXGatherFragmentsFromFileA';
|
|
{$EXTERNALSYM D3DXGatherFragmentsFromFileA}
|
|
|
|
function D3DXGatherFragmentsFromFileW(
|
|
pSrcFile: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
out ppShader: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXGatherFragmentsFromFileW';
|
|
{$EXTERNALSYM D3DXGatherFragmentsFromFileW}
|
|
|
|
function D3DXGatherFragmentsFromFile(
|
|
pSrcFile: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
out ppShader: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXGatherFragmentsFromFileA';
|
|
{$EXTERNALSYM D3DXGatherFragmentsFromFile}
|
|
|
|
|
|
function D3DXGatherFragmentsFromResourceA(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWord;
|
|
out ppShader: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXGatherFragmentsFromResourceA';
|
|
{$EXTERNALSYM D3DXGatherFragmentsFromResourceA}
|
|
|
|
function D3DXGatherFragmentsFromResourceW(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWord;
|
|
out ppShader: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXGatherFragmentsFromResourceW';
|
|
{$EXTERNALSYM D3DXGatherFragmentsFromResourceW}
|
|
|
|
function D3DXGatherFragmentsFromResource(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWord;
|
|
out ppShader: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXGatherFragmentsFromResourceA';
|
|
{$EXTERNALSYM D3DXGatherFragmentsFromResource}
|
|
|
|
|
|
function D3DXGatherFragments(
|
|
pSrcData: PAnsiChar;
|
|
SrcDataLen: LongWord;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWord;
|
|
out ppShader: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXGatherFragments}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCreateFragmentLinker:
|
|
// -------------------------
|
|
// Creates a fragment linker with a given cache size. The interface returned
|
|
// can be used to link together shader fragments. (both HLSL & ASM fragements)
|
|
//
|
|
// Parameters:
|
|
// pDevice
|
|
// Pointer to the device on which to create the shaders
|
|
// ShaderCacheSize
|
|
// Size of the shader cache
|
|
// ppFragmentLinker
|
|
// pointer to a memory location to put the created interface pointer
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXCreateFragmentLinker(
|
|
pDevice: IDirect3DDevice9;
|
|
ShaderCacheSize: LongWord;
|
|
out ppFragmentLinker: ID3DXFragmentLinker): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXCreateFragmentLinker}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXPreprocessShader:
|
|
// ---------------------
|
|
// Runs the preprocessor on the specified shader or effect, but does
|
|
// not actually compile it. This is useful for evaluating the #includes
|
|
// and #defines in a shader and then emitting a reformatted token stream
|
|
// for debugging purposes or for generating a self-contained shader.
|
|
//
|
|
// 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
|
|
// pDefines
|
|
// Optional NULL-terminated array of preprocessor macro definitions.
|
|
// pInclude
|
|
// Optional interface pointer to use for handling #include directives.
|
|
// If this parameter is NULL, #includes will be honored when assembling
|
|
// from file, and will error when assembling from resource or memory.
|
|
// ppShaderText
|
|
// Returns a buffer containing a single large string that represents
|
|
// the resulting formatted token stream
|
|
// ppErrorMsgs
|
|
// Returns a buffer containing a listing of errors and warnings that were
|
|
// encountered during assembly. If you are running in a debugger,
|
|
// these are the same messages you will see in your debug output.
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXPreprocessShaderFromFileA(
|
|
pSrcFile: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
out ppShaderText: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXPreprocessShaderFromFileA';
|
|
{$EXTERNALSYM D3DXPreprocessShaderFromFileA}
|
|
|
|
function D3DXPreprocessShaderFromFileW(
|
|
pSrcFile: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
out ppShaderText: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXPreprocessShaderFromFileW';
|
|
{$EXTERNALSYM D3DXPreprocessShaderFromFileW}
|
|
|
|
function D3DXPreprocessShaderFromFile(
|
|
pSrcFile: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
out ppShaderText: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXPreprocessShaderFromFileA';
|
|
{$EXTERNALSYM D3DXPreprocessShaderFromFile}
|
|
|
|
|
|
function D3DXPreprocessShaderFromResourceA(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
out ppShaderText: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXPreprocessShaderFromResourceA';
|
|
{$EXTERNALSYM D3DXPreprocessShaderFromResourceA}
|
|
|
|
function D3DXPreprocessShaderFromResourceW(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
out ppShaderText: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXPreprocessShaderFromResourceW';
|
|
{$EXTERNALSYM D3DXPreprocessShaderFromResourceW}
|
|
|
|
function D3DXPreprocessShaderFromResource(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
out ppShaderText: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL name 'D3DXPreprocessShaderFromResourceA';
|
|
{$EXTERNALSYM D3DXPreprocessShaderFromResource}
|
|
|
|
|
|
function D3DXPreprocessShader(
|
|
pSrcData: PAnsiChar;
|
|
SrcDataSize: LongWord;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
out ppShaderText: ID3DXBuffer;
|
|
ppErrorMsgs: PID3DXBuffer): HResult; stdcall; external d3dx9shaderDLL;
|
|
{$EXTERNALSYM D3DXPreprocessShader}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// Shader comment block layouts //////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXSHADER_CONSTANTTABLE:
|
|
// -------------------------
|
|
// Shader constant information; included as an CTAB comment block inside
|
|
// shaders. All offsets are BYTE offsets from start of CONSTANTTABLE struct.
|
|
// Entries in the table are sorted by Name in ascending order.
|
|
//----------------------------------------------------------------------------
|
|
|
|
type
|
|
PD3DXShaderConstantTable = ^TD3DXShaderConstantTable;
|
|
_D3DXSHADER_CONSTANTTABLE = record
|
|
Size: DWORD; // sizeof(D3DXSHADER_CONSTANTTABLE)
|
|
Creator: DWORD; // LPCSTR offset
|
|
Version: DWORD; // shader version
|
|
Constants: DWORD; // number of constants
|
|
ConstantInfo: DWORD; // D3DXSHADER_CONSTANTINFO[Constants] offset
|
|
Flags: DWORD; // flags shader was compiled with
|
|
Target: DWORD; // LPCSTR offset
|
|
end;
|
|
{$EXTERNALSYM _D3DXSHADER_CONSTANTTABLE}
|
|
D3DXSHADER_CONSTANTTABLE = _D3DXSHADER_CONSTANTTABLE;
|
|
{$EXTERNALSYM D3DXSHADER_CONSTANTTABLE}
|
|
TD3DXShaderConstantTable = _D3DXSHADER_CONSTANTTABLE;
|
|
|
|
|
|
PD3DXShaderConstantInfo = ^TD3DXShaderConstantInfo;
|
|
_D3DXSHADER_CONSTANTINFO = record
|
|
Name: DWORD; // LPCSTR offset
|
|
RegisterSet: Word; // D3DXREGISTER_SET
|
|
RegisterIndex: Word; // register number
|
|
RegisterCount: Word; // number of registers
|
|
Reserved: Word; // reserved
|
|
TypeInfo: DWORD; // D3DXSHADER_TYPEINFO offset
|
|
DefaultValue: DWORD; // offset of default value
|
|
end;
|
|
{$EXTERNALSYM _D3DXSHADER_CONSTANTINFO}
|
|
D3DXSHADER_CONSTANTINFO = _D3DXSHADER_CONSTANTINFO;
|
|
{$EXTERNALSYM D3DXSHADER_CONSTANTINFO}
|
|
TD3DXShaderConstantInfo = _D3DXSHADER_CONSTANTINFO;
|
|
|
|
|
|
PD3DXShaderTypeInfo = ^TD3DXShaderTypeInfo;
|
|
_D3DXSHADER_TYPEINFO = record
|
|
_Class: Word; // D3DXPARAMETER_CLASS
|
|
_Type: Word; // D3DXPARAMETER_TYPE
|
|
Rows: Word; // number of rows (matrices)
|
|
Columns: Word; // number of columns (vectors and matrices)
|
|
Elements: Word; // array dimension
|
|
StructMembers: Word; // number of struct members
|
|
StructMemberInfo: DWORD; // D3DXSHADER_STRUCTMEMBERINFO[Members] offset
|
|
end;
|
|
{$EXTERNALSYM _D3DXSHADER_TYPEINFO}
|
|
D3DXSHADER_TYPEINFO = _D3DXSHADER_TYPEINFO;
|
|
{$EXTERNALSYM D3DXSHADER_TYPEINFO}
|
|
TD3DXShaderTypeInfo = _D3DXSHADER_TYPEINFO;
|
|
|
|
|
|
PD3DXShaderStructMemberInfo = ^TD3DXShaderStructMemberInfo;
|
|
_D3DXSHADER_STRUCTMEMBERINFO = record
|
|
Name: DWORD; // LPCSTR offset
|
|
TypeInfo: DWORD; // D3DXSHADER_TYPEINFO offset
|
|
end;
|
|
{$EXTERNALSYM _D3DXSHADER_STRUCTMEMBERINFO}
|
|
D3DXSHADER_STRUCTMEMBERINFO = _D3DXSHADER_STRUCTMEMBERINFO;
|
|
{$EXTERNALSYM D3DXSHADER_STRUCTMEMBERINFO}
|
|
TD3DXShaderStructMemberInfo = _D3DXSHADER_STRUCTMEMBERINFO;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// File: d3dx9effect.h
|
|
// Content: D3DX effect types and Shaders
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFX_DONOTSAVESTATE
|
|
// This flag is used as a parameter to ID3DXEffect::Begin(). When this flag
|
|
// is specified, device state is not saved or restored in Begin/End.
|
|
// D3DXFX_DONOTSAVESHADERSTATE
|
|
// This flag is used as a parameter to ID3DXEffect::Begin(). When this flag
|
|
// is specified, shader device state is not saved or restored in Begin/End.
|
|
// This includes pixel/vertex shaders and shader constants
|
|
// D3DXFX_DONOTSAVESAMPLERSTATE
|
|
// This flag is used as a parameter to ID3DXEffect::Begin(). When this flag
|
|
// is specified, sampler device state is not saved or restored in Begin/End.
|
|
// D3DXFX_NOT_CLONEABLE
|
|
// This flag is used as a parameter to the D3DXCreateEffect family of APIs.
|
|
// When this flag is specified, the effect will be non-cloneable and will not
|
|
// contain any shader binary data.
|
|
// Furthermore, GetPassDesc will not return shader function pointers.
|
|
// Setting this flag reduces effect memory usage by about 50%.
|
|
//----------------------------------------------------------------------------
|
|
const
|
|
D3DXFX_DONOTSAVESTATE = (1 shl 0);
|
|
{$EXTERNALSYM D3DXFX_DONOTSAVESTATE}
|
|
D3DXFX_DONOTSAVESHADERSTATE = (1 shl 1);
|
|
{$EXTERNALSYM D3DXFX_DONOTSAVESHADERSTATE}
|
|
D3DXFX_DONOTSAVESAMPLERSTATE = (1 shl 2);
|
|
{$EXTERNALSYM D3DXFX_DONOTSAVESAMPLERSTATE}
|
|
D3DXFX_NOT_CLONEABLE = (1 shl 11);
|
|
{$EXTERNALSYM D3DXFX_NOT_CLONEABLE}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DX_PARAMETER_SHARED
|
|
// Indicates that the value of a parameter will be shared with all effects
|
|
// which share the same namespace. Changing the value in one effect will
|
|
// change it in all.
|
|
//
|
|
// D3DX_PARAMETER_LITERAL
|
|
// Indicates that the value of this parameter can be treated as literal.
|
|
// Literal parameters can be marked when the effect is compiled, and their
|
|
// cannot be changed after the effect is compiled. Shared parameters cannot
|
|
// be literal.
|
|
//----------------------------------------------------------------------------
|
|
const
|
|
D3DX_PARAMETER_SHARED = (1 shl 0);
|
|
{$EXTERNALSYM D3DX_PARAMETER_SHARED}
|
|
D3DX_PARAMETER_LITERAL = (1 shl 1);
|
|
{$EXTERNALSYM D3DX_PARAMETER_LITERAL}
|
|
D3DX_PARAMETER_ANNOTATION = (1 shl 2);
|
|
{$EXTERNALSYM D3DX_PARAMETER_ANNOTATION}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXEFFECT_DESC:
|
|
//----------------------------------------------------------------------------
|
|
|
|
type
|
|
_D3DXEFFECT_DESC = record
|
|
Creator: PAnsiChar; // Creator string
|
|
Parameters: LongWord; // Number of parameters
|
|
Techniques: LongWord; // Number of techniques
|
|
Functions: LongWord; // Number of function entrypoints
|
|
end;
|
|
{$EXTERNALSYM _D3DXEFFECT_DESC}
|
|
D3DXEFFECT_DESC = _D3DXEFFECT_DESC;
|
|
{$EXTERNALSYM D3DXEFFECT_DESC}
|
|
TD3DXEffectDesc = _D3DXEFFECT_DESC;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXPARAMETER_DESC:
|
|
//----------------------------------------------------------------------------
|
|
|
|
PD3DXParameterDesc = ^TD3DXParameterDesc;
|
|
_D3DXPARAMETER_DESC = record
|
|
Name: PAnsiChar; // Parameter name
|
|
Semantic: PAnsiChar; // Parameter semantic
|
|
_Class: TD3DXParameterClass; // Class
|
|
_Type: TD3DXParameterType; // Component type
|
|
Rows: LongWord; // Number of rows
|
|
Columns: LongWord; // Number of columns
|
|
Elements: LongWord; // Number of array elements
|
|
Annotations: LongWord; // Number of annotations
|
|
StructMembers: LongWord; // Number of structure member sub-parameters
|
|
Flags: DWORD; // D3DX_PARAMETER_* flags
|
|
Bytes: LongWord; // Parameter size, in bytes
|
|
end;
|
|
{$EXTERNALSYM _D3DXPARAMETER_DESC}
|
|
D3DXPARAMETER_DESC = _D3DXPARAMETER_DESC;
|
|
{$EXTERNALSYM D3DXPARAMETER_DESC}
|
|
TD3DXParameterDesc = _D3DXPARAMETER_DESC;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXTECHNIQUE_DESC:
|
|
//----------------------------------------------------------------------------
|
|
|
|
PD3DXTechniqueDesc = ^TD3DXTechniqueDesc;
|
|
_D3DXTECHNIQUE_DESC = record
|
|
Name: PAnsiChar; // Technique name
|
|
Passes: LongWord; // Number of passes
|
|
Annotations: LongWord; // Number of annotations
|
|
end;
|
|
{$EXTERNALSYM _D3DXTECHNIQUE_DESC}
|
|
D3DXTECHNIQUE_DESC = _D3DXTECHNIQUE_DESC;
|
|
{$EXTERNALSYM D3DXTECHNIQUE_DESC}
|
|
TD3DXTechniqueDesc = _D3DXTECHNIQUE_DESC;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXPASS_DESC:
|
|
//----------------------------------------------------------------------------
|
|
|
|
PD3DXPassDesc = ^TD3DXPassDesc;
|
|
_D3DXPASS_DESC = record
|
|
Name: PAnsiChar; // Pass name
|
|
Annotations: LongWord; // Number of annotations
|
|
|
|
pVertexShaderFunction: PDWORD; // Vertex shader function
|
|
pPixelShaderFunction: PDWORD; // Pixel shader function
|
|
end;
|
|
{$EXTERNALSYM _D3DXPASS_DESC}
|
|
D3DXPASS_DESC = _D3DXPASS_DESC;
|
|
{$EXTERNALSYM D3DXPASS_DESC}
|
|
TD3DXPassDesc = _D3DXPASS_DESC;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFUNCTION_DESC:
|
|
//----------------------------------------------------------------------------
|
|
|
|
PD3DXFunctionDesc = ^TD3DXFunctionDesc;
|
|
_D3DXFUNCTION_DESC = record
|
|
Name: PAnsiChar; // Function name
|
|
Annotations: LongWord; // Number of annotations
|
|
end;
|
|
{$EXTERNALSYM _D3DXFUNCTION_DESC}
|
|
D3DXFUNCTION_DESC = _D3DXFUNCTION_DESC;
|
|
{$EXTERNALSYM D3DXFUNCTION_DESC}
|
|
TD3DXFunctionDesc = _D3DXFUNCTION_DESC;
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXEffectPool ///////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXEffectPool);'}
|
|
{$EXTERNALSYM ID3DXEffectPool}
|
|
ID3DXEffectPool = interface(IUnknown)
|
|
['{9537AB04-3250-412e-8213-FCD2F8677933}']
|
|
// No public methods
|
|
end;
|
|
|
|
IID_ID3DXEffectPool = ID3DXEffectPool;
|
|
{$EXTERNALSYM IID_ID3DXEffectPool}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXBaseEffect ///////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXBaseEffect);'}
|
|
{$EXTERNALSYM ID3DXBaseEffect}
|
|
ID3DXBaseEffect = interface(IUnknown)
|
|
['{017C18AC-103F-4417-8C51-6BF6EF1E56BE}']
|
|
// Descs
|
|
function GetDesc(out pDesc: TD3DXEffectDesc): HResult; stdcall;
|
|
function GetParameterDesc(hParameter: TD3DXHandle; out pDesc: TD3DXParameterDesc): HResult; stdcall;
|
|
|
|
function GetTechniqueDesc(hTechnique: TD3DXHandle; out pDesc: TD3DXTechniqueDesc): HResult; stdcall;
|
|
function GetPassDesc(hPass: TD3DXHandle; out pDesc: TD3DXPassDesc): HResult; stdcall;
|
|
function GetFunctionDesc(hShader: TD3DXHandle; out pDesc: TD3DXFunctionDesc): HResult; stdcall;
|
|
|
|
// Handle operations
|
|
function GetParameter(hParameter: TD3DXHandle; Index: LongWord): TD3DXHandle; stdcall;
|
|
function GetParameterByName(hParameter: TD3DXHandle; pName: PAnsiChar): TD3DXHandle; stdcall;
|
|
function GetParameterBySemantic(hParameter: TD3DXHandle; pSemantic: PAnsiChar): TD3DXHandle; stdcall;
|
|
function GetParameterElement(hParameter: TD3DXHandle; Index: LongWord): TD3DXHandle; stdcall;
|
|
function GetTechnique(Index: LongWord): TD3DXHandle; stdcall;
|
|
function GetTechniqueByName(pName: PAnsiChar): TD3DXHandle; stdcall;
|
|
function GetPass(hTechnique: TD3DXHandle; Index: LongWord): TD3DXHandle; stdcall;
|
|
function GetPassByName(hTechnique: TD3DXHandle; pName: PAnsiChar): TD3DXHandle; stdcall;
|
|
function GetFunction(Index: LongWord): TD3DXHandle; stdcall;
|
|
function GetFunctionByName(pName: PAnsiChar): TD3DXHandle; stdcall;
|
|
function GetAnnotation(hObject: TD3DXHandle; Index: LongWord): TD3DXHandle; stdcall;
|
|
function GetAnnotationByName(hObject: TD3DXHandle; pName: PAnsiChar): TD3DXHandle; stdcall;
|
|
|
|
// Get/Set Parameters
|
|
function SetValue(hParameter: TD3DXHandle; pData: Pointer; Bytes: LongWord): HResult; stdcall;
|
|
function GetValue(hParameter: TD3DXHandle; pData: Pointer; Bytes: LongWord): HResult; stdcall;
|
|
function SetBool(hParameter: TD3DXHandle; b: BOOL): HResult; stdcall;
|
|
function GetBool(hParameter: TD3DXHandle; out pb: BOOL): HResult; stdcall;
|
|
function SetBoolArray(hParameter: TD3DXHandle; pb: PBOOL; Count: LongWord): HResult; stdcall;
|
|
function GetBoolArray(hParameter: TD3DXHandle; pb: PBOOL; Count: LongWord): HResult; stdcall;
|
|
function SetInt(hParameter: TD3DXHandle; n: Integer): HResult; stdcall;
|
|
function GetInt(hParameter: TD3DXHandle; out pn: Integer): HResult; stdcall;
|
|
function SetIntArray(hParameter: TD3DXHandle; pn: PInteger; Count: LongWord): HResult; stdcall;
|
|
function GetIntArray(hParameter: TD3DXHandle; pn: PInteger; Count: LongWord): HResult; stdcall;
|
|
function SetFloat(hParameter: TD3DXHandle; f: Single): HResult; stdcall;
|
|
function GetFloat(hParameter: TD3DXHandle; out pf: Single): HResult; stdcall;
|
|
function SetFloatArray(hParameter: TD3DXHandle; pf: PSingle; Count: LongWord): HResult; stdcall;
|
|
function GetFloatArray(hParameter: TD3DXHandle; pf: PSingle; Count: LongWord): HResult; stdcall;
|
|
function SetVector(hParameter: TD3DXHandle; const pVector: TD3DXVector4): HResult; stdcall;
|
|
function GetVector(hParameter: TD3DXHandle; out pVector: TD3DXVector4): HResult; stdcall;
|
|
function SetVectorArray(hParameter: TD3DXHandle; pVector: PD3DXVector4; Count: LongWord): HResult; stdcall;
|
|
function GetVectorArray(hParameter: TD3DXHandle; pVector: PD3DXVector4; Count: LongWord): HResult; stdcall;
|
|
function SetMatrix(hParameter: TD3DXHandle; const pMatrix: TD3DXMatrix): HResult; stdcall;
|
|
function GetMatrix(hParameter: TD3DXHandle; out pMatrix: TD3DXMatrix): HResult; stdcall;
|
|
function SetMatrixArray(hParameter: TD3DXHandle; pMatrix: PD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function GetMatrixArray(hParameter: TD3DXHandle; pMatrix: PD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function SetMatrixPointerArray(hParameter: TD3DXHandle; ppMatrix: PPD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function GetMatrixPointerArray(hParameter: TD3DXHandle; ppMatrix: PPD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function SetMatrixTranspose(hParameter: TD3DXHandle; const pMatrix: TD3DXMatrix): HResult; stdcall;
|
|
function GetMatrixTranspose(hParameter: TD3DXHandle; out pMatrix: TD3DXMatrix): HResult; stdcall;
|
|
function SetMatrixTransposeArray(hParameter: TD3DXHandle; pMatrix: PD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function GetMatrixTransposeArray(hParameter: TD3DXHandle; pMatrix: PD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function SetMatrixTransposePointerArray(hParameter: TD3DXHandle; ppMatrix: PPD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function GetMatrixTransposePointerArray(hParameter: TD3DXHandle; ppMatrix: PPD3DXMatrix; Count: LongWord): HResult; stdcall;
|
|
function SetString(hParameter: TD3DXHandle; pString: PAnsiChar): HResult; stdcall;
|
|
function GetString(hParameter: TD3DXHandle; out ppString: PAnsiChar): HResult; stdcall;
|
|
function SetTexture(hParameter: TD3DXHandle; pTexture: IDirect3DBaseTexture9): HResult; stdcall;
|
|
function GetTexture(hParameter: TD3DXHandle; out ppTexture: IDirect3DBaseTexture9): HResult; stdcall;
|
|
function GetPixelShader(hParameter: TD3DXHandle; out ppPShader: IDirect3DPixelShader9): HResult; stdcall;
|
|
function GetVertexShader(hParameter: TD3DXHandle; out ppVShader: IDirect3DVertexShader9): HResult; stdcall;
|
|
|
|
//Set Range of an Array to pass to device
|
|
//Useful for sending only a subrange of an array down to the device
|
|
function SetArrayRange(hParameter: TD3DXHandle; uStart, uEnd: LongWord): HResult; stdcall;
|
|
end;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXEffectStateManager:
|
|
// ------------------------
|
|
// This is a user implemented interface that can be used to manage device
|
|
// state changes made by an Effect.
|
|
//----------------------------------------------------------------------------
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXEffectStateManager);'}
|
|
{$EXTERNALSYM ID3DXEffectStateManager}
|
|
ID3DXEffectStateManager = interface(IUnknown)
|
|
['{79AAB587-6DBC-4fa7-82DE-37FA1781C5CE}']
|
|
|
|
// The following methods are called by the Effect when it wants to make
|
|
// the corresponding device call. Note that:
|
|
// 1. Users manage the state and are therefore responsible for making the
|
|
// the corresponding device calls themselves inside their callbacks.
|
|
// 2. Effects pay attention to the return values of the callbacks, and so
|
|
// users must pay attention to what they return in their callbacks.
|
|
|
|
function SetTransform(State: TD3DTransformStateType; const pMatrix: TD3DMatrix): HResult; stdcall;
|
|
function SetMaterial(const pMaterial: TD3DMaterial9): HResult; stdcall;
|
|
function SetLight(Index: DWORD; const pLight: TD3DLight9): HResult; stdcall;
|
|
function LightEnable(Index: DWORD; Enable: BOOL): HResult; stdcall;
|
|
function SetRenderState(State: TD3DRenderStateType; Value: DWORD): HResult; stdcall;
|
|
function SetTexture(Stage: DWORD; pTexture: IDirect3DBaseTexture9): HResult; stdcall;
|
|
function SetTextureStageState(Stage: DWORD; _Type: TD3DTextureStageStateType; Value: DWORD): HResult; stdcall;
|
|
function SetSamplerState(Sampler: DWORD; _Type: TD3DSamplerStateType; Value: DWORD): HResult; stdcall;
|
|
function SetNPatchMode(nSegments: Single): HResult; stdcall;
|
|
function SetFVF(FVF: DWORD): HResult; stdcall;
|
|
function SetVertexShader(pShader: IDirect3DVertexShader9): HResult; stdcall;
|
|
function SetVertexShaderConstantF(StartRegister: LongWord; pConstantData: PSingle; Vector4fCount: LongWord): HResult; stdcall;
|
|
function SetVertexShaderConstantI(StartRegister: LongWord; pConstantData: PInteger; Vector4iCount: LongWord): HResult; stdcall;
|
|
function SetVertexShaderConstantB(StartRegister: LongWord; pConstantData: PBOOL; BoolCount: LongWord): HResult; stdcall;
|
|
function SetPixelShader(pShader: IDirect3DPixelShader9): HResult; stdcall;
|
|
function SetPixelShaderConstantF(StartRegister: LongWord; pConstantData: PSingle; Vector4fCount: LongWord): HResult; stdcall;
|
|
function SetPixelShaderConstantI(StartRegister: LongWord; pConstantData: PInteger; Vector4iCount: LongWord): HResult; stdcall;
|
|
function SetPixelShaderConstantB(StartRegister: LongWord; pConstantData: PBOOL; BoolCount: LongWord): HResult; stdcall;
|
|
end;
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXEffect ///////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXEffect);'}
|
|
{$EXTERNALSYM ID3DXEffect}
|
|
ID3DXEffect = interface(ID3DXBaseEffect)
|
|
['{F6CEB4B3-4E4C-40dd-B883-8D8DE5EA0CD5}']
|
|
// Pool
|
|
function GetPool(out ppPool: ID3DXEffectPool): HResult; stdcall;
|
|
|
|
// Selecting and setting a technique
|
|
function SetTechnique(hTechnique: TD3DXHandle): HResult; stdcall;
|
|
function GetCurrentTechnique: TD3DXHandle; stdcall;
|
|
function ValidateTechnique(hTechnique: TD3DXHandle): HResult; stdcall;
|
|
function FindNextValidTechnique(hTechnique: TD3DXHandle; out pTechnique: TD3DXHandle): HResult; stdcall;
|
|
function IsParameterUsed(hParameter: TD3DXHandle; hTechnique: TD3DXHandle): BOOL; stdcall;
|
|
|
|
// Using current technique
|
|
// Begin starts active technique
|
|
// BeginPass begins a pass
|
|
// CommitChanges updates changes to any set calls in the pass. This should be called before
|
|
// any DrawPrimitive call to d3d
|
|
// EndPass ends a pass
|
|
// End ends active technique
|
|
function _Begin(pPasses: PLongWord; Flags: DWORD): HResult; stdcall;
|
|
function BeginPass(Pass: LongWord): HResult; stdcall;
|
|
function CommitChanges: HResult; stdcall;
|
|
function EndPass: HResult; stdcall;
|
|
function _End: HResult; stdcall;
|
|
|
|
// Managing D3D Device
|
|
function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
|
|
function OnLostDevice: HResult; stdcall;
|
|
function OnResetDevice: HResult; stdcall;
|
|
|
|
// Logging device calls
|
|
function SetStateManager(pManager: ID3DXEffectStateManager): HResult; stdcall;
|
|
function GetStateManager(out ppManager: ID3DXEffectStateManager): HResult; stdcall;
|
|
|
|
// Parameter blocks
|
|
function BeginParameterBlock: HResult; stdcall;
|
|
function EndParameterBlock: TD3DXHandle; stdcall;
|
|
function ApplyParameterBlock(hParameterBlock: TD3DXHandle): HResult; stdcall;
|
|
function DeleteParameterBlock(hParameterBlock: TD3DXHandle): HResult; stdcall;
|
|
|
|
// Cloning
|
|
function CloneEffect(pDevice: IDirect3DDevice9; out ppEffect: ID3DXEffect): HResult; stdcall;
|
|
|
|
// Fast path for setting variables directly in ID3DXEffect
|
|
function SetRawValue(hParameter: TD3DXHandle; pData: Pointer; ByteOffset, Bytes: LongWord): HResult; stdcall;
|
|
end;
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXEffectCompiler ///////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXEffectCompiler);'}
|
|
{$EXTERNALSYM ID3DXEffectCompiler}
|
|
ID3DXEffectCompiler = interface(ID3DXBaseEffect)
|
|
['{51B8A949-1A31-47e6-BEA0-4B30DB53F1E0}']
|
|
// Parameter sharing, specialization, and information
|
|
function SetLiteral(hParameter: TD3DXHandle; Literal: BOOL): HResult; stdcall;
|
|
function GetLiteral(hParameter: TD3DXHandle; out pLiteral: BOOL): HResult; stdcall;
|
|
|
|
// Compilation
|
|
function CompileEffect(Flags: DWORD; ppEffect, ppErrorMsgs: PID3DXBuffer): HResult; stdcall;
|
|
|
|
function CompileShader(hFunction: TD3DXHandle; pTarget: PAnsiChar; Flags: DWORD;
|
|
ppShader, ppErrorMsgs: PID3DXBuffer; ppConstantTable: PID3DXConstantTable): HResult; stdcall;
|
|
end;
|
|
|
|
type
|
|
IID_ID3DXBaseEffect = ID3DXBaseEffect;
|
|
{$EXTERNALSYM IID_ID3DXBaseEffect}
|
|
IID_ID3DXEffectStateManager = ID3DXEffectStateManager;
|
|
{$EXTERNALSYM IID_ID3DXEffectStateManager}
|
|
IID_ID3DXEffect = ID3DXEffect;
|
|
{$EXTERNALSYM IID_ID3DXEffect}
|
|
IID_ID3DXEffectCompiler = ID3DXEffectCompiler;
|
|
{$EXTERNALSYM IID_ID3DXEffectCompiler}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// APIs //////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCreateEffectPool:
|
|
// ---------------------
|
|
// Creates an effect pool. Pools are used for sharing parameters between
|
|
// multiple effects. For all effects within a pool, shared parameters of the
|
|
// same name all share the same value.
|
|
//
|
|
// Parameters:
|
|
// ppPool
|
|
// Returns the created pool.
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXCreateEffectPool(
|
|
out ppPool: ID3DXEffectPool): HResult; stdcall; external d3dx9effectDLL;
|
|
{$EXTERNALSYM D3DXCreateEffectPool}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCreateEffect:
|
|
// -----------------
|
|
// Creates an effect from an ascii or binary 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
|
|
// pDefines
|
|
// Optional NULL-terminated array of preprocessor macro definitions.
|
|
// Flags
|
|
// See D3DXSHADER_xxx flags.
|
|
// pSkipConstants
|
|
// A list of semi-colon delimited variable names. The effect will
|
|
// not set these variables to the device when they are referenced
|
|
// by a shader. NOTE: the variables specified here must be
|
|
// register bound in the file and must not be used in expressions
|
|
// in passes or samplers or the file will not load.
|
|
// pInclude
|
|
// Optional interface pointer to use for handling #include directives.
|
|
// If this parameter is NULL, #includes will be honored when compiling
|
|
// from file, and will error when compiling from resource or memory.
|
|
// pPool
|
|
// Pointer to ID3DXEffectPool object to use for shared parameters.
|
|
// If NULL, no parameters will be shared.
|
|
// 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: IDirect3DDevice9;
|
|
pSrcFile: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromFileA';
|
|
{$EXTERNALSYM D3DXCreateEffectFromFileA}
|
|
|
|
function D3DXCreateEffectFromFileW(
|
|
pDevice: IDirect3DDevice9;
|
|
pSrcFile: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromFileW';
|
|
{$EXTERNALSYM D3DXCreateEffectFromFileW}
|
|
|
|
function D3DXCreateEffectFromFile(
|
|
pDevice: IDirect3DDevice9;
|
|
pSrcFile: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromFileA';
|
|
{$EXTERNALSYM D3DXCreateEffectFromFile}
|
|
|
|
|
|
function D3DXCreateEffectFromResourceA(
|
|
pDevice: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromResourceA';
|
|
{$EXTERNALSYM D3DXCreateEffectFromResourceA}
|
|
|
|
function D3DXCreateEffectFromResourceW(
|
|
pDevice: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromResourceW';
|
|
{$EXTERNALSYM D3DXCreateEffectFromResourceW}
|
|
|
|
function D3DXCreateEffectFromResource(
|
|
pDevice: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromResourceA';
|
|
{$EXTERNALSYM D3DXCreateEffectFromResource}
|
|
|
|
|
|
function D3DXCreateEffect(
|
|
pDevice: IDirect3DDevice9;
|
|
pSrcData: Pointer;
|
|
SrcDataLen: LongWord;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL;
|
|
{$EXTERNALSYM D3DXCreateEffect}
|
|
|
|
|
|
//
|
|
// Ex functions that accept pSkipConstants in addition to other parameters
|
|
//
|
|
|
|
function D3DXCreateEffectFromFileExA(
|
|
pDevice: IDirect3DDevice9;
|
|
pSrcFile: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pSkipConstants: PAnsiChar;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromFileExA';
|
|
{$EXTERNALSYM D3DXCreateEffectFromFileExA}
|
|
|
|
function D3DXCreateEffectFromFileExW(
|
|
pDevice: IDirect3DDevice9;
|
|
pSrcFile: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pSkipConstants: PAnsiChar;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromFileExW';
|
|
{$EXTERNALSYM D3DXCreateEffectFromFileExW}
|
|
|
|
function D3DXCreateEffectFromFileEx(
|
|
pDevice: IDirect3DDevice9;
|
|
pSrcFile: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pSkipConstants: PAnsiChar;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromFileExA';
|
|
{$EXTERNALSYM D3DXCreateEffectFromFileEx}
|
|
|
|
|
|
function D3DXCreateEffectFromResourceExA(
|
|
pDevice: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pSkipConstants: PAnsiChar;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromResourceExA';
|
|
{$EXTERNALSYM D3DXCreateEffectFromResourceExA}
|
|
|
|
function D3DXCreateEffectFromResourceExW(
|
|
pDevice: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pSkipConstants: PAnsiChar;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromResourceExW';
|
|
{$EXTERNALSYM D3DXCreateEffectFromResourceExW}
|
|
|
|
function D3DXCreateEffectFromResourceEx(
|
|
pDevice: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pSkipConstants: PAnsiChar;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectFromResourceExA';
|
|
{$EXTERNALSYM D3DXCreateEffectFromResourceEx}
|
|
|
|
|
|
function D3DXCreateEffectEx(
|
|
pDevice: IDirect3DDevice9;
|
|
pSrcData: Pointer;
|
|
SrcDataLen: LongWord;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
pSkipConstants: PAnsiChar;
|
|
Flags: DWORD;
|
|
pPool: ID3DXEffectPool;
|
|
out ppEffect: ID3DXEffect;
|
|
ppCompilationErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL;
|
|
{$EXTERNALSYM D3DXCreateEffectEx}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCreateEffectCompiler:
|
|
// -------------------------
|
|
// Creates an effect from an ascii or binary effect description.
|
|
//
|
|
// Parameters:
|
|
// 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
|
|
// pDefines
|
|
// Optional NULL-terminated array of preprocessor macro definitions.
|
|
// pInclude
|
|
// Optional interface pointer to use for handling #include directives.
|
|
// If this parameter is NULL, #includes will be honored when compiling
|
|
// from file, and will error when compiling from resource or memory.
|
|
// pPool
|
|
// Pointer to ID3DXEffectPool object to use for shared parameters.
|
|
// If NULL, no parameters will be shared.
|
|
// ppCompiler
|
|
// Returns a buffer containing created effect compiler.
|
|
// ppParseErrors
|
|
// Returns a buffer containing any error messages which occurred during
|
|
// parse. Or NULL if you do not care about the error messages.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXCreateEffectCompilerFromFileA(
|
|
pSrcFile: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
out ppCompiler: ID3DXEffectCompiler;
|
|
ppParseErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectCompilerFromFileA';
|
|
{$EXTERNALSYM D3DXCreateEffectCompilerFromFileA}
|
|
|
|
function D3DXCreateEffectCompilerFromFileW(
|
|
pSrcFile: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
out ppCompiler: ID3DXEffectCompiler;
|
|
ppParseErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectCompilerFromFileW';
|
|
{$EXTERNALSYM D3DXCreateEffectCompilerFromFileW}
|
|
|
|
function D3DXCreateEffectCompilerFromFile(
|
|
pSrcFile: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
out ppCompiler: ID3DXEffectCompiler;
|
|
ppParseErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectCompilerFromFileA';
|
|
{$EXTERNALSYM D3DXCreateEffectCompilerFromFile}
|
|
|
|
|
|
function D3DXCreateEffectCompilerFromResourceA(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
out ppCompiler: ID3DXEffectCompiler;
|
|
ppParseErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectCompilerFromResourceA';
|
|
{$EXTERNALSYM D3DXCreateEffectCompilerFromResourceA}
|
|
|
|
function D3DXCreateEffectCompilerFromResourceW(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
out ppCompiler: ID3DXEffectCompiler;
|
|
ppParseErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectCompilerFromResourceW';
|
|
{$EXTERNALSYM D3DXCreateEffectCompilerFromResourceW}
|
|
|
|
function D3DXCreateEffectCompilerFromResource(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
out ppCompiler: ID3DXEffectCompiler;
|
|
ppParseErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL name 'D3DXCreateEffectCompilerFromResourceA';
|
|
{$EXTERNALSYM D3DXCreateEffectCompilerFromResource}
|
|
|
|
|
|
function D3DXCreateEffectCompiler(
|
|
pSrcData: Pointer;
|
|
SrcDataLen: LongWord;
|
|
pDefines: PD3DXMacro;
|
|
pInclude: ID3DXInclude;
|
|
Flags: DWORD;
|
|
out ppCompiler: ID3DXEffectCompiler;
|
|
ppParseErrors: PID3DXBuffer): HResult; stdcall; external d3dx9effectDLL;
|
|
{$EXTERNALSYM D3DXCreateEffectCompiler}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXDisassembleEffect:
|
|
// -----------------------
|
|
//
|
|
// Parameters:
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXDisassembleEffect(
|
|
pEffect: ID3DXEffect;
|
|
EnableColorCode: BOOL;
|
|
out ppDisassembly: ID3DXBuffer): HResult; stdcall; external d3dx9effectDLL;
|
|
{$EXTERNALSYM D3DXDisassembleEffect}
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// File: d3dx9xof.h
|
|
// Content: D3DX .X File types and functions
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
//#include "d3dx9.h"
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXF_FILEFORMAT
|
|
// This flag is used to specify what file type to use when saving to disk.
|
|
// _BINARY, _BINARY, and _TEXT are mutually exclusive, while
|
|
// _COMPRESSED is an optional setting that works with all file types.
|
|
//----------------------------------------------------------------------------
|
|
type
|
|
D3DXF_FILEFORMAT = DWORD;
|
|
{$EXTERNALSYM D3DXF_FILEFORMAT}
|
|
TD3DXFFileFormat = D3DXF_FILEFORMAT;
|
|
|
|
const
|
|
D3DXF_FILEFORMAT_BINARY = 0;
|
|
{$EXTERNALSYM D3DXF_FILEFORMAT_BINARY}
|
|
D3DXF_FILEFORMAT_TEXT = 1;
|
|
{$EXTERNALSYM D3DXF_FILEFORMAT_TEXT}
|
|
D3DXF_FILEFORMAT_COMPRESSED = 2;
|
|
{$EXTERNALSYM D3DXF_FILEFORMAT_COMPRESSED}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXF_FILESAVEOPTIONS
|
|
// This flag is used to specify where to save the file to. Each flag is
|
|
// mutually exclusive, indicates the data location of the file, and also
|
|
// chooses which additional data will specify the location.
|
|
// _TOFILE is paired with a filename (LPCSTR)
|
|
// _TOWFILE is paired with a filename (LPWSTR)
|
|
//----------------------------------------------------------------------------
|
|
type
|
|
D3DXF_FILESAVEOPTIONS = DWORD;
|
|
{$EXTERNALSYM D3DXF_FILESAVEOPTIONS}
|
|
TD3DXFFileSaveOptions = D3DXF_FILESAVEOPTIONS;
|
|
|
|
const
|
|
D3DXF_FILESAVE_TOFILE = $00;
|
|
{$EXTERNALSYM D3DXF_FILESAVE_TOFILE}
|
|
D3DXF_FILESAVE_TOWFILE = $01;
|
|
{$EXTERNALSYM D3DXF_FILESAVE_TOWFILE}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXF_FILELOADOPTIONS
|
|
// This flag is used to specify where to load the file from. Each flag is
|
|
// mutually exclusive, indicates the data location of the file, and also
|
|
// chooses which additional data will specify the location.
|
|
// _FROMFILE is paired with a filename (LPCSTR)
|
|
// _FROMWFILE is paired with a filename (LPWSTR)
|
|
// _FROMRESOURCE is paired with a (D3DXF_FILELOADRESOUCE*) description.
|
|
// _FROMMEMORY is paired with a (D3DXF_FILELOADMEMORY*) description.
|
|
//----------------------------------------------------------------------------
|
|
type
|
|
D3DXF_FILELOADOPTIONS = DWORD;
|
|
{$EXTERNALSYM D3DXF_FILELOADOPTIONS}
|
|
TD3DXFFileLoadOptions = D3DXF_FILELOADOPTIONS;
|
|
|
|
const
|
|
D3DXF_FILELOAD_FROMFILE = $00;
|
|
{$EXTERNALSYM D3DXF_FILELOAD_FROMFILE}
|
|
D3DXF_FILELOAD_FROMWFILE = $01;
|
|
{$EXTERNALSYM D3DXF_FILELOAD_FROMWFILE}
|
|
D3DXF_FILELOAD_FROMRESOURCE = $02;
|
|
{$EXTERNALSYM D3DXF_FILELOAD_FROMRESOURCE}
|
|
D3DXF_FILELOAD_FROMMEMORY = $03;
|
|
{$EXTERNALSYM D3DXF_FILELOAD_FROMMEMORY}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXF_FILELOADRESOURCE:
|
|
//----------------------------------------------------------------------------
|
|
type
|
|
PD3DXFFileLoadResource = ^TD3DXFFileLoadResource;
|
|
_D3DXF_FILELOADRESOURCE = record
|
|
hModule: HMODULE; // Desc
|
|
lpName: PAnsiChar; // Desc
|
|
lpType: PAnsiChar; // Desc
|
|
end;
|
|
{$EXTERNALSYM _D3DXF_FILELOADRESOURCE}
|
|
D3DXF_FILELOADRESOURCE = _D3DXF_FILELOADRESOURCE;
|
|
{$EXTERNALSYM D3DXF_FILELOADRESOURCE}
|
|
TD3DXFFileLoadResource = _D3DXF_FILELOADRESOURCE;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXF_FILELOADMEMORY:
|
|
//----------------------------------------------------------------------------
|
|
|
|
PD3DXFFileLoadMemory = ^TD3DXFFileLoadMemory;
|
|
_D3DXF_FILELOADMEMORY = record
|
|
lpMemory: Pointer; // Desc
|
|
dSize: SIZE_T; // Desc
|
|
end;
|
|
{$EXTERNALSYM _D3DXF_FILELOADMEMORY}
|
|
D3DXF_FILELOADMEMORY = _D3DXF_FILELOADMEMORY;
|
|
{$EXTERNALSYM D3DXF_FILELOADMEMORY}
|
|
TD3DXFFileLoadMemory = _D3DXF_FILELOADMEMORY;
|
|
|
|
|
|
const
|
|
IID_ID3DXFile: TGUID = '{cef08cf9-7b4f-4429-9624-2a690a933201}';
|
|
{$EXTERNALSYM IID_ID3DXFile}
|
|
IID_ID3DXFileSaveObject: TGUID = '{cef08cfa-7b4f-4429-9624-2a690a933201}';
|
|
{$EXTERNALSYM IID_ID3DXFileSaveObject}
|
|
IID_ID3DXFileSaveData: TGUID = '{cef08cfb-7b4f-4429-9624-2a690a933201}';
|
|
{$EXTERNALSYM IID_ID3DXFileSaveData}
|
|
IID_ID3DXFileEnumObject: TGUID = '{cef08cfc-7b4f-4429-9624-2a690a933201}';
|
|
{$EXTERNALSYM IID_ID3DXFileEnumObject}
|
|
IID_ID3DXFileData: TGUID = '{cef08cfd-7b4f-4429-9624-2a690a933201}';
|
|
{$EXTERNALSYM IID_ID3DXFileData}
|
|
|
|
|
|
type
|
|
ID3DXFileEnumObject = interface;
|
|
ID3DXFileSaveObject = interface;
|
|
ID3DXFileSaveData = interface;
|
|
ID3DXFileData = interface;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXFile /////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXFile);'}
|
|
{$EXTERNALSYM ID3DXFile}
|
|
ID3DXFile = interface(IUnknown)
|
|
['{cef08cf9-7b4f-4429-9624-2a690a933201}']
|
|
function CreateEnumObject(pvSource: Pointer; flags: TD3DXFFileLoadOptions; out EnumObj: ID3DXFileEnumObject): HResult; stdcall;
|
|
function CreateSaveObject(pvSource: Pointer; flags: TD3DXFFileSaveOptions; Format: TD3DXFFileFormat; out SaveObj: ID3DXFileSaveObject): HResult; stdcall;
|
|
function RegisterTemplates(pvData: Pointer; Size: SIZE_T): HResult; stdcall;
|
|
function RegisterEnumTemplates(pEnum: ID3DXFileEnumObject): HResult; stdcall;
|
|
end;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXFileSaveObject ///////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXFileSaveObject);'}
|
|
{$EXTERNALSYM ID3DXFileSaveObject}
|
|
ID3DXFileSaveObject = interface(IUnknown)
|
|
['{cef08cfa-7b4f-4429-9624-2a690a933201}']
|
|
function GetFile(out ppFile: ID3DXFile): HResult; stdcall;
|
|
function AddDataObject(const rguidTemplate: TGUID; szName: PAnsiChar;
|
|
const pId: TGUID; cbSize: SIZE_T; pvData: Pointer; out ppObj: ID3DXFileSaveData): HResult; stdcall;
|
|
function Save: HResult; stdcall;
|
|
end;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXFileSaveData /////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXFileSaveData);'}
|
|
{$EXTERNALSYM ID3DXFileSaveData}
|
|
ID3DXFileSaveData = interface(IUnknown)
|
|
['{cef08cfb-7b4f-4429-9624-2a690a933201}']
|
|
function GetSave(out SaveObj: ID3DXFileSaveObject): HResult; stdcall;
|
|
function GetName(szName: PAnsiChar; Size: PSIZE_T): HResult; stdcall;
|
|
function GetId(out Id: TGUID): HResult; stdcall;
|
|
function GetType(out TypeGuid: TGUID): HResult; stdcall;
|
|
function AddDataObject(const rguidTemplate: TGUID; szName: PAnsiChar;
|
|
const pId: TGUID; cbSize: SIZE_T; pvData: Pointer;
|
|
out ppObj: ID3DXFileSaveData): HResult; stdcall;
|
|
function AddDataReference(szName: PAnsiChar; const pId: TGUID): HResult; stdcall;
|
|
end;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXFileEnumObject ///////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXFileEnumObject);'}
|
|
{$EXTERNALSYM ID3DXFileEnumObject}
|
|
ID3DXFileEnumObject = interface(IUnknown)
|
|
['{cef08cfc-7b4f-4429-9624-2a690a933201}']
|
|
function GetFile(out ppFile: ID3DXFile): HResult; stdcall;
|
|
function GetChildren(out Children: SIZE_T): HResult; stdcall;
|
|
function GetChild(id: SIZE_T; out Obj: ID3DXFileData): HResult; stdcall;
|
|
function GetDataObjectById(const rguid: TGUID; out Obj: ID3DXFileData): HResult; stdcall;
|
|
function GetDataObjectByName(szName: PAnsiChar; out Obj: ID3DXFileData): HResult; stdcall;
|
|
end;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// ID3DXFileData /////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXFileData);'}
|
|
{$EXTERNALSYM ID3DXFileData}
|
|
ID3DXFileData = interface(IUnknown)
|
|
['{cef08cfd-7b4f-4429-9624-2a690a933201}']
|
|
function GetEnum(out Obj: ID3DXFileEnumObject): HResult; stdcall;
|
|
function GetName(szName: PAnsiChar; Size: PSIZE_T): HResult; stdcall;
|
|
function GetId(out Id: TGUID): HResult; stdcall;
|
|
function Lock(pSize: PSIZE_T; out ppData: Pointer): HResult; stdcall;
|
|
function Unlock: HResult; stdcall;
|
|
function GetType(out TypeGuid: TGUID): HResult; stdcall;
|
|
function IsReference: BOOL; stdcall;
|
|
function GetChildren(out Children: SIZE_T): HResult; stdcall;
|
|
function GetChild(id: SIZE_T; out Obj: ID3DXFileData): HResult; stdcall;
|
|
end;
|
|
|
|
function D3DXFileCreate(out DirectXFile: ID3DXFile): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXFileCreate}
|
|
|
|
(*
|
|
* DirectX File errors.
|
|
*)
|
|
|
|
const
|
|
_FACD3DXF = $876;
|
|
{$EXTERNALSYM _FACD3DXF}
|
|
MAKE_D3DXFERR_D = (1 shl 31) or (_FACD3DXF shl 16);
|
|
|
|
D3DXFERR_BADOBJECT = HResult(MAKE_D3DXFERR_D or 900);
|
|
{$EXTERNALSYM D3DXFERR_BADOBJECT}
|
|
D3DXFERR_BADVALUE = HResult(MAKE_D3DXFERR_D or 901);
|
|
{$EXTERNALSYM D3DXFERR_BADVALUE}
|
|
D3DXFERR_BADTYPE = HResult(MAKE_D3DXFERR_D or 902);
|
|
{$EXTERNALSYM D3DXFERR_BADTYPE}
|
|
D3DXFERR_NOTFOUND = HResult(MAKE_D3DXFERR_D or 903);
|
|
{$EXTERNALSYM D3DXFERR_NOTFOUND}
|
|
D3DXFERR_NOTDONEYET = HResult(MAKE_D3DXFERR_D or 904);
|
|
{$EXTERNALSYM D3DXFERR_NOTDONEYET}
|
|
D3DXFERR_FILENOTFOUND = HResult(MAKE_D3DXFERR_D or 905);
|
|
{$EXTERNALSYM D3DXFERR_FILENOTFOUND}
|
|
D3DXFERR_RESOURCENOTFOUND = HResult(MAKE_D3DXFERR_D or 906);
|
|
{$EXTERNALSYM D3DXFERR_RESOURCENOTFOUND}
|
|
D3DXFERR_BADRESOURCE = HResult(MAKE_D3DXFERR_D or 907);
|
|
{$EXTERNALSYM D3DXFERR_BADRESOURCE}
|
|
D3DXFERR_BADFILETYPE = HResult(MAKE_D3DXFERR_D or 908);
|
|
{$EXTERNALSYM D3DXFERR_BADFILETYPE}
|
|
D3DXFERR_BADFILEVERSION = HResult(MAKE_D3DXFERR_D or 909);
|
|
{$EXTERNALSYM D3DXFERR_BADFILEVERSION}
|
|
D3DXFERR_BADFILEFLOATSIZE = HResult(MAKE_D3DXFERR_D or 910);
|
|
{$EXTERNALSYM D3DXFERR_BADFILEFLOATSIZE}
|
|
D3DXFERR_BADFILE = HResult(MAKE_D3DXFERR_D or 911);
|
|
{$EXTERNALSYM D3DXFERR_BADFILE}
|
|
D3DXFERR_PARSEERROR = HResult(MAKE_D3DXFERR_D or 912);
|
|
{$EXTERNALSYM D3DXFERR_PARSEERROR}
|
|
D3DXFERR_BADARRAYSIZE = HResult(MAKE_D3DXFERR_D or 913);
|
|
{$EXTERNALSYM D3DXFERR_BADARRAYSIZE}
|
|
D3DXFERR_BADDATAREFERENCE = HResult(MAKE_D3DXFERR_D or 914);
|
|
{$EXTERNALSYM D3DXFERR_BADDATAREFERENCE}
|
|
D3DXFERR_NOMOREOBJECTS = HResult(MAKE_D3DXFERR_D or 915);
|
|
{$EXTERNALSYM D3DXFERR_NOMOREOBJECTS}
|
|
D3DXFERR_NOMOREDATA = HResult(MAKE_D3DXFERR_D or 916);
|
|
{$EXTERNALSYM D3DXFERR_NOMOREDATA}
|
|
D3DXFERR_BADCACHEFILE = HResult(MAKE_D3DXFERR_D or 917);
|
|
{$EXTERNALSYM D3DXFERR_BADCACHEFILE}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// File: d3dx9mesh.h
|
|
// Content: D3DX mesh types and functions
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
type
|
|
//patch mesh can be quads or tris
|
|
_D3DXPATCHMESHTYPE = (
|
|
{$IFNDEF SUPPORTS_EXPL_ENUMS}
|
|
D3DXPATCHMESH_invalid_0,
|
|
D3DXPATCHMESH_RECT {= $001},
|
|
D3DXPATCHMESH_TRI {= $002},
|
|
D3DXPATCHMESH_NPATCH {= $003}
|
|
{$ELSE}
|
|
D3DXPATCHMESH_RECT = $001,
|
|
D3DXPATCHMESH_TRI = $002,
|
|
D3DXPATCHMESH_NPATCH = $003
|
|
{$ENDIF}
|
|
);
|
|
{$EXTERNALSYM _D3DXPATCHMESHTYPE}
|
|
D3DXPATCHMESHTYPE = _D3DXPATCHMESHTYPE;
|
|
{$EXTERNALSYM D3DXPATCHMESHTYPE}
|
|
TD3DXPatchMeshType = _D3DXPATCHMESHTYPE;
|
|
|
|
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 ID3DXSkinInfo.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
|
|
//patch mesh options
|
|
_D3DXPATCHMESH = (
|
|
D3DXPATCHMESH_DEFAULT {= 000,}
|
|
);
|
|
{$EXTERNALSYM _D3DXPATCHMESH}
|
|
D3DXPATCHMESH = _D3DXPATCHMESH;
|
|
{$EXTERNALSYM D3DXPATCHMESH}
|
|
TD3DXPatchMesh = _D3DXPATCHMESH;
|
|
|
|
// option field values for specifying min value in D3DXGeneratePMesh and D3DXSimplifyMesh
|
|
_D3DXMESHSIMP = (
|
|
{$IFNDEF SUPPORTS_EXPL_ENUMS}
|
|
D3DXMESHSIMP_invalid_0{= 0x0},
|
|
D3DXMESHSIMP_VERTEX {= 0x1},
|
|
D3DXMESHSIMP_FACE {= 0x2}
|
|
{$ELSE}
|
|
D3DXMESHSIMP_VERTEX = $1,
|
|
D3DXMESHSIMP_FACE = $2
|
|
{$ENDIF}
|
|
);
|
|
{$EXTERNALSYM _D3DXMESHSIMP}
|
|
TD3DXMeshSimp = _D3DXMESHSIMP;
|
|
|
|
{$IFNDEF SUPPORTS_EXPL_ENUMS}
|
|
const
|
|
D3DXCLEAN_BACKFACING = $00000001;
|
|
{$EXTERNALSYM D3DXCLEAN_BACKFACING}
|
|
D3DXCLEAN_BOWTIES = $00000002;
|
|
{$EXTERNALSYM D3DXCLEAN_BOWTIES}
|
|
|
|
// Helper options
|
|
D3DXCLEAN_SKINNING = D3DXCLEAN_BACKFACING; // Bowtie cleaning modifies geometry and breaks skinning
|
|
{$EXTERNALSYM D3DXCLEAN_SKINNING}
|
|
D3DXCLEAN_OPTIMIZATION = D3DXCLEAN_BACKFACING;
|
|
{$EXTERNALSYM D3DXCLEAN_OPTIMIZATION}
|
|
D3DXCLEAN_SIMPLIFICATION = D3DXCLEAN_BACKFACING + D3DXCLEAN_BOWTIES;
|
|
{$EXTERNALSYM D3DXCLEAN_SIMPLIFICATION}
|
|
|
|
type
|
|
_D3DXCLEANTYPE = DWord;
|
|
{$EXTERNALSYM _D3DXCLEANTYPE}
|
|
{$ELSE}
|
|
_D3DXCLEANTYPE = (
|
|
D3DXCLEAN_BACKFACING = $00000001,
|
|
D3DXCLEAN_BOWTIES = $00000002,
|
|
|
|
// Helper options
|
|
D3DXCLEAN_SKINNING = D3DXCLEAN_BACKFACING, // Bowtie cleaning modifies geometry and breaks skinning
|
|
D3DXCLEAN_OPTIMIZATION = D3DXCLEAN_BACKFACING,
|
|
D3DXCLEAN_SIMPLIFICATION = D3DXCLEAN_BACKFACING + D3DXCLEAN_BOWTIES
|
|
);
|
|
{$EXTERNALSYM _D3DXCLEANTYPE}
|
|
|
|
{$ENDIF}
|
|
D3DXCLEANTYPE = _D3DXCLEANTYPE;
|
|
{$EXTERNALSYM D3DXCLEANTYPE}
|
|
TD3DXCleanType = _D3DXCLEANTYPE;
|
|
|
|
_MAX_FVF_DECL_SIZE = DWord;
|
|
{$EXTERNALSYM _MAX_FVF_DECL_SIZE}
|
|
const
|
|
MAX_FVF_DECL_SIZE = MAXD3DDECLLENGTH + 1; // +1 for END
|
|
{$EXTERNALSYM MAX_FVF_DECL_SIZE}
|
|
|
|
type
|
|
TFVFDeclaration = array [0..MAX_FVF_DECL_SIZE-1] of TD3DVertexElement9;
|
|
|
|
const
|
|
D3DXTANGENT_WRAP_U = $01;
|
|
{$EXTERNALSYM D3DXTANGENT_WRAP_U}
|
|
D3DXTANGENT_WRAP_V = $02;
|
|
{$EXTERNALSYM D3DXTANGENT_WRAP_V}
|
|
D3DXTANGENT_WRAP_UV = $03;
|
|
{$EXTERNALSYM D3DXTANGENT_WRAP_UV}
|
|
D3DXTANGENT_DONT_NORMALIZE_PARTIALS = $04;
|
|
{$EXTERNALSYM D3DXTANGENT_DONT_NORMALIZE_PARTIALS}
|
|
D3DXTANGENT_DONT_ORTHOGONALIZE = $08;
|
|
{$EXTERNALSYM D3DXTANGENT_DONT_ORTHOGONALIZE}
|
|
D3DXTANGENT_ORTHOGONALIZE_FROM_V = $010;
|
|
{$EXTERNALSYM D3DXTANGENT_ORTHOGONALIZE_FROM_V}
|
|
D3DXTANGENT_ORTHOGONALIZE_FROM_U = $020;
|
|
{$EXTERNALSYM D3DXTANGENT_ORTHOGONALIZE_FROM_U}
|
|
D3DXTANGENT_WEIGHT_BY_AREA = $040;
|
|
{$EXTERNALSYM D3DXTANGENT_WEIGHT_BY_AREA}
|
|
D3DXTANGENT_WEIGHT_EQUAL = $080;
|
|
{$EXTERNALSYM D3DXTANGENT_WEIGHT_EQUAL}
|
|
D3DXTANGENT_WIND_CW = $0100;
|
|
{$EXTERNALSYM D3DXTANGENT_WIND_CW}
|
|
D3DXTANGENT_CALCULATE_NORMALS = $0200;
|
|
{$EXTERNALSYM D3DXTANGENT_CALCULATE_NORMALS}
|
|
D3DXTANGENT_GENERATE_IN_PLACE = $0400;
|
|
{$EXTERNALSYM D3DXTANGENT_GENERATE_IN_PLACE}
|
|
|
|
type
|
|
_D3DXTANGENT = DWord;
|
|
{$EXTERNALSYM _D3DXTANGENT}
|
|
D3DXTANGENT = _D3DXTANGENT;
|
|
{$EXTERNALSYM D3DXCLEANTYPE}
|
|
TD3DXTangent = _D3DXTANGENT;
|
|
|
|
// D3DXIMT_WRAP_U means the texture wraps in the U direction
|
|
// D3DXIMT_WRAP_V means the texture wraps in the V direction
|
|
// D3DXIMT_WRAP_UV means the texture wraps in both directions
|
|
_D3DXIMT = (
|
|
{$IFNDEF SUPPORTS_EXPL_ENUMS}
|
|
D3DXIMT_WRAP_invalid_0,
|
|
D3DXIMT_WRAP_U {= $01},
|
|
D3DXIMT_WRAP_V {= $02},
|
|
D3DXIMT_WRAP_UV {= $03}
|
|
{$ELSE}
|
|
D3DXIMT_WRAP_U = $01,
|
|
D3DXIMT_WRAP_V = $02,
|
|
D3DXIMT_WRAP_UV = $03
|
|
{$ENDIF}
|
|
);
|
|
{$EXTERNALSYM _D3DXIMT}
|
|
D3DXIMT = _D3DXIMT;
|
|
{$EXTERNALSYM D3DXIMT}
|
|
TD3DXIMT = _D3DXIMT;
|
|
|
|
|
|
// These options are only valid for UVAtlasCreate and UVAtlasPartition, we may add more for UVAtlasPack if necessary
|
|
// D3DXUVATLAS_DEFAULT - Meshes with more than 25k faces go through fast, meshes with fewer than 25k faces go through quality
|
|
// D3DXUVATLAS_GEODESIC_FAST - Uses approximations to improve charting speed at the cost of added stretch or more charts.
|
|
// D3DXUVATLAS_GEODESIC_QUALITY - Provides better quality charts, but requires more time and memory than fast.
|
|
_D3DXUVATLAS = (
|
|
D3DXUVATLAS_DEFAULT {= $00},
|
|
D3DXUVATLAS_GEODESIC_FAST {= $01},
|
|
D3DXUVATLAS_GEODESIC_QUALITY {= $02}
|
|
);
|
|
{$EXTERNALSYM _D3DXUVATLAS}
|
|
D3DXUVATLAS = _D3DXUVATLAS;
|
|
{$EXTERNALSYM D3DXUVATLAS}
|
|
TD3DXUVAtlas = D3DXUVATLAS;
|
|
|
|
PD3DXAttributeRange = ^TD3DXAttributeRange;
|
|
_D3DXATTRIBUTERANGE = record
|
|
AttribId: DWord;
|
|
FaceStart: DWord;
|
|
FaceCount: DWord;
|
|
VertexStart: DWord;
|
|
VertexCount: DWord;
|
|
end;
|
|
{$EXTERNALSYM _D3DXATTRIBUTERANGE}
|
|
D3DXATTRIBUTERANGE = _D3DXATTRIBUTERANGE;
|
|
{$EXTERNALSYM D3DXATTRIBUTERANGE}
|
|
TD3DXAttributeRange = _D3DXATTRIBUTERANGE;
|
|
|
|
PD3DXMaterial = ^TD3DXMaterial;
|
|
_D3DXMATERIAL = record
|
|
MatD3D: TD3Dmaterial9;
|
|
pTextureFilename: PAnsiChar;
|
|
end;
|
|
{$EXTERNALSYM _D3DXMATERIAL}
|
|
D3DXMATERIAL = _D3DXMATERIAL;
|
|
{$EXTERNALSYM D3DXMATERIAL}
|
|
TD3DXMaterial = _D3DXMATERIAL;
|
|
|
|
_D3DXEFFECTDEFAULTTYPE = (
|
|
{$IFNDEF SUPPORTS_EXPL_ENUMS}
|
|
D3DXEDT_invalid_0,
|
|
D3DXEDT_STRING {= $1}, // pValue points to a null terminated ASCII string
|
|
D3DXEDT_FLOATS {= $2}, // pValue points to an array of floats - number of floats is NumBytes / sizeof(float)
|
|
D3DXEDT_DWORD {= $3} // pValue points to a DWORD
|
|
{$ELSE}
|
|
D3DXEDT_STRING = $1, // pValue points to a null terminated ASCII string
|
|
D3DXEDT_FLOATS = $2, // pValue points to an array of floats - number of floats is NumBytes / sizeof(float)
|
|
D3DXEDT_DWORD = $3 // pValue points to a DWORD
|
|
{$ENDIF}
|
|
);
|
|
{$EXTERNALSYM _D3DXEFFECTDEFAULTTYPE}
|
|
D3DXEFFECTDEFAULTTYPE = _D3DXEFFECTDEFAULTTYPE;
|
|
{$EXTERNALSYM D3DXEFFECTDEFAULTTYPE}
|
|
TD3DXEffectDefaultType = _D3DXEFFECTDEFAULTTYPE;
|
|
|
|
PD3DXEffectDefault = ^TD3DXEffectDefault;
|
|
_D3DXEFFECTDEFAULT = record
|
|
pParamName: PAnsiChar;
|
|
_Type: TD3DXEffectDefaultType; // type of the data pointed to by pValue
|
|
NumBytes: DWORD; // size in bytes of the data pointed to by pValue
|
|
pValue: Pointer; // data for the default of the effect
|
|
end;
|
|
{$EXTERNALSYM _D3DXEFFECTDEFAULT}
|
|
D3DXEFFECTDEFAULT = _D3DXEFFECTDEFAULT;
|
|
{$EXTERNALSYM D3DXEFFECTDEFAULT}
|
|
TD3DXEffectDefault = _D3DXEFFECTDEFAULT;
|
|
|
|
PD3DXEffectInstance = ^TD3DXEffectInstance;
|
|
_D3DXEFFECTINSTANCE = record
|
|
pEffectFilename: PAnsiChar;
|
|
NumDefaults: DWORD;
|
|
pDefaults: PD3DXEffectDefault;
|
|
end;
|
|
{$EXTERNALSYM _D3DXEFFECTINSTANCE}
|
|
D3DXEFFECTINSTANCE = _D3DXEFFECTINSTANCE;
|
|
{$EXTERNALSYM D3DXEFFECTINSTANCE}
|
|
TD3DXEffectInstance = _D3DXEFFECTINSTANCE;
|
|
|
|
PD3DXAttributeWeights = ^TD3DXAttributeWeights;
|
|
_D3DXATTRIBUTEWEIGHTS = record
|
|
Position: Single;
|
|
Boundary: Single;
|
|
Normal: Single;
|
|
Diffuse: Single;
|
|
Specular: Single;
|
|
Texcoord: array[0..7] of Single;
|
|
Tangent: Single;
|
|
Binormal: 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}
|
|
D3DXWELDEPSILONS_DONOTSPLIT = $8; // instructs weld to specify the D3DXMESHOPT_DONOTSPLIT flag when doing an Optimize(ATTR_SORT)
|
|
// if this flag is not set, all vertices that are in separate attribute groups
|
|
// will remain split and not welded. Setting this flag can slow down software vertex processing
|
|
{$EXTERNALSYM D3DXWELDEPSILONS_DONOTSPLIT}
|
|
|
|
type
|
|
PD3DXWeldEpsilons = ^TD3DXWeldEpsilons;
|
|
_D3DXWELDEPSILONS = record
|
|
Position: Single; // NOTE: This does NOT replace the epsilon in GenerateAdjacency
|
|
// in general, it should be the same value or greater than the one passed to GeneratedAdjacency
|
|
BlendWeights: Single;
|
|
Normal: Single;
|
|
PSize: Single;
|
|
Specular: Single;
|
|
Diffuse: Single;
|
|
Texcoord: array[0..7] of Single;
|
|
Tangent: Single;
|
|
Binormal: Single;
|
|
TessFactor: Single;
|
|
end;
|
|
{$EXTERNALSYM _D3DXWELDEPSILONS}
|
|
D3DXWELDEPSILONS = _D3DXWELDEPSILONS;
|
|
{$EXTERNALSYM D3DXWELDEPSILONS}
|
|
TD3DXWeldEpsilons = _D3DXWELDEPSILONS;
|
|
|
|
PID3DXMesh = ^ID3DXMesh;
|
|
ID3DXMesh = interface;
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXBaseMesh);'}
|
|
{$EXTERNALSYM ID3DXBaseMesh}
|
|
ID3DXBaseMesh = interface(IUnknown)
|
|
['{7ED943DD-52E8-40b5-A8D8-76685C406330}']
|
|
// 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 GetNumBytesPerVertex: DWORD; stdcall;
|
|
function GetOptions: DWord; stdcall;
|
|
function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
|
|
function CloneMeshFVF(Options, FVF: DWord; pD3DDevice: IDirect3DDevice9;
|
|
out ppCloneMesh: ID3DXMesh): HResult; stdcall;
|
|
function CloneMesh(Options: DWORD; pDeclaration: PD3DVertexElement9;
|
|
pD3DDevice: IDirect3DDevice9; out ppCloneMesh: ID3DXMesh): HResult; stdcall;
|
|
function GetVertexBuffer(out ppVB: IDirect3DVertexBuffer9): HResult; stdcall;
|
|
function GetIndexBuffer(out ppIB: IDirect3DIndexBuffer9): HResult; stdcall;
|
|
function LockVertexBuffer(Flags: DWord; out ppData: Pointer): HResult; stdcall;
|
|
function UnlockVertexBuffer: HResult; stdcall;
|
|
function LockIndexBuffer(Flags: DWord; out ppData: Pointer): 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;
|
|
|
|
function UpdateSemantics(const Declaration: TFVFDeclaration): HResult; stdcall;
|
|
end;
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXMesh);'}
|
|
{$EXTERNALSYM ID3DXMesh}
|
|
ID3DXMesh = interface(ID3DXBaseMesh)
|
|
['{4020E5C2-1403-4929-883F-E2E849FAC195}']
|
|
// ID3DXMesh
|
|
function LockAttributeBuffer(Flags: DWord; out ppData: PDWORD): 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;
|
|
function SetAttributeTable(pAttribTable: PD3DXAttributeRange; cAttribTableSize: DWORD): HResult; stdcall;
|
|
end;
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXPMesh);'}
|
|
{$EXTERNALSYM ID3DXPMesh}
|
|
ID3DXPMesh = interface(ID3DXBaseMesh)
|
|
['{8875769A-D579-4088-AAEB-534D1AD84E96}']
|
|
// ID3DXPMesh
|
|
function ClonePMeshFVF(Options, FVF: DWord; pD3DDevice: IDirect3DDevice9;
|
|
out ppCloneMesh: ID3DXPMesh): HResult; stdcall;
|
|
function ClonePMesh(Options: DWORD; pDeclaration: PD3DVertexElement9;
|
|
pD3DDevice: IDirect3DDevice9; 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;
|
|
pEffectInstances: PD3DXEffectInstance; 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;
|
|
|
|
// Used to generate the immediate "ancestor" for each vertex when it is removed by a vsplit. Allows generation of geomorphs
|
|
// Vertex buffer must be equal to or greater than the maximum number of vertices in the pmesh
|
|
function GenerateVertexHistory(pVertexHistory: PDWORD): HResult; stdcall;
|
|
end;
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXSPMesh);'}
|
|
{$EXTERNALSYM ID3DXSPMesh}
|
|
ID3DXSPMesh = interface(IUnknown)
|
|
['{667EA4C7-F1CD-4386-B523-7C0290B83CC5}']
|
|
// 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: IDirect3DDevice9): HResult; stdcall;
|
|
function CloneMeshFVF(Options, FVF: DWord; pD3DDevice: IDirect3DDevice9;
|
|
pAdjacencyOut, pVertexRemapOut: PDWord;
|
|
out ppCloneMesh: ID3DXMesh): HResult; stdcall;
|
|
function CloneMesh(Options: DWORD; pDeclaration: PD3DVertexElement9;
|
|
pD3DDevice: IDirect3DDevice9; pAdjacencyOut, pVertexRemapOut: PDWORD;
|
|
out ppCloneMesh: ID3DXMesh): HResult; stdcall;
|
|
function ClonePMeshFVF(Options, FVF: DWORD; pD3DDevice: IDirect3DDevice9;
|
|
pVertexRemapOut: PDWORD; pErrorsByFace: PSingle; out ppCloneMesh: ID3DXPMesh): HResult; stdcall;
|
|
function ClonePMesh(Options: DWORD; pDeclaration: PD3DVertexElement9;
|
|
pD3DDevice: IDirect3DDevice9; pVertexRemapOut: PDWORD; pErrorsbyFace: PSingle;
|
|
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_DONOTSPLIT = $20000000; // do not split vertices shared between attribute groups when attribute sorting
|
|
{$EXTERNALSYM D3DXMESHOPT_DONOTSPLIT}
|
|
D3DXMESHOPT_DEVICEINDEPENDENT = $00400000; // Only affects VCache. uses a static known good cache size for all cards
|
|
{$EXTERNALSYM D3DXMESHOPT_DEVICEINDEPENDENT}
|
|
|
|
// D3DXMESHOPT_SHAREVB has been removed, please use D3DXMESH_VB_SHARE instead
|
|
|
|
// 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..MaxInt div SizeOf(DWORD) - 1] of DWord;
|
|
{$NODEFINE TDWordArray}
|
|
|
|
PD3DXBoneCombination = ^TD3DXBoneCombination;
|
|
_D3DXBONECOMBINATION = 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;
|
|
|
|
// The following types of patch combinations are supported:
|
|
// Patch type Basis Degree
|
|
// Rect Bezier 2,3,5
|
|
// Rect B-Spline 2,3,5
|
|
// Rect Catmull-Rom 3
|
|
// Tri Bezier 2,3,5
|
|
// N-Patch N/A 3
|
|
|
|
PD3DXPatchInfo = ^TD3DXPatchInfo;
|
|
_D3DXPATCHINFO = record
|
|
PatchType: TD3DXPatchMeshType;
|
|
Degree: TD3DDegreeType;
|
|
Basis: TD3DBasisType;
|
|
end;
|
|
{$EXTERNALSYM _D3DXPATCHINFO}
|
|
D3DXPATCHINFO = _D3DXPATCHINFO;
|
|
{$EXTERNALSYM D3DXPATCHINFO}
|
|
TD3DXPatchInfo = _D3DXPATCHINFO;
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXPatchMesh);'}
|
|
{$EXTERNALSYM ID3DXPatchMesh}
|
|
ID3DXPatchMesh = interface(IUnknown)
|
|
['{3CE6CC22-DBF2-44f4-894D-F9C34A337139}']
|
|
// ID3DXPatchMesh
|
|
|
|
// Return creation parameters
|
|
function GetNumPatches: DWORD; stdcall;
|
|
function GetNumVertices: DWORD; stdcall;
|
|
function GetDeclaration(out Declaration: TFVFDeclaration): HResult; stdcall;
|
|
function GetControlVerticesPerPatch: DWORD; stdcall;
|
|
function GetOptions: DWORD; stdcall;
|
|
function GetDevice(out ppDevice: IDirect3DDevice9): HResult; stdcall;
|
|
function GetPatchInfo(out PatchInfo: TD3DXPatchInfo): HResult; stdcall;
|
|
|
|
// Control mesh access
|
|
function GetVertexBuffer(out ppVB: IDirect3DVertexBuffer9): HResult; stdcall;
|
|
function GetIndexBuffer(out ppIB: IDirect3DIndexBuffer9): HResult; stdcall;
|
|
function LockVertexBuffer(flags: DWORD; out ppData: Pointer): HResult; stdcall;
|
|
function UnlockVertexBuffer: HResult; stdcall;
|
|
function LockIndexBuffer(flags: DWORD; out ppData: Pointer): HResult; stdcall;
|
|
function UnlockIndexBuffer: HResult; stdcall;
|
|
function LockAttributeBuffer(flags: DWORD; out ppData: PDWORD): HResult; stdcall;
|
|
function UnlockAttributeBuffer: HResult; stdcall;
|
|
|
|
// This function returns the size of the tessellated mesh given a tessellation level.
|
|
// This assumes uniform tessellation. For adaptive tessellation the Adaptive parameter must
|
|
// be set to TRUE and TessellationLevel should be the max tessellation.
|
|
// This will result in the max mesh size necessary for adaptive tessellation.
|
|
function GetTessSize(fTessLevel: Single; Adaptive: LongBool; out NumTriangles, NumVertices: DWORD): HResult; stdcall;
|
|
|
|
//GenerateAdjacency determines which patches are adjacent with provided tolerance
|
|
//this information is used internally to optimize tessellation
|
|
function GenerateAdjacency(Tolerance: Single): HResult; stdcall;
|
|
|
|
//CloneMesh Creates a new patchmesh with the specified decl, and converts the vertex buffer
|
|
//to the new decl. Entries in the new decl which are new are set to 0. If the current mesh
|
|
//has adjacency, the new mesh will also have adjacency
|
|
function CloneMesh(Options: DWORD; pDecl: PD3DVertexElement9; out pMesh: ID3DXPatchMesh): HResult; stdcall;
|
|
|
|
// Optimizes the patchmesh for efficient tessellation. This function is designed
|
|
// to perform one time optimization for patch meshes that need to be tessellated
|
|
// repeatedly by calling the Tessellate() method. The optimization performed is
|
|
// independent of the actual tessellation level used.
|
|
// Currently Flags is unused.
|
|
// If vertices are changed, Optimize must be called again
|
|
function Optimize(flags: DWORD): HResult; stdcall;
|
|
|
|
//gets and sets displacement parameters
|
|
//displacement maps can only be 2D textures MIP-MAPPING is ignored for non adapative tessellation
|
|
function SetDisplaceParam(Texture: IDirect3DBaseTexture9;
|
|
MinFilter: TD3DTextureFilterType;
|
|
MagFilter: TD3DTextureFilterType;
|
|
MipFilter: TD3DTextureFilterType;
|
|
Wrap: TD3DTextureAddress;
|
|
dwLODBias: DWORD): HResult; stdcall;
|
|
|
|
function GetDisplaceParam(out Texture: IDirect3DBaseTexture9;
|
|
out MinFilter: TD3DTextureFilterType;
|
|
out MagFilter: TD3DTextureFilterType;
|
|
out MipFilter: TD3DTextureFilterType;
|
|
out Wrap: TD3DTextureAddress;
|
|
out dwLODBias: DWORD): HResult; stdcall;
|
|
|
|
// Performs the uniform tessellation based on the tessellation level.
|
|
// This function will perform more efficiently if the patch mesh has been optimized using the Optimize() call.
|
|
function Tessellate(fTessLevel: Single; pMesh: ID3DXMesh): HResult; stdcall;
|
|
|
|
// Performs adaptive tessellation based on the Z based adaptive tessellation criterion.
|
|
// pTrans specifies a 4D vector that is dotted with the vertices to get the per vertex
|
|
// adaptive tessellation amount. Each edge is tessellated to the average of the criterion
|
|
// at the 2 vertices it connects.
|
|
// MaxTessLevel specifies the upper limit for adaptive tesselation.
|
|
// This function will perform more efficiently if the patch mesh has been optimized using the Optimize() call.
|
|
function TessellateAdaptive(const pTrans: TD3DXVector4;
|
|
dwMaxTessLevel, dwMinTessLevel: DWORD;
|
|
pMesh: ID3DXMesh): HResult; stdcall;
|
|
end;
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXSkinInfo);'}
|
|
{$EXTERNALSYM ID3DXSkinInfo}
|
|
ID3DXSkinInfo = interface(IUnknown)
|
|
['{11EAA540-F9A6-4d49-AE6A-E19221F70CC4}']
|
|
// Specify the which vertices do each bones influence and by how much
|
|
function SetBoneInfluence(bone, numInfluences: DWORD; vertices: PDWORD; weights: PSingle): HResult; stdcall;
|
|
function SetBoneVertexInfluence(boneNum, influenceNum: DWORD; weight: Single): HResult; stdcall;
|
|
function GetNumBoneInfluences(bone: DWORD): DWORD; stdcall;
|
|
function GetBoneInfluence(bone: DWORD; vertices: PDWORD; weights: PSingle): HResult; stdcall;
|
|
function GetBoneVertexInfluence(boneNum, influenceNum: DWORD; out pWeight: Single; out pVertexNum: DWORD): HResult; stdcall;
|
|
function GetMaxVertexInfluences(out maxVertexInfluences: DWORD): HResult; stdcall;
|
|
function GetNumBones: DWORD; stdcall;
|
|
function FindBoneVertexInfluenceIndex(boneNum, vertexNum: DWORD; out pInfluenceIndex: DWORD): HResult; stdcall;
|
|
|
|
// This gets the max face influences based on a triangle mesh with the specified index buffer
|
|
function GetMaxFaceInfluences(pIB: IDirect3DIndexBuffer9; NumFaces: DWORD; out maxFaceInfluences:DWORD): HResult; stdcall;
|
|
|
|
// Set min bone influence. Bone influences that are smaller than this are ignored
|
|
function SetMinBoneInfluence(MinInfl: Single): HResult; stdcall;
|
|
// Get min bone influence.
|
|
function GetMinBoneInfluence: Single; stdcall;
|
|
|
|
// Bone names are returned by D3DXLoadSkinMeshFromXof. They are not used by any other method of this object
|
|
function SetBoneName(Bone: DWORD; pName: PAnsiChar): HResult; stdcall; // pName is copied to an internal string buffer
|
|
function GetBoneName(Bone: DWORD): PAnsiChar; stdcall; // A pointer to an internal string buffer is returned. Do not free this.
|
|
|
|
// Bone offset matrices are returned by D3DXLoadSkinMeshFromXof. They are not used by any other method of this object
|
|
function SetBoneOffsetMatrix(Bone: DWORD; const pBoneTransform: TD3DXMatrix): HResult; stdcall; // pBoneTransform is copied to an internal buffer
|
|
function GetBoneOffsetMatrix(Bone: DWORD): PD3DXMatrix; stdcall; // A pointer to an internal matrix is returned. Do not free this.
|
|
|
|
// Clone a skin info object
|
|
function Clone(out ppSkinInfo: ID3DXSkinInfo): HResult; stdcall;
|
|
|
|
// Update bone influence information to match vertices after they are reordered. This should be called
|
|
// if the target vertex buffer has been reordered externally.
|
|
function Remap(NumVertices: DWORD; pVertexRemap: PDWORD): HResult; stdcall;
|
|
|
|
// These methods enable the modification of the vertex layout of the vertices that will be skinned
|
|
function SetFVF(FVF: DWORD): HResult; stdcall;
|
|
function SetDeclaration(pDeclaration: PD3DVertexElement9): HResult; stdcall;
|
|
function GetFVF: DWORD; stdcall;
|
|
function GetDeclaration(out Declaration: TFVFDeclaration): HResult; stdcall;
|
|
|
|
// Apply SW skinning based on current pose matrices to the target vertices.
|
|
function UpdateSkinnedMesh(
|
|
pBoneTransforms: PD3DXMatrix;
|
|
pBoneInvTransposeTransforms: PD3DXMatrix;
|
|
pVerticesSrc: Pointer;
|
|
pVerticesDst: Pointer): HResult; stdcall;
|
|
|
|
// Takes a mesh and returns a new mesh with per vertex blend weights and a bone combination
|
|
// table that describes which bones affect which subsets of the mesh
|
|
function ConvertToBlendedMesh(
|
|
pMesh: ID3DXMesh;
|
|
Options: DWORD;
|
|
pAdjacencyIn: PDWORD;
|
|
pAdjacencyOut: PDWORD;
|
|
pFaceRemap: PDWORD;
|
|
ppVertexRemap: PID3DXBuffer;
|
|
pMaxFaceInfl: PDWORD;
|
|
out pNumBoneCombinations: DWORD;
|
|
out ppBoneCombinationTable: ID3DXBuffer;
|
|
out ppMesh: ID3DXMesh): HResult; stdcall;
|
|
|
|
// Takes a mesh and returns a new mesh with per vertex blend weights and indices
|
|
// and a bone combination table that describes which bones palettes affect which subsets of the mesh
|
|
function ConvertToIndexedBlendedMesh(
|
|
pMesh: ID3DXMesh;
|
|
Options: DWORD;
|
|
paletteSize: DWORD;
|
|
pAdjacencyIn: PDWORD;
|
|
pAdjacencyOut: PDWORD;
|
|
pFaceRemap: PDWORD;
|
|
ppVertexRemap: PID3DXBuffer;
|
|
pMaxVertexInfl: PDWORD;
|
|
out pNumBoneCombinations: DWORD;
|
|
out ppBoneCombinationTable: ID3DXBuffer;
|
|
out 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_ID3DXSkinInfo = ID3DXSkinInfo;
|
|
{$EXTERNALSYM IID_ID3DXSkinInfo}
|
|
IID_ID3DXPatchMesh = ID3DXPatchMesh;
|
|
{$EXTERNALSYM IID_ID3DXPatchMesh}
|
|
|
|
|
|
function D3DXCreateMesh(NumFaces, NumVertices: DWord; Options: DWord;
|
|
pDeclaration: PD3DVertexElement9;
|
|
pD3DDevice: IDirect3DDevice9; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreateMesh}
|
|
|
|
function D3DXCreateMeshFVF(NumFaces, NumVertices: DWord; Options: DWord;
|
|
FVF: DWord; pD3DDevice: IDirect3DDevice9; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreateMeshFVF}
|
|
|
|
function D3DXCreateSPMesh(pMesh: ID3DXMesh; pAdjacency: PDWord;
|
|
pVertexAttributeWeights: PD3DXAttributeWeights; pVertexWeights: PSingle;
|
|
out ppSMesh: ID3DXSPMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreateSPMesh}
|
|
|
|
// clean a mesh up for simplification, try to make manifold
|
|
function D3DXCleanMesh(CleanType: TD3DXCleanType; pMeshIn: ID3DXMesh; pAdjacencyIn: PDWord;
|
|
out ppMeshOut: ID3DXMesh; pAdjacencyOut: PDWord;
|
|
ppErrorsAndWarnings: PID3DXBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCleanMesh}
|
|
|
|
function D3DXValidMesh(pMeshIn: ID3DXMesh; pAdjacency: PDWord;
|
|
ppErrorsAndWarnings: PID3DXBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXValidMesh}
|
|
|
|
function D3DXGeneratePMesh(pMesh: ID3DXMesh; pAdjacency: PDWord;
|
|
pVertexAttributeWeights: PD3DXAttributeWeights; pVertexWeights: PSingle;
|
|
MinValue: DWord; Options: TD3DXMeshSimp; out ppPMesh: ID3DXPMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXGeneratePMesh}
|
|
|
|
function D3DXSimplifyMesh(pMesh: ID3DXMesh; pAdjacency: PDWord;
|
|
pVertexAttributeWeights: PD3DXAttributeWeights; pVertexWeights: PSingle;
|
|
MinValue: DWord; Options: TD3DXMeshSimp; out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXSimplifyMesh}
|
|
|
|
function D3DXComputeBoundingSphere(
|
|
pFirstPosition: PD3DXVector3; // pointer to first position
|
|
NumVertices: DWORD;
|
|
dwStride: DWORD; // count in bytes to subsequent position vectors
|
|
out pCenter: TD3DXVector3;
|
|
out pRadius: Single): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXComputeBoundingSphere}
|
|
|
|
function D3DXComputeBoundingBox(
|
|
pFirstPosition: PD3DXVector3; // pointer to first position
|
|
NumVertices: DWORD;
|
|
dwStride: DWORD; // count in bytes to subsequent position vectors
|
|
out pMin, pMax: TD3DXVector3): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXComputeBoundingBox}
|
|
|
|
function D3DXComputeNormals(pMesh: ID3DXBaseMesh; pAdjacency: PDWord): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXComputeNormals}
|
|
|
|
function D3DXCreateBuffer(NumBytes: DWord; out ppBuffer: ID3DXBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreateBuffer}
|
|
|
|
function D3DXLoadMeshFromXA(
|
|
pFilename: PAnsiChar;
|
|
Options: DWord;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
ppAdjacency, ppMaterials, ppEffectInstances: PID3DXBuffer;
|
|
pNumMaterials: PDWORD;
|
|
out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL name 'D3DXLoadMeshFromXA';
|
|
{$EXTERNALSYM D3DXLoadMeshFromXA}
|
|
|
|
function D3DXLoadMeshFromXW(
|
|
pFilename: PWideChar;
|
|
Options: DWord;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
ppAdjacency, ppMaterials, ppEffectInstances: PID3DXBuffer;
|
|
pNumMaterials: PDWORD;
|
|
out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL name 'D3DXLoadMeshFromXW';
|
|
{$EXTERNALSYM D3DXLoadMeshFromXW}
|
|
|
|
function D3DXLoadMeshFromX(
|
|
pFilename: PChar;
|
|
Options: DWord;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
ppAdjacency, ppMaterials, ppEffectInstances: PID3DXBuffer;
|
|
pNumMaterials: PDWORD;
|
|
out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL name 'D3DXLoadMeshFromXA';
|
|
{$EXTERNALSYM D3DXLoadMeshFromX}
|
|
|
|
|
|
function D3DXLoadMeshFromXInMemory(
|
|
Memory: Pointer;
|
|
SizeOfMemory: DWORD;
|
|
Options: DWORD;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
ppAdjacency, ppMaterials, ppEffectInstances: PID3DXBuffer;
|
|
pNumMaterials: PDWORD;
|
|
out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXLoadMeshFromXInMemory}
|
|
|
|
function D3DXLoadMeshFromXResource(
|
|
Module: HModule;
|
|
Name: PAnsiChar;
|
|
_Type: PAnsiChar;
|
|
Options: DWORD;
|
|
pD3D: IDirect3DDevice9;
|
|
ppAdjacency, ppMaterials, ppEffectInstances: PID3DXBuffer;
|
|
pNumMaterials: PDWORD;
|
|
out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXLoadMeshFromXResource}
|
|
|
|
function D3DXSaveMeshToXA(
|
|
pFilename: PAnsiChar;
|
|
pMesh: ID3DXMesh;
|
|
pAdjacency: PDWORD;
|
|
pMaterials: PD3DXMaterial;
|
|
pEffectInstances: PD3DXEffectInstance;
|
|
NumMaterials: DWORD;
|
|
Format: DWORD): HResult; stdcall; external d3dx9meshDLL name 'D3DXSaveMeshToXA';
|
|
{$EXTERNALSYM D3DXSaveMeshToXA}
|
|
|
|
function D3DXSaveMeshToXW(
|
|
pFilename: PWideChar;
|
|
pMesh: ID3DXMesh;
|
|
pAdjacency: PDWORD;
|
|
pMaterials: PD3DXMaterial;
|
|
pEffectInstances: PD3DXEffectInstance;
|
|
NumMaterials: DWORD;
|
|
Format: DWORD): HResult; stdcall; external d3dx9meshDLL name 'D3DXSaveMeshToXW';
|
|
{$EXTERNALSYM D3DXSaveMeshToXW}
|
|
|
|
function D3DXSaveMeshToX(
|
|
pFilename: PChar;
|
|
pMesh: ID3DXMesh;
|
|
pAdjacency: PDWORD;
|
|
pMaterials: PD3DXMaterial;
|
|
pEffectInstances: PD3DXEffectInstance;
|
|
NumMaterials: DWORD;
|
|
Format: DWORD): HResult; stdcall; external d3dx9meshDLL name 'D3DXSaveMeshToXA';
|
|
{$EXTERNALSYM D3DXSaveMeshToX}
|
|
|
|
|
|
function D3DXCreatePMeshFromStream(
|
|
pStream: IStream;
|
|
Options: DWORD;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
ppMaterials: PID3DXBuffer;
|
|
ppEffectInstances: PID3DXBuffer;
|
|
pNumMaterials: PDWORD;
|
|
out ppPMesh: ID3DXPMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreatePMeshFromStream}
|
|
|
|
// Creates a skin info object based on the number of vertices, number of bones, and a declaration describing the vertex layout of the target vertices
|
|
// The bone names and initial bone transforms are not filled in the skin info object by this method.
|
|
function D3DXCreateSkinInfo(
|
|
NumVertices: DWORD;
|
|
pDeclaration: PD3DVertexElement9;
|
|
NumBones: DWORD;
|
|
out ppSkinInfo: ID3DXSkinInfo): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreateSkinInfo}
|
|
|
|
// Creates a skin info object based on the number of vertices, number of bones, and a FVF describing the vertex layout of the target vertices
|
|
// The bone names and initial bone transforms are not filled in the skin info object by this method.
|
|
function D3DXCreateSkinInfoFVF(
|
|
NumVertices: DWORD;
|
|
FVF: DWORD;
|
|
NumBones: DWORD;
|
|
out ppSkinInfo: ID3DXSkinInfo): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreateSkinInfoFVF}
|
|
|
|
function D3DXLoadMeshFromXof(
|
|
pxofMesh: ID3DXFileData;
|
|
Options: DWord;
|
|
pD3D: IDirect3DDevice9;
|
|
ppAdjacency, ppMaterials, ppEffectInstances: PID3DXBuffer;
|
|
pNumMaterials: PDWord;
|
|
out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXLoadMeshFromXof}
|
|
|
|
// This similar to D3DXLoadMeshFromXof, except also returns skinning info if present in the file
|
|
// If skinning info is not present, ppSkinInfo will be NULL
|
|
function D3DXLoadSkinMeshFromXof(
|
|
pxofMesh: ID3DXFileData;
|
|
Options: DWORD;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
ppAdjacency, ppMaterials, ppEffectInstances: PID3DXBuffer;
|
|
pMatOut: PDWORD;
|
|
out ppSkinInfo: ID3DXSkinInfo;
|
|
out ppMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXLoadSkinMeshFromXof}
|
|
|
|
|
|
// The inverse of D3DXConvertTo{Indexed}BlendedMesh() functions. It figures out the skinning info from
|
|
// the mesh and the bone combination table and populates a skin info object with that data. The bone
|
|
// names and initial bone transforms are not filled in the skin info object by this method. This works
|
|
// with either a non-indexed or indexed blended mesh. It examines the FVF or declarator of the mesh to
|
|
// determine what type it is.
|
|
function D3DXCreateSkinInfoFromBlendedMesh(
|
|
pMesh: ID3DXBaseMesh;
|
|
NumBones: DWORD;
|
|
pBoneCombinationTable: PD3DXBoneCombination;
|
|
out ppSkinInfo: ID3DXSkinInfo): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreateSkinInfoFromBlendedMesh}
|
|
|
|
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 d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXTessellateNPatches}
|
|
|
|
|
|
//generates implied outputdecl from input decl
|
|
//the decl generated from this should be used to generate the output decl for
|
|
//the tessellator subroutines.
|
|
|
|
function D3DXGenerateOutputDecl(
|
|
pOutput: PD3DVertexElement9;
|
|
pInput: PD3DVertexElement9): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXGenerateOutputDecl}
|
|
|
|
//loads patches from an XFileData
|
|
//since an X file can have up to 6 different patch meshes in it,
|
|
//returns them in an array - pNumPatches will contain the number of
|
|
//meshes in the actual file.
|
|
function D3DXLoadPatchMeshFromXof(
|
|
pxofMesh: ID3DXFileData;
|
|
Options: DWORD;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
ppMaterials: PID3DXBuffer;
|
|
ppEffectInstances: PID3DXBuffer;
|
|
pNumMaterials: PDWORD;
|
|
out ppMesh: ID3DXPatchMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXLoadPatchMeshFromXof}
|
|
|
|
//computes the size a single rect patch.
|
|
function D3DXRectPatchSize(
|
|
pfNumSegs: PSingle; //segments for each edge (4)
|
|
pdwTriangles: PDWORD; //output number of triangles
|
|
pdwVertices: PDWORD //output number of vertices
|
|
): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXRectPatchSize}
|
|
|
|
//computes the size of a single triangle patch
|
|
function D3DXTriPatchSize(
|
|
pfNumSegs: PSingle; //segments for each edge (3)
|
|
pdwTriangles: PDWORD; //output number of triangles
|
|
pdwVertices: PDWORD //output number of vertices
|
|
): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXTriPatchSize}
|
|
|
|
|
|
//tessellates a patch into a created mesh
|
|
//similar to D3D RT patch
|
|
function D3DXTessellateRectPatch(
|
|
pVB: IDirect3DVertexBuffer9;
|
|
pNumSegs: PSingle;
|
|
pdwInDecl: PD3DVertexElement9;
|
|
const pRectPatchInfo: TD3DRectPatchInfo;
|
|
pMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXTessellateRectPatch}
|
|
|
|
|
|
function D3DXTessellateTriPatch(
|
|
pVB: IDirect3DVertexBuffer9;
|
|
pNumSegs: PSingle;
|
|
pInDecl: PD3DVertexElement9;
|
|
pTriPatchInfo: TD3DTriPatchInfo;
|
|
pMesh: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXTessellateTriPatch}
|
|
|
|
|
|
|
|
//creates an NPatch PatchMesh from a D3DXMESH
|
|
function D3DXCreateNPatchMesh(
|
|
pMeshSysMem: ID3DXMesh;
|
|
out pPatchMesh: ID3DXPatchMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreateNPatchMesh}
|
|
|
|
|
|
//creates a patch mesh
|
|
function D3DXCreatePatchMesh(
|
|
const pInfo: TD3DXPatchInfo; //patch type
|
|
dwNumPatches: DWORD; //number of patches
|
|
dwNumVertices: DWORD; //number of control vertices
|
|
dwOptions: DWORD; //options
|
|
pDecl: PD3DVertexElement9; //format of control vertices
|
|
pD3DDevice: IDirect3DDevice9;
|
|
out pPatchMesh: ID3DXPatchMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreatePatchMesh}
|
|
|
|
|
|
//returns the number of degenerates in a patch mesh -
|
|
//text output put in string.
|
|
function D3DXValidPatchMesh(
|
|
pMesh: ID3DXPatchMesh;
|
|
dwcDegenerateVertices: PDWORD;
|
|
dwcDegeneratePatches: PDWORD;
|
|
ppErrorsAndWarnings: PID3DXBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXValidPatchMesh}
|
|
|
|
function D3DXGetFVFVertexSize(FVF: DWord): LongWord; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXGetFVFVertexSize}
|
|
|
|
function D3DXGetDeclVertexSize(pDecl: PD3DVertexElement9; Stream: DWORD): LongWord; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXGetDeclVertexSize}
|
|
|
|
function D3DXGetDeclLength(pDecl: PD3DVertexElement9): LongWord; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXGetDeclLength}
|
|
|
|
function D3DXDeclaratorFromFVF(FVF: DWord; out Declaration: TFVFDeclaration): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXDeclaratorFromFVF}
|
|
|
|
function D3DXFVFFromDeclarator(pDeclarator: PD3DVertexElement9; out pFVF: DWord): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXFVFFromDeclarator}
|
|
|
|
function D3DXWeldVertices(
|
|
pMesh: ID3DXMesh;
|
|
Flags: DWORD;
|
|
pEpsilons: PD3DXWeldEpsilons;
|
|
rgdwAdjacencyIn, rgdwAdjacencyOut, pFaceRemap: PDWord;
|
|
ppVertexRemap: PID3DXBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXWeldVertices}
|
|
|
|
type
|
|
PD3DXIntersectInfo = ^TD3DXIntersectInfo;
|
|
_D3DXINTERSECTINFO = 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 d3dx9meshDLL;
|
|
{$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 d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXIntersectSubset}
|
|
|
|
|
|
function D3DXSplitMesh(pMeshIn: ID3DXMesh; pAdjacencyIn: PDWord;
|
|
MaxSize, Options: DWord;
|
|
out pMeshesOut: DWord; out ppMeshArrayOut: ID3DXBuffer;
|
|
ppAdjacencyArrayOut, ppFaceRemapArrayOut, ppVertRemapArrayOut: PID3DXBuffer
|
|
): HResult; stdcall; external d3dx9meshDLL;
|
|
{$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
|
|
): BOOL; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXIntersectTri}
|
|
|
|
function D3DXSphereBoundProbe(const pCenter: TD3DXVector3; Radius: Single;
|
|
out pRayPosition, pRayDirection: TD3DXVector3): BOOL; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXSphereBoundProbe}
|
|
|
|
function D3DXBoxBoundProbe(const pMin, pMax: TD3DXVector3;
|
|
out pRayPosition, pRayDirection: TD3DXVector3): BOOL; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXBoxBoundProbe}
|
|
|
|
|
|
function D3DXComputeTangentFrame(pMesh: ID3DXMesh; dwOptions: DWORD): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXComputeTangentFrame}
|
|
|
|
function D3DXComputeTangentFrameEx(pMesh: ID3DXMesh;
|
|
dwTextureInSemantic: DWORD;
|
|
dwTextureInIndex: DWORD;
|
|
dwUPartialOutSemantic: DWORD;
|
|
dwUPartialOutIndex: DWORD;
|
|
dwVPartialOutSemantic: DWORD;
|
|
dwVPartialOutIndex: DWORD;
|
|
dwNormalOutSemantic: DWORD;
|
|
dwNormalOutIndex: DWORD;
|
|
dwOptions: DWORD;
|
|
{CONST} pdwAdjacency: PDWORD;
|
|
fPartialEdgeThreshold: Single;
|
|
fSingularPointThreshold: Single;
|
|
fNormalEdgeThreshold: Single;
|
|
out ppMeshOut: ID3DXMesh;
|
|
ppVertexMapping: PID3DXBuffer
|
|
): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXComputeTangentFrameEx}
|
|
|
|
//D3DXComputeTangent
|
|
//
|
|
//Computes the Tangent vectors for the TexStage texture coordinates
|
|
//and places the results in the TANGENT[TangentIndex] specified in the meshes' DECL
|
|
//puts the binorm in BINORM[BinormIndex] also specified in the decl.
|
|
//
|
|
//If neither the binorm or the tangnet are in the meshes declaration,
|
|
//the function will fail.
|
|
//
|
|
//If a tangent or Binorm field is in the Decl, but the user does not
|
|
//wish D3DXComputeTangent to replace them, then D3DX_DEFAULT specified
|
|
//in the TangentIndex or BinormIndex will cause it to ignore the specified
|
|
//semantic.
|
|
//
|
|
//Wrap should be specified if the texture coordinates wrap.
|
|
|
|
function D3DXComputeTangent(
|
|
Mesh: ID3DXMesh;
|
|
TexStage: DWORD;
|
|
TangentIndex: DWORD;
|
|
BinormIndex: DWORD;
|
|
Wrap: DWORD;
|
|
Adjacency: PDWORD): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXComputeTangent}
|
|
|
|
//============================================================================
|
|
//
|
|
// UVAtlas apis
|
|
//
|
|
//============================================================================
|
|
type
|
|
TD3DXUVAtlasCB = function (fPercentDone: Single; lpUserContext: Pointer): HRESULT; stdcall;
|
|
{$NODEFINE TD3DXUVAtlasCB}
|
|
{$HPPEMIT 'typedef LPD3DXUVATLASCB TD3DXUVAtlasCB;'}
|
|
|
|
// This function creates atlases for meshes. There are two modes of operation,
|
|
// either based on the number of charts, or the maximum allowed stretch. If the
|
|
// maximum allowed stretch is 0, then each triangle will likely be in its own
|
|
// chart.
|
|
|
|
//
|
|
// The parameters are as follows:
|
|
// pMesh - Input mesh to calculate an atlas for. This must have a position
|
|
// channel and at least a 2-d texture channel.
|
|
// uMaxChartNumber - The maximum number of charts required for the atlas.
|
|
// If this is 0, it will be parameterized based solely on
|
|
// stretch.
|
|
// fMaxStretch - The maximum amount of stretch, if 0, no stretching is allowed,
|
|
// if 1, then any amount of stretching is allowed.
|
|
// uWidth - The width of the texture the atlas will be used on.
|
|
// uHeight - The height of the texture the atlas will be used on.
|
|
// fGutter - The minimum distance, in texels between two charts on the atlas.
|
|
// this gets scaled by the width, so if fGutter is 2.5, and it is
|
|
// used on a 512x512 texture, then the minimum distance will be
|
|
// 2.5 / 512 in u-v space.
|
|
// dwTextureIndex - Specifies which texture coordinate to write to in the
|
|
// output mesh (which is cloned from the input mesh). Useful
|
|
// if your vertex has multiple texture coordinates.
|
|
// pdwAdjacency - a pointer to an array with 3 DWORDs per face, indicating
|
|
// which triangles are adjacent to each other.
|
|
// pdwFalseEdgeAdjacency - a pointer to an array with 3 DWORDS per face, indicating
|
|
// at each face, whether an edge is a false edge or not (using
|
|
// the same ordering as the adjacency data structure). If this
|
|
// is NULL, then it is assumed that there are no false edges. If
|
|
// not NULL, then a non-false edge is indicated by -1 and a false
|
|
// edge is indicated by any other value (it is not required, but
|
|
// it may be useful for the caller to use the original adjacency
|
|
// value). This allows you to parameterize a mesh of quads, and
|
|
// the edges down the middle of each quad will not be cut when
|
|
// parameterizing the mesh.
|
|
// pfIMTArray - a pointer to an array with 3 FLOATs per face, describing the
|
|
// integrated metric tensor for that face. This lets you control
|
|
// the way this triangle may be stretched in the atlas. The IMT
|
|
// passed in will be 3 floats (a,b,c) and specify a symmetric
|
|
// matrix (a b) that, given a vector (s,t), specifies the
|
|
// (b c)
|
|
// distance between a vector v1 and a vector v2 = v1 + (s,t) as
|
|
// sqrt((s, t) * M * (s, t)^T).
|
|
// In other words, this lets one specify the magnitude of the
|
|
// stretch in an arbitrary direction in u-v space. For example
|
|
// if a = b = c = 1, then this scales the vector (1,1) by 2, and
|
|
// the vector (1,-1) by 0. Note that this is multiplying the edge
|
|
// length by the square of the matrix, so if you want the face to
|
|
// stretch to twice its
|
|
// size with no shearing, the IMT value should be (2, 0, 2), which
|
|
// is just the identity matrix times 2.
|
|
// Note that this assumes you have an orientation for the triangle
|
|
// in some 2-D space. For D3DXUVAtlas, this space is created by
|
|
// letting S be the direction from the first to the second
|
|
// vertex, and T be the cross product between the normal and S.
|
|
//
|
|
// pStatusCallback - Since the atlas creation process can be very CPU intensive,
|
|
// this allows the programmer to specify a function to be called
|
|
// periodically, similarly to how it is done in the PRT simulation
|
|
// engine.
|
|
// fCallbackFrequency - This lets you specify how often the callback will be
|
|
// called. A decent default should be 0.0001f.
|
|
// pUserContext - a void pointer to be passed back to the callback function
|
|
// dwOptions - A combination of flags in the D3DXUVATLAS enum
|
|
// ppMeshOut - A pointer to a location to store a pointer for the newly created
|
|
// mesh.
|
|
// ppFacePartitioning - A pointer to a location to store a pointer for an array,
|
|
// one DWORD per face, giving the final partitioning
|
|
// created by the atlasing algorithm.
|
|
// ppVertexRemapArray - A pointer to a location to store a pointer for an array,
|
|
// one DWORD per vertex, giving the vertex it was copied
|
|
// from, if any vertices needed to be split.
|
|
// pfMaxStretchOut - A location to store the maximum stretch resulting from the
|
|
// atlasing algorithm.
|
|
// puNumChartsOut - A location to store the number of charts created, or if the
|
|
// maximum number of charts was too low, this gives the minimum
|
|
// number of charts needed to create an atlas.
|
|
|
|
function D3DXUVAtlasCreate(
|
|
pMesh: ID3DXMesh;
|
|
uMaxChartNumber: LongWord;
|
|
fMaxStretch: Single;
|
|
uWidth: LongWord;
|
|
uHeight: LongWord;
|
|
fGutter: Single;
|
|
dwTextureIndex: DWORD;
|
|
{CONST} pdwAdjacency: PDWORD;
|
|
{CONST} pdwFalseEdgeAdjacency: PDWORD;
|
|
{CONST} pfIMTArray: PSingle;
|
|
pStatusCallback: TD3DXUVAtlasCB;
|
|
fCallbackFrequency: Single;
|
|
pUserContext: Pointer;
|
|
dwOptions: TD3DXUVAtlas;
|
|
out ppMeshOut: ID3DXMesh;
|
|
ppFacePartitioning: PID3DXBuffer;
|
|
ppVertexRemapArray: PID3DXBuffer;
|
|
pfMaxStretchOut: PSingle;
|
|
puNumChartsOut: PLongWord): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXUVAtlasCreate}
|
|
|
|
// This has the same exact arguments as Create, except that it does not perform the
|
|
// final packing step. This method allows one to get a partitioning out, and possibly
|
|
// modify it before sending it to be repacked. Note that if you change the
|
|
// partitioning, you'll also need to calculate new texture coordinates for any faces
|
|
// that have switched charts.
|
|
//
|
|
// The partition result adjacency output parameter is meant to be passed to the
|
|
// UVAtlasPack function, this adjacency cuts edges that are between adjacent
|
|
// charts, and also can include cuts inside of a chart in order to make it
|
|
// equivalent to a disc. For example:
|
|
//
|
|
// _______
|
|
// | ___ |
|
|
// | |_| |
|
|
// |_____|
|
|
//
|
|
// In order to make this equivalent to a disc, we would need to add a cut, and it
|
|
// Would end up looking like:
|
|
// _______
|
|
// | ___ |
|
|
// | |_|_|
|
|
// |_____|
|
|
//
|
|
// The resulting partition adjacency parameter cannot be NULL, because it is
|
|
// required for the packing step.
|
|
|
|
|
|
|
|
function D3DXUVAtlasPartition(
|
|
pMesh: ID3DXMesh;
|
|
uMaxChartNumber: LongWord;
|
|
fMaxStretch: Single;
|
|
dwTextureIndex: DWORD;
|
|
{CONST} pdwAdjacency: PDWORD;
|
|
{CONST} pdwFalseEdgeAdjacency: PDWORD;
|
|
{CONST} pfIMTArray: PSingle;
|
|
pStatusCallback: TD3DXUVAtlasCB;
|
|
fCallbackFrequency: Single;
|
|
pUserContext: Pointer;
|
|
dwOptions: TD3DXUVAtlas;
|
|
out ppMeshOut: ID3DXMesh;
|
|
ppFacePartitioning: PID3DXBuffer;
|
|
ppVertexRemapArray: PID3DXBuffer;
|
|
ppPartitionResultAdjacency: PID3DXBuffer;
|
|
pfMaxStretchOut: PSingle;
|
|
puNumChartsOut: PLongWord): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXUVAtlasPartition}
|
|
|
|
// This takes the face partitioning result from Partition and packs it into an
|
|
// atlas of the given size. pdwPartitionResultAdjacency should be derived from
|
|
// the adjacency returned from the partition step. This value cannot be NULL
|
|
// because Pack needs to know where charts were cut in the partition step in
|
|
// order to find the edges of each chart.
|
|
// The options parameter is currently reserved.
|
|
function D3DXUVAtlasPack(
|
|
pMesh: ID3DXMesh;
|
|
uWidth: LongWord;
|
|
uHeight: LongWord;
|
|
fGutter: Single;
|
|
dwTextureIndex: DWORD;
|
|
{CONST} pdwPartitionResultAdjacency: PDWORD;
|
|
pStatusCallback: TD3DXUVAtlasCB;
|
|
fCallbackFrequency: Single;
|
|
pUserContext: Pointer;
|
|
dwOptions: TD3DXUVAtlas;
|
|
pFacePartitioning: ID3DXBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXUVAtlasPack}
|
|
|
|
|
|
//============================================================================
|
|
//
|
|
// IMT Calculation apis
|
|
//
|
|
// These functions all compute the Integrated Metric Tensor for use in the
|
|
// UVAtlas API. They all calculate the IMT with respect to the canonical
|
|
// triangle, where the coordinate system is set up so that the u axis goes
|
|
// from vertex 0 to 1 and the v axis is N x u. So, for example, the second
|
|
// vertex's canonical uv coordinates are (d,0) where d is the distance between
|
|
// vertices 0 and 1. This way the IMT does not depend on the parameterization
|
|
// of the mesh, and if the signal over the surface doesn't change, then
|
|
// the IMT doesn't need to be recalculated.
|
|
//============================================================================
|
|
|
|
type
|
|
// This callback is used by D3DXComputeIMTFromSignal.
|
|
//
|
|
// uv - The texture coordinate for the vertex.
|
|
// uPrimitiveID - Face ID of the triangle on which to compute the signal.
|
|
// uSignalDimension - The number of floats to store in pfSignalOut.
|
|
// pUserData - The pUserData pointer passed in to ComputeIMTFromSignal.
|
|
// pfSignalOut - A pointer to where to store the signal data.
|
|
TD3DXIMTSignalCallback = function (const uv: PD3DXVector2; uPrimitiveID: LongWord;
|
|
uSignalDimension: LongWord; pUserData: Pointer; pfSignalOut: PSingle): HRESULT; stdcall;
|
|
{$NODEFINE TD3DXIMTSignalCallback}
|
|
{$HPPEMIT 'typedef LPD3DXIMTSIGNALCALLBACK TD3DXIMTSignalCallback;'}
|
|
|
|
// This function is used to calculate the IMT from per vertex data. It sets
|
|
// up a linear system over the triangle, solves for the jacobian J, then
|
|
// constructs the IMT from that (J^TJ).
|
|
// This function allows you to calculate the IMT based off of any value in a
|
|
// mesh (color, normal, etc) by specifying the correct stride of the array.
|
|
// The IMT computed will cause areas of the mesh that have similar values to
|
|
// take up less space in the texture.
|
|
//
|
|
// pMesh - The mesh to calculate the IMT for.
|
|
// pVertexSignal - A float array of size uSignalStride * v, where v is the
|
|
// number of vertices in the mesh.
|
|
// uSignalDimension - How many floats per vertex to use in calculating the IMT.
|
|
// uSignalStride - The number of bytes per vertex in the array. This must be
|
|
// a multiple of sizeof(float)
|
|
// ppIMTData - Where to store the buffer holding the IMT data
|
|
|
|
function D3DXComputeIMTFromPerVertexSignal(
|
|
pMesh: ID3DXMesh;
|
|
const pfVertexSignal: PSingle; // uSignalDimension floats per vertex
|
|
uSignalDimension: LongWord;
|
|
uSignalStride: LongWord; // stride of signal in bytes
|
|
dwOptions: DWORD; // reserved for future use
|
|
pStatusCallback: TD3DXUVAtlasCB;
|
|
pUserContext: Pointer;
|
|
out ppIMTData: ID3DXBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXComputeIMTFromPerVertexSignal}
|
|
|
|
// This function is used to calculate the IMT from data that varies over the
|
|
// surface of the mesh (generally at a higher frequency than vertex data).
|
|
// This function requires the mesh to already be parameterized (so it already
|
|
// has texture coordinates). It allows the user to define a signal arbitrarily
|
|
// over the surface of the mesh.
|
|
//
|
|
// pMesh - The mesh to calculate the IMT for.
|
|
// dwTextureIndex - This describes which set of texture coordinates in the
|
|
// mesh to use.
|
|
// uSignalDimension - How many components there are in the signal.
|
|
// fMaxUVDistance - The subdivision will continue until the distance between
|
|
// all vertices is at most fMaxUVDistance.
|
|
// dwOptions - reserved for future use
|
|
// pSignalCallback - The callback to use to get the signal.
|
|
// pUserData - A pointer that will be passed in to the callback.
|
|
// ppIMTData - Where to store the buffer holding the IMT data
|
|
function D3DXComputeIMTFromSignal(
|
|
pMesh: ID3DXMesh;
|
|
dwTextureIndex: DWORD;
|
|
uSignalDimension: LongWord;
|
|
fMaxUVDistance: Single;
|
|
dwOptions: DWORD; // reserved for future use
|
|
pSignalCallback: TD3DXIMTSignalCallback;
|
|
pUserData: Pointer;
|
|
pStatusCallback: TD3DXUVAtlasCB;
|
|
pUserContext: Pointer;
|
|
out ppIMTData: ID3DXBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXComputeIMTFromSignal}
|
|
|
|
// This function is used to calculate the IMT from texture data. Given a texture
|
|
// that maps over the surface of the mesh, the algorithm computes the IMT for
|
|
// each face. This will cause large areas that are very similar to take up less
|
|
// room when parameterized with UVAtlas. The texture is assumed to be
|
|
// interpolated over the mesh bilinearly.
|
|
//
|
|
// pMesh - The mesh to calculate the IMT for.
|
|
// pTexture - The texture to load data from.
|
|
// dwTextureIndex - This describes which set of texture coordinates in the
|
|
// mesh to use.
|
|
// dwOptions - Combination of one or more D3DXIMT flags.
|
|
// ppIMTData - Where to store the buffer holding the IMT data
|
|
function D3DXComputeIMTFromTexture(
|
|
pMesh: ID3DXMesh;
|
|
pTexture: IDirect3DTexture9;
|
|
dwTextureIndex: DWORD;
|
|
dwOptions: DWORD;
|
|
pStatusCallback: TD3DXUVAtlasCB;
|
|
pUserContext: Pointer;
|
|
out ppIMTData: ID3DXBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXComputeIMTFromTexture}
|
|
|
|
// This function is very similar to ComputeIMTFromTexture, but it uses a
|
|
// float array to pass in the data, and it can calculate higher dimensional
|
|
// values than 4.
|
|
//
|
|
// pMesh - The mesh to calculate the IMT for.
|
|
// dwTextureIndex - This describes which set of texture coordinates in the
|
|
// mesh to use.
|
|
// pfFloatArray - a pointer to a float array of size
|
|
// uWidth*uHeight*uComponents
|
|
// uWidth - The width of the texture
|
|
// uHeight - The height of the texture
|
|
// uSignalDimension - The number of floats per texel in the signal
|
|
// uComponents - The number of floats in each texel
|
|
// dwOptions - Combination of one or more D3DXIMT flags
|
|
// ppIMTData - Where to store the buffer holding the IMT data
|
|
function D3DXComputeIMTFromPerTexelSignal(
|
|
pMesh: ID3DXMesh;
|
|
dwTextureIndex: DWORD;
|
|
pfTexelSignal: PSingle;
|
|
uWidth: LongWord;
|
|
uHeight: LongWord;
|
|
uSignalDimension: LongWord;
|
|
uComponents: LongWord;
|
|
dwOptions: DWORD;
|
|
pStatusCallback: TD3DXUVAtlasCB;
|
|
pUserContext: Pointer;
|
|
out ppIMTData: ID3DXBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXComputeIMTFromPerTexelSignal}
|
|
|
|
function D3DXConvertMeshSubsetToSingleStrip(
|
|
MeshIn: ID3DXBaseMesh;
|
|
AttribId: DWord;
|
|
IBOptions: DWord;
|
|
out ppIndexBuffer: IDirect3DIndexBuffer9;
|
|
pNumIndices: PDWord): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXConvertMeshSubsetToSingleStrip}
|
|
|
|
function D3DXConvertMeshSubsetToStrips(
|
|
MeshIn: ID3DXBaseMesh;
|
|
AttribId: DWord;
|
|
IBOptions: DWord;
|
|
out ppIndexBuffer: IDirect3DIndexBuffer9;
|
|
pNumIndices: PDWord;
|
|
ppStripLengths: PID3DXBuffer;
|
|
pNumStrips: PDWord): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXConvertMeshSubsetToStrips}
|
|
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXOptimizeFaces:
|
|
// --------------------
|
|
// Generate a face remapping for a triangle list that more effectively utilizes
|
|
// vertex caches. This optimization is identical to the one provided
|
|
// by ID3DXMesh::Optimize with the hardware independent option enabled.
|
|
//
|
|
// Parameters:
|
|
// pbIndices
|
|
// Triangle list indices to use for generating a vertex ordering
|
|
// NumFaces
|
|
// Number of faces in the triangle list
|
|
// NumVertices
|
|
// Number of vertices referenced by the triangle list
|
|
// b32BitIndices
|
|
// TRUE if indices are 32 bit, FALSE if indices are 16 bit
|
|
// pFaceRemap
|
|
// Destination buffer to store face ordering
|
|
// The number stored for a given element is where in the new ordering
|
|
// the face will have come from. See ID3DXMesh::Optimize for more info.
|
|
//
|
|
//============================================================================
|
|
function D3DXOptimizeFaces(
|
|
pbIndices: Pointer;
|
|
cFaces: LongWord;
|
|
cVertices: LongWord;
|
|
b32BitIndices: BOOL;
|
|
pFaceRemap: PDWORD): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXOptimizeFaces}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXOptimizeVertices:
|
|
// --------------------
|
|
// Generate a vertex remapping to optimize for in order use of vertices for
|
|
// a given set of indices. This is commonly used after applying the face
|
|
// remap generated by D3DXOptimizeFaces
|
|
//
|
|
// Parameters:
|
|
// pbIndices
|
|
// Triangle list indices to use for generating a vertex ordering
|
|
// NumFaces
|
|
// Number of faces in the triangle list
|
|
// NumVertices
|
|
// Number of vertices referenced by the triangle list
|
|
// b32BitIndices
|
|
// TRUE if indices are 32 bit, FALSE if indices are 16 bit
|
|
// pVertexRemap
|
|
// Destination buffer to store vertex ordering
|
|
// The number stored for a given element is where in the new ordering
|
|
// the vertex will have come from. See ID3DXMesh::Optimize for more info.
|
|
//
|
|
//============================================================================
|
|
function D3DXOptimizeVertices(
|
|
pbIndices: Pointer;
|
|
cFaces: LongWord;
|
|
cVertices: LongWord;
|
|
b32BitIndices: BOOL;
|
|
pVertexRemap: PDWORD): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXOptimizeVertices}
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// Data structures for Spherical Harmonic Precomputation
|
|
//
|
|
//
|
|
//============================================================================
|
|
|
|
type
|
|
PD3DXSHCompressQualityType = ^TD3DXSHCompressQualityType;
|
|
_D3DXSHCOMPRESSQUALITYTYPE = (
|
|
{$IFNDEF SUPPORTS_EXPL_ENUMS}
|
|
D3DXSHCQUAL_invalid_0,
|
|
D3DXSHCQUAL_FASTLOWQUALITY {= 1},
|
|
D3DXSHCQUAL_SLOWHIGHQUALITY {= 2}
|
|
{$ELSE}
|
|
D3DXSHCQUAL_FASTLOWQUALITY = 1,
|
|
D3DXSHCQUAL_SLOWHIGHQUALITY = 2
|
|
{$ENDIF}
|
|
);
|
|
{$EXTERNALSYM _D3DXSHCOMPRESSQUALITYTYPE}
|
|
D3DXSHCOMPRESSQUALITYTYPE = _D3DXSHCOMPRESSQUALITYTYPE;
|
|
{$EXTERNALSYM D3DXSHCOMPRESSQUALITYTYPE}
|
|
TD3DXSHCompressQualityType = _D3DXSHCOMPRESSQUALITYTYPE;
|
|
|
|
_D3DXSHGPUSIMOPT = DWORD;
|
|
{$EXTERNALSYM _D3DXSHGPUSIMOPT}
|
|
D3DXSHGPUSIMOPT = _D3DXSHGPUSIMOPT;
|
|
{$EXTERNALSYM D3DXSHGPUSIMOPT}
|
|
TD3DXSHGPUSimOpt = _D3DXSHGPUSIMOPT;
|
|
|
|
const
|
|
//Clootie: These should not be enums as it's correct to use:
|
|
// D3DXSHGPUSIMOPT_SHADOWRES512 or D3DXSHGPUSIMOPT_HIGHQUALITY
|
|
D3DXSHGPUSIMOPT_SHADOWRES256 = 1;
|
|
{$EXTERNALSYM D3DXSHGPUSIMOPT_SHADOWRES256}
|
|
D3DXSHGPUSIMOPT_SHADOWRES512 = 0;
|
|
{$EXTERNALSYM D3DXSHGPUSIMOPT_SHADOWRES512}
|
|
D3DXSHGPUSIMOPT_SHADOWRES1024 = 2;
|
|
{$EXTERNALSYM D3DXSHGPUSIMOPT_SHADOWRES1024}
|
|
D3DXSHGPUSIMOPT_SHADOWRES2048 = 3;
|
|
{$EXTERNALSYM D3DXSHGPUSIMOPT_SHADOWRES2048}
|
|
|
|
D3DXSHGPUSIMOPT_HIGHQUALITY = 4;
|
|
{$EXTERNALSYM D3DXSHGPUSIMOPT_HIGHQUALITY}
|
|
|
|
// for all properties that are colors the luminance is computed
|
|
// if the simulator is run with a single channel using the following
|
|
// formula: R * 0.2125 + G * 0.7154 + B * 0.0721
|
|
|
|
type
|
|
PPD3DXSHMaterial = ^PD3DXSHMaterial;
|
|
PD3DXSHMaterial = ^TD3DXSHMaterial;
|
|
_D3DXSHMATERIAL = record
|
|
Diffuse: TD3DColorValue; // Diffuse albedo of the surface. (Ignored if object is a Mirror)
|
|
bMirror: BOOL; // Must be set to FALSE. bMirror == TRUE not currently supported
|
|
bSubSurf: BOOL; // true if the object does subsurface scattering - can't do this and be a mirror
|
|
|
|
// subsurface scattering parameters
|
|
{Clootie: taken from: "A Practical Model for Subsurface Light Transport", Jensen et al Siggraph 2001}
|
|
RelativeIndexOfRefraction: Single;
|
|
Absorption: TD3DColorValue;
|
|
ReducedScattering: TD3DColorValue;
|
|
end;
|
|
{$EXTERNALSYM _D3DXSHMATERIAL}
|
|
D3DXSHMATERIAL = _D3DXSHMATERIAL;
|
|
{$EXTERNALSYM D3DXSHMATERIAL}
|
|
TD3DXSHMaterial = _D3DXSHMATERIAL;
|
|
|
|
// allocated in D3DXSHPRTCompSplitMeshSC
|
|
// vertices are duplicated into multiple super clusters but
|
|
// only have a valid status in one super cluster (fill in the rest)
|
|
|
|
PD3DXSHPRTSplitMeshVertData = ^TD3DXSHPRTSplitMeshVertData;
|
|
_D3DXSHPRTSPLITMESHVERTDATA = record
|
|
uVertRemap: LongWord; // vertex in original mesh this corresponds to
|
|
uSubCluster: LongWord; // cluster index relative to super cluster
|
|
ucVertStatus: Byte; // 1 if vertex has valid data, 0 if it is "fill"
|
|
end;
|
|
{$EXTERNALSYM _D3DXSHPRTSPLITMESHVERTDATA}
|
|
D3DXSHPRTSPLITMESHVERTDATA = _D3DXSHPRTSPLITMESHVERTDATA;
|
|
{$EXTERNALSYM D3DXSHPRTSPLITMESHVERTDATA}
|
|
TD3DXSHPRTSplitMeshVertData = _D3DXSHPRTSPLITMESHVERTDATA;
|
|
|
|
// used in D3DXSHPRTCompSplitMeshSC
|
|
// information for each super cluster that maps into face/vert arrays
|
|
|
|
PD3DXSHPRTSplitMeshClusterData = ^TD3DXSHPRTSplitMeshClusterData;
|
|
_D3DXSHPRTSPLITMESHCLUSTERDATA = record
|
|
uVertStart: LongWord; // initial index into remapped vertex array
|
|
uVertLength: LongWord; // number of vertices in this super cluster
|
|
|
|
uFaceStart: LongWord; // initial index into face array
|
|
uFaceLength: LongWord; // number of faces in this super cluster
|
|
|
|
uClusterStart: LongWord; // initial index into cluster array
|
|
uClusterLength: LongWord; // number of clusters in this super cluster
|
|
end;
|
|
{$EXTERNALSYM _D3DXSHPRTSPLITMESHCLUSTERDATA}
|
|
D3DXSHPRTSPLITMESHCLUSTERDATA = _D3DXSHPRTSPLITMESHCLUSTERDATA;
|
|
{$EXTERNALSYM D3DXSHPRTSPLITMESHCLUSTERDATA}
|
|
TD3DXSHPRTSplitMeshClusterData = _D3DXSHPRTSPLITMESHCLUSTERDATA;
|
|
|
|
// call back function for simulator
|
|
// return S_OK to keep running the simulator - anything else represents
|
|
// failure and the simulator will abort.
|
|
|
|
TD3DXSHPRTSimCB = function (fPercentDone: Single; lpUserContext: Pointer): HRESULT; stdcall;
|
|
{$NODEFINE TD3DXSHPRTSimCB}
|
|
{$HPPEMIT 'typedef LPD3DXSHPRTSIMCB TD3DXSHPRTSimCB;'}
|
|
|
|
|
|
|
|
// interfaces for PRT buffers/simulator
|
|
|
|
// interface definitions
|
|
|
|
|
|
type
|
|
ID3DXTextureGutterHelper = interface;
|
|
|
|
// Buffer interface - contains "NumSamples" samples
|
|
// each sample in memory is stored as NumCoeffs scalars per channel (1 or 3)
|
|
// Same interface is used for both Vertex and Pixel PRT buffers
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXPRTBuffer);'}
|
|
{$EXTERNALSYM ID3DXPRTBuffer}
|
|
ID3DXPRTBuffer = interface(IUnknown)
|
|
['{F1827E47-00A8-49cd-908C-9D11955F8728}']
|
|
// ID3DXPRTBuffer
|
|
function GetNumSamples: LongWord; stdcall;
|
|
function GetNumCoeffs: LongWord; stdcall;
|
|
function GetNumChannels: LongWord; stdcall;
|
|
|
|
function IsTexture: BOOL; stdcall;
|
|
function GetWidth: LongWord; stdcall;
|
|
function GetHeight: LongWord; stdcall;
|
|
|
|
// changes the number of samples allocated in the buffer
|
|
function Resize(NewSize: LongWord): HResult; stdcall;
|
|
|
|
// ppData will point to the memory location where sample Start begins
|
|
// pointer is valid for at least NumSamples samples
|
|
function LockBuffer(Start: LongWord; NumSamples: LongWord; out ppData: PSingle): HResult; stdcall;
|
|
function UnlockBuffer: HResult; stdcall;
|
|
|
|
// every scalar in buffer is multiplied by Scale
|
|
function ScaleBuffer(Scale: Single): HResult; stdcall;
|
|
|
|
// every scalar contains the sum of this and pBuffers values
|
|
// pBuffer must have the same storage class/dimensions
|
|
function AddBuffer(pBuffer: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// GutterHelper (described below) will fill in the gutter
|
|
// regions of a texture by interpolating "internal" values
|
|
function AttachGH(pGH: ID3DXTextureGutterHelper): HResult; stdcall;
|
|
function ReleaseGH: HResult; stdcall;
|
|
|
|
// Evaluates attached gutter helper on the contents of this buffer
|
|
function EvalGH: HResult; stdcall;
|
|
|
|
// extracts a given channel into texture pTexture
|
|
// NumCoefficients starting from StartCoefficient are copied
|
|
function ExtractTexture(Channel, StartCoefficient, NumCoefficients: LongWord;
|
|
pTexture: IDirect3DTexture9): HResult; stdcall;
|
|
|
|
// extracts NumCoefficients coefficients into mesh - only applicable on single channel
|
|
// buffers, otherwise just lockbuffer and copy data. With SHPRT data NumCoefficients
|
|
// should be Order^2
|
|
function ExtractToMesh(NumCoefficients: LongWord; Usage: TD3DDeclUsage;
|
|
UsageIndexStart: LongWord; pScene: ID3DXMesh): HResult; stdcall;
|
|
end;
|
|
|
|
|
|
// compressed buffers stored a compressed version of a PRTBuffer
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXPRTCompBuffer);'}
|
|
{$EXTERNALSYM ID3DXPRTCompBuffer}
|
|
ID3DXPRTCompBuffer = interface(IUnknown)
|
|
['{A758D465-FE8D-45ad-9CF0-D01E56266A07}']
|
|
// ID3DPRTCompBuffer
|
|
|
|
// NumCoeffs and NumChannels are properties of input buffer
|
|
function GetNumSamples: LongWord; stdcall;
|
|
function GetNumCoeffs: LongWord; stdcall;
|
|
function GetNumChannels: LongWord; stdcall;
|
|
|
|
function IsTexture: BOOL; stdcall;
|
|
function GetWidth: LongWord; stdcall;
|
|
function GetHeight: LongWord; stdcall;
|
|
|
|
// number of clusters, and PCA vectors per-cluster
|
|
function GetNumClusters: LongWord; stdcall;
|
|
function GetNumPCA: LongWord; stdcall;
|
|
|
|
// normalizes PCA weights so that they are between [-1,1]
|
|
// basis vectors are modified to reflect this
|
|
function NormalizeData: HResult; stdcall;
|
|
|
|
// copies basis vectors for cluster "Cluster" into pClusterBasis
|
|
// (NumPCA+1)*NumCoeffs*NumChannels floats
|
|
function ExtractBasis(Cluster: LongWord; pClusterBasis: PSingle): HResult; stdcall;
|
|
|
|
// UINT per sample - which cluster it belongs to
|
|
function ExtractClusterIDs(pClusterIDs: PLongWord): HResult; stdcall;
|
|
|
|
// copies NumExtract PCA projection coefficients starting at StartPCA
|
|
// into pPCACoefficients - NumSamples*NumExtract floats copied
|
|
function ExtractPCA(StartPCA: LongWord; NumExtract: LongWord; pPCACoefficients: PSingle): HResult; stdcall;
|
|
|
|
// copies NumPCA projection coefficients starting at StartPCA
|
|
// into pTexture - should be able to cope with signed formats
|
|
function ExtractTexture(StartPCA, NumpPCA: LongWord; pTexture: IDirect3DTexture9): HResult; stdcall;
|
|
|
|
// copies NumPCA projection coefficients into mesh pScene
|
|
// Usage is D3DDECLUSAGE where coefficients are to be stored
|
|
// UsageIndexStart is starting index
|
|
function ExtractToMesh(NumPCA: LongWord; Usage: D3DDECLUSAGE;
|
|
UsageIndexStart: LongWord; pScene: ID3DXMesh): HResult; stdcall;
|
|
end;
|
|
|
|
|
|
// ID3DXTextureGutterHelper will build and manage
|
|
// "gutter" regions in a texture - this will allow for
|
|
// bi-linear interpolation to not have artifacts when rendering
|
|
// It generates a map (in texture space) where each texel
|
|
// is in one of 3 states:
|
|
// 0 Invalid - not used at all
|
|
// 1 Inside triangle
|
|
// 2 Gutter texel
|
|
// 4 represents a gutter texel that will be computed during PRT
|
|
// For each Inside/Gutter texel it stores the face it
|
|
// belongs to and barycentric coordinates for the 1st two
|
|
// vertices of that face. Gutter vertices are assigned to
|
|
// the closest edge in texture space.
|
|
//
|
|
// When used with PRT this requires a unique parameterization
|
|
// of the model - every texel must correspond to a single point
|
|
// on the surface of the model and vice versa
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXTextureGutterHelper);'}
|
|
{$EXTERNALSYM ID3DXTextureGutterHelper}
|
|
ID3DXTextureGutterHelper = interface(IUnknown)
|
|
['{838F01EC-9729-4527-AADB-DF70ADE7FEA9}']
|
|
// ID3DXTextureGutterHelper
|
|
|
|
// dimensions of texture this is bound too
|
|
function GetWidth: LongWord; stdcall;
|
|
function GetHeight: LongWord; stdcall;
|
|
|
|
|
|
// Applying gutters recomputes all of the gutter texels of class "2"
|
|
// based on texels of class "1" or "4"
|
|
|
|
// Applies gutters to a raw float buffer - each texel is NumCoeffs floats
|
|
// Width and Height must match GutterHelper
|
|
function ApplyGuttersFloat(pDataIn: PSingle; NumCoeffs, Width, Height: LongWord): HResult; stdcall;
|
|
|
|
// Applies gutters to pTexture
|
|
// Dimensions must match GutterHelper
|
|
function ApplyGuttersTex(pTexture: IDirect3DTexture9): HResult; stdcall;
|
|
|
|
// Applies gutters to a D3DXPRTBuffer
|
|
// Dimensions must match GutterHelper
|
|
function ApplyGuttersPRT(pBuffer: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// Resamples a texture from a mesh onto this gutterhelpers
|
|
// parameterization. It is assumed that the UV coordinates
|
|
// for this gutter helper are in TEXTURE 0 (usage/usage index)
|
|
// and the texture coordinates should all be within [0,1] for
|
|
// both sets.
|
|
//
|
|
// pTextureIn - texture represented using parameterization in pMeshIn
|
|
// pMeshIn - Mesh with texture coordinates that represent pTextureIn
|
|
// pTextureOut texture coordinates are assumed to be in
|
|
// TEXTURE 0
|
|
// Usage - field in DECL for pMeshIn that stores texture coordinates
|
|
// for pTextureIn
|
|
// UsageIndex - which index for Usage above for pTextureIn
|
|
// pTextureOut- Resampled texture
|
|
//
|
|
// Usage would generally be D3DDECLUSAGE_TEXCOORD and UsageIndex other than zero
|
|
function ResampleTex(const pTextureIn: IDirect3DTexture9; const pMeshIn: ID3DXMesh;
|
|
Usage: TD3DDeclUsage; UsageIndex: LongWord; const pTextureOut: IDirect3DTexture9): HResult; stdcall;
|
|
|
|
// the routines below provide access to the data structures
|
|
// used by the Apply functions
|
|
|
|
// face map is a UINT per texel that represents the
|
|
// face of the mesh that texel belongs too -
|
|
// only valid if same texel is valid in pGutterData
|
|
// pFaceData must be allocated by the user
|
|
function GetFaceMap(pFaceData: PLongWord): HResult; stdcall;
|
|
|
|
// BaryMap is a D3DXVECTOR2 per texel
|
|
// the 1st two barycentric coordinates for the corresponding
|
|
// face (3rd weight is always 1-sum of first two)
|
|
// only valid if same texel is valid in pGutterData
|
|
// pBaryData must be allocated by the user
|
|
function GetBaryMap(pBaryData: PD3DXVector2): HResult; stdcall;
|
|
|
|
// TexelMap is a D3DXVECTOR2 per texel that
|
|
// stores the location in pixel coordinates where the
|
|
// corresponding texel is mapped
|
|
// pTexelData must be allocated by the user
|
|
function GetTexelMap(pTexelData: PD3DXVector2): HResult; stdcall;
|
|
|
|
// GutterMap is a BYTE per texel
|
|
// 0/1/2 for Invalid/Internal/Gutter texels
|
|
// 4 represents a gutter texel that will be computed
|
|
// during PRT
|
|
// pGutterData must be allocated by the user
|
|
function GetGutterMap(pGutterData: PByte): HResult; stdcall;
|
|
|
|
// face map is a UINT per texel that represents the
|
|
// face of the mesh that texel belongs too -
|
|
// only valid if same texel is valid in pGutterData
|
|
function SetFaceMap(pFaceData: PLongWord): HResult; stdcall;
|
|
|
|
// BaryMap is a D3DXVECTOR2 per texel
|
|
// the 1st two barycentric coordinates for the corresponding
|
|
// face (3rd weight is always 1-sum of first two)
|
|
// only valid if same texel is valid in pGutterData
|
|
function SetBaryMap(pBaryData: PD3DXVector2): HResult; stdcall;
|
|
|
|
// TexelMap is a D3DXVECTOR2 per texel that
|
|
// stores the location in pixel coordinates where the
|
|
// corresponding texel is mapped
|
|
function SetTexelMap(pTexelData: PD3DXVector2): HResult; stdcall;
|
|
|
|
// GutterMap is a BYTE per texel
|
|
// 0/1/2 for Invalid/Internal/Gutter texels
|
|
// 4 represents a gutter texel that will be computed
|
|
// during PRT
|
|
function SetGutterMap(pGutterData: PByte): HResult; stdcall;
|
|
end;
|
|
|
|
|
|
|
|
// ID3DXPRTEngine is used to compute a PRT simulation
|
|
// Use the following steps to compute PRT for SH
|
|
// (1) create an interface (which includes a scene)
|
|
// (2) call SetSamplingInfo
|
|
// (3) [optional] Set MeshMaterials/albedo's (required if doing bounces)
|
|
// (4) call ComputeDirectLightingSH
|
|
// (5) [optional] call ComputeBounce
|
|
// repeat step 5 for as many bounces as wanted.
|
|
// if you want to model subsurface scattering you
|
|
// need to call ComputeSS after direct lighting and
|
|
// each bounce.
|
|
// If you want to bake the albedo into the PRT signal, you
|
|
// must call MutliplyAlbedo, otherwise the user has to multiply
|
|
// the albedo themselves. Not multiplying the albedo allows you
|
|
// to model albedo variation at a finer scale then illumination, and
|
|
// can result in better compression results.
|
|
// Luminance values are computed from RGB values using the following
|
|
// formula: R * 0.2125 + G * 0.7154 + B * 0.0721
|
|
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXPRTEngine);'}
|
|
{$EXTERNALSYM ID3DXPRTEngine}
|
|
ID3DXPRTEngine = interface(IUnknown)
|
|
['{683A4278-CD5F-4d24-90AD-C4E1B6855D53}']
|
|
// ID3DXPRTEngine
|
|
|
|
// material functions
|
|
|
|
// This sets a material per attribute in the scene mesh and it is
|
|
// the only way to specify subsurface scattering parameters. if
|
|
// bSetAlbedo is FALSE, NumChannels must match the current
|
|
// configuration of the PRTEngine. If you intend to change
|
|
// NumChannels (through some other SetAlbedo function) it must
|
|
// happen before SetMeshMaterials is called.
|
|
//
|
|
// NumChannels 1 implies "grayscale" materials, set this to 3 to enable
|
|
// color bleeding effects
|
|
// bSetAlbedo sets albedo from material if TRUE - which clobbers per texel/vertex
|
|
// albedo that might have been set before. FALSE won't clobber.
|
|
// fLengthScale is used for subsurface scattering - scene is mapped into a 1mm unit cube
|
|
// and scaled by this amount
|
|
function SetMeshMaterials(const ppMaterials: PPD3DXSHMaterial; NumMeshes, NumChannels: LongWord;
|
|
bSetAlbedo: BOOL; fLengthScale: Single): HResult; stdcall;
|
|
|
|
// setting albedo per-vertex or per-texel over rides the albedos stored per mesh
|
|
// but it does not over ride any other settings
|
|
|
|
// sets an albedo to be used per vertex - the albedo is represented as a float
|
|
// pDataIn input pointer (pointint to albedo of 1st sample)
|
|
// NumChannels 1 implies "grayscale" materials, set this to 3 to enable
|
|
// color bleeding effects
|
|
// Stride - stride in bytes to get to next samples albedo
|
|
function SetPerVertexAlbedo(const pDataIn: Pointer; NumChannels, Stride: LongWord): HResult; stdcall;
|
|
|
|
// represents the albedo per-texel instead of per-vertex (even if per-vertex PRT is used)
|
|
// pAlbedoTexture - texture that stores the albedo (dimension arbitrary)
|
|
// NumChannels 1 implies "grayscale" materials, set this to 3 to enable
|
|
// color bleeding effects
|
|
// pGH - optional gutter helper, otherwise one is constructed in computation routines and
|
|
// destroyed (if not attached to buffers)
|
|
function SetPerTexelAlbedo(pAlbedoTexture: IDirect3DTexture9; NumChannels: LongWord; pGH: ID3DXTextureGutterHelper): HResult; stdcall;
|
|
|
|
// gets the per-vertex albedo
|
|
function GetVertexAlbedo(pVertColors: PD3DXColor; NumVerts: LongWord): HResult; stdcall;
|
|
|
|
// If pixel PRT is being computed normals default to ones that are interpolated
|
|
// from the vertex normals. This specifies a texture that stores an object
|
|
// space normal map instead (must use a texture format that can represent signed values)
|
|
// pNormalTexture - normal map, must be same dimensions as PRTBuffers, signed
|
|
function SetPerTexelNormal(pNormalTexture: IDirect3DTexture9): HResult; stdcall;
|
|
|
|
// Copies per-vertex albedo from mesh
|
|
// pMesh - mesh that represents the scene. It must have the same
|
|
// properties as the mesh used to create the PRTEngine
|
|
// Usage - D3DDECLUSAGE to extract albedos from
|
|
// NumChannels 1 implies "grayscale" materials, set this to 3 to enable
|
|
// color bleeding effects
|
|
function ExtractPerVertexAlbedo(pMesh: ID3DXMesh; Usage: TD3DDeclUsage; NumChannels: LongWord): HResult; stdcall;
|
|
|
|
// Resamples the input buffer into the output buffer
|
|
// can be used to move between per-vertex and per-texel buffers. This can also be used
|
|
// to convert single channel buffers to 3-channel buffers and vice-versa.
|
|
function ResampleBuffer(pBufferIn, pBufferOut: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// Returns the scene mesh - including modifications from adaptive spatial sampling
|
|
// The returned mesh only has positions, normals and texture coordinates (if defined)
|
|
// pD3DDevice - d3d device that will be used to allocate the mesh
|
|
// pFaceRemap - each face has a pointer back to the face on the original mesh that it comes from
|
|
// if the face hasn't been subdivided this will be an identity mapping
|
|
// pVertRemap - each vertex contains 3 vertices that this is a linear combination of
|
|
// pVertWeights - weights for each of above indices (sum to 1.0f)
|
|
// ppMesh - mesh that will be allocated and filled
|
|
function GetAdaptedMesh(pD3DDevice: IDirect3DDevice9; pFaceRemap, pVertRemap: PLongWord;
|
|
pfVertWeights: PSingle; out ppMesh: ID3DXMesh): HResult; stdcall;
|
|
|
|
// Number of vertices currently allocated (includes new vertices from adaptive sampling)
|
|
function GetNumVerts: LongWord; stdcall;
|
|
// Number of faces currently allocated (includes new faces)
|
|
function GetNumFaces: LongWord; stdcall;
|
|
|
|
// Sets the Minimum/Maximum intersection distances, this can be used to control
|
|
// maximum distance that objects can shadow/reflect light, and help with "bad"
|
|
// art that might have near features that you don't want to shadow. This does not
|
|
// apply for GPU simulations.
|
|
// fMin - minimum intersection distance, must be positive and less than fMax
|
|
// fMax - maximum intersection distance, if 0.0f use the previous value, otherwise
|
|
// must be strictly greater than fMin
|
|
function SetMinMaxIntersection(fMin: Single; fMax: Single): HResult; stdcall;
|
|
|
|
// This will subdivide faces on a mesh so that adaptively simulations can
|
|
// use a more conservative threshold (it won't miss features.)
|
|
// MinEdgeLength - minimum edge length that will be generated, if 0.0f a
|
|
// reasonable default will be used
|
|
// MaxSubdiv - maximum level of subdivision, if 0 is specified a default
|
|
// value will be used (5)
|
|
function RobustMeshRefine(MinEdgeLength: Single; MaxSubdiv: LongWord): HResult; stdcall;
|
|
|
|
// This sets to sampling information used by the simulator. Adaptive sampling
|
|
// parameters are currently ignored.
|
|
// NumRays - number of rays to shoot per sample
|
|
// UseSphere - if TRUE uses spherical samples, otherwise samples over
|
|
// the hemisphere. Should only be used with GPU and Vol computations
|
|
// UseCosine - if TRUE uses a cosine weighting - not used for Vol computations
|
|
// or if only the visiblity function is desired
|
|
// Adaptive - if TRUE adaptive sampling (angular) is used
|
|
// AdaptiveThresh - threshold used to terminate adaptive angular sampling
|
|
// ignored if adaptive sampling is not set
|
|
function SetSamplingInfo(NumRays: LongWord; UseSphere, UseCosine, Adaptive: BOOL;
|
|
AdaptiveThresh: Single): HResult; stdcall;
|
|
|
|
// Methods that compute the direct lighting contribution for objects
|
|
// always represente light using spherical harmonics (SH)
|
|
// the albedo is not multiplied by the signal - it just integrates
|
|
// incoming light. If NumChannels is not 1 the vector is replicated
|
|
//
|
|
// SHOrder - order of SH to use
|
|
// pDataOut - PRT buffer that is generated. Can be single channel
|
|
function ComputeDirectLightingSH(SHOrder: LongWord; pDataOut: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// Adaptive variant of above function. This will refine the mesh
|
|
// generating new vertices/faces to approximate the PRT signal
|
|
// more faithfully.
|
|
// SHOrder - order of SH to use
|
|
// AdaptiveThresh - threshold for adaptive subdivision (in PRT vector error)
|
|
// if value is less then 1e-6f, 1e-6f is specified
|
|
// MinEdgeLength - minimum edge length that will be generated
|
|
// if value is too small a fairly conservative model dependent value
|
|
// is used
|
|
// MaxSubdiv - maximum subdivision level, if 0 is specified it
|
|
// will default to 4
|
|
// pDataOut - PRT buffer that is generated. Can be single channel.
|
|
function ComputeDirectLightingSHAdaptive(SHOrder: LongWord; AdaptiveThresh: Single;
|
|
MinEdgeLength: Single; MaxSubdiv: LongWord; pDataOut: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// Function that computes the direct lighting contribution for objects
|
|
// light is always represented using spherical harmonics (SH)
|
|
// This is done on the GPU and is much faster then using the CPU.
|
|
// The albedo is not multiplied by the signal - it just integrates
|
|
// incoming light. If NumChannels is not 1 the vector is replicated.
|
|
// ZBias/ZAngleBias are akin to parameters used with shadow zbuffers.
|
|
// A reasonable default for both values is 0.005, but the user should
|
|
// experiment (ZAngleBias can be zero, ZBias should not be.)
|
|
// Callbacks should not use the Direct3D9Device the simulator is using.
|
|
// SetSamplingInfo must be called with TRUE for UseSphere and
|
|
// FALSE for UseCosine before this method is called.
|
|
//
|
|
// pD3DDevice - device used to run GPU simulator - must support PS2.0
|
|
// and FP render targets
|
|
// Flags - parameters for the GPU simulator, combination of one or more
|
|
// D3DXSHGPUSIMOPT flags. Only one SHADOWRES setting should be set and
|
|
// the defaults is 512
|
|
// SHOrder - order of SH to use
|
|
// ZBias - bias in normal direction (for depth test)
|
|
// ZAngleBias - scaled by one minus cosine of angle with light (offset in depth)
|
|
// pDataOut - PRT buffer that is filled in. Can be single channel
|
|
function ComputeDirectLightingSHGPU(pD3DDevice: IDirect3DDevice9; Flags: LongWord;
|
|
SHOrder: LongWord; ZBias, ZAngleBias: Single; pDataOut: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
|
|
// Functions that computes subsurface scattering (using material properties)
|
|
// Albedo is not multiplied by result. This only works for per-vertex data
|
|
// use ResampleBuffer to move per-vertex data into a texture and back.
|
|
//
|
|
// pDataIn - input data (previous bounce)
|
|
// pDataOut - result of subsurface scattering simulation
|
|
// pDataTotal - [optional] results can be summed into this buffer
|
|
function ComputeSS(pDataIn, pDataOut, pDataTotal: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// Adaptive version of ComputeSS.
|
|
//
|
|
// pDataIn - input data (previous bounce)
|
|
// AdaptiveThresh - threshold for adaptive subdivision (in PRT vector error)
|
|
// if value is less then 1e-6f, 1e-6f is specified
|
|
// MinEdgeLength - minimum edge length that will be generated
|
|
// if value is too small a fairly conservative model dependent value
|
|
// is used
|
|
// MaxSubdiv - maximum subdivision level, if 0 is specified it
|
|
// will default to 4
|
|
// pDataOut - result of subsurface scattering simulation
|
|
// pDataTotal - [optional] results can be summed into this buffer
|
|
function ComputeSSAdaptive(pDataIn: ID3DXPRTBuffer; AdaptiveThresh, MinEdgeLength: Single;
|
|
MaxSubdiv: LongWord; pDataOut, pDataTotal: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// computes a single bounce of inter-reflected light
|
|
// works for SH based PRT or generic lighting
|
|
// Albedo is not multiplied by result
|
|
//
|
|
// pDataIn - previous bounces data
|
|
// pDataOut - PRT buffer that is generated
|
|
// pDataTotal - [optional] can be used to keep a running sum
|
|
function ComputeBounce(pDataIn, pDataOut, pDataTotal: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// Adaptive version of above function.
|
|
//
|
|
// pDataIn - previous bounces data, can be single channel
|
|
// AdaptiveThresh - threshold for adaptive subdivision (in PRT vector error)
|
|
// if value is less then 1e-6f, 1e-6f is specified
|
|
// MinEdgeLength - minimum edge length that will be generated
|
|
// if value is too small a fairly conservative model dependent value
|
|
// is used
|
|
// MaxSubdiv - maximum subdivision level, if 0 is specified it
|
|
// will default to 4
|
|
// pDataOut - PRT buffer that is generated
|
|
// pDataTotal - [optional] can be used to keep a running sum
|
|
function ComputeBounceAdaptive(pDataIn: ID3DXPRTBuffer; AdaptiveThresh, MinEdgeLength: Single;
|
|
MaxSubdiv: LongWord; pDataOut, pDataTotal: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// Computes projection of distant SH radiance into a local SH radiance
|
|
// function. This models how direct lighting is attenuated by the
|
|
// scene and is a form of "neighborhood transfer." The result is
|
|
// a linear operator (matrix) at every sample point, if you multiply
|
|
// this matrix by the distant SH lighting coefficients you get an
|
|
// approximation of the local incident radiance function from
|
|
// direct lighting. These resulting lighting coefficients can
|
|
// than be projected into another basis or used with any rendering
|
|
// technique that uses spherical harmonics as input.
|
|
// SetSamplingInfo must be called with TRUE for UseSphere and
|
|
// FALSE for UseCosine before this method is called.
|
|
// Generates SHOrderIn*SHOrderIn*SHOrderOut*SHOrderOut scalars
|
|
// per channel at each sample location.
|
|
//
|
|
// SHOrderIn - Order of the SH representation of distant lighting
|
|
// SHOrderOut - Order of the SH representation of local lighting
|
|
// NumVolSamples - Number of sample locations
|
|
// pSampleLocs - position of sample locations
|
|
// pDataOut - PRT Buffer that will store output results
|
|
function ComputeVolumeSamplesDirectSH(SHOrderIn, SHOrderOut: LongWord;
|
|
NumVolSamples: LongWord; const pSampleLocs: PD3DXVector3; pDataOut: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// At each sample location computes a linear operator (matrix) that maps
|
|
// the representation of source radiance (NumCoeffs in pSurfDataIn)
|
|
// into a local incident radiance function approximated with spherical
|
|
// harmonics. For example if a light map data is specified in pSurfDataIn
|
|
// the result is an SH representation of the flow of light at each sample
|
|
// point. If PRT data for an outdoor scene is used, each sample point
|
|
// contains a matrix that models how distant lighting bounces of the objects
|
|
// in the scene and arrives at the given sample point. Combined with
|
|
// ComputeVolumeSamplesDirectSH this gives the complete representation for
|
|
// how light arrives at each sample point parameterized by distant lighting.
|
|
// SetSamplingInfo must be called with TRUE for UseSphere and
|
|
// FALSE for UseCosine before this method is called.
|
|
// Generates pSurfDataIn->NumCoeffs()*SHOrder*SHOrder scalars
|
|
// per channel at each sample location.
|
|
//
|
|
// pSurfDataIn - previous bounce data
|
|
// SHOrder - order of SH to generate projection with
|
|
// NumVolSamples - Number of sample locations
|
|
// pSampleLocs - position of sample locations
|
|
// pDataOut - PRT Buffer that will store output results
|
|
function ComputeVolumeSamples(pSurfDataIn: ID3DXPRTBuffer; SHOrder: LongWord;
|
|
NumVolSamples: LongWord; const pSampleLocs: PD3DXVector3; pDataOut: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
|
|
// Computes direct lighting (SH) for a point not on the mesh
|
|
// with a given normal - cannot use texture buffers.
|
|
//
|
|
// SHOrder - order of SH to use
|
|
// NumSamples - number of sample locations
|
|
// pSampleLocs - position for each sample
|
|
// pSampleNorms - normal for each sample
|
|
// pDataOut - PRT Buffer that will store output results
|
|
function ComputeSurfSamplesDirectSH(SHOrder: LongWord; NumSamples: LongWord;
|
|
const pSampleLocs, pSampleNorms: PD3DXVector3; pDataOut: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// given the solution for PRT or light maps, computes transfer vector at arbitrary
|
|
// position/normal pairs in space
|
|
//
|
|
// pSurfDataIn - input data
|
|
// NumSamples - number of sample locations
|
|
// pSampleLocs - position for each sample
|
|
// pSampleNorms - normal for each sample
|
|
// pDataOut - PRT Buffer that will store output results
|
|
// pDataTotal - optional buffer to sum results into - can be NULL
|
|
function ComputeSurfSamplesBounce(pSurfDataIn: ID3DXPRTBuffer; NumSamples: LongWord;
|
|
const pSampleLocs, pSampleNorms: PD3DXVector3; pDataOut, pDataTotal: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// Frees temporary data structures that can be created for subsurface scattering
|
|
// this data is freed when the PRTComputeEngine is freed and is lazily created
|
|
function FreeSSData: HResult; stdcall;
|
|
|
|
// Frees temporary data structures that can be created for bounce simulations
|
|
// this data is freed when the PRTComputeEngine is freed and is lazily created
|
|
function FreeBounceData: HResult; stdcall;
|
|
|
|
// This computes the Local Deformable PRT (LDPRT) coefficients relative to the
|
|
// per sample normals that minimize error in a least squares sense with respect
|
|
// to the input PRT data set. These coefficients can be used with skinned/transformed
|
|
// normals to model global effects with dynamic objects. Shading normals can
|
|
// optionally be solved for - these normals (along with the LDPRT coefficients) can
|
|
// more accurately represent the PRT signal. The coefficients are for zonal
|
|
// harmonics oriented in the normal/shading normal direction.
|
|
//
|
|
// pDataIn - SH PRT dataset that is input
|
|
// SHOrder - Order of SH to compute conv coefficients for
|
|
// pNormOut - Optional array of vectors (passed in) that will be filled with
|
|
// "shading normals", LDPRT coefficients are optimized for
|
|
// these normals. This array must be the same size as the number of
|
|
// samples in pDataIn
|
|
// pDataOut - Output buffer (SHOrder zonal harmonic coefficients per channel per sample)
|
|
function ComputeLDPRTCoeffs(pDataIn: ID3DXPRTBuffer; SHOrder: LongWord;
|
|
pNormOut: PD3DXVector3; pDataOut: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// scales all the samples associated with a given sub mesh
|
|
// can be useful when using subsurface scattering
|
|
// fScale - value to scale each vector in submesh by
|
|
function ScaleMeshChunk(uMeshChunk: LongWord; fScale: Single; pDataOut: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// mutliplies each PRT vector by the albedo - can be used if you want to have the albedo
|
|
// burned into the dataset, often better not to do this. If this is not done the user
|
|
// must mutliply the albedo themselves when rendering - just multiply the albedo times
|
|
// the result of the PRT dot product.
|
|
// If pDataOut is a texture simulation result and there is an albedo texture it
|
|
// must be represented at the same resolution as the simulation buffer. You can use
|
|
// LoadSurfaceFromSurface and set a new albedo texture if this is an issue - but must
|
|
// be careful about how the gutters are handled.
|
|
//
|
|
// pDataOut - dataset that will get albedo pushed into it
|
|
function MultiplyAlbedo(pDataOut: ID3DXPRTBuffer): HResult; stdcall;
|
|
|
|
// Sets a pointer to an optional call back function that reports back to the
|
|
// user percentage done and gives them the option of quitting
|
|
// pCB - pointer to call back function, return S_OK for the simulation
|
|
// to continue
|
|
// Frequency - 1/Frequency is roughly the number of times the call back
|
|
// will be invoked
|
|
// lpUserContext - will be passed back to the users call back
|
|
function SetCallBack(pCB: TD3DXSHPRTSimCB; Frequency: Single; lpUserContext: Pointer): HResult; stdcall;
|
|
|
|
// Returns TRUE if the ray intersects the mesh, FALSE if it does not. This function
|
|
// takes into account settings from SetMinMaxIntersection. If the closest intersection
|
|
// is not needed this function is more efficient compared to the ClosestRayIntersection
|
|
// method.
|
|
// pRayPos - origin of ray
|
|
// pRayDir - normalized ray direction (normalization required for SetMinMax to be meaningful)
|
|
function ShadowRayIntersects(const pRayPos: TD3DXVector3; const pRayDir: TD3DXVector3): BOOL; stdcall;
|
|
|
|
// Returns TRUE if the ray intersects the mesh, FALSE if it does not. If there is an
|
|
// intersection the closest face that was intersected and its first two barycentric coordinates
|
|
// are returned. This function takes into account settings from SetMinMaxIntersection.
|
|
// This is a slower function compared to ShadowRayIntersects and should only be used where
|
|
// needed. The third vertices barycentric coordinates will be 1 - pU - pV.
|
|
// pRayPos - origin of ray
|
|
// pRayDir - normalized ray direction (normalization required for SetMinMax to be meaningful)
|
|
// pFaceIndex - Closest face that intersects. This index is based on stacking the pBlockerMesh
|
|
// faces before the faces from pMesh
|
|
// pU - Barycentric coordinate for vertex 0
|
|
// pV - Barycentric coordinate for vertex 1
|
|
// pDist - Distance along ray where the intersection occured
|
|
function ClosestRayIntersects(const pRayPos: TD3DXVector3; const pRayDir: TD3DXVector3;
|
|
out pFaceIndex: DWORD; pU, pV: PSingle; pDist: PSingle): BOOL; stdcall;
|
|
end;
|
|
|
|
type
|
|
// GUIDs
|
|
IID_ID3DXPRTBuffer = ID3DXPRTBuffer;
|
|
{$EXTERNALSYM IID_ID3DXPRTBuffer}
|
|
IID_ID3DXPRTCompBuffer = ID3DXPRTCompBuffer;
|
|
{$EXTERNALSYM IID_ID3DXPRTCompBuffer}
|
|
IID_ID3DXTextureGutterHelper = ID3DXTextureGutterHelper;
|
|
{$EXTERNALSYM IID_ID3DXTextureGutterHelper}
|
|
IID_ID3DXPRTEngine = ID3DXPRTEngine;
|
|
{$EXTERNALSYM IID_ID3DXPRTEngine}
|
|
|
|
|
|
// API functions for creating interfaces
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXCreatePRTBuffer:
|
|
// --------------------
|
|
// Generates a PRT Buffer that can be compressed or filled by a simulator
|
|
// This function should be used to create per-vertex or volume buffers.
|
|
// When buffers are created all values are initialized to zero.
|
|
//
|
|
// Parameters:
|
|
// NumSamples
|
|
// Number of sample locations represented
|
|
// NumCoeffs
|
|
// Number of coefficients per sample location (order^2 for SH)
|
|
// NumChannels
|
|
// Number of color channels to represent (1 or 3)
|
|
// ppBuffer
|
|
// Buffer that will be allocated
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXCreatePRTBuffer(
|
|
NumSamples: LongWord;
|
|
NumCoeffs: LongWord;
|
|
NumChannels: LongWord;
|
|
ppBuffer: ID3DXPRTBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreatePRTBuffer}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXCreatePRTBufferTex:
|
|
// --------------------
|
|
// Generates a PRT Buffer that can be compressed or filled by a simulator
|
|
// This function should be used to create per-pixel buffers.
|
|
// When buffers are created all values are initialized to zero.
|
|
//
|
|
// Parameters:
|
|
// Width
|
|
// Width of texture
|
|
// Height
|
|
// Height of texture
|
|
// NumCoeffs
|
|
// Number of coefficients per sample location (order^2 for SH)
|
|
// NumChannels
|
|
// Number of color channels to represent (1 or 3)
|
|
// ppBuffer
|
|
// Buffer that will be allocated
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXCreatePRTBufferTex(
|
|
Width: LongWord;
|
|
Height: LongWord;
|
|
NumCoeffs: LongWord;
|
|
NumChannels: LongWord;
|
|
ppBuffer: ID3DXPRTBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreatePRTBufferTex}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXLoadPRTBufferFromFile:
|
|
// --------------------
|
|
// Loads a PRT buffer that has been saved to disk.
|
|
//
|
|
// Parameters:
|
|
// pFilename
|
|
// Name of the file to load
|
|
// ppBuffer
|
|
// Buffer that will be allocated
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXLoadPRTBufferFromFileA(
|
|
pFilename: PAnsiChar;
|
|
ppBuffer: ID3DXPRTBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXLoadPRTBufferFromFileA';
|
|
{$EXTERNALSYM D3DXLoadPRTBufferFromFileA}
|
|
|
|
function D3DXLoadPRTBufferFromFileW(
|
|
pFilename: PWideChar;
|
|
ppBuffer: ID3DXPRTBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXLoadPRTBufferFromFileW';
|
|
{$EXTERNALSYM D3DXLoadPRTBufferFromFileW}
|
|
|
|
function D3DXLoadPRTBufferFromFile(
|
|
pFilename: PChar;
|
|
ppBuffer: ID3DXPRTBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXLoadPRTBufferFromFileA';
|
|
{$EXTERNALSYM D3DXLoadPRTBufferFromFile}
|
|
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSavePRTBufferToFile:
|
|
// --------------------
|
|
// Saves a PRTBuffer to disk.
|
|
//
|
|
// Parameters:
|
|
// pFilename
|
|
// Name of the file to save
|
|
// pBuffer
|
|
// Buffer that will be saved
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSavePRTBufferToFileA(
|
|
pFilename: PAnsiChar;
|
|
ppBuffer: ID3DXPRTBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXSavePRTBufferToFileA';
|
|
{$EXTERNALSYM D3DXSavePRTBufferToFileA}
|
|
|
|
function D3DXSavePRTBufferToFileW(
|
|
pFilename: PWideChar;
|
|
ppBuffer: ID3DXPRTBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXSavePRTBufferToFileW';
|
|
{$EXTERNALSYM D3DXSavePRTBufferToFileW}
|
|
|
|
function D3DXSavePRTBufferToFile(
|
|
pFilename: PChar;
|
|
ppBuffer: ID3DXPRTBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXSavePRTBufferToFileA';
|
|
{$EXTERNALSYM D3DXSavePRTBufferToFile}
|
|
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXLoadPRTCompBufferFromFile:
|
|
// --------------------
|
|
// Loads a PRTComp buffer that has been saved to disk.
|
|
//
|
|
// Parameters:
|
|
// pFilename
|
|
// Name of the file to load
|
|
// ppBuffer
|
|
// Buffer that will be allocated
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXLoadPRTCompBufferFromFileA(
|
|
pFilename: PAnsiChar;
|
|
ppBuffer: ID3DXPRTCompBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXLoadPRTCompBufferFromFileA';
|
|
{$EXTERNALSYM D3DXLoadPRTCompBufferFromFileA}
|
|
|
|
function D3DXLoadPRTCompBufferFromFileW(
|
|
pFilename: PWideChar;
|
|
ppBuffer: ID3DXPRTCompBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXLoadPRTCompBufferFromFileW';
|
|
{$EXTERNALSYM D3DXLoadPRTCompBufferFromFileW}
|
|
|
|
function D3DXLoadPRTCompBufferFromFile(
|
|
pFilename: PChar;
|
|
ppBuffer: ID3DXPRTCompBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXLoadPRTCompBufferFromFileA';
|
|
{$EXTERNALSYM D3DXLoadPRTCompBufferFromFile}
|
|
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSavePRTCompBufferToFile:
|
|
// --------------------
|
|
// Saves a PRTCompBuffer to disk.
|
|
//
|
|
// Parameters:
|
|
// pFilename
|
|
// Name of the file to save
|
|
// pBuffer
|
|
// Buffer that will be saved
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSavePRTCompBufferToFileA(
|
|
pFilename: PAnsiChar;
|
|
ppBuffer: ID3DXPRTCompBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXSavePRTCompBufferToFileA';
|
|
{$EXTERNALSYM D3DXSavePRTCompBufferToFileA}
|
|
|
|
function D3DXSavePRTCompBufferToFileW(
|
|
pFilename: PWideChar;
|
|
ppBuffer: ID3DXPRTCompBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXSavePRTCompBufferToFileW';
|
|
{$EXTERNALSYM D3DXSavePRTCompBufferToFileW}
|
|
|
|
function D3DXSavePRTCompBufferToFile(
|
|
pFilename: PChar;
|
|
ppBuffer: ID3DXPRTCompBuffer): HResult; stdcall; external d3dx9meshDLL name 'D3DXSavePRTCompBufferToFileA';
|
|
{$EXTERNALSYM D3DXSavePRTCompBufferToFile}
|
|
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXCreatePRTCompBuffer:
|
|
// --------------------
|
|
// Compresses a PRT buffer (vertex or texel)
|
|
//
|
|
// Parameters:
|
|
// D3DXSHCOMPRESSQUALITYTYPE
|
|
// Quality of compression - low is faster (computes PCA per voronoi cluster)
|
|
// high is slower but better quality (clusters based on distance to affine subspace)
|
|
// NumClusters
|
|
// Number of clusters to compute
|
|
// NumPCA
|
|
// Number of basis vectors to compute
|
|
// pCB
|
|
// Optional Callback function
|
|
// lpUserContext
|
|
// Optional user context
|
|
// pBufferIn
|
|
// Buffer that will be compressed
|
|
// ppBufferOut
|
|
// Compressed buffer that will be created
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXCreatePRTCompBuffer(
|
|
Quality: TD3DXSHCompressQualityType;
|
|
NumClusters: LongWord;
|
|
NumPCA: LongWord;
|
|
pCB: TD3DXSHPRTSimCB;
|
|
lpUserContext: Pointer;
|
|
pBufferIn: ID3DXPRTBuffer;
|
|
out ppBufferOut: ID3DXPRTCompBuffer): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreatePRTCompBuffer}
|
|
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXCreateTextureGutterHelper:
|
|
// --------------------
|
|
// Generates a "GutterHelper" for a given set of meshes and texture
|
|
// resolution
|
|
//
|
|
// Parameters:
|
|
// Width
|
|
// Width of texture
|
|
// Height
|
|
// Height of texture
|
|
// pMesh
|
|
// Mesh that represents the scene
|
|
// GutterSize
|
|
// Number of texels to over rasterize in texture space
|
|
// this should be at least 1.0
|
|
// ppBuffer
|
|
// GutterHelper that will be created
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXCreateTextureGutterHelper(
|
|
Width: LongWord;
|
|
Height: LongWord;
|
|
pMesh: ID3DXMesh;
|
|
GutterSize: Single;
|
|
out ppBuffer: ID3DXTextureGutterHelper): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreateTextureGutterHelper}
|
|
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXCreatePRTEngine:
|
|
// --------------------
|
|
// Computes a PRTEngine which can efficiently generate PRT simulations
|
|
// of a scene
|
|
//
|
|
// Parameters:
|
|
// pMesh
|
|
// Mesh that represents the scene - must have an AttributeTable
|
|
// where vertices are in a unique attribute.
|
|
// pAdjacency
|
|
// Optional adjacency information
|
|
// ExtractUVs
|
|
// Set this to true if textures are going to be used for albedos
|
|
// or to store PRT vectors
|
|
// pBlockerMesh
|
|
// Optional mesh that just blocks the scene
|
|
// ppEngine
|
|
// PRTEngine that will be created
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXCreatePRTEngine(
|
|
pMesh: ID3DXMesh;
|
|
pAdjacency: PDWORD;
|
|
ExtractUVs: BOOL;
|
|
pBlockerMesh: ID3DXMesh;
|
|
out ppEngine: ID3DXPRTEngine): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXCreatePRTEngine}
|
|
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXConcatenateMeshes:
|
|
// --------------------
|
|
// Concatenates a group of meshes into one common mesh. This can optionaly transform
|
|
// each sub mesh or its texture coordinates. If no DECL is given it will
|
|
// generate a union of all of the DECL's of the sub meshes, promoting channels
|
|
// and types if neccesary. It will create an AttributeTable if possible, one can
|
|
// call OptimizeMesh with attribute sort and compacting enabled to ensure this.
|
|
//
|
|
// Parameters:
|
|
// ppMeshes
|
|
// Array of pointers to meshes that can store PRT vectors
|
|
// NumMeshes
|
|
// Number of meshes
|
|
// Options
|
|
// Passed through to D3DXCreateMesh
|
|
// pGeomXForms
|
|
// [optional] Each sub mesh is transformed by the corresponding
|
|
// matrix if this array is supplied
|
|
// pTextureXForms
|
|
// [optional] UV coordinates for each sub mesh are transformed
|
|
// by corresponding matrix if supplied
|
|
// pDecl
|
|
// [optional] Only information in this DECL is used when merging
|
|
// data
|
|
// pD3DDevice
|
|
// D3D device that is used to create the new mesh
|
|
// ppMeshOut
|
|
// Mesh that will be created
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXConcatenateMeshes(
|
|
ppMeshes: PID3DXMesh;
|
|
NumMeshes: LongWord;
|
|
Options: DWORD;
|
|
const pGeomXForms: PD3DXMatrix;
|
|
const pTextureXForms: PD3DXMatrix;
|
|
const pDecl: PD3DVertexElement9;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
out ppMeshOut: ID3DXMesh): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXConcatenateMeshes}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHPRTCompSuperCluster:
|
|
// --------------------------
|
|
// Used with compressed results of D3DXSHPRTSimulation.
|
|
// Generates "super clusters" - groups of clusters that can be drawn in
|
|
// the same draw call. A greedy algorithm that minimizes overdraw is used
|
|
// to group the clusters.
|
|
//
|
|
// Parameters:
|
|
// pClusterIDs
|
|
// NumVerts cluster ID's (extracted from a compressed buffer)
|
|
// pScene
|
|
// Mesh that represents composite scene passed to the simulator
|
|
// MaxNumClusters
|
|
// Maximum number of clusters allocated per super cluster
|
|
// NumClusters
|
|
// Number of clusters computed in the simulator
|
|
// pSuperClusterIDs
|
|
// Array of length NumClusters, contains index of super cluster
|
|
// that corresponding cluster was assigned to
|
|
// pNumSuperClusters
|
|
// Returns the number of super clusters allocated
|
|
//
|
|
//============================================================================
|
|
|
|
|
|
function D3DXSHPRTCompSuperCluster(
|
|
pClusterIDs: PLongWord;
|
|
pScene: ID3DXMesh;
|
|
MaxNumClusters, NumClusters: LongWord;
|
|
pSuperClusterIDs: PLongWord;
|
|
out pNumSuperClusters: LongWord): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXSHPRTCompSuperCluster}
|
|
|
|
//============================================================================
|
|
//
|
|
// D3DXSHPRTCompSplitMeshSC:
|
|
// -------------------------
|
|
// Used with compressed results of the vertex version of the PRT simulator.
|
|
// After D3DXSHRTCompSuperCluster has been called this function can be used
|
|
// to split the mesh into a group of faces/vertices per super cluster.
|
|
// Each super cluster contains all of the faces that contain any vertex
|
|
// classified in one of its clusters. All of the vertices connected to this
|
|
// set of faces are also included with the returned array ppVertStatus
|
|
// indicating whether or not the vertex belongs to the supercluster.
|
|
//
|
|
// Parameters:
|
|
// pClusterIDs
|
|
// NumVerts cluster ID's (extracted from a compressed buffer)
|
|
// NumVertices
|
|
// Number of vertices in original mesh
|
|
// NumClusters
|
|
// Number of clusters (input parameter to compression)
|
|
// pSuperClusterIDs
|
|
// Array of size NumClusters that will contain super cluster ID's (from
|
|
// D3DXSHCompSuerCluster)
|
|
// NumSuperClusters
|
|
// Number of superclusters allocated in D3DXSHCompSuerCluster
|
|
// pInputIB
|
|
// Raw index buffer for mesh - format depends on bInputIBIs32Bit
|
|
// InputIBIs32Bit
|
|
// Indicates whether the input index buffer is 32-bit (otherwise 16-bit
|
|
// is assumed)
|
|
// NumFaces
|
|
// Number of faces in the original mesh (pInputIB is 3 times this length)
|
|
// ppIBData
|
|
// LPD3DXBUFFER holds raw index buffer that will contain the resulting split faces.
|
|
// Format determined by bIBIs32Bit. Allocated by function
|
|
// pIBDataLength
|
|
// Length of ppIBData, assigned in function
|
|
// OutputIBIs32Bit
|
|
// Indicates whether the output index buffer is to be 32-bit (otherwise
|
|
// 16-bit is assumed)
|
|
// ppFaceRemap
|
|
// LPD3DXBUFFER mapping of each face in ppIBData to original faces. Length is
|
|
// *pIBDataLength/3. Optional paramter, allocated in function
|
|
// ppVertData
|
|
// LPD3DXBUFFER contains new vertex data structure. Size of pVertDataLength
|
|
// pVertDataLength
|
|
// Number of new vertices in split mesh. Assigned in function
|
|
// pSCClusterList
|
|
// Array of length NumClusters which pSCData indexes into (Cluster* fields)
|
|
// for each SC, contains clusters sorted by super cluster
|
|
// pSCData
|
|
// Structure per super cluster - contains indices into ppIBData,
|
|
// pSCClusterList and ppVertData
|
|
//
|
|
//============================================================================
|
|
|
|
function D3DXSHPRTCompSplitMeshSC(
|
|
pClusterIDs: PLongWord;
|
|
NumVertices, NumClusters: LongWord;
|
|
pSuperClusterIDs: PLongWord; NumSuperClusters: LongWord;
|
|
pInputIB: Pointer;
|
|
InputIBIs32Bit: BOOL;
|
|
NumFaces: LongWord;
|
|
out ppIBData: ID3DXBuffer; out pIBDataLength: LongWord; OutputIBIs32Bit: BOOL;
|
|
out ppFaceRemap, ppVertData: ID3DXBuffer; out pVertDataLength: LongWord;
|
|
pSCClusterList: PLongWord;
|
|
pSCData: PD3DXSHPRTSplitMeshClusterData): HResult; stdcall; external d3dx9meshDLL;
|
|
{$EXTERNALSYM D3DXSHPRTCompSplitMeshSC}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Definitions of .X file templates used by mesh load/save functions
|
|
// that are not RM standard
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
const
|
|
DXFILEOBJ_XSkinMeshHeader: TGUID = '{3CF169CE-FF7C-44ab-93C0-F78F62D172E2}';
|
|
{$EXTERNALSYM DXFILEOBJ_XSkinMeshHeader}
|
|
DXFILEOBJ_VertexDuplicationIndices: TGUID = '{B8D65549-D7C9-4995-89CF-53A9A8B031E3}';
|
|
{$EXTERNALSYM DXFILEOBJ_VertexDuplicationIndices}
|
|
DXFILEOBJ_FaceAdjacency: TGUID = '{A64C844A-E282-4756-8B80-250CDE04398C}';
|
|
{$EXTERNALSYM DXFILEOBJ_FaceAdjacency}
|
|
DXFILEOBJ_SkinWeights: TGUID = '{6F0D123B-BAD2-4167-A0D0-80224F25FABB}';
|
|
{$EXTERNALSYM DXFILEOBJ_SkinWeights}
|
|
DXFILEOBJ_Patch: TGUID = '{A3EB5D44-FC22-429d-9AFB-3221CB9719A6}';
|
|
{$EXTERNALSYM DXFILEOBJ_Patch}
|
|
DXFILEOBJ_PatchMesh: TGUID = '{D02C95CC-EDBA-4305-9B5D-1820D7704BBF}';
|
|
{$EXTERNALSYM DXFILEOBJ_PatchMesh}
|
|
DXFILEOBJ_PatchMesh9: TGUID = '{B9EC94E1-B9A6-4251-BA18-94893F02C0EA}';
|
|
{$EXTERNALSYM DXFILEOBJ_PatchMesh9}
|
|
DXFILEOBJ_PMInfo: TGUID = '{B6C3E656-EC8B-4b92-9B62-681659522947}';
|
|
{$EXTERNALSYM DXFILEOBJ_PMInfo}
|
|
DXFILEOBJ_PMAttributeRange: TGUID = '{917E0427-C61E-4a14-9C64-AFE65F9E9844}';
|
|
{$EXTERNALSYM DXFILEOBJ_PMAttributeRange}
|
|
DXFILEOBJ_PMVSplitRecord: TGUID = '{574CCC14-F0B3-4333-822D-93E8A8A08E4C}';
|
|
{$EXTERNALSYM DXFILEOBJ_PMVSplitRecord}
|
|
DXFILEOBJ_FVFData: TGUID = '{B6E70A0E-8EF9-4e83-94AD-ECC8B0C04897}';
|
|
{$EXTERNALSYM DXFILEOBJ_FVFData}
|
|
DXFILEOBJ_VertexElement: TGUID = '{F752461C-1E23-48f6-B9F8-8350850F336F}';
|
|
{$EXTERNALSYM DXFILEOBJ_VertexElement}
|
|
DXFILEOBJ_DeclData: TGUID = '{BF22E553-292C-4781-9FEA-62BD554BDD93}';
|
|
{$EXTERNALSYM DXFILEOBJ_DeclData}
|
|
DXFILEOBJ_EffectFloats: TGUID = '{F1CFE2B3-0DE3-4e28-AFA1-155A750A282D}';
|
|
{$EXTERNALSYM DXFILEOBJ_EffectFloats}
|
|
DXFILEOBJ_EffectString: TGUID = '{D55B097E-BDB6-4c52-B03D-6051C89D0E42}';
|
|
{$EXTERNALSYM DXFILEOBJ_EffectString}
|
|
DXFILEOBJ_EffectDWord: TGUID = '{622C0ED0-956E-4da9-908A-2AF94F3CE716}';
|
|
{$EXTERNALSYM DXFILEOBJ_EffectDWord}
|
|
DXFILEOBJ_EffectParamFloats: TGUID = '{3014B9A0-62F5-478c-9B86-E4AC9F4E418B}';
|
|
{$EXTERNALSYM DXFILEOBJ_EffectParamFloats}
|
|
DXFILEOBJ_EffectParamString: TGUID = '{1DBC4C88-94C1-46ee-9076-2C28818C9481}';
|
|
{$EXTERNALSYM DXFILEOBJ_EffectParamString}
|
|
DXFILEOBJ_EffectParamDWord: TGUID = '{E13963BC-AE51-4c5d-B00F-CFA3A9D97CE5}';
|
|
{$EXTERNALSYM DXFILEOBJ_EffectParamDWord}
|
|
DXFILEOBJ_EffectInstance: TGUID = '{E331F7E4-0559-4cc2-8E99-1CEC1657928F}';
|
|
{$EXTERNALSYM DXFILEOBJ_EffectInstance}
|
|
DXFILEOBJ_AnimTicksPerSecond: TGUID = '{7F9B00B3-F125-4890-876E-1CFFBF697C4D}';
|
|
{$EXTERNALSYM DXFILEOBJ_AnimTicksPerSecond}
|
|
|
|
type
|
|
PXFileCompressedAnimationSet = ^TXFileCompressedAnimationSet;
|
|
_XFILECOMPRESSEDANIMATIONSET = packed record {#pragma pack(push, 1)}
|
|
CompressedBlockSize: DWORD;
|
|
TicksPerSec: Single;
|
|
PlaybackType: DWORD;
|
|
BufferLength: DWORD;
|
|
end;
|
|
{$EXTERNALSYM _XFILECOMPRESSEDANIMATIONSET}
|
|
XFILECOMPRESSEDANIMATIONSET = _XFILECOMPRESSEDANIMATIONSET;
|
|
{$EXTERNALSYM XFILECOMPRESSEDANIMATIONSET}
|
|
TXFileCompressedAnimationSet = _XFILECOMPRESSEDANIMATIONSET;
|
|
|
|
const
|
|
XSKINEXP_TEMPLATES =
|
|
'xof 0303txt 0032' +
|
|
'template XSkinMeshHeader ' +
|
|
'{ ' +
|
|
' <3CF169CE-FF7C-44ab-93C0-F78F62D172E2> ' +
|
|
' WORD nMaxSkinWeightsPerVertex; ' +
|
|
' WORD nMaxSkinWeightsPerFace; ' +
|
|
' WORD nBones; ' +
|
|
'} ' +
|
|
'template VertexDuplicationIndices ' +
|
|
'{ ' +
|
|
' <B8D65549-D7C9-4995-89CF-53A9A8B031E3> ' +
|
|
' DWORD nIndices; ' +
|
|
' DWORD nOriginalVertices; ' +
|
|
' array DWORD indices[nIndices]; ' +
|
|
'} ' +
|
|
'template FaceAdjacency ' +
|
|
'{ ' +
|
|
' <A64C844A-E282-4756-8B80-250CDE04398C> ' +
|
|
' DWORD nIndices; ' +
|
|
' array DWORD indices[nIndices]; ' +
|
|
'} ' +
|
|
'template SkinWeights ' +
|
|
'{ ' +
|
|
' <6F0D123B-BAD2-4167-A0D0-80224F25FABB> ' +
|
|
' STRING transformNodeName; ' +
|
|
' DWORD nWeights; ' +
|
|
' array DWORD vertexIndices[nWeights]; ' +
|
|
' array float weights[nWeights]; ' +
|
|
' Matrix4x4 matrixOffset; ' +
|
|
'} ' +
|
|
'template Patch ' +
|
|
'{ ' +
|
|
' <A3EB5D44-FC22-429D-9AFB-3221CB9719A6> ' +
|
|
' DWORD nControlIndices; ' +
|
|
' array DWORD controlIndices[nControlIndices]; ' +
|
|
'} ' +
|
|
'template PatchMesh ' +
|
|
'{ ' +
|
|
' <D02C95CC-EDBA-4305-9B5D-1820D7704BBF> ' +
|
|
' DWORD nVertices; ' +
|
|
' array Vector vertices[nVertices]; ' +
|
|
' DWORD nPatches; ' +
|
|
' array Patch patches[nPatches]; ' +
|
|
' [ ... ] ' +
|
|
'} ' +
|
|
'template PatchMesh9 ' +
|
|
'{ ' +
|
|
' <B9EC94E1-B9A6-4251-BA18-94893F02C0EA> ' +
|
|
' DWORD Type; ' +
|
|
' DWORD Degree; ' +
|
|
' DWORD Basis; ' +
|
|
' DWORD nVertices; ' +
|
|
' array Vector vertices[nVertices]; ' +
|
|
' DWORD nPatches; ' +
|
|
' array Patch patches[nPatches]; ' +
|
|
' [ ... ] ' +
|
|
'} ' +
|
|
'template EffectFloats ' +
|
|
'{ ' +
|
|
' <F1CFE2B3-0DE3-4e28-AFA1-155A750A282D> ' +
|
|
' DWORD nFloats; ' +
|
|
' array float Floats[nFloats]; ' +
|
|
'} ' +
|
|
'template EffectString ' +
|
|
'{ ' +
|
|
' <D55B097E-BDB6-4c52-B03D-6051C89D0E42> ' +
|
|
' STRING Value; ' +
|
|
'} ' +
|
|
'template EffectDWord ' +
|
|
'{ ' +
|
|
' <622C0ED0-956E-4da9-908A-2AF94F3CE716> ' +
|
|
' DWORD Value; ' +
|
|
'} ' +
|
|
'template EffectParamFloats ' +
|
|
'{ ' +
|
|
' <3014B9A0-62F5-478c-9B86-E4AC9F4E418B> ' +
|
|
' STRING ParamName; ' +
|
|
' DWORD nFloats; ' +
|
|
' array float Floats[nFloats]; ' +
|
|
'} ' +
|
|
'template EffectParamString ' +
|
|
'{ ' +
|
|
' <1DBC4C88-94C1-46ee-9076-2C28818C9481> ' +
|
|
' STRING ParamName; ' +
|
|
' STRING Value; ' +
|
|
'} ' +
|
|
'template EffectParamDWord ' +
|
|
'{ ' +
|
|
' <E13963BC-AE51-4c5d-B00F-CFA3A9D97CE5> ' +
|
|
' STRING ParamName; ' +
|
|
' DWORD Value; ' +
|
|
'} ' +
|
|
'template EffectInstance ' +
|
|
'{ ' +
|
|
' <E331F7E4-0559-4cc2-8E99-1CEC1657928F> ' +
|
|
' STRING EffectFilename; ' +
|
|
' [ ... ] ' +
|
|
'} ' +
|
|
'template AnimTicksPerSecond ' +
|
|
'{ ' +
|
|
' <9E415A43-7BA6-4a73-8743-B73D47E88476> ' +
|
|
' DWORD AnimTicksPerSecond; ' +
|
|
'} ' +
|
|
'template CompressedAnimationSet ' +
|
|
'{ ' +
|
|
' <7F9B00B3-F125-4890-876E-1C42BF697C4D> ' +
|
|
' DWORD CompressedBlockSize; ' +
|
|
' FLOAT TicksPerSec; ' +
|
|
' DWORD PlaybackType; ' +
|
|
' DWORD BufferLength; ' +
|
|
' array DWORD CompressedData[BufferLength]; ' +
|
|
'} ';
|
|
{$EXTERNALSYM XSKINEXP_TEMPLATES}
|
|
|
|
XEXTENSIONS_TEMPLATES =
|
|
'xof 0303txt 0032' +
|
|
'template FVFData ' +
|
|
'{ ' +
|
|
' <B6E70A0E-8EF9-4e83-94AD-ECC8B0C04897> ' +
|
|
' DWORD dwFVF; ' +
|
|
' DWORD nDWords; ' +
|
|
' array DWORD data[nDWords]; ' +
|
|
'} ' +
|
|
'template VertexElement ' +
|
|
'{ ' +
|
|
' <F752461C-1E23-48f6-B9F8-8350850F336F> ' +
|
|
' DWORD Type; ' +
|
|
' DWORD Method; ' +
|
|
' DWORD Usage; ' +
|
|
' DWORD UsageIndex; ' +
|
|
'} ' +
|
|
'template DeclData ' +
|
|
'{ ' +
|
|
' <BF22E553-292C-4781-9FEA-62BD554BDD93> ' +
|
|
' DWORD nElements; ' +
|
|
' array VertexElement Elements[nElements]; ' +
|
|
' DWORD nDWords; ' +
|
|
' array DWORD data[nDWords]; ' +
|
|
'} ' +
|
|
'template PMAttributeRange ' +
|
|
'{ ' +
|
|
' <917E0427-C61E-4a14-9C64-AFE65F9E9844> ' +
|
|
' DWORD iFaceOffset; ' +
|
|
' DWORD nFacesMin; ' +
|
|
' DWORD nFacesMax; ' +
|
|
' DWORD iVertexOffset; ' +
|
|
' DWORD nVerticesMin; ' +
|
|
' DWORD nVerticesMax; ' +
|
|
'} ' +
|
|
'template PMVSplitRecord ' +
|
|
'{ ' +
|
|
' <574CCC14-F0B3-4333-822D-93E8A8A08E4C> ' +
|
|
' DWORD iFaceCLW; ' +
|
|
' DWORD iVlrOffset; ' +
|
|
' DWORD iCode; ' +
|
|
'} ' +
|
|
'template PMInfo ' +
|
|
'{ ' +
|
|
' <B6C3E656-EC8B-4b92-9B62-681659522947> ' +
|
|
' DWORD nAttributes; ' +
|
|
' array PMAttributeRange attributeRanges[nAttributes]; ' +
|
|
' DWORD nMaxValence; ' +
|
|
' DWORD nMinLogicalVertices; ' +
|
|
' DWORD nMaxLogicalVertices; ' +
|
|
' DWORD nVSplits; ' +
|
|
' array PMVSplitRecord splitRecords[nVSplits]; ' +
|
|
' DWORD nAttributeMispredicts; ' +
|
|
' array DWORD attributeMispredicts[nAttributeMispredicts]; ' +
|
|
'} ';
|
|
{$EXTERNALSYM XEXTENSIONS_TEMPLATES}
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// File: d3dx9shape.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: IDirect3DDevice9;
|
|
Length: Single;
|
|
Sides: LongWord;
|
|
out ppMesh: ID3DXMesh;
|
|
ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx9shapesDLL;
|
|
{$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: IDirect3DDevice9;
|
|
Width,
|
|
Height,
|
|
Depth: Single;
|
|
out ppMesh: ID3DXMesh;
|
|
ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx9shapesDLL;
|
|
{$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: IDirect3DDevice9;
|
|
Radius1,
|
|
Radius2,
|
|
Length: Single;
|
|
Slices,
|
|
Stacks: LongWord;
|
|
out ppMesh: ID3DXMesh;
|
|
ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx9shapesDLL;
|
|
{$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: IDirect3DDevice9;
|
|
Radius: Single;
|
|
Slices,
|
|
Stacks: LongWord;
|
|
out ppMesh: ID3DXMesh;
|
|
ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx9shapesDLL;
|
|
{$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: IDirect3DDevice9;
|
|
InnerRadius,
|
|
OuterRadius: Single;
|
|
Sides,
|
|
Rings: LongWord;
|
|
out ppMesh: ID3DXMesh;
|
|
ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx9shapesDLL;
|
|
{$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: IDirect3DDevice9;
|
|
out ppMesh: ID3DXMesh;
|
|
ppAdjacency: PID3DXBuffer): HResult; stdcall; external d3dx9shapesDLL;
|
|
{$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: IDirect3DDevice9;
|
|
hDC: HDC;
|
|
pText: PAnsiChar;
|
|
Deviation: Single;
|
|
Extrusion: Single;
|
|
out ppMesh: ID3DXMesh;
|
|
ppAdjacency: PID3DXBuffer;
|
|
pGlyphMetrics: PGlyphMetricsFloat): HResult; stdcall; external d3dx9shapesDLL name 'D3DXCreateTextA';
|
|
{$EXTERNALSYM D3DXCreateTextA}
|
|
|
|
function D3DXCreateTextW(ppDevice: IDirect3DDevice9;
|
|
hDC: HDC;
|
|
pText: PWideChar;
|
|
Deviation: Single;
|
|
Extrusion: Single;
|
|
out ppMesh: ID3DXMesh;
|
|
ppAdjacency: PID3DXBuffer;
|
|
pGlyphMetrics: PGlyphMetricsFloat): HResult; stdcall; external d3dx9shapesDLL name 'D3DXCreateTextW';
|
|
{$EXTERNALSYM D3DXCreateTextW}
|
|
|
|
function D3DXCreateText(ppDevice: IDirect3DDevice9;
|
|
hDC: HDC;
|
|
pText: PChar;
|
|
Deviation: Single;
|
|
Extrusion: Single;
|
|
out ppMesh: ID3DXMesh;
|
|
ppAdjacency: PID3DXBuffer;
|
|
pGlyphMetrics: PGlyphMetricsFloat): HResult; stdcall; external d3dx9shapesDLL name 'D3DXCreateTextA';
|
|
{$EXTERNALSYM D3DXCreateText}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// File: d3dx9tex.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 using a 4x4 order dither pattern.
|
|
// D3DX_FILTER_SRGB_IN
|
|
// Denotes that the input data is in sRGB (gamma 2.2) colorspace.
|
|
// D3DX_FILTER_SRGB_OUT
|
|
// Denotes that the output data is in sRGB (gamma 2.2) colorspace.
|
|
// D3DX_FILTER_SRGB
|
|
// Same as specifying D3DX_FILTER_SRGB_IN | D3DX_FILTER_SRGB_OUT
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
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 = (1 shl 19);
|
|
{$EXTERNALSYM D3DX_FILTER_DITHER}
|
|
D3DX_FILTER_DITHER_DIFFUSION = (2 shl 19);
|
|
{$EXTERNALSYM D3DX_FILTER_DITHER_DIFFUSION}
|
|
|
|
D3DX_FILTER_SRGB_IN = (1 shl 21);
|
|
{$EXTERNALSYM D3DX_FILTER_SRGB_IN}
|
|
D3DX_FILTER_SRGB_OUT = (2 shl 21);
|
|
{$EXTERNALSYM D3DX_FILTER_SRGB_OUT}
|
|
D3DX_FILTER_SRGB = (3 shl 21);
|
|
{$EXTERNALSYM D3DX_FILTER_SRGB}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// D3DX_SKIP_DDS_MIP_LEVELS is used to skip mip levels when loading a DDS file:
|
|
//-----------------------------------------------------------------------------
|
|
|
|
const
|
|
D3DX_SKIP_DDS_MIP_LEVELS_MASK = $1F;
|
|
{$EXTERNALSYM D3DX_SKIP_DDS_MIP_LEVELS_MASK}
|
|
D3DX_SKIP_DDS_MIP_LEVELS_SHIFT = 26;
|
|
{$EXTERNALSYM D3DX_SKIP_DDS_MIP_LEVELS_SHIFT}
|
|
|
|
function D3DX_SKIP_DDS_MIP_LEVELS(levels, filter: DWORD): DWORD;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
{$EXTERNALSYM D3DX_SKIP_DDS_MIP_LEVELS}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// 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},
|
|
D3DXIFF_HDR {= 7}, //high dynamic range formats
|
|
D3DXIFF_PFM {= 8} //
|
|
);
|
|
{$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 (WINAPI *LPD3DXFILL2D)(D3DXVECTOR4 *pOut,
|
|
// CONST D3DXVECTOR2 *pTexCoord, CONST D3DXVECTOR2 *pTexelSize, LPVOID pData);
|
|
TD3DXFill2D = procedure (out pOut: TD3DXVector4; const pTexCoord, pTexelSize: TD3DXVector2; var pData); stdcall;
|
|
{$NODEFINE TD3DXFill2D}
|
|
{$HPPEMIT 'typedef LPD3DXFILL2D TD3DXFill2D;'}
|
|
|
|
//typedef VOID (WINAPI *LPD3DXFILL3D)(D3DXVECTOR4 *pOut,
|
|
// CONST D3DXVECTOR3 *pTexCoord, CONST D3DXVECTOR3 *pTexelSize, LPVOID pData);
|
|
TD3DXFill3D = procedure (out pOut: TD3DXVector4; const pTexCoord, pTexelSize: TD3DXVector3; var pData); stdcall;
|
|
{$NODEFINE TD3DXFill3D}
|
|
{$HPPEMIT 'typedef LPD3DXFILL3D TD3DXFill3D;'}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// 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 = 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 d3dx9texDLL name 'D3DXGetImageInfoFromFileA';
|
|
{$EXTERNALSYM D3DXGetImageInfoFromFileA}
|
|
|
|
function D3DXGetImageInfoFromFileW(
|
|
pSrcFile: PWideChar;
|
|
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXGetImageInfoFromFileW';
|
|
{$EXTERNALSYM D3DXGetImageInfoFromFileW}
|
|
|
|
function D3DXGetImageInfoFromFile(
|
|
pSrcFile: PChar;
|
|
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXGetImageInfoFromFileA';
|
|
{$EXTERNALSYM D3DXGetImageInfoFromFile}
|
|
|
|
|
|
function D3DXGetImageInfoFromResourceA(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXGetImageInfoFromResourceA';
|
|
{$EXTERNALSYM D3DXGetImageInfoFromResourceA}
|
|
|
|
function D3DXGetImageInfoFromResourceW(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXGetImageInfoFromResourceW';
|
|
{$EXTERNALSYM D3DXGetImageInfoFromResourceW}
|
|
|
|
function D3DXGetImageInfoFromResource(
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXGetImageInfoFromResourceA';
|
|
{$EXTERNALSYM D3DXGetImageInfoFromResource}
|
|
|
|
|
|
function D3DXGetImageInfoFromFileInMemory(
|
|
const pSrcData: Pointer;
|
|
SrcDataSize: LongWord;
|
|
out pSrcInfo: TD3DXImageInfo): HResult; stdcall; external d3dx9texDLL;
|
|
{$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: IDirect3DSurface9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestRect: PRect;
|
|
pSrcFile: PAnsiChar;
|
|
pSrcRect: PRect;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadSurfaceFromFileA';
|
|
{$EXTERNALSYM D3DXLoadSurfaceFromFileA}
|
|
|
|
function D3DXLoadSurfaceFromFileW(
|
|
pDestSurface: IDirect3DSurface9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestRect: PRect;
|
|
pSrcFile: PWideChar;
|
|
pSrcRect: PRect;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadSurfaceFromFileW';
|
|
{$EXTERNALSYM D3DXLoadSurfaceFromFileW}
|
|
|
|
function D3DXLoadSurfaceFromFile(
|
|
pDestSurface: IDirect3DSurface9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestRect: PRect;
|
|
pSrcFile: PChar;
|
|
pSrcRect: PRect;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadSurfaceFromFileA';
|
|
{$EXTERNALSYM D3DXLoadSurfaceFromFile}
|
|
|
|
|
|
|
|
function D3DXLoadSurfaceFromResourceA(
|
|
pDestSurface: IDirect3DSurface9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestRect: PRect;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
pSrcRect: PRect;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadSurfaceFromResourceA';
|
|
{$EXTERNALSYM D3DXLoadSurfaceFromResourceA}
|
|
|
|
function D3DXLoadSurfaceFromResourceW(
|
|
pDestSurface: IDirect3DSurface9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestRect: PRect;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
pSrcRect: PRect;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadSurfaceFromResourceW';
|
|
{$EXTERNALSYM D3DXLoadSurfaceFromResourceW}
|
|
|
|
function D3DXLoadSurfaceFromResource(
|
|
pDestSurface: IDirect3DSurface9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestRect: PRect;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
pSrcRect: PRect;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadSurfaceFromResourceA';
|
|
{$EXTERNALSYM D3DXLoadSurfaceFromResource}
|
|
|
|
|
|
|
|
function D3DXLoadSurfaceFromFileInMemory(
|
|
pDestSurface: IDirect3DSurface9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestRect: PRect;
|
|
const pSrcData: Pointer;
|
|
SrcDataSize: LongWord;
|
|
pSrcRect: PRect;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL;
|
|
{$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: IDirect3DSurface9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestRect: PRect;
|
|
pSrcSurface: IDirect3DSurface9;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcRect: PRect;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor): HResult; stdcall; external d3dx9texDLL;
|
|
{$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: IDirect3DSurface9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestRect: PRect;
|
|
const pSrcMemory: Pointer;
|
|
SrcFormat: TD3DFormat;
|
|
SrcPitch: LongWord;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcRect: PRect;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor): HResult; stdcall; external d3dx9texDLL;
|
|
{$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: IDirect3DSurface9;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcRect: PRect): HResult; stdcall; external d3dx9texDLL name 'D3DXSaveSurfaceToFileA';
|
|
{$EXTERNALSYM D3DXSaveSurfaceToFileA}
|
|
|
|
function D3DXSaveSurfaceToFileW(
|
|
pDestFile: PWideChar;
|
|
DestFormat: TD3DXImageFileFormat;
|
|
pSrcSurface: IDirect3DSurface9;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcRect: PRect): HResult; stdcall; external d3dx9texDLL name 'D3DXSaveSurfaceToFileW';
|
|
{$EXTERNALSYM D3DXSaveSurfaceToFileW}
|
|
|
|
function D3DXSaveSurfaceToFile(
|
|
pDestFile: PChar;
|
|
DestFormat: TD3DXImageFileFormat;
|
|
pSrcSurface: IDirect3DSurface9;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcRect: PRect): HResult; stdcall; external d3dx9texDLL name 'D3DXSaveSurfaceToFileA';
|
|
{$EXTERNALSYM D3DXSaveSurfaceToFile}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXSaveSurfaceToFileInMemory:
|
|
// ----------------------
|
|
// Save a surface to a image file.
|
|
//
|
|
// Parameters:
|
|
// ppDestBuf
|
|
// address of pointer to d3dxbuffer for returning data bits
|
|
// 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 D3DXSaveSurfaceToFileInMemory(
|
|
out ppDestBuf: ID3DXBuffer;
|
|
DestFormat: TD3DXImageFileFormat;
|
|
pSrcSurface: IDirect3DSurface9;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcRect: PRect): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXSaveSurfaceToFileInMemory}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// 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: IDirect3DVolume9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestBox: TD3DBox;
|
|
pSrcFile: PAnsiChar;
|
|
pSrcBox: TD3DBox;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadVolumeFromFileA';
|
|
{$EXTERNALSYM D3DXLoadVolumeFromFileA}
|
|
|
|
function D3DXLoadVolumeFromFileW(
|
|
pDestVolume: IDirect3DVolume9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestBox: TD3DBox;
|
|
pSrcFile: PWideChar;
|
|
pSrcBox: TD3DBox;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadVolumeFromFileW';
|
|
{$EXTERNALSYM D3DXLoadVolumeFromFileW}
|
|
|
|
function D3DXLoadVolumeFromFile(
|
|
pDestVolume: IDirect3DVolume9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestBox: TD3DBox;
|
|
pSrcFile: PChar;
|
|
pSrcBox: TD3DBox;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadVolumeFromFileA';
|
|
{$EXTERNALSYM D3DXLoadVolumeFromFile}
|
|
|
|
|
|
function D3DXLoadVolumeFromResourceA(
|
|
pDestVolume: IDirect3DVolume9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestBox: TD3DBox;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
pSrcBox: TD3DBox;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadVolumeFromResourceA';
|
|
{$EXTERNALSYM D3DXLoadVolumeFromResourceA}
|
|
|
|
function D3DXLoadVolumeFromResourceW(
|
|
pDestVolume: IDirect3DVolume9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestBox: TD3DBox;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
pSrcBox: TD3DBox;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadVolumeFromResourceW';
|
|
{$EXTERNALSYM D3DXLoadVolumeFromResourceW}
|
|
|
|
function D3DXLoadVolumeFromResource(
|
|
pDestVolume: IDirect3DVolume9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestBox: TD3DBox;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
pSrcBox: TD3DBox;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL name 'D3DXLoadVolumeFromResourceA';
|
|
{$EXTERNALSYM D3DXLoadVolumeFromResource}
|
|
|
|
|
|
function D3DXLoadVolumeFromFileInMemory(
|
|
pDestVolume: IDirect3DVolume9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestBox: TD3DBox;
|
|
const pSrcData: Pointer;
|
|
SrcDataSize: LongWord;
|
|
pSrcBox: TD3DBox;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo): HResult; stdcall; external d3dx9texDLL;
|
|
{$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: IDirect3DVolume9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestBox: TD3DBox;
|
|
pSrcVolume: IDirect3DVolume9;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcBox: TD3DBox;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor): HResult; stdcall; external d3dx9texDLL;
|
|
{$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: IDirect3DVolume9;
|
|
pDestPalette: PPaletteEntry;
|
|
pDestBox: TD3DBox;
|
|
const pSrcMemory: Pointer;
|
|
SrcFormat: TD3DFormat;
|
|
SrcRowPitch: LongWord;
|
|
SrcSlicePitch: LongWord;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcBox: TD3DBox;
|
|
Filter: DWord;
|
|
ColorKey: TD3DColor): HResult; stdcall; external d3dx9texDLL;
|
|
{$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: IDirect3DVolume9;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcBox: TD3DBox): HResult; stdcall; external d3dx9texDLL name 'D3DXSaveVolumeToFileA';
|
|
{$EXTERNALSYM D3DXSaveVolumeToFileA}
|
|
|
|
function D3DXSaveVolumeToFileW(
|
|
pDestFile: PWideChar;
|
|
DestFormat: TD3DXImageFileFormat;
|
|
pSrcVolume: IDirect3DVolume9;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcBox: TD3DBox): HResult; stdcall; external d3dx9texDLL name 'D3DXSaveVolumeToFileW';
|
|
{$EXTERNALSYM D3DXSaveVolumeToFileW}
|
|
|
|
function D3DXSaveVolumeToFile(
|
|
pDestFile: PChar;
|
|
DestFormat: TD3DXImageFileFormat;
|
|
pSrcVolume: IDirect3DVolume9;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcBox: TD3DBox): HResult; stdcall; external d3dx9texDLL name 'D3DXSaveVolumeToFileA';
|
|
{$EXTERNALSYM D3DXSaveVolumeToFile}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXSaveVolumeToFileInMemory:
|
|
// ---------------------
|
|
// 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 D3DXSaveVolumeToFileInMemory(
|
|
out ppDestBuf: ID3DXBuffer;
|
|
DestFormat: TD3DXImageFileFormat;
|
|
pSrcVolume: IDirect3DVolume9;
|
|
pSrcPalette: PPaletteEntry;
|
|
pSrcBox: TD3DBox): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXSaveVolumeToFileInMemory}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// 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: IDirect3DDevice9;
|
|
pWidth: PLongWord;
|
|
pHeight: PLongWord;
|
|
pNumMipLevels: PLongWord;
|
|
Usage: DWord;
|
|
pFormat: PD3DFormat;
|
|
Pool: TD3DPool): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXCheckTextureRequirements}
|
|
|
|
function D3DXCheckCubeTextureRequirements(
|
|
pDevice: IDirect3DDevice9;
|
|
pSize: PLongWord;
|
|
pNumMipLevels: PLongWord;
|
|
Usage: DWord;
|
|
pFormat: PD3DFormat;
|
|
Pool: TD3DPool): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXCheckCubeTextureRequirements}
|
|
|
|
function D3DXCheckVolumeTextureRequirements(
|
|
pDevice: IDirect3DDevice9;
|
|
pWidth: PLongWord;
|
|
pHeight: PLongWord;
|
|
pDepth: PLongWord;
|
|
pNumMipLevels: PLongWord;
|
|
Usage: DWord;
|
|
pFormat: PD3DFormat;
|
|
Pool: TD3DPool): HResult; stdcall; external d3dx9texDLL;
|
|
{$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: IDirect3DDevice9;
|
|
Width: LongWord;
|
|
Height: LongWord;
|
|
MipLevels: LongWord;
|
|
Usage: DWord;
|
|
Format: TD3DFormat;
|
|
Pool: TD3DPool;
|
|
out ppTexture: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXCreateTexture}
|
|
|
|
function D3DXCreateCubeTexture(
|
|
Device: IDirect3DDevice9;
|
|
Size: LongWord;
|
|
MipLevels: LongWord;
|
|
Usage: DWord;
|
|
Format: TD3DFormat;
|
|
Pool: TD3DPool;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXCreateCubeTexture}
|
|
|
|
function D3DXCreateVolumeTexture(
|
|
Device: IDirect3DDevice9;
|
|
Width: LongWord;
|
|
Height: LongWord;
|
|
Depth: LongWord;
|
|
MipLevels: LongWord;
|
|
Usage: DWord;
|
|
Format: TD3DFormat;
|
|
Pool: TD3DPool;
|
|
out ppVolumeTexture: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL;
|
|
{$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 and rounded up to a power of two. If D3DX_DEFAULT_NONPOW2,
|
|
// and the device supports NONPOW2 textures, the size will not be rounded.
|
|
// If D3DX_FROM_FILE, the size will be taken exactly as it is in the file,
|
|
// and the call will fail if this violates device capabilities.
|
|
// MipLevels
|
|
// Number of mip levels. If zero or D3DX_DEFAULT, a complete mipmap
|
|
// chain will be created. If D3DX_FROM_FILE, the size will be taken
|
|
// exactly as it is in the file, and the call will fail if this violates
|
|
// device capabilities.
|
|
// Usage
|
|
// Texture usage flags
|
|
// Format
|
|
// Desired pixel format. If D3DFMT_UNKNOWN, the format will be
|
|
// taken from the file. If D3DFMT_FROM_FILE, the format will be taken
|
|
// exactly as it is in the file, and the call will fail if the device does
|
|
// not support the given format.
|
|
// 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.
|
|
// Use the D3DX_SKIP_DDS_MIP_LEVELS macro to specify both a filter and the
|
|
// number of mip levels to skip when loading DDS files.
|
|
// 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: IDirect3DDevice9;
|
|
pSrcFile: PAnsiChar;
|
|
out ppTexture: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromFileA';
|
|
{$EXTERNALSYM D3DXCreateTextureFromFileA}
|
|
|
|
function D3DXCreateTextureFromFileW(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PWideChar;
|
|
out ppTexture: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromFileW';
|
|
{$EXTERNALSYM D3DXCreateTextureFromFileW}
|
|
|
|
function D3DXCreateTextureFromFile(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PChar;
|
|
out ppTexture: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromFileA';
|
|
{$EXTERNALSYM D3DXCreateTextureFromFile}
|
|
|
|
|
|
function D3DXCreateCubeTextureFromFileA(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PAnsiChar;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromFileA';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromFileA}
|
|
|
|
function D3DXCreateCubeTextureFromFileW(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PWideChar;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromFileW';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromFileW}
|
|
|
|
function D3DXCreateCubeTextureFromFile(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PChar;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromFileA';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromFile}
|
|
|
|
|
|
function D3DXCreateVolumeTextureFromFileA(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PAnsiChar;
|
|
out ppVolumeTexture: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromFileA';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileA}
|
|
|
|
function D3DXCreateVolumeTextureFromFileW(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PWideChar;
|
|
out ppVolumeTexture: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromFileW';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileW}
|
|
|
|
function D3DXCreateVolumeTextureFromFile(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PChar;
|
|
out ppVolumeTexture: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromFileA';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromFile}
|
|
|
|
|
|
// FromResource
|
|
|
|
function D3DXCreateTextureFromResourceA(
|
|
Device: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
out ppTexture: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromResourceA';
|
|
{$EXTERNALSYM D3DXCreateTextureFromResourceA}
|
|
|
|
function D3DXCreateTextureFromResourceW(
|
|
Device: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
out ppTexture: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromResourceW';
|
|
{$EXTERNALSYM D3DXCreateTextureFromResourceW}
|
|
|
|
function D3DXCreateTextureFromResource(
|
|
Device: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
out ppTexture: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromResourceA';
|
|
{$EXTERNALSYM D3DXCreateTextureFromResource}
|
|
|
|
|
|
function D3DXCreateCubeTextureFromResourceA(
|
|
Device: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromResourceA';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromResourceA}
|
|
|
|
function D3DXCreateCubeTextureFromResourceW(
|
|
Device: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromResourceW';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromResourceW}
|
|
|
|
function D3DXCreateCubeTextureFromResource(
|
|
Device: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromResourceA';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromResource}
|
|
|
|
|
|
function D3DXCreateVolumeTextureFromResourceA(
|
|
Device: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PAnsiChar;
|
|
out ppVolumeTexture: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromResourceA';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromResourceA}
|
|
|
|
function D3DXCreateVolumeTextureFromResourceW(
|
|
Device: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PWideChar;
|
|
out ppVolumeTexture: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromResourceW';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromResourceW}
|
|
|
|
function D3DXCreateVolumeTextureFromResource(
|
|
Device: IDirect3DDevice9;
|
|
hSrcModule: HModule;
|
|
pSrcResource: PChar;
|
|
out ppVolumeTexture: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromResourceA';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromResource}
|
|
|
|
|
|
// FromFileEx
|
|
|
|
function D3DXCreateTextureFromFileExA(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromFileExA';
|
|
{$EXTERNALSYM D3DXCreateTextureFromFileExA}
|
|
|
|
function D3DXCreateTextureFromFileExW(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromFileExW';
|
|
{$EXTERNALSYM D3DXCreateTextureFromFileExW}
|
|
|
|
function D3DXCreateTextureFromFileEx(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromFileExA';
|
|
{$EXTERNALSYM D3DXCreateTextureFromFileEx}
|
|
|
|
|
|
function D3DXCreateCubeTextureFromFileExA(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PAnsiChar;
|
|
Size: LongWord;
|
|
MipLevels: LongWord;
|
|
Usage: DWord;
|
|
Format: TD3DFormat;
|
|
Pool: TD3DPool;
|
|
Filter: DWord;
|
|
MipFilter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo;
|
|
pPalette: PPaletteEntry;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromFileExA';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromFileExA}
|
|
|
|
function D3DXCreateCubeTextureFromFileExW(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PWideChar;
|
|
Size: LongWord;
|
|
MipLevels: LongWord;
|
|
Usage: DWord;
|
|
Format: TD3DFormat;
|
|
Pool: TD3DPool;
|
|
Filter: DWord;
|
|
MipFilter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo;
|
|
pPalette: PPaletteEntry;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromFileExW';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromFileExW}
|
|
|
|
function D3DXCreateCubeTextureFromFileEx(
|
|
Device: IDirect3DDevice9;
|
|
pSrcFile: PChar;
|
|
Size: LongWord;
|
|
MipLevels: LongWord;
|
|
Usage: DWord;
|
|
Format: TD3DFormat;
|
|
Pool: TD3DPool;
|
|
Filter: DWord;
|
|
MipFilter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo;
|
|
pPalette: PPaletteEntry;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromFileExA';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromFileEx}
|
|
|
|
|
|
function D3DXCreateVolumeTextureFromFileExA(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromFileExA';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileExA}
|
|
|
|
function D3DXCreateVolumeTextureFromFileExW(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromFileExW';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileExW}
|
|
|
|
function D3DXCreateVolumeTextureFromFileEx(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromFileExA';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileEx}
|
|
|
|
|
|
// FromResourceEx
|
|
|
|
function D3DXCreateTextureFromResourceExA(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromResourceExA';
|
|
{$EXTERNALSYM D3DXCreateTextureFromResourceExA}
|
|
|
|
function D3DXCreateTextureFromResourceExW(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromResourceExW';
|
|
{$EXTERNALSYM D3DXCreateTextureFromResourceExW}
|
|
|
|
function D3DXCreateTextureFromResourceEx(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateTextureFromResourceExA';
|
|
{$EXTERNALSYM D3DXCreateTextureFromResourceEx}
|
|
|
|
|
|
function D3DXCreateCubeTextureFromResourceExA(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromResourceExA';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromResourceExA}
|
|
|
|
function D3DXCreateCubeTextureFromResourceExW(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromResourceExW';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromResourceExW}
|
|
|
|
function D3DXCreateCubeTextureFromResourceEx(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateCubeTextureFromResourceExA';
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromResourceEx}
|
|
|
|
|
|
function D3DXCreateVolumeTextureFromResourceExA(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromResourceExA';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromResourceExA}
|
|
|
|
function D3DXCreateVolumeTextureFromResourceExW(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromResourceExW';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromResourceExW}
|
|
|
|
function D3DXCreateVolumeTextureFromResourceEx(
|
|
Device: IDirect3DDevice9;
|
|
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: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL name 'D3DXCreateVolumeTextureFromResourceExA';
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromResourceEx}
|
|
|
|
|
|
// FromFileInMemory
|
|
|
|
function D3DXCreateTextureFromFileInMemory(
|
|
Device: IDirect3DDevice9;
|
|
const pSrcData: Pointer;
|
|
SrcDataSize: LongWord;
|
|
out ppTexture: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXCreateTextureFromFileInMemory}
|
|
|
|
function D3DXCreateCubeTextureFromFileInMemory(
|
|
Device: IDirect3DDevice9;
|
|
const pSrcData: Pointer;
|
|
SrcDataSize: LongWord;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromFileInMemory}
|
|
|
|
function D3DXCreateVolumeTextureFromFileInMemory(
|
|
Device: IDirect3DDevice9;
|
|
const pSrcData: Pointer;
|
|
SrcDataSize: LongWord;
|
|
out ppVolumeTexture: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXCreateVolumeTextureFromFileInMemory}
|
|
|
|
|
|
// FromFileInMemoryEx
|
|
|
|
function D3DXCreateTextureFromFileInMemoryEx(
|
|
Device: IDirect3DDevice9;
|
|
const pSrcData: Pointer;
|
|
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: IDirect3DTexture9): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXCreateTextureFromFileInMemoryEx}
|
|
|
|
function D3DXCreateCubeTextureFromFileInMemoryEx(
|
|
Device: IDirect3DDevice9;
|
|
const pSrcData: Pointer;
|
|
SrcDataSize: LongWord;
|
|
Size: LongWord;
|
|
MipLevels: LongWord;
|
|
Usage: DWord;
|
|
Format: TD3DFormat;
|
|
Pool: TD3DPool;
|
|
Filter: DWord;
|
|
MipFilter: DWord;
|
|
ColorKey: TD3DColor;
|
|
pSrcInfo: PD3DXImageInfo;
|
|
pPalette: PPaletteEntry;
|
|
out ppCubeTexture: IDirect3DCubeTexture9): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXCreateCubeTextureFromFileInMemoryEx}
|
|
|
|
function D3DXCreateVolumeTextureFromFileInMemoryEx(
|
|
Device: IDirect3DDevice9;
|
|
const pSrcData: Pointer;
|
|
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: IDirect3DVolumeTexture9): HResult; stdcall; external d3dx9texDLL;
|
|
{$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: IDirect3DBaseTexture9;
|
|
pSrcPalette: PPaletteEntry): HResult; stdcall; external d3dx9texDLL name 'D3DXSaveTextureToFileA';
|
|
{$EXTERNALSYM D3DXSaveTextureToFileA}
|
|
|
|
function D3DXSaveTextureToFileW(
|
|
pDestFile: PWideChar;
|
|
DestFormat: TD3DXImageFileFormat;
|
|
pSrcTexture: IDirect3DBaseTexture9;
|
|
pSrcPalette: PPaletteEntry): HResult; stdcall; external d3dx9texDLL name 'D3DXSaveTextureToFileW';
|
|
{$EXTERNALSYM D3DXSaveTextureToFileW}
|
|
|
|
function D3DXSaveTextureToFile(
|
|
pDestFile: PChar;
|
|
DestFormat: TD3DXImageFileFormat;
|
|
pSrcTexture: IDirect3DBaseTexture9;
|
|
pSrcPalette: PPaletteEntry): HResult; stdcall; external d3dx9texDLL name 'D3DXSaveTextureToFileA';
|
|
{$EXTERNALSYM D3DXSaveTextureToFile}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXSaveTextureToFileInMemory:
|
|
// ----------------------
|
|
// Save a texture to a file.
|
|
//
|
|
// Parameters:
|
|
// ppDestBuf
|
|
// address of a d3dxbuffer pointer to return the image data
|
|
// 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 D3DXSaveTextureToFileInMemory(
|
|
out ppDestBuf: ID3DXBuffer;
|
|
DestFormat: TD3DXImageFileFormat;
|
|
pSrcTexture: IDirect3DBaseTexture9;
|
|
pSrcPalette: PPaletteEntry): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXSaveTextureToFileInMemory}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// 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: IDirect3DTexture9;
|
|
pPalette: PPaletteEntry;
|
|
SrcLevel: LongWord;
|
|
Filter: DWord): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXFilterTexture}
|
|
|
|
// #define D3DXFilterCubeTexture D3DXFilterTexture
|
|
// In Pascal this mapped to DLL-exported "D3DXFilterTexture" function
|
|
function D3DXFilterCubeTexture(
|
|
pTexture: IDirect3DCubeTexture9;
|
|
pPalette: PPaletteEntry;
|
|
SrcLevel: LongWord;
|
|
Filter: DWord): HResult; stdcall; external d3dx9texDLL name 'D3DXFilterTexture';
|
|
{$EXTERNALSYM D3DXFilterCubeTexture}
|
|
|
|
// #define D3DXFilterVolumeTexture D3DXFilterTexture
|
|
// In Pascal this mapped to DLL-exported "D3DXFilterTexture" function
|
|
function D3DXFilterVolumeTexture(
|
|
pTexture: IDirect3DVolumeTexture9;
|
|
pPalette: PPaletteEntry;
|
|
SrcLevel: LongWord;
|
|
Filter: DWord): HResult; stdcall; external d3dx9texDLL 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: IDirect3DTexture9;
|
|
pFunction: TD3DXFill2D;
|
|
pData: Pointer): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXFillTexture}
|
|
|
|
function D3DXFillCubeTexture(
|
|
pCubeTexture: IDirect3DCubeTexture9;
|
|
pFunction: TD3DXFill3D;
|
|
pData: Pointer): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXFillCubeTexture}
|
|
|
|
function D3DXFillVolumeTexture(
|
|
pVolumeTexture: IDirect3DVolumeTexture9;
|
|
pFunction: TD3DXFill3D;
|
|
pData: Pointer): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXFillVolumeTexture}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// D3DXFillTextureTX:
|
|
// ------------------
|
|
// Uses a TX Shader target to function to fill each texel of each mip level
|
|
// of a given texture. The TX Shader target should be a compiled function
|
|
// taking 2 paramters and returning a float4 color.
|
|
//
|
|
// Paramters:
|
|
// pTexture, pCubeTexture, pVolumeTexture
|
|
// Pointer to the texture to be filled.
|
|
// pTextureShader
|
|
// Pointer to the texture shader to be used to fill in the texture
|
|
//----------------------------------------------------------------------------
|
|
|
|
function D3DXFillTextureTX(
|
|
pTexture: IDirect3DTexture9;
|
|
pTextureShader: ID3DXTextureShader): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXFillTextureTX}
|
|
|
|
|
|
function D3DXFillCubeTextureTX(
|
|
pCubeTexture: IDirect3DCubeTexture9;
|
|
pTextureShader: ID3DXTextureShader): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXFillCubeTextureTX}
|
|
|
|
|
|
function D3DXFillVolumeTextureTX(
|
|
pVolumeTexture: IDirect3DVolumeTexture9;
|
|
pTextureShader: ID3DXTextureShader): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXFillVolumeTextureTX}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// 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: IDirect3DTexture9;
|
|
pSrcTexture: IDirect3DTexture9;
|
|
pSrcPalette: PPaletteEntry;
|
|
Flags: DWord;
|
|
Channel: DWord;
|
|
Amplitude: Single): HResult; stdcall; external d3dx9texDLL;
|
|
{$EXTERNALSYM D3DXComputeNormalMap}
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// File: d3dx9anim.h
|
|
// Content: D3DX mesh types and functions
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
type
|
|
//----------------------------------------------------------------------------
|
|
// D3DXMESHDATATYPE:
|
|
// -----------------
|
|
// This enum defines the type of mesh data present in a MeshData structure.
|
|
//----------------------------------------------------------------------------
|
|
_D3DXMESHDATATYPE = (
|
|
{$IFNDEF SUPPORTS_EXPL_ENUMS}
|
|
D3DXMESHTYPE_invalid_0,
|
|
D3DXMESHTYPE_MESH {= $001}, // Normal ID3DXMesh data
|
|
D3DXMESHTYPE_PMESH {= $002}, // Progressive Mesh - ID3DXPMesh
|
|
D3DXMESHTYPE_PATCHMESH {= $003} // Patch Mesh - ID3DXPatchMesh
|
|
{$ELSE}
|
|
D3DXMESHTYPE_MESH = $001, // Normal ID3DXMesh data
|
|
D3DXMESHTYPE_PMESH = $002, // Progressive Mesh - ID3DXPMesh
|
|
D3DXMESHTYPE_PATCHMESH = $003 // Patch Mesh - ID3DXPatchMesh
|
|
{$ENDIF}
|
|
);
|
|
{$EXTERNALSYM _D3DXMESHDATATYPE}
|
|
D3DXMESHDATATYPE = _D3DXMESHDATATYPE;
|
|
{$EXTERNALSYM D3DXMESHDATATYPE}
|
|
TD3DXMeshDataType = _D3DXMESHDATATYPE;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXMESHDATA:
|
|
// -------------
|
|
// This struct encapsulates a the mesh data that can be present in a mesh
|
|
// container. The supported mesh types are pMesh, pPMesh, pPatchMesh.
|
|
// The valid way to access this is determined by the Type enum.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXMeshData = ^TD3DXMeshData;
|
|
_D3DXMESHDATA = record
|
|
_Type: TD3DXMeshDataType;
|
|
|
|
// current mesh data interface
|
|
// *** Translator ***: Delphi doesn't allow interfaces in variant records
|
|
// so I declare only one field that can be casted in code, for examples, as:
|
|
// either "mesh := ID3DXPatchMesh(pPatchMesh)"
|
|
// or "mesh := pPatchMesh as ID3DXPatchMesh"
|
|
pMesh: IUnknown;
|
|
{ case Byte of // In Delphi use pMesh record item as defined above
|
|
0: (pMesh: ID3DXMesh);
|
|
1: (pPMesh: ID3DXPMesh);
|
|
2: (pPatchMesh: ID3DXPatchMesh); }
|
|
end;
|
|
{$EXTERNALSYM _D3DXMESHDATA}
|
|
D3DXMESHDATA = _D3DXMESHDATA;
|
|
{$EXTERNALSYM D3DXMESHDATA}
|
|
TD3DXMeshData = _D3DXMESHDATA;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXMESHCONTAINER:
|
|
// ------------------
|
|
// This struct encapsulates a mesh object in a transformation frame
|
|
// hierarchy. The app can derive from this structure to add other app specific
|
|
// data to this.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXMeshContainer = ^TD3DXMeshContainer;
|
|
_D3DXMESHCONTAINER = record
|
|
Name: PAnsiChar;
|
|
|
|
MeshData: TD3DXMeshData;
|
|
|
|
pMaterials: PD3DXMaterial;
|
|
pEffects: PD3DXEffectInstance;
|
|
NumMaterials: DWORD;
|
|
pAdjacency: PDWORD;
|
|
|
|
pSkinInfo: ID3DXSkinInfo;
|
|
|
|
pNextMeshContainer: PD3DXMeshContainer;
|
|
end;
|
|
{$EXTERNALSYM _D3DXMESHCONTAINER}
|
|
D3DXMESHCONTAINER = _D3DXMESHCONTAINER;
|
|
{$EXTERNALSYM D3DXMESHCONTAINER}
|
|
TD3DXMeshContainer = _D3DXMESHCONTAINER;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFRAME:
|
|
// ----------
|
|
// This struct is the encapsulates a transform frame in a transformation frame
|
|
// hierarchy. The app can derive from this structure to add other app specific
|
|
// data to this
|
|
//----------------------------------------------------------------------------
|
|
PD3DXFrame = ^TD3DXFrame;
|
|
_D3DXFRAME = record
|
|
Name: PAnsiChar;
|
|
TransformationMatrix: TD3DXMatrix;
|
|
|
|
pMeshContainer: PD3DXMeshContainer;
|
|
|
|
pFrameSibling: PD3DXFrame;
|
|
pFrameFirstChild: PD3DXFrame;
|
|
end;
|
|
{$EXTERNALSYM _D3DXFRAME}
|
|
D3DXFRAME = _D3DXFRAME;
|
|
{$EXTERNALSYM D3DXFRAME}
|
|
TD3DXFrame = _D3DXFRAME;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXAllocateHierarchy:
|
|
// -----------------------
|
|
// This interface is implemented by the application to allocate/free frame and
|
|
// mesh container objects. Methods on this are called during loading and
|
|
// destroying frame hierarchies
|
|
//----------------------------------------------------------------------------
|
|
{$EXTERNALSYM ID3DXAllocateHierarchy}
|
|
ID3DXAllocateHierarchy = class
|
|
// ID3DXAllocateHierarchy
|
|
|
|
//------------------------------------------------------------------------
|
|
// CreateFrame:
|
|
// ------------
|
|
// Requests allocation of a frame object.
|
|
//
|
|
// Parameters:
|
|
// Name
|
|
// Name of the frame to be created
|
|
// ppNewFrame
|
|
// Returns the created frame object
|
|
//
|
|
//------------------------------------------------------------------------
|
|
function CreateFrame(Name: PAnsiChar; out ppNewFrame: PD3DXFrame): HResult; virtual; stdcall; abstract;
|
|
|
|
//------------------------------------------------------------------------
|
|
// CreateMeshContainer:
|
|
// --------------------
|
|
// Requests allocation of a mesh container object.
|
|
//
|
|
// Parameters:
|
|
// Name
|
|
// Name of the mesh
|
|
// pMesh
|
|
// Pointer to the mesh object if basic polygon data found
|
|
// pPMesh
|
|
// Pointer to the progressive mesh object if progressive mesh data found
|
|
// pPatchMesh
|
|
// Pointer to the patch mesh object if patch data found
|
|
// pMaterials
|
|
// Array of materials used in the mesh
|
|
// pEffectInstances
|
|
// Array of effect instances used in the mesh
|
|
// NumMaterials
|
|
// Num elements in the pMaterials array
|
|
// pAdjacency
|
|
// Adjacency array for the mesh
|
|
// pSkinInfo
|
|
// Pointer to the skininfo object if the mesh is skinned
|
|
// pBoneNames
|
|
// Array of names, one for each bone in the skinned mesh.
|
|
// The numberof bones can be found from the pSkinMesh object
|
|
// pBoneOffsetMatrices
|
|
// Array of matrices, one for each bone in the skinned mesh.
|
|
//
|
|
//------------------------------------------------------------------------
|
|
function CreateMeshContainer(Name: PAnsiChar; const pMeshData: TD3DXMeshData;
|
|
pMaterials: PD3DXMaterial; pEffectInstances: PD3DXEffectInstance;
|
|
NumMaterials: DWORD; pAdjacency: PDWORD; pSkinInfo: ID3DXSkinInfo;
|
|
out ppNewMeshContainer: PD3DXMeshContainer): HResult; virtual; stdcall; abstract;
|
|
|
|
//------------------------------------------------------------------------
|
|
// DestroyFrame:
|
|
// -------------
|
|
// Requests de-allocation of a frame object.
|
|
//
|
|
// Parameters:
|
|
// pFrameToFree
|
|
// Pointer to the frame to be de-allocated
|
|
//
|
|
//------------------------------------------------------------------------
|
|
function DestroyFrame(pFrameToFree: PD3DXFrame): HResult; virtual; stdcall; abstract;
|
|
|
|
//------------------------------------------------------------------------
|
|
// DestroyMeshContainer:
|
|
// ---------------------
|
|
// Requests de-allocation of a mesh container object.
|
|
//
|
|
// Parameters:
|
|
// pMeshContainerToFree
|
|
// Pointer to the mesh container object to be de-allocated
|
|
//
|
|
//------------------------------------------------------------------------
|
|
function DestroyMeshContainer(pMeshContainerToFree: PD3DXMeshContainer): HResult; virtual; stdcall; abstract;
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXLoadUserData:
|
|
// ------------------
|
|
// This interface is implemented by the application to load user data in a .X file
|
|
// When user data is found, these callbacks will be used to allow the application
|
|
// to load the data.
|
|
//----------------------------------------------------------------------------
|
|
{$EXTERNALSYM ID3DXLoadUserData}
|
|
ID3DXLoadUserData = class
|
|
function LoadTopLevelData(pXofChildData: ID3DXFileData): HResult; virtual; stdcall; abstract;
|
|
|
|
function LoadFrameChildData(pFrame: PD3DXFrame;
|
|
pXofChildData: ID3DXFileData): HResult; virtual; stdcall; abstract;
|
|
|
|
function LoadMeshChildData(pMeshContainer: PD3DXMeshContainer;
|
|
pXofChildData: ID3DXFileData): HResult; virtual; stdcall; abstract;
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXSaveUserData:
|
|
// ------------------
|
|
// This interface is implemented by the application to save user data in a .X file
|
|
// The callbacks are called for all data saved. The user can then add any
|
|
// child data objects to the object provided to the callback.
|
|
//----------------------------------------------------------------------------
|
|
{$EXTERNALSYM ID3DXSaveUserData}
|
|
ID3DXSaveUserData = class
|
|
function AddFrameChildData(pFrame: PD3DXFrame;
|
|
pXofSave: ID3DXFileSaveObject;
|
|
pXofFrameData: ID3DXFileData): HResult; virtual; stdcall; abstract;
|
|
|
|
function AddMeshChildData(pMeshContainer: PD3DXMeshContainer;
|
|
pXofSave: ID3DXFileSaveObject; pXofMeshData: ID3DXFileData): HResult; virtual; stdcall; abstract;
|
|
|
|
// NOTE: this is called once per Save. All top level objects should be added using the
|
|
// provided interface. One call adds objects before the frame hierarchy, the other after
|
|
function AddTopLevelDataObjectsPre(pXofSave: ID3DXFileSaveObject): HResult; virtual; stdcall; abstract;
|
|
function AddTopLevelDataObjectsPost(pXofSave: ID3DXFileSaveObject): HResult; virtual; stdcall; abstract;
|
|
|
|
// callbacks for the user to register and then save templates to the XFile
|
|
function RegisterTemplates(pXFileApi: ID3DXFile): HResult; virtual; stdcall; abstract;
|
|
function SaveTemplates(pXofSave: ID3DXFileSaveObject): HResult; virtual; stdcall; abstract;
|
|
end;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCALLBACK_SEARCH_FLAGS:
|
|
// --------------------------
|
|
// Flags that can be passed into ID3DXAnimationSet::GetCallback.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXCallbackSearchFlags = ^TD3DXCallbackSearchFlags;
|
|
_D3DXCALLBACK_SEARCH_FLAGS = (
|
|
{$IFNDEF SUPPORTS_EXPL_ENUMS}
|
|
D3DXCALLBACK_SEARCH_invalid_0,
|
|
D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION {= $01}, // exclude callbacks at the initial position from the search
|
|
D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION {= $02} // reverse the callback search direction
|
|
{$ELSE}
|
|
D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION = $01, // exclude callbacks at the initial position from the search
|
|
D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION = $02 // reverse the callback search direction
|
|
{$ENDIF}
|
|
);
|
|
{$EXTERNALSYM _D3DXCALLBACK_SEARCH_FLAGS}
|
|
D3DXCALLBACK_SEARCH_FLAGS = _D3DXCALLBACK_SEARCH_FLAGS;
|
|
{$EXTERNALSYM D3DXCALLBACK_SEARCH_FLAGS}
|
|
TD3DXCallbackSearchFlags = _D3DXCALLBACK_SEARCH_FLAGS;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXAnimationSet:
|
|
// ------------------
|
|
// This interface implements an animation set.
|
|
//----------------------------------------------------------------------------
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXAnimationSet);'}
|
|
{$EXTERNALSYM ID3DXAnimationSet}
|
|
ID3DXAnimationSet = interface(IUnknown)
|
|
['{698CFB3F-9289-4d95-9A57-33A94B5A65F9}']
|
|
// Name
|
|
function GetName: PAnsiChar; stdcall;
|
|
|
|
// Period
|
|
function GetPeriod: Double; stdcall;
|
|
function GetPeriodicPosition(Position: Double): Double; stdcall; // Maps position into animation period
|
|
|
|
// Animation names
|
|
function GetNumAnimations: LongWord; stdcall;
|
|
function GetAnimationNameByIndex(Index: LongWord; out ppName: PAnsiChar): HResult; stdcall;
|
|
function GetAnimationIndexByName(pName: LPCSTR; out pIndex: LongWord): HResult; stdcall;
|
|
|
|
// SRT
|
|
//todo: Check for NULL
|
|
function GetSRT(
|
|
PeriodicPosition: Double; // Position mapped to period (use GetPeriodicPosition)
|
|
Animation: LongWord; // Animation index
|
|
pScale: PD3DXVector3; // Returns the scale
|
|
pRotation: PD3DXQuaternion; // Returns the rotation as a quaternion
|
|
pTranslation: PD3DXVector3 // Returns the translation
|
|
): HResult; stdcall;
|
|
|
|
// Callbacks
|
|
//todo: Check for NULL
|
|
function GetCallback(
|
|
Position: Double; // Position from which to find callbacks
|
|
Flags: DWORD; // Callback search flags
|
|
pCallbackPosition: PDouble; // Returns the position of the callback
|
|
ppCallbackData: Pointer // Returns the callback data pointer
|
|
): HResult; stdcall;
|
|
end;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXPLAYBACK_TYPE:
|
|
// ------------------
|
|
// This enum defines the type of animation set loop modes.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXPlaybackType = ^TD3DXPlaybackType;
|
|
_D3DXPLAYBACK_TYPE = (
|
|
D3DXPLAY_LOOP {= 0},
|
|
D3DXPLAY_ONCE {= 1},
|
|
D3DXPLAY_PINGPONG {= 2}
|
|
);
|
|
{$EXTERNALSYM _D3DXPLAYBACK_TYPE}
|
|
D3DXPLAYBACK_TYPE = _D3DXPLAYBACK_TYPE;
|
|
{$EXTERNALSYM D3DXPLAYBACK_TYPE}
|
|
TD3DXPlaybackType = _D3DXPLAYBACK_TYPE;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXKEY_VECTOR3:
|
|
// ----------------
|
|
// This structure describes a vector key for use in keyframe animation.
|
|
// It specifies a vector Value at a given Time. This is used for scale and
|
|
// translation keys.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXKeyVector3 = ^TD3DXKeyVector3;
|
|
_D3DXKEY_VECTOR3 = record
|
|
Time: Single;
|
|
Value: TD3DXVector3;
|
|
end;
|
|
{$EXTERNALSYM _D3DXKEY_VECTOR3}
|
|
D3DXKEY_VECTOR3 = _D3DXKEY_VECTOR3;
|
|
{$EXTERNALSYM D3DXKEY_VECTOR3}
|
|
TD3DXKeyVector3 = _D3DXKEY_VECTOR3;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXKEY_QUATERNION:
|
|
// -------------------
|
|
// This structure describes a quaternion key for use in keyframe animation.
|
|
// It specifies a quaternion Value at a given Time. This is used for rotation
|
|
// keys.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXKeyQuaternion = ^TD3DXKeyQuaternion;
|
|
_D3DXKEY_QUATERNION = record
|
|
Time: Single;
|
|
Value: TD3DXQuaternion;
|
|
end;
|
|
{$EXTERNALSYM _D3DXKEY_QUATERNION}
|
|
D3DXKEY_QUATERNION = _D3DXKEY_QUATERNION;
|
|
{$EXTERNALSYM D3DXKEY_QUATERNION}
|
|
TD3DXKeyQuaternion = _D3DXKEY_QUATERNION;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXKEY_CALLBACK:
|
|
// -----------------
|
|
// This structure describes an callback key for use in keyframe animation.
|
|
// It specifies a pointer to user data at a given Time.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXKeyCallback = ^TD3DXKeyCallback;
|
|
_D3DXKEY_CALLBACK = record
|
|
Time: Single;
|
|
pCallbackData: Pointer;
|
|
end;
|
|
{$EXTERNALSYM _D3DXKEY_CALLBACK}
|
|
D3DXKEY_CALLBACK = _D3DXKEY_CALLBACK;
|
|
{$EXTERNALSYM D3DXKEY_CALLBACK}
|
|
TD3DXKeyCallback = _D3DXKEY_CALLBACK;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCOMPRESSION_FLAGS:
|
|
// ----------------------
|
|
// Flags that can be passed into ID3DXKeyframedAnimationSet::Compress.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXCompressionFlags = ^TD3DXCompressionFlags;
|
|
_D3DXCOMPRESSION_FLAGS = (
|
|
D3DXCOMPRESS_DEFAULT {= 0x00}
|
|
//Clootie: Seems it is really removed...
|
|
(* D3DXCOMPRESS_DEFAULT {= 0x00}, // fast compression
|
|
D3DXCOMPRESS_STRONG {= 0x01} // slower compression with better results *)
|
|
);
|
|
{$EXTERNALSYM _D3DXCOMPRESSION_FLAGS}
|
|
D3DXCOMPRESSION_FLAGS = _D3DXCOMPRESSION_FLAGS;
|
|
{$EXTERNALSYM D3DXCOMPRESSION_FLAGS}
|
|
TD3DXCompressionFlags = _D3DXCOMPRESSION_FLAGS;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXKeyframedAnimationSet:
|
|
// ---------------------------
|
|
// This interface implements a compressable keyframed animation set.
|
|
//----------------------------------------------------------------------------
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXKeyframedAnimationSet);'}
|
|
{$EXTERNALSYM ID3DXKeyframedAnimationSet}
|
|
ID3DXKeyframedAnimationSet = interface(ID3DXAnimationSet)
|
|
['{FA4E8E3A-9786-407d-8B4C-5995893764AF}']
|
|
// Playback
|
|
function GetPlaybackType: TD3DXPlaybackType; stdcall;
|
|
function GetSourceTicksPerSecond: Double; stdcall;
|
|
|
|
// Scale keys
|
|
function GetNumScaleKeys(Animation: LongWord): LongWord; stdcall;
|
|
function GetScaleKeys(Animation: LongWord; pScaleKeys: PD3DXKeyVector3): HResult; stdcall;
|
|
function GetScaleKey(Animation, Key: LongWord; pScaleKey: PD3DXKeyVector3): HResult; stdcall;
|
|
function SetScaleKey(Animation, Key: LongWord; pScaleKey: PD3DXKeyVector3): HResult; stdcall;
|
|
|
|
// Rotation keys
|
|
function GetNumRotationKeys(Animation: LongWord): LongWord; stdcall;
|
|
function GetRotationKeys(Animation: LongWord; pRotationKeys: PD3DXKeyQuaternion): HResult; stdcall;
|
|
function GetRotationKey(Animation, Key: LongWord; pRotationKey: PD3DXKeyQuaternion): HResult; stdcall;
|
|
function SetRotationKey(Animation, Key: LongWord; pRotationKey: PD3DXKeyQuaternion): HResult; stdcall;
|
|
|
|
// Translation keys
|
|
function GetNumTranslationKeys(Animation: LongWord): LongWord; stdcall;
|
|
function GetTranslationKeys(Animation: LongWord; pTranslationKeys: PD3DXKeyVector3): HResult; stdcall;
|
|
function GetTranslationKey(Animation, Key: LongWord; pTranslationKey: PD3DXKeyVector3): HResult; stdcall;
|
|
function SetTranslationKey(Animation, Key: LongWord; pTranslationKey: PD3DXKeyVector3): HResult; stdcall;
|
|
|
|
// Callback keys
|
|
function GetNumCallbackKeys: LongWord; stdcall;
|
|
function GetCallbackKeys(pCallbackKeys: PD3DXKeyCallback): HResult; stdcall;
|
|
function GetCallbackKey(Key: LongWord; pCallbackKey: PD3DXKeyCallback): HResult; stdcall;
|
|
function SetCallbackKey(Key: LongWord; pCallbackKey: PD3DXKeyCallback): HResult; stdcall;
|
|
|
|
// Key removal methods. These are slow, and should not be used once the animation starts playing
|
|
function UnregisterScaleKey(Animation: LongWord; Key: LongWord): HResult; stdcall;
|
|
function UnregisterRotationKey(Animation: LongWord; Key: LongWord): HResult; stdcall;
|
|
function UnregisterTranslationKey(Animation: LongWord; Key: LongWord): HResult; stdcall;
|
|
|
|
// One-time animaton SRT keyframe registration
|
|
function RegisterAnimationSRTKeys(
|
|
pName: PAnsiChar; // Animation name
|
|
NumScaleKeys: LongWord; // Number of scale keys
|
|
NumRotationKeys: LongWord; // Number of rotation keys
|
|
NumTranslationKeys: LongWord; // Number of translation keys
|
|
pScaleKeys: PD3DXKeyVector3; // Array of scale keys
|
|
pRotationKeys: PD3DXKeyQuaternion; // Array of rotation keys
|
|
pTranslationKeys: PD3DXKeyVector3; // Array of translation keys
|
|
pAnimationIndex: PDWORD // Returns the animation index
|
|
): HResult; stdcall;
|
|
|
|
// Compression
|
|
function Compress(
|
|
Flags: DWORD; // Compression flags (use D3DXCOMPRESS_STRONG for better results)
|
|
Lossiness: Single; // Compression loss ratio in the [0, 1] range
|
|
pHierarchy: PD3DXFrame; // Frame hierarchy (optional)
|
|
out ppCompressedData: ID3DXBuffer // Returns the compressed animation set
|
|
): HResult; stdcall;
|
|
|
|
function UnregisterAnimation(Index: LongWord): HResult; stdcall;
|
|
end;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXCompressedAnimationSet:
|
|
// ----------------------------
|
|
// This interface implements a compressed keyframed animation set.
|
|
//----------------------------------------------------------------------------
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXCompressedAnimationSet);'}
|
|
{$EXTERNALSYM ID3DXCompressedAnimationSet}
|
|
ID3DXCompressedAnimationSet = interface(ID3DXAnimationSet)
|
|
['{6CC2480D-3808-4739-9F88-DE49FACD8D4C}']
|
|
// Playback
|
|
function GetPlaybackType: TD3DXPlaybackType; stdcall;
|
|
function GetSourceTicksPerSecond: Double; stdcall;
|
|
|
|
// Scale keys
|
|
function GetCompressedData(out ppCompressedData: ID3DXBuffer): HResult; stdcall;
|
|
|
|
// Callback keys
|
|
function GetNumCallbackKeys: LongWord; stdcall;
|
|
function GetCallbackKeys(pCallbackKeys: PD3DXKeyCallback): HResult; stdcall;
|
|
end;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXPRIORITY_TYPE:
|
|
// ------------------
|
|
// This enum defines the type of priority group that a track can be assigned to.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXPriorityType = ^TD3DXPriorityType;
|
|
_D3DXPRIORITY_TYPE = (
|
|
D3DXPRIORITY_LOW {= 0}, // This track should be blended with all low priority tracks before mixed with the high priority result
|
|
D3DXPRIORITY_HIGH {= 1} // This track should be blended with all high priority tracks before mixed with the low priority result
|
|
);
|
|
{$EXTERNALSYM _D3DXPRIORITY_TYPE}
|
|
D3DXPRIORITY_TYPE = _D3DXPRIORITY_TYPE;
|
|
{$EXTERNALSYM D3DXPRIORITY_TYPE}
|
|
TD3DXPriorityType = _D3DXPRIORITY_TYPE;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXTRACK_DESC:
|
|
// ---------------
|
|
// This structure describes the mixing information of an animation track.
|
|
// The mixing information consists of the current position, speed, and blending
|
|
// weight for the track. The Flags field also specifies whether the track is
|
|
// low or high priority. Tracks with the same priority are blended together
|
|
// and then the two resulting values are blended using the priority blend factor.
|
|
// A track also has an animation set (stored separately) associated with it.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXTrackDesc = ^TD3DXTrackDesc;
|
|
_D3DXTRACK_DESC = record
|
|
Priority: TD3DXPriorityType;
|
|
Weight: Single;
|
|
Speed: Single;
|
|
Position: Double;
|
|
Enable: BOOL;
|
|
end;
|
|
{$EXTERNALSYM _D3DXTRACK_DESC}
|
|
D3DXTRACK_DESC = _D3DXTRACK_DESC;
|
|
{$EXTERNALSYM D3DXTRACK_DESC}
|
|
TD3DXTrackDesc = _D3DXTRACK_DESC;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXEVENT_TYPE:
|
|
// ---------------
|
|
// This enum defines the type of events keyable via the animation controller.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXEventType = ^TD3DXEventType;
|
|
_D3DXEVENT_TYPE = (
|
|
D3DXEVENT_TRACKSPEED {= 0},
|
|
D3DXEVENT_TRACKWEIGHT {= 1},
|
|
D3DXEVENT_TRACKPOSITION {= 2},
|
|
D3DXEVENT_TRACKENABLE {= 3},
|
|
D3DXEVENT_PRIORITYBLEND {= 4}
|
|
);
|
|
{$EXTERNALSYM _D3DXEVENT_TYPE}
|
|
D3DXEVENT_TYPE = _D3DXEVENT_TYPE;
|
|
{$EXTERNALSYM D3DXEVENT_TYPE}
|
|
TD3DXEventType = _D3DXEVENT_TYPE;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXTRANSITION_TYPE:
|
|
// --------------------
|
|
// This enum defines the type of transtion performed on a event that
|
|
// transitions from one value to another.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXTransitionType = ^TD3DXTransitionType;
|
|
_D3DXTRANSITION_TYPE = (
|
|
D3DXTRANSITION_LINEAR {= 0x000}, // Linear transition from one value to the next
|
|
D3DXTRANSITION_EASEINEASEOUT {= 0x001} // Ease-In Ease-Out spline transtion from one value to the next
|
|
);
|
|
{$EXTERNALSYM _D3DXTRANSITION_TYPE}
|
|
D3DXTRANSITION_TYPE = _D3DXTRANSITION_TYPE;
|
|
{$EXTERNALSYM D3DXTRANSITION_TYPE}
|
|
TD3DXTransitionType = _D3DXTRANSITION_TYPE;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXEVENT_DESC:
|
|
// ---------------
|
|
// This structure describes a animation controller event.
|
|
// It gives the event's type, track (if the event is a track event), global
|
|
// start time, duration, transition method, and target value.
|
|
//----------------------------------------------------------------------------
|
|
PD3DXEventDesc = ^TD3DXEventDesc;
|
|
_D3DXEVENT_DESC = record
|
|
_Type: TD3DXEventType;
|
|
Track: LongWord;
|
|
StartTime: Double;
|
|
Duration: Double;
|
|
Transition: TD3DXTransitionType;
|
|
case Byte of
|
|
0: (Weight: Single);
|
|
1: (Speed: Single);
|
|
2: (Position: Double);
|
|
3: (Enable: BOOL);
|
|
end;
|
|
{$EXTERNALSYM _D3DXEVENT_DESC}
|
|
D3DXEVENT_DESC = _D3DXEVENT_DESC;
|
|
{$EXTERNALSYM D3DXEVENT_DESC}
|
|
TD3DXEventDesc = _D3DXEVENT_DESC;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXEVENTHANDLE:
|
|
// ----------------
|
|
// Handle values used to efficiently reference animation controller events.
|
|
//----------------------------------------------------------------------------
|
|
D3DXEVENTHANDLE = DWORD;
|
|
{$EXTERNALSYM D3DXEVENTHANDLE}
|
|
TD3DXEventHandle = D3DXEVENTHANDLE;
|
|
PD3DXEventHandle = ^TD3DXEventHandle;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXAnimationCallbackHandler:
|
|
// ------------------------------
|
|
// This interface is intended to be implemented by the application, and can
|
|
// be used to handle callbacks in animation sets generated when
|
|
// ID3DXAnimationController::AdvanceTime() is called.
|
|
//----------------------------------------------------------------------------
|
|
{$EXTERNALSYM ID3DXAnimationCallbackHandler}
|
|
ID3DXAnimationCallbackHandler = class
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXAnimationCallbackHandler::HandleCallback:
|
|
// ----------------------------------------------
|
|
// This method gets called when a callback occurs for an animation set in one
|
|
// of the tracks during the ID3DXAnimationController::AdvanceTime() call.
|
|
//
|
|
// Parameters:
|
|
// Track
|
|
// Index of the track on which the callback occured.
|
|
// pCallbackData
|
|
// Pointer to user owned callback data.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
function HandleCallback(Track: LongWord; pCallbackData: Pointer): HResult; virtual; stdcall; abstract;
|
|
end;
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ID3DXAnimationController:
|
|
// -------------------------
|
|
// This interface implements the main animation functionality. It connects
|
|
// animation sets with the transform frames that are being animated. Allows
|
|
// mixing multiple animations for blended animations or for transistions
|
|
// It adds also has methods to modify blending parameters over time to
|
|
// enable smooth transistions and other effects.
|
|
//----------------------------------------------------------------------------
|
|
{$HPPEMIT 'DECLARE_DINTERFACE_TYPE(ID3DXAnimationController);'}
|
|
{$EXTERNALSYM ID3DXAnimationController}
|
|
ID3DXAnimationController = interface(IUnknown)
|
|
['{AC8948EC-F86D-43e2-96DE-31FC35F96D9E}']
|
|
// Max sizes
|
|
function GetMaxNumAnimationOutputs: LongWord; stdcall;
|
|
function GetMaxNumAnimationSets: LongWord; stdcall;
|
|
function GetMaxNumTracks: LongWord; stdcall;
|
|
function GetMaxNumEvents: LongWord; stdcall;
|
|
|
|
// Animation output registration
|
|
function RegisterAnimationOutput(
|
|
pName: PAnsiChar;
|
|
pMatrix: PD3DXMatrix;
|
|
pScale: PD3DXVector3;
|
|
pRotation: PD3DXQuaternion;
|
|
pTranslation: PD3DXVector3): HResult; stdcall;
|
|
|
|
// Animation set registration
|
|
function RegisterAnimationSet(pAnimSet: ID3DXAnimationSet): HResult; stdcall;
|
|
function UnregisterAnimationSet(pAnimSet: ID3DXAnimationSet): HResult; stdcall;
|
|
|
|
function GetNumAnimationSets: LongWord; stdcall;
|
|
function GetAnimationSet(Index: LongWord; out ppAnimationSet: ID3DXAnimationSet): HResult; stdcall;
|
|
function GetAnimationSetByName(szName: PAnsiChar; out ppAnimationSet: ID3DXAnimationSet): HResult; stdcall;
|
|
|
|
// Global time
|
|
function AdvanceTime(TimeDelta: Double; pCallbackHandler: ID3DXAnimationCallbackHandler): HResult; stdcall;
|
|
function ResetTime: HResult; stdcall;
|
|
function GetTime: Double; stdcall;
|
|
|
|
// Tracks
|
|
function SetTrackAnimationSet(Track: LongWord; pAnimSet: ID3DXAnimationSet): HResult; stdcall;
|
|
function GetTrackAnimationSet(Track: LongWord; out ppAnimSet: ID3DXAnimationSet): HResult; stdcall;
|
|
|
|
function SetTrackPriority(Track: LongWord; Priority: TD3DXPriorityType): HResult; stdcall;
|
|
|
|
function SetTrackSpeed(Track: LongWord; Speed: Single): HResult; stdcall;
|
|
function SetTrackWeight(Track: LongWord; Weight: Single): HResult; stdcall;
|
|
function SetTrackPosition(Track: LongWord; Position: Double): HResult; stdcall;
|
|
function SetTrackEnable(Track: LongWord; Enable: BOOL): HResult; stdcall;
|
|
|
|
function SetTrackDesc(Track: LongWord; pDesc: PD3DXTrackDesc): HResult; stdcall;
|
|
function GetTrackDesc(Track: LongWord; pDesc: PD3DXTrackDesc): HResult; stdcall; //todo: Check for NULL
|
|
|
|
// Priority blending
|
|
function SetPriorityBlend(BlendWeight: Single): HResult; stdcall;
|
|
function GetPriorityBlend: Single; stdcall;
|
|
|
|
// Event keying
|
|
function KeyTrackSpeed(Track: LongWord; NewSpeed: Single; StartTime: Double; Duration: Double; Transition: TD3DXTransitionType): TD3DXEventHandle; stdcall;
|
|
function KeyTrackWeight(Track: LongWord; NewWeight: Single; StartTime: Double; Duration: Double; Transition: TD3DXTransitionType): TD3DXEventHandle; stdcall;
|
|
function KeyTrackPosition(Track: LongWord; NewPosition: Double; StartTime: Double): TD3DXEventHandle; stdcall;
|
|
function KeyTrackEnable(Track: LongWord; NewEnable: BOOL; StartTime: Double): TD3DXEventHandle; stdcall;
|
|
|
|
function KeyPriorityBlend(NewBlendWeight: Single; StartTime: Double; Duration: Double; Transition: TD3DXTransitionType): TD3DXEventHandle; stdcall;
|
|
|
|
// Event unkeying
|
|
function UnkeyEvent(hEvent: TD3DXEventHandle): HResult; stdcall;
|
|
|
|
function UnkeyAllTrackEvents(Track: LongWord): HResult; stdcall;
|
|
function UnkeyAllPriorityBlends: HResult; stdcall;
|
|
|
|
// Event enumeration
|
|
function GetCurrentTrackEvent(Track: LongWord; EventType: TD3DXEventType): TD3DXEventHandle; stdcall;
|
|
function GetCurrentPriorityBlend: TD3DXEventHandle; stdcall;
|
|
|
|
function GetUpcomingTrackEvent(Track: LongWord; hEvent: TD3DXEventHandle): TD3DXEventHandle; stdcall;
|
|
function GetUpcomingPriorityBlend(hEvent: TD3DXEventHandle): TD3DXEventHandle; stdcall;
|
|
|
|
function ValidateEvent(hEvent: TD3DXEventHandle): HResult; stdcall;
|
|
|
|
function GetEventDesc(hEvent: TD3DXEventHandle; pDesc: PD3DXEventDesc): HResult; stdcall; //todo: Check for NULL
|
|
|
|
// Cloning
|
|
function CloneAnimationController(
|
|
MaxNumAnimationOutputs: LongWord;
|
|
MaxNumAnimationSets: LongWord;
|
|
MaxNumTracks: LongWord;
|
|
MaxNumEvents: LongWord;
|
|
out ppAnimController: ID3DXAnimationController): HResult; stdcall;
|
|
end;
|
|
|
|
|
|
type
|
|
IID_ID3DXAnimationSet = ID3DXAnimationSet;
|
|
{$EXTERNALSYM IID_ID3DXAnimationSet}
|
|
IID_ID3DXKeyframedAnimationSet = ID3DXKeyframedAnimationSet;
|
|
{$EXTERNALSYM IID_ID3DXKeyframedAnimationSet}
|
|
IID_ID3DXCompressedAnimationSet = ID3DXCompressedAnimationSet;
|
|
{$EXTERNALSYM IID_ID3DXCompressedAnimationSet}
|
|
IID_ID3DXAnimationController = ID3DXAnimationController;
|
|
{$EXTERNALSYM IID_ID3DXAnimationController}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXLoadMeshHierarchyFromX:
|
|
// ---------------------------
|
|
// Loads the first frame hierarchy in a .X file.
|
|
//
|
|
// Parameters:
|
|
// Filename
|
|
// Name of the .X file
|
|
// MeshOptions
|
|
// Mesh creation options for meshes in the file (see d3dx9mesh.h)
|
|
// pD3DDevice
|
|
// D3D9 device on which meshes in the file are created in
|
|
// pAlloc
|
|
// Allocation interface used to allocate nodes of the frame hierarchy
|
|
// pUserDataLoader
|
|
// Application provided interface to allow loading of user data
|
|
// ppFrameHierarchy
|
|
// Returns root node pointer of the loaded frame hierarchy
|
|
// ppAnimController
|
|
// Returns pointer to an animation controller corresponding to animation
|
|
// in the .X file. This is created with default max tracks and events
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
function D3DXLoadMeshHierarchyFromXA(
|
|
Filename: PAnsiChar;
|
|
MeshOptions: DWORD;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
pAlloc: ID3DXAllocateHierarchy;
|
|
pUserDataLoader: ID3DXLoadUserData;
|
|
out ppFrameHierarchy: PD3DXFrame;
|
|
out ppAnimController: ID3DXAnimationController): HResult; stdcall; external d3dx9animDLL name 'D3DXLoadMeshHierarchyFromXA';
|
|
{$EXTERNALSYM D3DXLoadMeshHierarchyFromXA}
|
|
|
|
function D3DXLoadMeshHierarchyFromXW(
|
|
Filename: PWideChar;
|
|
MeshOptions: DWORD;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
pAlloc: ID3DXAllocateHierarchy;
|
|
pUserDataLoader: ID3DXLoadUserData;
|
|
out ppFrameHierarchy: PD3DXFrame;
|
|
out ppAnimController: ID3DXAnimationController): HResult; stdcall; external d3dx9animDLL name 'D3DXLoadMeshHierarchyFromXW';
|
|
{$EXTERNALSYM D3DXLoadMeshHierarchyFromXW}
|
|
|
|
function D3DXLoadMeshHierarchyFromX(
|
|
Filename: PChar;
|
|
MeshOptions: DWORD;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
pAlloc: ID3DXAllocateHierarchy;
|
|
pUserDataLoader: ID3DXLoadUserData;
|
|
out ppFrameHierarchy: PD3DXFrame;
|
|
out ppAnimController: ID3DXAnimationController): HResult; stdcall; external d3dx9animDLL name 'D3DXLoadMeshHierarchyFromXA';
|
|
{$EXTERNALSYM D3DXLoadMeshHierarchyFromX}
|
|
|
|
|
|
function D3DXLoadMeshHierarchyFromXInMemory(
|
|
Memory: Pointer;
|
|
SizeOfMemory: DWORD;
|
|
MeshOptions: DWORD;
|
|
pD3DDevice: IDirect3DDevice9;
|
|
pAlloc: ID3DXAllocateHierarchy;
|
|
pUserDataLoader: ID3DXLoadUserData;
|
|
out ppFrameHierarchy: PD3DXFrame;
|
|
out ppAnimController: ID3DXAnimationController): HResult; stdcall; external d3dx9animDLL;
|
|
{$EXTERNALSYM D3DXLoadMeshHierarchyFromXInMemory}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXSaveMeshHierarchyToFile:
|
|
// ----------------------------
|
|
// Creates a .X file and saves the mesh hierarchy and corresponding animations
|
|
// in it
|
|
//
|
|
// Parameters:
|
|
// Filename
|
|
// Name of the .X file
|
|
// XFormat
|
|
// Format of the .X file (text or binary, compressed or not, etc)
|
|
// pFrameRoot
|
|
// Root node of the hierarchy to be saved
|
|
// pAnimController
|
|
// The animation controller whose animation sets are to be stored
|
|
// pUserDataSaver
|
|
// Application provided interface to allow adding of user data to
|
|
// data objects saved to .X file
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
function D3DXSaveMeshHierarchyToFileA(
|
|
Filename: PAnsiChar;
|
|
XFormat: TD3DXFFileFormat;
|
|
pFrameRoot: PD3DXFrame;
|
|
pAnimcontroller: ID3DXAnimationController;
|
|
pUserDataSaver: ID3DXSaveUserData): HResult; stdcall; external d3dx9animDLL name 'D3DXSaveMeshHierarchyToFileA';
|
|
{$EXTERNALSYM D3DXSaveMeshHierarchyToFileA}
|
|
|
|
function D3DXSaveMeshHierarchyToFileW(
|
|
Filename: PWideChar;
|
|
XFormat: TD3DXFFileFormat;
|
|
pFrameRoot: PD3DXFrame;
|
|
pAnimcontroller: ID3DXAnimationController;
|
|
pUserDataSaver: ID3DXSaveUserData): HResult; stdcall; external d3dx9animDLL name 'D3DXSaveMeshHierarchyToFileW';
|
|
{$EXTERNALSYM D3DXSaveMeshHierarchyToFileW}
|
|
|
|
function D3DXSaveMeshHierarchyToFile(
|
|
Filename: PChar;
|
|
XFormat: TD3DXFFileFormat;
|
|
pFrameRoot: PD3DXFrame;
|
|
pAnimcontroller: ID3DXAnimationController;
|
|
pUserDataSaver: ID3DXSaveUserData): HResult; stdcall; external d3dx9animDLL name 'D3DXSaveMeshHierarchyToFileA';
|
|
{$EXTERNALSYM D3DXSaveMeshHierarchyToFile}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFrameDestroy:
|
|
// -----------------
|
|
// Destroys the subtree of frames under the root, including the root
|
|
//
|
|
// Parameters:
|
|
// pFrameRoot
|
|
// Pointer to the root node
|
|
// pAlloc
|
|
// Allocation interface used to de-allocate nodes of the frame hierarchy
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
function D3DXFrameDestroy(
|
|
pFrameRoot: PD3DXFrame;
|
|
pAlloc: ID3DXAllocateHierarchy): HResult; stdcall; external d3dx9animDLL;
|
|
{$EXTERNALSYM D3DXFrameDestroy}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFrameAppendChild:
|
|
// ---------------------
|
|
// Add a child frame to a frame
|
|
//
|
|
// Parameters:
|
|
// pFrameParent
|
|
// Pointer to the parent node
|
|
// pFrameChild
|
|
// Pointer to the child node
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
function D3DXFrameAppendChild(
|
|
pFrameParent: PD3DXFrame;
|
|
pFrameChild: PD3DXFrame): HResult; stdcall; external d3dx9animDLL;
|
|
{$EXTERNALSYM D3DXFrameAppendChild}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFrameFind:
|
|
// --------------
|
|
// Finds a frame with the given name. Returns NULL if no frame found.
|
|
//
|
|
// Parameters:
|
|
// pFrameRoot
|
|
// Pointer to the root node
|
|
// Name
|
|
// Name of frame to find
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
function D3DXFrameFind(
|
|
pFrameRoot: PD3DXFrame;
|
|
Name: PAnsiChar): PD3DXFrame; stdcall; external d3dx9animDLL;
|
|
{$EXTERNALSYM D3DXFrameFind}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFrameRegisterNamedMatrices:
|
|
// -------------------------------
|
|
// Finds all frames that have non-null names and registers each of those frame
|
|
// matrices to the given animation controller
|
|
//
|
|
// Parameters:
|
|
// pFrameRoot
|
|
// Pointer to the root node
|
|
// pAnimController
|
|
// Pointer to the animation controller where the matrices are registered
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
function D3DXFrameRegisterNamedMatrices(
|
|
pFrameRoot: PD3DXFrame;
|
|
pAnimController: ID3DXAnimationController): HResult; stdcall; external d3dx9animDLL;
|
|
{$EXTERNALSYM D3DXFrameRegisterNamedMatrices}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFrameNumNamedMatrices:
|
|
// --------------------------
|
|
// Counts number of frames in a subtree that have non-null names
|
|
//
|
|
// Parameters:
|
|
// pFrameRoot
|
|
// Pointer to the root node of the subtree
|
|
// Return Value:
|
|
// Count of frames
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
function D3DXFrameNumNamedMatrices(
|
|
pFrameRoot: PD3DXFrame): HResult; stdcall; external d3dx9animDLL;
|
|
{$EXTERNALSYM D3DXFrameNumNamedMatrices}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXFrameCalculateBoundingSphere:
|
|
// ---------------------------------
|
|
// Computes the bounding sphere of all the meshes in the frame hierarchy.
|
|
//
|
|
// Parameters:
|
|
// pFrameRoot
|
|
// Pointer to the root node
|
|
// pObjectCenter
|
|
// Returns the center of the bounding sphere
|
|
// pObjectRadius
|
|
// Returns the radius of the bounding sphere
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
function D3DXFrameCalculateBoundingSphere(
|
|
pFrameRoot: PD3DXFrame;
|
|
out pObjectCenter: TD3DXVector3;
|
|
out pObjectRadius: Single): HResult; stdcall; external d3dx9animDLL;
|
|
{$EXTERNALSYM D3DXFrameCalculateBoundingSphere}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCreateKeyframedAnimationSet:
|
|
// --------------------------------
|
|
// This function creates a compressable keyframed animations set interface.
|
|
//
|
|
// Parameters:
|
|
// pName
|
|
// Name of the animation set
|
|
// TicksPerSecond
|
|
// Number of keyframe ticks that elapse per second
|
|
// Playback
|
|
// Playback mode of keyframe looping
|
|
// NumAnimations
|
|
// Number of SRT animations
|
|
// NumCallbackKeys
|
|
// Number of callback keys
|
|
// pCallbackKeys
|
|
// Array of callback keys
|
|
// ppAnimationSet
|
|
// Returns the animation set interface
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
function D3DXCreateKeyframedAnimationSet(
|
|
pName: PAnsiChar;
|
|
TicksPerSecond: Double;
|
|
Playback: TD3DXPlaybackType;
|
|
NumAnimations: LongWord;
|
|
NumCallbackKeys: LongWord;
|
|
pCallbackKeys: PD3DXKeyCallback;
|
|
out ppAnimationSet: ID3DXKeyframedAnimationSet): HResult; stdcall; external d3dx9animDLL;
|
|
{$EXTERNALSYM D3DXCreateKeyframedAnimationSet}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCreateCompressedAnimationSet:
|
|
// --------------------------------
|
|
// This function creates a compressed animations set interface from
|
|
// compressed data.
|
|
//
|
|
// Parameters:
|
|
// pName
|
|
// Name of the animation set
|
|
// TicksPerSecond
|
|
// Number of keyframe ticks that elapse per second
|
|
// Playback
|
|
// Playback mode of keyframe looping
|
|
// pCompressedData
|
|
// Compressed animation SRT data
|
|
// NumCallbackKeys
|
|
// Number of callback keys
|
|
// pCallbackKeys
|
|
// Array of callback keys
|
|
// ppAnimationSet
|
|
// Returns the animation set interface
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
function D3DXCreateCompressedAnimationSet(
|
|
pName: PAnsiChar;
|
|
TicksPerSecond: Double;
|
|
Playback: TD3DXPlaybackType;
|
|
pCompressedData: ID3DXBuffer;
|
|
NumCallbackKeys: LongWord;
|
|
pCallbackKeys: PD3DXKeyCallback;
|
|
out ppAnimationSet: ID3DXCompressedAnimationSet): HResult; stdcall; external d3dx9animDLL;
|
|
{$EXTERNALSYM D3DXCreateCompressedAnimationSet}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXCreateAnimationController:
|
|
// ------------------------------
|
|
// This function creates an animation controller object.
|
|
//
|
|
// Parameters:
|
|
// MaxNumMatrices
|
|
// Maximum number of matrices that can be animated
|
|
// MaxNumAnimationSets
|
|
// Maximum number of animation sets that can be played
|
|
// MaxNumTracks
|
|
// Maximum number of animation sets that can be blended
|
|
// MaxNumEvents
|
|
// Maximum number of outstanding events that can be scheduled at any given time
|
|
// ppAnimController
|
|
// Returns the animation controller interface
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
function D3DXCreateAnimationController(
|
|
MaxNumMatrices: LongWord;
|
|
MaxNumAnimationSets: LongWord;
|
|
MaxNumTracks: LongWord;
|
|
MaxNumEvents: LongWord;
|
|
out ppAnimController: ID3DXAnimationController): HResult; stdcall; external d3dx9animDLL;
|
|
{$EXTERNALSYM D3DXCreateAnimationController}
|
|
|
|
|
|
|
|
|
|
|
|
(*$HPPEMIT '} /* namespace D3dx9 */' *)
|
|
|
|
//***************************************************************************//
|
|
//***************************************************************************//
|
|
//***************************************************************************//
|
|
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;
|
|
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// 16 bit floating point numbers
|
|
//
|
|
//===========================================================================
|
|
|
|
function D3DXFloat16(value: Single): TD3DXFloat16;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
D3DXFloat32To16Array(@Result, @value, 1);
|
|
end;
|
|
|
|
function D3DXFloat16Equal(const v1, v2: TD3DXFloat16): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
Result:= (v1.value = v2.value);
|
|
end;
|
|
|
|
function D3DXFloat16ToFloat(value: TD3DXFloat16): Single;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
D3DXFloat16To32Array(@Result, @value, 1);
|
|
end;
|
|
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// Vectors
|
|
//
|
|
//===========================================================================
|
|
|
|
//--------------------------
|
|
// 2D Vector
|
|
//--------------------------
|
|
|
|
function D3DXVector2(_x, _y: Single): TD3DXVector2;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
Result.x:= _x; Result.y:= _y;
|
|
end;
|
|
|
|
function D3DXVector2Equal(const v1, v2: TD3DXVector2): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
Result:= (v1.x = v2.x) and (v1.y = v2.y);
|
|
end;
|
|
|
|
|
|
//--------------------------
|
|
// 2D Vector (16 bit)
|
|
//--------------------------
|
|
function D3DXVector2_16F(_x, _y: TD3DXFloat16): TD3DXVector2_16F;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
with Result do
|
|
begin
|
|
x:= _x;
|
|
y:= _y;
|
|
end;
|
|
end;
|
|
|
|
function D3DXVector2_16fEqual(const v1, v2: TD3DXVector2_16F): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
Result:= (DWORD(v1) = DWORD(v2));
|
|
end;
|
|
|
|
function D3DXVector2_16fFromVector2(const v: TD3DXVector2): TD3DXVector2_16f;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
D3DXFloat32To16Array(@Result.x, @v.x, 2);
|
|
end;
|
|
|
|
function D3DXVector2FromVector2_16f(const v: TD3DXVector2_16f): TD3DXVector2;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
D3DXFloat16To32Array(@Result.x, @v.x, 2);
|
|
end;
|
|
|
|
|
|
//--------------------------
|
|
// 3D Vector
|
|
//--------------------------
|
|
|
|
function D3DXVector3(_x, _y, _z: Single): TD3DXVector3;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
with Result do
|
|
begin
|
|
x:= _x; y:= _y; z:=_z;
|
|
end;
|
|
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;
|
|
|
|
|
|
//--------------------------
|
|
// 3D Vector (16 bit)
|
|
//--------------------------
|
|
|
|
function D3DXVector3_16F(_x, _y, _z: TD3DXFloat16): TD3DXVector3_16F;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
with Result do
|
|
begin
|
|
x:= _x; y:= _y; z:= _z;
|
|
end;
|
|
end;
|
|
|
|
function D3DXVector3_16fEqual(const v1, v2: TD3DXVector3_16F): Boolean;
|
|
begin
|
|
Result:= (PDWORD(@v1.x)^ = PDWORD(@v2.x)^) and
|
|
(Word (v1.z) = Word (v2.z));
|
|
end;
|
|
|
|
function D3DXVector3_16fFromVector3(const v: TD3DXVector3): TD3DXVector3_16f;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
D3DXFloat32To16Array(@Result.x, @v.x, 3);
|
|
end;
|
|
|
|
function D3DXVector3FromVector3_16f(const v: TD3DXVector3_16f): TD3DXVector3;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
D3DXFloat16To32Array(@Result.x, @v.x, 3);
|
|
end;
|
|
|
|
|
|
//--------------------------
|
|
// 4D Vector
|
|
//--------------------------
|
|
|
|
function D3DXVector4(_x, _y, _z, _w: Single): TD3DXVector4;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
with Result do
|
|
begin
|
|
x:= _x; y:= _y; z:= _z; w:= _w;
|
|
end;
|
|
end;
|
|
|
|
function D3DXVector4(xyz: TD3DXVector3; _w: Single): TD3DXVector4;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
with Result do
|
|
begin
|
|
x:= xyz.x; y:= xyz.y; z:= xyz.z; w:= _w;
|
|
end;
|
|
end;
|
|
|
|
function D3DXVector4Equal(const v1, v2: TD3DXVector4): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
Result:= (v1.x = v2.x) and (v1.y = v2.y) and
|
|
(v1.z = v2.z) and (v1.w = v2.w);
|
|
end;
|
|
|
|
|
|
//--------------------------
|
|
// 4D Vector (16 bit)
|
|
//--------------------------
|
|
function D3DXVector4_16F(_x, _y, _z, _w: TD3DXFloat16): TD3DXVector4_16F;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
with Result do
|
|
begin
|
|
x:= _x; y:= _y; z:= _z; w:= _w;
|
|
end;
|
|
end;
|
|
|
|
function D3DXVector4_16F(xyz: TD3DXVector3_16f; _w: TD3DXFloat16): TD3DXVector4_16F;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
with Result do
|
|
begin
|
|
x:= xyz.x; y:= xyz.y; z:= xyz.z; w:= _w;
|
|
end;
|
|
end;
|
|
|
|
function D3DXVector4_16fEqual(const v1, v2: TD3DXVector4_16F): Boolean;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
Result:= (PDWORD(@v1.x)^ = PDWORD(@v2.x)^) and
|
|
(PDWORD(@v1.z)^ = PDWORD(@v2.z)^);
|
|
end;
|
|
|
|
function D3DXVector4_16fFromVector4(const v: TD3DXVector4): TD3DXVector4_16f;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
D3DXFloat32To16Array(@Result.x, @v.x, 4);
|
|
end;
|
|
|
|
function D3DXVector4FromVector4_16f(const v: TD3DXVector4_16f): TD3DXVector4;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
D3DXFloat16To32Array(@Result.x, @v.x, 4);
|
|
end;
|
|
|
|
|
|
//--------------------------
|
|
// 4D Matrix
|
|
//--------------------------
|
|
function D3DXMatrix(
|
|
_m00, _m01, _m02, _m03,
|
|
_m10, _m11, _m12, _m13,
|
|
_m20, _m21, _m22, _m23,
|
|
_m30, _m31, _m32, _m33: Single): TD3DXMatrix;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
with Result do
|
|
begin
|
|
x:= _x; y:= _y; z:= _z; w:= _w;
|
|
end;
|
|
end;
|
|
|
|
function D3DXQuaternionAdd(const q1, q2: TD3DXQuaternion): TD3DXQuaternion;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
with Result do
|
|
begin
|
|
r:= _r; g:= _g; b:= _b; a:= _a;
|
|
end;
|
|
end;
|
|
|
|
function D3DXColorToDWord(c: TD3DXColor): DWord;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
var
|
|
dwR, dwG, dwB, dwA: DWORD;
|
|
begin
|
|
if c.r > 1.0 then dwR:= 255 else if c.r < 0 then dwR:= 0 else dwR:= DWORD(Trunc(c.r * 255.0 + 0.5));
|
|
if c.g > 1.0 then dwG:= 255 else if c.g < 0 then dwG:= 0 else dwG:= DWORD(Trunc(c.g * 255.0 + 0.5));
|
|
if c.b > 1.0 then dwB:= 255 else if c.b < 0 then dwB:= 0 else dwB:= DWORD(Trunc(c.b * 255.0 + 0.5));
|
|
if c.a > 1.0 then dwA:= 255 else if c.a < 0 then dwA:= 0 else dwA:= DWORD(Trunc(c.a * 255.0 + 0.5));
|
|
|
|
Result:= (dwA shl 24) or (dwR shl 16) or (dwG shl 8) or dwB;
|
|
end;
|
|
|
|
function D3DXColorFromDWord(c: DWord): TD3DXColor;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
var
|
|
f: Single; // = 1/255; //Clootie: Changed from CONST due to Delphi9 inline bug
|
|
begin
|
|
f:= (1/255);
|
|
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;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
Result.x:= v1.x + v2.x;
|
|
Result.y:= v1.y + v2.y;
|
|
end;
|
|
|
|
function D3DXVec2Subtract(const v1, v2: TD3DXVector2): TD3DXVector2;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
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.x:= 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.x:= 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;
|
|
|
|
function D3DXPlaneScale(out pOut: TD3DXPlane; const pP: TD3DXPlane; s: Single): PD3DXPlane;
|
|
begin
|
|
pOut.a := pP.a * s;
|
|
pOut.b := pP.b * s;
|
|
pOut.c := pP.c * s;
|
|
pOut.d := pP.d * s;
|
|
Result := @pOut;
|
|
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: d3dx9tex.h
|
|
// Content: D3DX texturing APIs
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
// #define D3DX_SKIP_DDS_MIP_LEVELS(levels, filter) ((((levels) & D3DX_SKIP_DDS_MIP_LEVELS_MASK) << D3DX_SKIP_DDS_MIP_LEVELS_SHIFT) | ((filter) == D3DX_DEFAULT ? D3DX_FILTER_BOX : (filter)))
|
|
function D3DX_SKIP_DDS_MIP_LEVELS(levels, filter: DWORD): DWORD;{$IFDEF ALLOW_INLINE} inline;{$ENDIF}
|
|
begin
|
|
if (filter = D3DX_DEFAULT) then filter := D3DX_FILTER_BOX;
|
|
Result := ((levels and D3DX_SKIP_DDS_MIP_LEVELS_MASK) shl D3DX_SKIP_DDS_MIP_LEVELS_SHIFT) or filter;
|
|
end;
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// File: d3dx9shader.h
|
|
// Content: D3DX Shader APIs
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// D3DXTX_VERSION:
|
|
// --------------
|
|
// Version token used to create a procedural texture filler in effects
|
|
// Used by D3DXFill[]TX functions
|
|
//---------------------------------------------------------------------------
|
|
// #define D3DXTX_VERSION(_Major,_Minor) (('T' << 24) | ('X' << 16) | ((_Major) << 8) | (_Minor))
|
|
function D3DXTX_VERSION(_Major, _Minor: Byte): DWORD;
|
|
begin
|
|
Result := (Ord('T') shl 24) or (Ord('X') shl 16) or (_Major shl 8) or (_Minor);
|
|
end;
|
|
|
|
|
|
end.
|