1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114 |
- //////////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) Microsoft Corporation. All Rights Reserved.
- //
- // File: d3dx9anim.h
- // Content: D3DX mesh types and functions
- //
- //////////////////////////////////////////////////////////////////////////////
- #ifndef __D3DX9ANIM_H__
- #define __D3DX9ANIM_H__
- // {698CFB3F-9289-4d95-9A57-33A94B5A65F9}
- DEFINE_GUID(IID_ID3DXAnimationSet,
- 0x698cfb3f, 0x9289, 0x4d95, 0x9a, 0x57, 0x33, 0xa9, 0x4b, 0x5a, 0x65, 0xf9);
- // {FA4E8E3A-9786-407d-8B4C-5995893764AF}
- DEFINE_GUID(IID_ID3DXKeyframedAnimationSet,
- 0xfa4e8e3a, 0x9786, 0x407d, 0x8b, 0x4c, 0x59, 0x95, 0x89, 0x37, 0x64, 0xaf);
- // {6CC2480D-3808-4739-9F88-DE49FACD8D4C}
- DEFINE_GUID(IID_ID3DXCompressedAnimationSet,
- 0x6cc2480d, 0x3808, 0x4739, 0x9f, 0x88, 0xde, 0x49, 0xfa, 0xcd, 0x8d, 0x4c);
- // {AC8948EC-F86D-43e2-96DE-31FC35F96D9E}
- DEFINE_GUID(IID_ID3DXAnimationController,
- 0xac8948ec, 0xf86d, 0x43e2, 0x96, 0xde, 0x31, 0xfc, 0x35, 0xf9, 0x6d, 0x9e);
- //----------------------------------------------------------------------------
- // D3DXMESHDATATYPE:
- // -----------------
- // This enum defines the type of mesh data present in a MeshData structure.
- //----------------------------------------------------------------------------
- typedef enum _D3DXMESHDATATYPE {
- D3DXMESHTYPE_MESH = 0x001, // Normal ID3DXMesh data
- D3DXMESHTYPE_PMESH = 0x002, // Progressive Mesh - ID3DXPMesh
- D3DXMESHTYPE_PATCHMESH = 0x003, // Patch Mesh - ID3DXPatchMesh
- D3DXMESHTYPE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
- } 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.
- //----------------------------------------------------------------------------
- typedef struct _D3DXMESHDATA
- {
- D3DXMESHDATATYPE Type;
- // current mesh data interface
- union
- {
- LPD3DXMESH pMesh;
- LPD3DXPMESH pPMesh;
- LPD3DXPATCHMESH pPatchMesh;
- };
- } D3DXMESHDATA, *LPD3DXMESHDATA;
- //----------------------------------------------------------------------------
- // 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.
- //----------------------------------------------------------------------------
- typedef struct _D3DXMESHCONTAINER
- {
- LPSTR Name;
- D3DXMESHDATA MeshData;
- LPD3DXMATERIAL pMaterials;
- LPD3DXEFFECTINSTANCE pEffects;
- DWORD NumMaterials;
- DWORD *pAdjacency;
- LPD3DXSKININFO pSkinInfo;
- struct _D3DXMESHCONTAINER *pNextMeshContainer;
- } D3DXMESHCONTAINER, *LPD3DXMESHCONTAINER;
- //----------------------------------------------------------------------------
- // 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
- //----------------------------------------------------------------------------
- typedef struct _D3DXFRAME
- {
- LPSTR Name;
- D3DXMATRIX TransformationMatrix;
- LPD3DXMESHCONTAINER pMeshContainer;
- struct _D3DXFRAME *pFrameSibling;
- struct _D3DXFRAME *pFrameFirstChild;
- } D3DXFRAME, *LPD3DXFRAME;
- //----------------------------------------------------------------------------
- // 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
- //----------------------------------------------------------------------------
- typedef interface ID3DXAllocateHierarchy ID3DXAllocateHierarchy;
- typedef interface ID3DXAllocateHierarchy *LPD3DXALLOCATEHIERARCHY;
- #undef INTERFACE
- #define INTERFACE ID3DXAllocateHierarchy
- DECLARE_INTERFACE(ID3DXAllocateHierarchy)
- {
- // ID3DXAllocateHierarchy
- //------------------------------------------------------------------------
- // CreateFrame:
- // ------------
- // Requests allocation of a frame object.
- //
- // Parameters:
- // Name
- // Name of the frame to be created
- // ppNewFrame
- // Returns the created frame object
- //
- //------------------------------------------------------------------------
- STDMETHOD(CreateFrame)(THIS_ LPCSTR Name,
- LPD3DXFRAME *ppNewFrame) PURE;
- //------------------------------------------------------------------------
- // 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.
- //
- //------------------------------------------------------------------------
- STDMETHOD(CreateMeshContainer)(THIS_
- LPCSTR Name,
- CONST D3DXMESHDATA *pMeshData,
- CONST D3DXMATERIAL *pMaterials,
- CONST D3DXEFFECTINSTANCE *pEffectInstances,
- DWORD NumMaterials,
- CONST DWORD *pAdjacency,
- LPD3DXSKININFO pSkinInfo,
- LPD3DXMESHCONTAINER *ppNewMeshContainer) PURE;
- //------------------------------------------------------------------------
- // DestroyFrame:
- // -------------
- // Requests de-allocation of a frame object.
- //
- // Parameters:
- // pFrameToFree
- // Pointer to the frame to be de-allocated
- //
- //------------------------------------------------------------------------
- STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME pFrameToFree) PURE;
- //------------------------------------------------------------------------
- // DestroyMeshContainer:
- // ---------------------
- // Requests de-allocation of a mesh container object.
- //
- // Parameters:
- // pMeshContainerToFree
- // Pointer to the mesh container object to be de-allocated
- //
- //------------------------------------------------------------------------
- STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER pMeshContainerToFree) PURE;
- };
- //----------------------------------------------------------------------------
- // 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.
- //----------------------------------------------------------------------------
- typedef interface ID3DXLoadUserData ID3DXLoadUserData;
- typedef interface ID3DXLoadUserData *LPD3DXLOADUSERDATA;
- #undef INTERFACE
- #define INTERFACE ID3DXLoadUserData
- DECLARE_INTERFACE(ID3DXLoadUserData)
- {
- STDMETHOD(LoadTopLevelData)(LPD3DXFILEDATA pXofChildData) PURE;
-
- STDMETHOD(LoadFrameChildData)(LPD3DXFRAME pFrame,
- LPD3DXFILEDATA pXofChildData) PURE;
-
- STDMETHOD(LoadMeshChildData)(LPD3DXMESHCONTAINER pMeshContainer,
- LPD3DXFILEDATA pXofChildData) PURE;
- };
- //----------------------------------------------------------------------------
- // 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.
- //----------------------------------------------------------------------------
- typedef interface ID3DXSaveUserData ID3DXSaveUserData;
- typedef interface ID3DXSaveUserData *LPD3DXSAVEUSERDATA;
- #undef INTERFACE
- #define INTERFACE ID3DXSaveUserData
- DECLARE_INTERFACE(ID3DXSaveUserData)
- {
- STDMETHOD(AddFrameChildData)(CONST D3DXFRAME *pFrame,
- LPD3DXFILESAVEOBJECT pXofSave,
- LPD3DXFILESAVEDATA pXofFrameData) PURE;
-
- STDMETHOD(AddMeshChildData)(CONST D3DXMESHCONTAINER *pMeshContainer,
- LPD3DXFILESAVEOBJECT pXofSave,
- LPD3DXFILESAVEDATA pXofMeshData) PURE;
-
- // 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
- STDMETHOD(AddTopLevelDataObjectsPre)(LPD3DXFILESAVEOBJECT pXofSave) PURE;
- STDMETHOD(AddTopLevelDataObjectsPost)(LPD3DXFILESAVEOBJECT pXofSave) PURE;
- // callbacks for the user to register and then save templates to the XFile
- STDMETHOD(RegisterTemplates)(LPD3DXFILE pXFileApi) PURE;
- STDMETHOD(SaveTemplates)(LPD3DXFILESAVEOBJECT pXofSave) PURE;
- };
- //----------------------------------------------------------------------------
- // D3DXCALLBACK_SEARCH_FLAGS:
- // --------------------------
- // Flags that can be passed into ID3DXAnimationSet::GetCallback.
- //----------------------------------------------------------------------------
- typedef enum _D3DXCALLBACK_SEARCH_FLAGS
- {
- D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION = 0x01, // exclude callbacks at the initial position from the search
- D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION = 0x02, // reverse the callback search direction
- D3DXCALLBACK_SEARCH_FORCE_DWORD = 0x7fffffff,
- } D3DXCALLBACK_SEARCH_FLAGS;
- //----------------------------------------------------------------------------
- // ID3DXAnimationSet:
- // ------------------
- // This interface implements an animation set.
- //----------------------------------------------------------------------------
- typedef interface ID3DXAnimationSet ID3DXAnimationSet;
- typedef interface ID3DXAnimationSet *LPD3DXANIMATIONSET;
- #undef INTERFACE
- #define INTERFACE ID3DXAnimationSet
- DECLARE_INTERFACE_(ID3DXAnimationSet, IUnknown)
- {
- // IUnknown
- STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
- STDMETHOD_(ULONG, AddRef)(THIS) PURE;
- STDMETHOD_(ULONG, Release)(THIS) PURE;
- // Name
- STDMETHOD_(LPCSTR, GetName)(THIS) PURE;
- // Period
- STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;
- STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE Position) PURE; // Maps position into animation period
- // Animation names
- STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;
- STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT Index, LPCSTR *ppName) PURE;
- STDMETHOD(GetAnimationIndexByName)(THIS_ LPCSTR pName, UINT *pIndex) PURE;
- // SRT
- STDMETHOD(GetSRT)(THIS_
- DOUBLE PeriodicPosition, // Position mapped to period (use GetPeriodicPosition)
- UINT Animation, // Animation index
- D3DXVECTOR3 *pScale, // Returns the scale
- D3DXQUATERNION *pRotation, // Returns the rotation as a quaternion
- D3DXVECTOR3 *pTranslation) PURE; // Returns the translation
- // Callbacks
- STDMETHOD(GetCallback)(THIS_
- DOUBLE Position, // Position from which to find callbacks
- DWORD Flags, // Callback search flags
- DOUBLE *pCallbackPosition, // Returns the position of the callback
- LPVOID *ppCallbackData) PURE; // Returns the callback data pointer
- };
- //----------------------------------------------------------------------------
- // D3DXPLAYBACK_TYPE:
- // ------------------
- // This enum defines the type of animation set loop modes.
- //----------------------------------------------------------------------------
- typedef enum _D3DXPLAYBACK_TYPE
- {
- D3DXPLAY_LOOP = 0,
- D3DXPLAY_ONCE = 1,
- D3DXPLAY_PINGPONG = 2,
- D3DXPLAY_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
- } 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.
- //----------------------------------------------------------------------------
- typedef struct _D3DXKEY_VECTOR3
- {
- FLOAT Time;
- D3DXVECTOR3 Value;
- } D3DXKEY_VECTOR3, *LPD3DXKEY_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.
- //----------------------------------------------------------------------------
- typedef struct _D3DXKEY_QUATERNION
- {
- FLOAT Time;
- D3DXQUATERNION Value;
- } D3DXKEY_QUATERNION, *LPD3DXKEY_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.
- //----------------------------------------------------------------------------
- typedef struct _D3DXKEY_CALLBACK
- {
- FLOAT Time;
- LPVOID pCallbackData;
- } D3DXKEY_CALLBACK, *LPD3DXKEY_CALLBACK;
- //----------------------------------------------------------------------------
- // D3DXCOMPRESSION_FLAGS:
- // ----------------------
- // Flags that can be passed into ID3DXKeyframedAnimationSet::Compress.
- //----------------------------------------------------------------------------
- typedef enum _D3DXCOMPRESSION_FLAGS
- {
- D3DXCOMPRESS_DEFAULT = 0x00,
- D3DXCOMPRESS_FORCE_DWORD = 0x7fffffff,
- } D3DXCOMPRESSION_FLAGS;
- //----------------------------------------------------------------------------
- // ID3DXKeyframedAnimationSet:
- // ---------------------------
- // This interface implements a compressable keyframed animation set.
- //----------------------------------------------------------------------------
- typedef interface ID3DXKeyframedAnimationSet ID3DXKeyframedAnimationSet;
- typedef interface ID3DXKeyframedAnimationSet *LPD3DXKEYFRAMEDANIMATIONSET;
- #undef INTERFACE
- #define INTERFACE ID3DXKeyframedAnimationSet
- DECLARE_INTERFACE_(ID3DXKeyframedAnimationSet, ID3DXAnimationSet)
- {
- // ID3DXAnimationSet
- STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
- STDMETHOD_(ULONG, AddRef)(THIS) PURE;
- STDMETHOD_(ULONG, Release)(THIS) PURE;
- // Name
- STDMETHOD_(LPCSTR, GetName)(THIS) PURE;
- // Period
- STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;
- STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE Position) PURE; // Maps position into animation period
- // Animation names
- STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;
- STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT Index, LPCSTR *ppName) PURE;
- STDMETHOD(GetAnimationIndexByName)(THIS_ LPCSTR pName, UINT *pIndex) PURE;
- // SRT
- STDMETHOD(GetSRT)(THIS_
- DOUBLE PeriodicPosition, // Position mapped to period (use GetPeriodicPosition)
- UINT Animation, // Animation index
- D3DXVECTOR3 *pScale, // Returns the scale
- D3DXQUATERNION *pRotation, // Returns the rotation as a quaternion
- D3DXVECTOR3 *pTranslation) PURE; // Returns the translation
- // Callbacks
- STDMETHOD(GetCallback)(THIS_
- DOUBLE Position, // Position from which to find callbacks
- DWORD Flags, // Callback search flags
- DOUBLE *pCallbackPosition, // Returns the position of the callback
- LPVOID *ppCallbackData) PURE; // Returns the callback data pointer
- // Playback
- STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE;
- STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE;
- // Scale keys
- STDMETHOD_(UINT, GetNumScaleKeys)(THIS_ UINT Animation) PURE;
- STDMETHOD(GetScaleKeys)(THIS_ UINT Animation, LPD3DXKEY_VECTOR3 pScaleKeys) PURE;
- STDMETHOD(GetScaleKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pScaleKey) PURE;
- STDMETHOD(SetScaleKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pScaleKey) PURE;
- // Rotation keys
- STDMETHOD_(UINT, GetNumRotationKeys)(THIS_ UINT Animation) PURE;
- STDMETHOD(GetRotationKeys)(THIS_ UINT Animation, LPD3DXKEY_QUATERNION pRotationKeys) PURE;
- STDMETHOD(GetRotationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_QUATERNION pRotationKey) PURE;
- STDMETHOD(SetRotationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_QUATERNION pRotationKey) PURE;
- // Translation keys
- STDMETHOD_(UINT, GetNumTranslationKeys)(THIS_ UINT Animation) PURE;
- STDMETHOD(GetTranslationKeys)(THIS_ UINT Animation, LPD3DXKEY_VECTOR3 pTranslationKeys) PURE;
- STDMETHOD(GetTranslationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pTranslationKey) PURE;
- STDMETHOD(SetTranslationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pTranslationKey) PURE;
- // Callback keys
- STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE;
- STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK pCallbackKeys) PURE;
- STDMETHOD(GetCallbackKey)(THIS_ UINT Key, LPD3DXKEY_CALLBACK pCallbackKey) PURE;
- STDMETHOD(SetCallbackKey)(THIS_ UINT Key, LPD3DXKEY_CALLBACK pCallbackKey) PURE;
- // Key removal methods. These are slow, and should not be used once the animation starts playing
- STDMETHOD(UnregisterScaleKey)(THIS_ UINT Animation, UINT Key) PURE;
- STDMETHOD(UnregisterRotationKey)(THIS_ UINT Animation, UINT Key) PURE;
- STDMETHOD(UnregisterTranslationKey)(THIS_ UINT Animation, UINT Key) PURE;
- // One-time animaton SRT keyframe registration
- STDMETHOD(RegisterAnimationSRTKeys)(THIS_
- LPCSTR pName, // Animation name
- UINT NumScaleKeys, // Number of scale keys
- UINT NumRotationKeys, // Number of rotation keys
- UINT NumTranslationKeys, // Number of translation keys
- CONST D3DXKEY_VECTOR3 *pScaleKeys, // Array of scale keys
- CONST D3DXKEY_QUATERNION *pRotationKeys, // Array of rotation keys
- CONST D3DXKEY_VECTOR3 *pTranslationKeys, // Array of translation keys
- DWORD *pAnimationIndex) PURE; // Returns the animation index
- // Compression
- STDMETHOD(Compress)(THIS_
- DWORD Flags, // Compression flags (use D3DXCOMPRESS_STRONG for better results)
- FLOAT Lossiness, // Compression loss ratio in the [0, 1] range
- LPD3DXFRAME pHierarchy, // Frame hierarchy (optional)
- LPD3DXBUFFER *ppCompressedData) PURE; // Returns the compressed animation set
- STDMETHOD(UnregisterAnimation)(THIS_ UINT Index) PURE;
- };
- //----------------------------------------------------------------------------
- // ID3DXCompressedAnimationSet:
- // ----------------------------
- // This interface implements a compressed keyframed animation set.
- //----------------------------------------------------------------------------
- typedef interface ID3DXCompressedAnimationSet ID3DXCompressedAnimationSet;
- typedef interface ID3DXCompressedAnimationSet *LPD3DXCOMPRESSEDANIMATIONSET;
- #undef INTERFACE
- #define INTERFACE ID3DXCompressedAnimationSet
- DECLARE_INTERFACE_(ID3DXCompressedAnimationSet, ID3DXAnimationSet)
- {
- // ID3DXAnimationSet
- STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
- STDMETHOD_(ULONG, AddRef)(THIS) PURE;
- STDMETHOD_(ULONG, Release)(THIS) PURE;
- // Name
- STDMETHOD_(LPCSTR, GetName)(THIS) PURE;
- // Period
- STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;
- STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE Position) PURE; // Maps position into animation period
- // Animation names
- STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;
- STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT Index, LPCSTR *ppName) PURE;
- STDMETHOD(GetAnimationIndexByName)(THIS_ LPCSTR pName, UINT *pIndex) PURE;
- // SRT
- STDMETHOD(GetSRT)(THIS_
- DOUBLE PeriodicPosition, // Position mapped to period (use GetPeriodicPosition)
- UINT Animation, // Animation index
- D3DXVECTOR3 *pScale, // Returns the scale
- D3DXQUATERNION *pRotation, // Returns the rotation as a quaternion
- D3DXVECTOR3 *pTranslation) PURE; // Returns the translation
- // Callbacks
- STDMETHOD(GetCallback)(THIS_
- DOUBLE Position, // Position from which to find callbacks
- DWORD Flags, // Callback search flags
- DOUBLE *pCallbackPosition, // Returns the position of the callback
- LPVOID *ppCallbackData) PURE; // Returns the callback data pointer
- // Playback
- STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE;
- STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE;
- // Scale keys
- STDMETHOD(GetCompressedData)(THIS_ LPD3DXBUFFER *ppCompressedData) PURE;
- // Callback keys
- STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE;
- STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK pCallbackKeys) PURE;
- };
- //----------------------------------------------------------------------------
- // D3DXPRIORITY_TYPE:
- // ------------------
- // This enum defines the type of priority group that a track can be assigned to.
- //----------------------------------------------------------------------------
- typedef enum _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
- D3DXPRIORITY_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
- } 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.
- //----------------------------------------------------------------------------
- typedef struct _D3DXTRACK_DESC
- {
- D3DXPRIORITY_TYPE Priority;
- FLOAT Weight;
- FLOAT Speed;
- DOUBLE Position;
- BOOL Enable;
- } D3DXTRACK_DESC, *LPD3DXTRACK_DESC;
- //----------------------------------------------------------------------------
- // D3DXEVENT_TYPE:
- // ---------------
- // This enum defines the type of events keyable via the animation controller.
- //----------------------------------------------------------------------------
- typedef enum _D3DXEVENT_TYPE
- {
- D3DXEVENT_TRACKSPEED = 0,
- D3DXEVENT_TRACKWEIGHT = 1,
- D3DXEVENT_TRACKPOSITION = 2,
- D3DXEVENT_TRACKENABLE = 3,
- D3DXEVENT_PRIORITYBLEND = 4,
- D3DXEVENT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
- } D3DXEVENT_TYPE;
- //----------------------------------------------------------------------------
- // D3DXTRANSITION_TYPE:
- // --------------------
- // This enum defines the type of transtion performed on a event that
- // transitions from one value to another.
- //----------------------------------------------------------------------------
- typedef enum _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
- D3DXTRANSITION_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
- } 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.
- //----------------------------------------------------------------------------
- typedef struct _D3DXEVENT_DESC
- {
- D3DXEVENT_TYPE Type;
- UINT Track;
- DOUBLE StartTime;
- DOUBLE Duration;
- D3DXTRANSITION_TYPE Transition;
- union
- {
- FLOAT Weight;
- FLOAT Speed;
- DOUBLE Position;
- BOOL Enable;
- };
- } D3DXEVENT_DESC, *LPD3DXEVENT_DESC;
- //----------------------------------------------------------------------------
- // D3DXEVENTHANDLE:
- // ----------------
- // Handle values used to efficiently reference animation controller events.
- //----------------------------------------------------------------------------
- typedef DWORD D3DXEVENTHANDLE;
- typedef D3DXEVENTHANDLE *LPD3DXEVENTHANDLE;
- //----------------------------------------------------------------------------
- // 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.
- //----------------------------------------------------------------------------
- typedef interface ID3DXAnimationCallbackHandler ID3DXAnimationCallbackHandler;
- typedef interface ID3DXAnimationCallbackHandler *LPD3DXANIMATIONCALLBACKHANDLER;
- #undef INTERFACE
- #define INTERFACE ID3DXAnimationCallbackHandler
- DECLARE_INTERFACE(ID3DXAnimationCallbackHandler)
- {
- //----------------------------------------------------------------------------
- // 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.
- //
- //----------------------------------------------------------------------------
- STDMETHOD(HandleCallback)(THIS_ UINT Track, LPVOID pCallbackData) PURE;
- };
- //----------------------------------------------------------------------------
- // 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.
- //----------------------------------------------------------------------------
- typedef interface ID3DXAnimationController ID3DXAnimationController;
- typedef interface ID3DXAnimationController *LPD3DXANIMATIONCONTROLLER;
- #undef INTERFACE
- #define INTERFACE ID3DXAnimationController
- DECLARE_INTERFACE_(ID3DXAnimationController, IUnknown)
- {
- // IUnknown
- STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
- STDMETHOD_(ULONG, AddRef)(THIS) PURE;
- STDMETHOD_(ULONG, Release)(THIS) PURE;
- // Max sizes
- STDMETHOD_(UINT, GetMaxNumAnimationOutputs)(THIS) PURE;
- STDMETHOD_(UINT, GetMaxNumAnimationSets)(THIS) PURE;
- STDMETHOD_(UINT, GetMaxNumTracks)(THIS) PURE;
- STDMETHOD_(UINT, GetMaxNumEvents)(THIS) PURE;
- // Animation output registration
- STDMETHOD(RegisterAnimationOutput)(THIS_
- LPCSTR pName,
- D3DXMATRIX *pMatrix,
- D3DXVECTOR3 *pScale,
- D3DXQUATERNION *pRotation,
- D3DXVECTOR3 *pTranslation) PURE;
- // Animation set registration
- STDMETHOD(RegisterAnimationSet)(THIS_ LPD3DXANIMATIONSET pAnimSet) PURE;
- STDMETHOD(UnregisterAnimationSet)(THIS_ LPD3DXANIMATIONSET pAnimSet) PURE;
- STDMETHOD_(UINT, GetNumAnimationSets)(THIS) PURE;
- STDMETHOD(GetAnimationSet)(THIS_ UINT Index, LPD3DXANIMATIONSET *ppAnimationSet) PURE;
- STDMETHOD(GetAnimationSetByName)(THIS_ LPCSTR szName, LPD3DXANIMATIONSET *ppAnimationSet) PURE;
- // Global time
- STDMETHOD(AdvanceTime)(THIS_ DOUBLE TimeDelta, LPD3DXANIMATIONCALLBACKHANDLER pCallbackHandler) PURE;
- STDMETHOD(ResetTime)(THIS) PURE;
- STDMETHOD_(DOUBLE, GetTime)(THIS) PURE;
- // Tracks
- STDMETHOD(SetTrackAnimationSet)(THIS_ UINT Track, LPD3DXANIMATIONSET pAnimSet) PURE;
- STDMETHOD(GetTrackAnimationSet)(THIS_ UINT Track, LPD3DXANIMATIONSET *ppAnimSet) PURE;
- STDMETHOD(SetTrackPriority)(THIS_ UINT Track, D3DXPRIORITY_TYPE Priority) PURE;
- STDMETHOD(SetTrackSpeed)(THIS_ UINT Track, FLOAT Speed) PURE;
- STDMETHOD(SetTrackWeight)(THIS_ UINT Track, FLOAT Weight) PURE;
- STDMETHOD(SetTrackPosition)(THIS_ UINT Track, DOUBLE Position) PURE;
- STDMETHOD(SetTrackEnable)(THIS_ UINT Track, BOOL Enable) PURE;
- STDMETHOD(SetTrackDesc)(THIS_ UINT Track, LPD3DXTRACK_DESC pDesc) PURE;
- STDMETHOD(GetTrackDesc)(THIS_ UINT Track, LPD3DXTRACK_DESC pDesc) PURE;
- // Priority blending
- STDMETHOD(SetPriorityBlend)(THIS_ FLOAT BlendWeight) PURE;
- STDMETHOD_(FLOAT, GetPriorityBlend)(THIS) PURE;
- // Event keying
- STDMETHOD_(D3DXEVENTHANDLE, KeyTrackSpeed)(THIS_ UINT Track, FLOAT NewSpeed, DOUBLE StartTime, DOUBLE Duration, D3DXTRANSITION_TYPE Transition) PURE;
- STDMETHOD_(D3DXEVENTHANDLE, KeyTrackWeight)(THIS_ UINT Track, FLOAT NewWeight, DOUBLE StartTime, DOUBLE Duration, D3DXTRANSITION_TYPE Transition) PURE;
- STDMETHOD_(D3DXEVENTHANDLE, KeyTrackPosition)(THIS_ UINT Track, DOUBLE NewPosition, DOUBLE StartTime) PURE;
- STDMETHOD_(D3DXEVENTHANDLE, KeyTrackEnable)(THIS_ UINT Track, BOOL NewEnable, DOUBLE StartTime) PURE;
- STDMETHOD_(D3DXEVENTHANDLE, KeyPriorityBlend)(THIS_ FLOAT NewBlendWeight, DOUBLE StartTime, DOUBLE Duration, D3DXTRANSITION_TYPE Transition) PURE;
- // Event unkeying
- STDMETHOD(UnkeyEvent)(THIS_ D3DXEVENTHANDLE hEvent) PURE;
- STDMETHOD(UnkeyAllTrackEvents)(THIS_ UINT Track) PURE;
- STDMETHOD(UnkeyAllPriorityBlends)(THIS) PURE;
- // Event enumeration
- STDMETHOD_(D3DXEVENTHANDLE, GetCurrentTrackEvent)(THIS_ UINT Track, D3DXEVENT_TYPE EventType) PURE;
- STDMETHOD_(D3DXEVENTHANDLE, GetCurrentPriorityBlend)(THIS) PURE;
- STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingTrackEvent)(THIS_ UINT Track, D3DXEVENTHANDLE hEvent) PURE;
- STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingPriorityBlend)(THIS_ D3DXEVENTHANDLE hEvent) PURE;
- STDMETHOD(ValidateEvent)(THIS_ D3DXEVENTHANDLE hEvent) PURE;
- STDMETHOD(GetEventDesc)(THIS_ D3DXEVENTHANDLE hEvent, LPD3DXEVENT_DESC pDesc) PURE;
- // Cloning
- STDMETHOD(CloneAnimationController)(THIS_
- UINT MaxNumAnimationOutputs,
- UINT MaxNumAnimationSets,
- UINT MaxNumTracks,
- UINT MaxNumEvents,
- LPD3DXANIMATIONCONTROLLER *ppAnimController) PURE;
- };
- #ifdef __cplusplus
- extern "C" {
- #endif //__cplusplus
- //----------------------------------------------------------------------------
- // 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
- //
- //----------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXLoadMeshHierarchyFromXA
- (
- LPCSTR Filename,
- DWORD MeshOptions,
- LPDIRECT3DDEVICE9 pD3DDevice,
- LPD3DXALLOCATEHIERARCHY pAlloc,
- LPD3DXLOADUSERDATA pUserDataLoader,
- LPD3DXFRAME *ppFrameHierarchy,
- LPD3DXANIMATIONCONTROLLER *ppAnimController
- );
- HRESULT WINAPI
- D3DXLoadMeshHierarchyFromXW
- (
- LPCWSTR Filename,
- DWORD MeshOptions,
- LPDIRECT3DDEVICE9 pD3DDevice,
- LPD3DXALLOCATEHIERARCHY pAlloc,
- LPD3DXLOADUSERDATA pUserDataLoader,
- LPD3DXFRAME *ppFrameHierarchy,
- LPD3DXANIMATIONCONTROLLER *ppAnimController
- );
- #ifdef UNICODE
- #define D3DXLoadMeshHierarchyFromX D3DXLoadMeshHierarchyFromXW
- #else
- #define D3DXLoadMeshHierarchyFromX D3DXLoadMeshHierarchyFromXA
- #endif
- HRESULT WINAPI
- D3DXLoadMeshHierarchyFromXInMemory
- (
- LPCVOID Memory,
- DWORD SizeOfMemory,
- DWORD MeshOptions,
- LPDIRECT3DDEVICE9 pD3DDevice,
- LPD3DXALLOCATEHIERARCHY pAlloc,
- LPD3DXLOADUSERDATA pUserDataLoader,
- LPD3DXFRAME *ppFrameHierarchy,
- LPD3DXANIMATIONCONTROLLER *ppAnimController
- );
- //----------------------------------------------------------------------------
- // 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
- //
- //----------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXSaveMeshHierarchyToFileA
- (
- LPCSTR Filename,
- DWORD XFormat,
- CONST D3DXFRAME *pFrameRoot,
- LPD3DXANIMATIONCONTROLLER pAnimcontroller,
- LPD3DXSAVEUSERDATA pUserDataSaver
- );
- HRESULT WINAPI
- D3DXSaveMeshHierarchyToFileW
- (
- LPCWSTR Filename,
- DWORD XFormat,
- CONST D3DXFRAME *pFrameRoot,
- LPD3DXANIMATIONCONTROLLER pAnimController,
- LPD3DXSAVEUSERDATA pUserDataSaver
- );
- #ifdef UNICODE
- #define D3DXSaveMeshHierarchyToFile D3DXSaveMeshHierarchyToFileW
- #else
- #define D3DXSaveMeshHierarchyToFile D3DXSaveMeshHierarchyToFileA
- #endif
- //----------------------------------------------------------------------------
- // 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
- //
- //----------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXFrameDestroy
- (
- LPD3DXFRAME pFrameRoot,
- LPD3DXALLOCATEHIERARCHY pAlloc
- );
- //----------------------------------------------------------------------------
- // D3DXFrameAppendChild:
- // ---------------------
- // Add a child frame to a frame
- //
- // Parameters:
- // pFrameParent
- // Pointer to the parent node
- // pFrameChild
- // Pointer to the child node
- //
- //----------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXFrameAppendChild
- (
- LPD3DXFRAME pFrameParent,
- CONST D3DXFRAME *pFrameChild
- );
- //----------------------------------------------------------------------------
- // 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
- //
- //----------------------------------------------------------------------------
- LPD3DXFRAME WINAPI
- D3DXFrameFind
- (
- CONST D3DXFRAME *pFrameRoot,
- LPCSTR Name
- );
- //----------------------------------------------------------------------------
- // 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
- //
- //----------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXFrameRegisterNamedMatrices
- (
- LPD3DXFRAME pFrameRoot,
- LPD3DXANIMATIONCONTROLLER pAnimController
- );
- //----------------------------------------------------------------------------
- // 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
- //
- //----------------------------------------------------------------------------
- UINT WINAPI
- D3DXFrameNumNamedMatrices
- (
- CONST D3DXFRAME *pFrameRoot
- );
- //----------------------------------------------------------------------------
- // 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
- //
- //----------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXFrameCalculateBoundingSphere
- (
- CONST D3DXFRAME *pFrameRoot,
- LPD3DXVECTOR3 pObjectCenter,
- FLOAT *pObjectRadius
- );
- //----------------------------------------------------------------------------
- // 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
- //
- //-----------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXCreateKeyframedAnimationSet
- (
- LPCSTR pName,
- DOUBLE TicksPerSecond,
- D3DXPLAYBACK_TYPE Playback,
- UINT NumAnimations,
- UINT NumCallbackKeys,
- CONST D3DXKEY_CALLBACK *pCallbackKeys,
- LPD3DXKEYFRAMEDANIMATIONSET *ppAnimationSet
- );
- //----------------------------------------------------------------------------
- // 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
- //
- //-----------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXCreateCompressedAnimationSet
- (
- LPCSTR pName,
- DOUBLE TicksPerSecond,
- D3DXPLAYBACK_TYPE Playback,
- LPD3DXBUFFER pCompressedData,
- UINT NumCallbackKeys,
- CONST D3DXKEY_CALLBACK *pCallbackKeys,
- LPD3DXCOMPRESSEDANIMATIONSET *ppAnimationSet
- );
- //----------------------------------------------------------------------------
- // 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
- //
- //-----------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXCreateAnimationController
- (
- UINT MaxNumMatrices,
- UINT MaxNumAnimationSets,
- UINT MaxNumTracks,
- UINT MaxNumEvents,
- LPD3DXANIMATIONCONTROLLER *ppAnimController
- );
- #ifdef __cplusplus
- }
- #endif //__cplusplus
- #endif //__D3DX9ANIM_H__
|