summaryrefslogtreecommitdiffstats
path: root/dxsdk/Include/d3dx9anim.h
diff options
context:
space:
mode:
Diffstat (limited to 'dxsdk/Include/d3dx9anim.h')
-rw-r--r--dxsdk/Include/d3dx9anim.h1114
1 files changed, 1114 insertions, 0 deletions
diff --git a/dxsdk/Include/d3dx9anim.h b/dxsdk/Include/d3dx9anim.h
new file mode 100644
index 00000000..fedb1dbe
--- /dev/null
+++ b/dxsdk/Include/d3dx9anim.h
@@ -0,0 +1,1114 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// 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__
+
+