Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | pmbaty | 1 | ////////////////////////////////////////////////////////////////////////////// |
2 | // |
||
3 | // Copyright (C) Microsoft Corporation. All Rights Reserved. |
||
4 | // |
||
5 | // File: d3dx9anim.h |
||
6 | // Content: D3DX mesh types and functions |
||
7 | // |
||
8 | ////////////////////////////////////////////////////////////////////////////// |
||
9 | |||
10 | #ifndef __D3DX9ANIM_H__ |
||
11 | #define __D3DX9ANIM_H__ |
||
12 | |||
13 | // {698CFB3F-9289-4d95-9A57-33A94B5A65F9} |
||
14 | DEFINE_GUID(IID_ID3DXAnimationSet, |
||
15 | 0x698cfb3f, 0x9289, 0x4d95, 0x9a, 0x57, 0x33, 0xa9, 0x4b, 0x5a, 0x65, 0xf9); |
||
16 | |||
17 | // {FA4E8E3A-9786-407d-8B4C-5995893764AF} |
||
18 | DEFINE_GUID(IID_ID3DXKeyframedAnimationSet, |
||
19 | 0xfa4e8e3a, 0x9786, 0x407d, 0x8b, 0x4c, 0x59, 0x95, 0x89, 0x37, 0x64, 0xaf); |
||
20 | |||
21 | // {6CC2480D-3808-4739-9F88-DE49FACD8D4C} |
||
22 | DEFINE_GUID(IID_ID3DXCompressedAnimationSet, |
||
23 | 0x6cc2480d, 0x3808, 0x4739, 0x9f, 0x88, 0xde, 0x49, 0xfa, 0xcd, 0x8d, 0x4c); |
||
24 | |||
25 | // {AC8948EC-F86D-43e2-96DE-31FC35F96D9E} |
||
26 | DEFINE_GUID(IID_ID3DXAnimationController, |
||
27 | 0xac8948ec, 0xf86d, 0x43e2, 0x96, 0xde, 0x31, 0xfc, 0x35, 0xf9, 0x6d, 0x9e); |
||
28 | |||
29 | |||
30 | //---------------------------------------------------------------------------- |
||
31 | // D3DXMESHDATATYPE: |
||
32 | // ----------------- |
||
33 | // This enum defines the type of mesh data present in a MeshData structure. |
||
34 | //---------------------------------------------------------------------------- |
||
35 | typedef enum _D3DXMESHDATATYPE { |
||
36 | D3DXMESHTYPE_MESH = 0x001, // Normal ID3DXMesh data |
||
37 | D3DXMESHTYPE_PMESH = 0x002, // Progressive Mesh - ID3DXPMesh |
||
38 | D3DXMESHTYPE_PATCHMESH = 0x003, // Patch Mesh - ID3DXPatchMesh |
||
39 | |||
40 | D3DXMESHTYPE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ |
||
41 | } D3DXMESHDATATYPE; |
||
42 | |||
43 | //---------------------------------------------------------------------------- |
||
44 | // D3DXMESHDATA: |
||
45 | // ------------- |
||
46 | // This struct encapsulates a the mesh data that can be present in a mesh |
||
47 | // container. The supported mesh types are pMesh, pPMesh, pPatchMesh. |
||
48 | // The valid way to access this is determined by the Type enum. |
||
49 | //---------------------------------------------------------------------------- |
||
50 | typedef struct _D3DXMESHDATA |
||
51 | { |
||
52 | D3DXMESHDATATYPE Type; |
||
53 | |||
54 | // current mesh data interface |
||
55 | union |
||
56 | { |
||
57 | LPD3DXMESH pMesh; |
||
58 | LPD3DXPMESH pPMesh; |
||
59 | LPD3DXPATCHMESH pPatchMesh; |
||
60 | }; |
||
61 | } D3DXMESHDATA, *LPD3DXMESHDATA; |
||
62 | |||
63 | //---------------------------------------------------------------------------- |
||
64 | // D3DXMESHCONTAINER: |
||
65 | // ------------------ |
||
66 | // This struct encapsulates a mesh object in a transformation frame |
||
67 | // hierarchy. The app can derive from this structure to add other app specific |
||
68 | // data to this. |
||
69 | //---------------------------------------------------------------------------- |
||
70 | typedef struct _D3DXMESHCONTAINER |
||
71 | { |
||
72 | LPSTR Name; |
||
73 | |||
74 | D3DXMESHDATA MeshData; |
||
75 | |||
76 | LPD3DXMATERIAL pMaterials; |
||
77 | LPD3DXEFFECTINSTANCE pEffects; |
||
78 | DWORD NumMaterials; |
||
79 | DWORD *pAdjacency; |
||
80 | |||
81 | LPD3DXSKININFO pSkinInfo; |
||
82 | |||
83 | struct _D3DXMESHCONTAINER *pNextMeshContainer; |
||
84 | } D3DXMESHCONTAINER, *LPD3DXMESHCONTAINER; |
||
85 | |||
86 | //---------------------------------------------------------------------------- |
||
87 | // D3DXFRAME: |
||
88 | // ---------- |
||
89 | // This struct is the encapsulates a transform frame in a transformation frame |
||
90 | // hierarchy. The app can derive from this structure to add other app specific |
||
91 | // data to this |
||
92 | //---------------------------------------------------------------------------- |
||
93 | typedef struct _D3DXFRAME |
||
94 | { |
||
95 | LPSTR Name; |
||
96 | D3DXMATRIX TransformationMatrix; |
||
97 | |||
98 | LPD3DXMESHCONTAINER pMeshContainer; |
||
99 | |||
100 | struct _D3DXFRAME *pFrameSibling; |
||
101 | struct _D3DXFRAME *pFrameFirstChild; |
||
102 | } D3DXFRAME, *LPD3DXFRAME; |
||
103 | |||
104 | |||
105 | //---------------------------------------------------------------------------- |
||
106 | // ID3DXAllocateHierarchy: |
||
107 | // ----------------------- |
||
108 | // This interface is implemented by the application to allocate/free frame and |
||
109 | // mesh container objects. Methods on this are called during loading and |
||
110 | // destroying frame hierarchies |
||
111 | //---------------------------------------------------------------------------- |
||
112 | typedef interface ID3DXAllocateHierarchy ID3DXAllocateHierarchy; |
||
113 | typedef interface ID3DXAllocateHierarchy *LPD3DXALLOCATEHIERARCHY; |
||
114 | |||
115 | #undef INTERFACE |
||
116 | #define INTERFACE ID3DXAllocateHierarchy |
||
117 | |||
118 | DECLARE_INTERFACE(ID3DXAllocateHierarchy) |
||
119 | { |
||
120 | // ID3DXAllocateHierarchy |
||
121 | |||
122 | //------------------------------------------------------------------------ |
||
123 | // CreateFrame: |
||
124 | // ------------ |
||
125 | // Requests allocation of a frame object. |
||
126 | // |
||
127 | // Parameters: |
||
128 | // Name |
||
129 | // Name of the frame to be created |
||
130 | // ppNewFrame |
||
131 | // Returns the created frame object |
||
132 | // |
||
133 | //------------------------------------------------------------------------ |
||
134 | STDMETHOD(CreateFrame)(THIS_ LPCSTR Name, |
||
135 | LPD3DXFRAME *ppNewFrame) PURE; |
||
136 | |||
137 | //------------------------------------------------------------------------ |
||
138 | // CreateMeshContainer: |
||
139 | // -------------------- |
||
140 | // Requests allocation of a mesh container object. |
||
141 | // |
||
142 | // Parameters: |
||
143 | // Name |
||
144 | // Name of the mesh |
||
145 | // pMesh |
||
146 | // Pointer to the mesh object if basic polygon data found |
||
147 | // pPMesh |
||
148 | // Pointer to the progressive mesh object if progressive mesh data found |
||
149 | // pPatchMesh |
||
150 | // Pointer to the patch mesh object if patch data found |
||
151 | // pMaterials |
||
152 | // Array of materials used in the mesh |
||
153 | // pEffectInstances |
||
154 | // Array of effect instances used in the mesh |
||
155 | // NumMaterials |
||
156 | // Num elements in the pMaterials array |
||
157 | // pAdjacency |
||
158 | // Adjacency array for the mesh |
||
159 | // pSkinInfo |
||
160 | // Pointer to the skininfo object if the mesh is skinned |
||
161 | // pBoneNames |
||
162 | // Array of names, one for each bone in the skinned mesh. |
||
163 | // The numberof bones can be found from the pSkinMesh object |
||
164 | // pBoneOffsetMatrices |
||
165 | // Array of matrices, one for each bone in the skinned mesh. |
||
166 | // |
||
167 | //------------------------------------------------------------------------ |
||
168 | STDMETHOD(CreateMeshContainer)(THIS_ |
||
169 | LPCSTR Name, |
||
170 | CONST D3DXMESHDATA *pMeshData, |
||
171 | CONST D3DXMATERIAL *pMaterials, |
||
172 | CONST D3DXEFFECTINSTANCE *pEffectInstances, |
||
173 | DWORD NumMaterials, |
||
174 | CONST DWORD *pAdjacency, |
||
175 | LPD3DXSKININFO pSkinInfo, |
||
176 | LPD3DXMESHCONTAINER *ppNewMeshContainer) PURE; |
||
177 | |||
178 | //------------------------------------------------------------------------ |
||
179 | // DestroyFrame: |
||
180 | // ------------- |
||
181 | // Requests de-allocation of a frame object. |
||
182 | // |
||
183 | // Parameters: |
||
184 | // pFrameToFree |
||
185 | // Pointer to the frame to be de-allocated |
||
186 | // |
||
187 | //------------------------------------------------------------------------ |
||
188 | STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME pFrameToFree) PURE; |
||
189 | |||
190 | //------------------------------------------------------------------------ |
||
191 | // DestroyMeshContainer: |
||
192 | // --------------------- |
||
193 | // Requests de-allocation of a mesh container object. |
||
194 | // |
||
195 | // Parameters: |
||
196 | // pMeshContainerToFree |
||
197 | // Pointer to the mesh container object to be de-allocated |
||
198 | // |
||
199 | //------------------------------------------------------------------------ |
||
200 | STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER pMeshContainerToFree) PURE; |
||
201 | }; |
||
202 | |||
203 | //---------------------------------------------------------------------------- |
||
204 | // ID3DXLoadUserData: |
||
205 | // ------------------ |
||
206 | // This interface is implemented by the application to load user data in a .X file |
||
207 | // When user data is found, these callbacks will be used to allow the application |
||
208 | // to load the data. |
||
209 | //---------------------------------------------------------------------------- |
||
210 | typedef interface ID3DXLoadUserData ID3DXLoadUserData; |
||
211 | typedef interface ID3DXLoadUserData *LPD3DXLOADUSERDATA; |
||
212 | |||
213 | #undef INTERFACE |
||
214 | #define INTERFACE ID3DXLoadUserData |
||
215 | |||
216 | DECLARE_INTERFACE(ID3DXLoadUserData) |
||
217 | { |
||
218 | STDMETHOD(LoadTopLevelData)(LPD3DXFILEDATA pXofChildData) PURE; |
||
219 | |||
220 | STDMETHOD(LoadFrameChildData)(LPD3DXFRAME pFrame, |
||
221 | LPD3DXFILEDATA pXofChildData) PURE; |
||
222 | |||
223 | STDMETHOD(LoadMeshChildData)(LPD3DXMESHCONTAINER pMeshContainer, |
||
224 | LPD3DXFILEDATA pXofChildData) PURE; |
||
225 | }; |
||
226 | |||
227 | //---------------------------------------------------------------------------- |
||
228 | // ID3DXSaveUserData: |
||
229 | // ------------------ |
||
230 | // This interface is implemented by the application to save user data in a .X file |
||
231 | // The callbacks are called for all data saved. The user can then add any |
||
232 | // child data objects to the object provided to the callback. |
||
233 | //---------------------------------------------------------------------------- |
||
234 | typedef interface ID3DXSaveUserData ID3DXSaveUserData; |
||
235 | typedef interface ID3DXSaveUserData *LPD3DXSAVEUSERDATA; |
||
236 | |||
237 | #undef INTERFACE |
||
238 | #define INTERFACE ID3DXSaveUserData |
||
239 | |||
240 | DECLARE_INTERFACE(ID3DXSaveUserData) |
||
241 | { |
||
242 | STDMETHOD(AddFrameChildData)(CONST D3DXFRAME *pFrame, |
||
243 | LPD3DXFILESAVEOBJECT pXofSave, |
||
244 | LPD3DXFILESAVEDATA pXofFrameData) PURE; |
||
245 | |||
246 | STDMETHOD(AddMeshChildData)(CONST D3DXMESHCONTAINER *pMeshContainer, |
||
247 | LPD3DXFILESAVEOBJECT pXofSave, |
||
248 | LPD3DXFILESAVEDATA pXofMeshData) PURE; |
||
249 | |||
250 | // NOTE: this is called once per Save. All top level objects should be added using the |
||
251 | // provided interface. One call adds objects before the frame hierarchy, the other after |
||
252 | STDMETHOD(AddTopLevelDataObjectsPre)(LPD3DXFILESAVEOBJECT pXofSave) PURE; |
||
253 | STDMETHOD(AddTopLevelDataObjectsPost)(LPD3DXFILESAVEOBJECT pXofSave) PURE; |
||
254 | |||
255 | // callbacks for the user to register and then save templates to the XFile |
||
256 | STDMETHOD(RegisterTemplates)(LPD3DXFILE pXFileApi) PURE; |
||
257 | STDMETHOD(SaveTemplates)(LPD3DXFILESAVEOBJECT pXofSave) PURE; |
||
258 | }; |
||
259 | |||
260 | |||
261 | //---------------------------------------------------------------------------- |
||
262 | // D3DXCALLBACK_SEARCH_FLAGS: |
||
263 | // -------------------------- |
||
264 | // Flags that can be passed into ID3DXAnimationSet::GetCallback. |
||
265 | //---------------------------------------------------------------------------- |
||
266 | typedef enum _D3DXCALLBACK_SEARCH_FLAGS |
||
267 | { |
||
268 | D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION = 0x01, // exclude callbacks at the initial position from the search |
||
269 | D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION = 0x02, // reverse the callback search direction |
||
270 | |||
271 | D3DXCALLBACK_SEARCH_FORCE_DWORD = 0x7fffffff, |
||
272 | } D3DXCALLBACK_SEARCH_FLAGS; |
||
273 | |||
274 | //---------------------------------------------------------------------------- |
||
275 | // ID3DXAnimationSet: |
||
276 | // ------------------ |
||
277 | // This interface implements an animation set. |
||
278 | //---------------------------------------------------------------------------- |
||
279 | typedef interface ID3DXAnimationSet ID3DXAnimationSet; |
||
280 | typedef interface ID3DXAnimationSet *LPD3DXANIMATIONSET; |
||
281 | |||
282 | #undef INTERFACE |
||
283 | #define INTERFACE ID3DXAnimationSet |
||
284 | |||
285 | DECLARE_INTERFACE_(ID3DXAnimationSet, IUnknown) |
||
286 | { |
||
287 | // IUnknown |
||
288 | STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; |
||
289 | STDMETHOD_(ULONG, AddRef)(THIS) PURE; |
||
290 | STDMETHOD_(ULONG, Release)(THIS) PURE; |
||
291 | |||
292 | // Name |
||
293 | STDMETHOD_(LPCSTR, GetName)(THIS) PURE; |
||
294 | |||
295 | // Period |
||
296 | STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE; |
||
297 | STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE Position) PURE; // Maps position into animation period |
||
298 | |||
299 | // Animation names |
||
300 | STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE; |
||
301 | STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT Index, LPCSTR *ppName) PURE; |
||
302 | STDMETHOD(GetAnimationIndexByName)(THIS_ LPCSTR pName, UINT *pIndex) PURE; |
||
303 | |||
304 | // SRT |
||
305 | STDMETHOD(GetSRT)(THIS_ |
||
306 | DOUBLE PeriodicPosition, // Position mapped to period (use GetPeriodicPosition) |
||
307 | UINT Animation, // Animation index |
||
308 | D3DXVECTOR3 *pScale, // Returns the scale |
||
309 | D3DXQUATERNION *pRotation, // Returns the rotation as a quaternion |
||
310 | D3DXVECTOR3 *pTranslation) PURE; // Returns the translation |
||
311 | |||
312 | // Callbacks |
||
313 | STDMETHOD(GetCallback)(THIS_ |
||
314 | DOUBLE Position, // Position from which to find callbacks |
||
315 | DWORD Flags, // Callback search flags |
||
316 | DOUBLE *pCallbackPosition, // Returns the position of the callback |
||
317 | LPVOID *ppCallbackData) PURE; // Returns the callback data pointer |
||
318 | }; |
||
319 | |||
320 | |||
321 | //---------------------------------------------------------------------------- |
||
322 | // D3DXPLAYBACK_TYPE: |
||
323 | // ------------------ |
||
324 | // This enum defines the type of animation set loop modes. |
||
325 | //---------------------------------------------------------------------------- |
||
326 | typedef enum _D3DXPLAYBACK_TYPE |
||
327 | { |
||
328 | D3DXPLAY_LOOP = 0, |
||
329 | D3DXPLAY_ONCE = 1, |
||
330 | D3DXPLAY_PINGPONG = 2, |
||
331 | |||
332 | D3DXPLAY_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ |
||
333 | } D3DXPLAYBACK_TYPE; |
||
334 | |||
335 | |||
336 | //---------------------------------------------------------------------------- |
||
337 | // D3DXKEY_VECTOR3: |
||
338 | // ---------------- |
||
339 | // This structure describes a vector key for use in keyframe animation. |
||
340 | // It specifies a vector Value at a given Time. This is used for scale and |
||
341 | // translation keys. |
||
342 | //---------------------------------------------------------------------------- |
||
343 | typedef struct _D3DXKEY_VECTOR3 |
||
344 | { |
||
345 | FLOAT Time; |
||
346 | D3DXVECTOR3 Value; |
||
347 | } D3DXKEY_VECTOR3, *LPD3DXKEY_VECTOR3; |
||
348 | |||
349 | |||
350 | //---------------------------------------------------------------------------- |
||
351 | // D3DXKEY_QUATERNION: |
||
352 | // ------------------- |
||
353 | // This structure describes a quaternion key for use in keyframe animation. |
||
354 | // It specifies a quaternion Value at a given Time. This is used for rotation |
||
355 | // keys. |
||
356 | //---------------------------------------------------------------------------- |
||
357 | typedef struct _D3DXKEY_QUATERNION |
||
358 | { |
||
359 | FLOAT Time; |
||
360 | D3DXQUATERNION Value; |
||
361 | } D3DXKEY_QUATERNION, *LPD3DXKEY_QUATERNION; |
||
362 | |||
363 | |||
364 | //---------------------------------------------------------------------------- |
||
365 | // D3DXKEY_CALLBACK: |
||
366 | // ----------------- |
||
367 | // This structure describes an callback key for use in keyframe animation. |
||
368 | // It specifies a pointer to user data at a given Time. |
||
369 | //---------------------------------------------------------------------------- |
||
370 | typedef struct _D3DXKEY_CALLBACK |
||
371 | { |
||
372 | FLOAT Time; |
||
373 | LPVOID pCallbackData; |
||
374 | } D3DXKEY_CALLBACK, *LPD3DXKEY_CALLBACK; |
||
375 | |||
376 | |||
377 | //---------------------------------------------------------------------------- |
||
378 | // D3DXCOMPRESSION_FLAGS: |
||
379 | // ---------------------- |
||
380 | // Flags that can be passed into ID3DXKeyframedAnimationSet::Compress. |
||
381 | //---------------------------------------------------------------------------- |
||
382 | typedef enum _D3DXCOMPRESSION_FLAGS |
||
383 | { |
||
384 | D3DXCOMPRESS_DEFAULT = 0x00, |
||
385 | |||
386 | D3DXCOMPRESS_FORCE_DWORD = 0x7fffffff, |
||
387 | } D3DXCOMPRESSION_FLAGS; |
||
388 | |||
389 | |||
390 | //---------------------------------------------------------------------------- |
||
391 | // ID3DXKeyframedAnimationSet: |
||
392 | // --------------------------- |
||
393 | // This interface implements a compressable keyframed animation set. |
||
394 | //---------------------------------------------------------------------------- |
||
395 | typedef interface ID3DXKeyframedAnimationSet ID3DXKeyframedAnimationSet; |
||
396 | typedef interface ID3DXKeyframedAnimationSet *LPD3DXKEYFRAMEDANIMATIONSET; |
||
397 | |||
398 | #undef INTERFACE |
||
399 | #define INTERFACE ID3DXKeyframedAnimationSet |
||
400 | |||
401 | DECLARE_INTERFACE_(ID3DXKeyframedAnimationSet, ID3DXAnimationSet) |
||
402 | { |
||
403 | // ID3DXAnimationSet |
||
404 | STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; |
||
405 | STDMETHOD_(ULONG, AddRef)(THIS) PURE; |
||
406 | STDMETHOD_(ULONG, Release)(THIS) PURE; |
||
407 | |||
408 | // Name |
||
409 | STDMETHOD_(LPCSTR, GetName)(THIS) PURE; |
||
410 | |||
411 | // Period |
||
412 | STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE; |
||
413 | STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE Position) PURE; // Maps position into animation period |
||
414 | |||
415 | // Animation names |
||
416 | STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE; |
||
417 | STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT Index, LPCSTR *ppName) PURE; |
||
418 | STDMETHOD(GetAnimationIndexByName)(THIS_ LPCSTR pName, UINT *pIndex) PURE; |
||
419 | |||
420 | // SRT |
||
421 | STDMETHOD(GetSRT)(THIS_ |
||
422 | DOUBLE PeriodicPosition, // Position mapped to period (use GetPeriodicPosition) |
||
423 | UINT Animation, // Animation index |
||
424 | D3DXVECTOR3 *pScale, // Returns the scale |
||
425 | D3DXQUATERNION *pRotation, // Returns the rotation as a quaternion |
||
426 | D3DXVECTOR3 *pTranslation) PURE; // Returns the translation |
||
427 | |||
428 | // Callbacks |
||
429 | STDMETHOD(GetCallback)(THIS_ |
||
430 | DOUBLE Position, // Position from which to find callbacks |
||
431 | DWORD Flags, // Callback search flags |
||
432 | DOUBLE *pCallbackPosition, // Returns the position of the callback |
||
433 | LPVOID *ppCallbackData) PURE; // Returns the callback data pointer |
||
434 | |||
435 | // Playback |
||
436 | STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE; |
||
437 | STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE; |
||
438 | |||
439 | // Scale keys |
||
440 | STDMETHOD_(UINT, GetNumScaleKeys)(THIS_ UINT Animation) PURE; |
||
441 | STDMETHOD(GetScaleKeys)(THIS_ UINT Animation, LPD3DXKEY_VECTOR3 pScaleKeys) PURE; |
||
442 | STDMETHOD(GetScaleKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pScaleKey) PURE; |
||
443 | STDMETHOD(SetScaleKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pScaleKey) PURE; |
||
444 | |||
445 | // Rotation keys |
||
446 | STDMETHOD_(UINT, GetNumRotationKeys)(THIS_ UINT Animation) PURE; |
||
447 | STDMETHOD(GetRotationKeys)(THIS_ UINT Animation, LPD3DXKEY_QUATERNION pRotationKeys) PURE; |
||
448 | STDMETHOD(GetRotationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_QUATERNION pRotationKey) PURE; |
||
449 | STDMETHOD(SetRotationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_QUATERNION pRotationKey) PURE; |
||
450 | |||
451 | // Translation keys |
||
452 | STDMETHOD_(UINT, GetNumTranslationKeys)(THIS_ UINT Animation) PURE; |
||
453 | STDMETHOD(GetTranslationKeys)(THIS_ UINT Animation, LPD3DXKEY_VECTOR3 pTranslationKeys) PURE; |
||
454 | STDMETHOD(GetTranslationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pTranslationKey) PURE; |
||
455 | STDMETHOD(SetTranslationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pTranslationKey) PURE; |
||
456 | |||
457 | // Callback keys |
||
458 | STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE; |
||
459 | STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK pCallbackKeys) PURE; |
||
460 | STDMETHOD(GetCallbackKey)(THIS_ UINT Key, LPD3DXKEY_CALLBACK pCallbackKey) PURE; |
||
461 | STDMETHOD(SetCallbackKey)(THIS_ UINT Key, LPD3DXKEY_CALLBACK pCallbackKey) PURE; |
||
462 | |||
463 | // Key removal methods. These are slow, and should not be used once the animation starts playing |
||
464 | STDMETHOD(UnregisterScaleKey)(THIS_ UINT Animation, UINT Key) PURE; |
||
465 | STDMETHOD(UnregisterRotationKey)(THIS_ UINT Animation, UINT Key) PURE; |
||
466 | STDMETHOD(UnregisterTranslationKey)(THIS_ UINT Animation, UINT Key) PURE; |
||
467 | |||
468 | // One-time animaton SRT keyframe registration |
||
469 | STDMETHOD(RegisterAnimationSRTKeys)(THIS_ |
||
470 | LPCSTR pName, // Animation name |
||
471 | UINT NumScaleKeys, // Number of scale keys |
||
472 | UINT NumRotationKeys, // Number of rotation keys |
||
473 | UINT NumTranslationKeys, // Number of translation keys |
||
474 | CONST D3DXKEY_VECTOR3 *pScaleKeys, // Array of scale keys |
||
475 | CONST D3DXKEY_QUATERNION *pRotationKeys, // Array of rotation keys |
||
476 | CONST D3DXKEY_VECTOR3 *pTranslationKeys, // Array of translation keys |
||
477 | DWORD *pAnimationIndex) PURE; // Returns the animation index |
||
478 | |||
479 | // Compression |
||
480 | STDMETHOD(Compress)(THIS_ |
||
481 | DWORD Flags, // Compression flags (use D3DXCOMPRESS_STRONG for better results) |
||
482 | FLOAT Lossiness, // Compression loss ratio in the [0, 1] range |
||
483 | LPD3DXFRAME pHierarchy, // Frame hierarchy (optional) |
||
484 | LPD3DXBUFFER *ppCompressedData) PURE; // Returns the compressed animation set |
||
485 | |||
486 | STDMETHOD(UnregisterAnimation)(THIS_ UINT Index) PURE; |
||
487 | }; |
||
488 | |||
489 | |||
490 | //---------------------------------------------------------------------------- |
||
491 | // ID3DXCompressedAnimationSet: |
||
492 | // ---------------------------- |
||
493 | // This interface implements a compressed keyframed animation set. |
||
494 | //---------------------------------------------------------------------------- |
||
495 | typedef interface ID3DXCompressedAnimationSet ID3DXCompressedAnimationSet; |
||
496 | typedef interface ID3DXCompressedAnimationSet *LPD3DXCOMPRESSEDANIMATIONSET; |
||
497 | |||
498 | #undef INTERFACE |
||
499 | #define INTERFACE ID3DXCompressedAnimationSet |
||
500 | |||
501 | DECLARE_INTERFACE_(ID3DXCompressedAnimationSet, ID3DXAnimationSet) |
||
502 | { |
||
503 | // ID3DXAnimationSet |
||
504 | STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; |
||
505 | STDMETHOD_(ULONG, AddRef)(THIS) PURE; |
||
506 | STDMETHOD_(ULONG, Release)(THIS) PURE; |
||
507 | |||
508 | // Name |
||
509 | STDMETHOD_(LPCSTR, GetName)(THIS) PURE; |
||
510 | |||
511 | // Period |
||
512 | STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE; |
||
513 | STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE Position) PURE; // Maps position into animation period |
||
514 | |||
515 | // Animation names |
||
516 | STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE; |
||
517 | STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT Index, LPCSTR *ppName) PURE; |
||
518 | STDMETHOD(GetAnimationIndexByName)(THIS_ LPCSTR pName, UINT *pIndex) PURE; |
||
519 | |||
520 | // SRT |
||
521 | STDMETHOD(GetSRT)(THIS_ |
||
522 | DOUBLE PeriodicPosition, // Position mapped to period (use GetPeriodicPosition) |
||
523 | UINT Animation, // Animation index |
||
524 | D3DXVECTOR3 *pScale, // Returns the scale |
||
525 | D3DXQUATERNION *pRotation, // Returns the rotation as a quaternion |
||
526 | D3DXVECTOR3 *pTranslation) PURE; // Returns the translation |
||
527 | |||
528 | // Callbacks |
||
529 | STDMETHOD(GetCallback)(THIS_ |
||
530 | DOUBLE Position, // Position from which to find callbacks |
||
531 | DWORD Flags, // Callback search flags |
||
532 | DOUBLE *pCallbackPosition, // Returns the position of the callback |
||
533 | LPVOID *ppCallbackData) PURE; // Returns the callback data pointer |
||
534 | |||
535 | // Playback |
||
536 | STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE; |
||
537 | STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE; |
||
538 | |||
539 | // Scale keys |
||
540 | STDMETHOD(GetCompressedData)(THIS_ LPD3DXBUFFER *ppCompressedData) PURE; |
||
541 | |||
542 | // Callback keys |
||
543 | STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE; |
||
544 | STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK pCallbackKeys) PURE; |
||
545 | }; |
||
546 | |||
547 | |||
548 | //---------------------------------------------------------------------------- |
||
549 | // D3DXPRIORITY_TYPE: |
||
550 | // ------------------ |
||
551 | // This enum defines the type of priority group that a track can be assigned to. |
||
552 | //---------------------------------------------------------------------------- |
||
553 | typedef enum _D3DXPRIORITY_TYPE { |
||
554 | D3DXPRIORITY_LOW = 0, // This track should be blended with all low priority tracks before mixed with the high priority result |
||
555 | D3DXPRIORITY_HIGH = 1, // This track should be blended with all high priority tracks before mixed with the low priority result |
||
556 | |||
557 | D3DXPRIORITY_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ |
||
558 | } D3DXPRIORITY_TYPE; |
||
559 | |||
560 | //---------------------------------------------------------------------------- |
||
561 | // D3DXTRACK_DESC: |
||
562 | // --------------- |
||
563 | // This structure describes the mixing information of an animation track. |
||
564 | // The mixing information consists of the current position, speed, and blending |
||
565 | // weight for the track. The Flags field also specifies whether the track is |
||
566 | // low or high priority. Tracks with the same priority are blended together |
||
567 | // and then the two resulting values are blended using the priority blend factor. |
||
568 | // A track also has an animation set (stored separately) associated with it. |
||
569 | //---------------------------------------------------------------------------- |
||
570 | typedef struct _D3DXTRACK_DESC |
||
571 | { |
||
572 | D3DXPRIORITY_TYPE Priority; |
||
573 | FLOAT Weight; |
||
574 | FLOAT Speed; |
||
575 | DOUBLE Position; |
||
576 | BOOL Enable; |
||
577 | } D3DXTRACK_DESC, *LPD3DXTRACK_DESC; |
||
578 | |||
579 | //---------------------------------------------------------------------------- |
||
580 | // D3DXEVENT_TYPE: |
||
581 | // --------------- |
||
582 | // This enum defines the type of events keyable via the animation controller. |
||
583 | //---------------------------------------------------------------------------- |
||
584 | typedef enum _D3DXEVENT_TYPE |
||
585 | { |
||
586 | D3DXEVENT_TRACKSPEED = 0, |
||
587 | D3DXEVENT_TRACKWEIGHT = 1, |
||
588 | D3DXEVENT_TRACKPOSITION = 2, |
||
589 | D3DXEVENT_TRACKENABLE = 3, |
||
590 | D3DXEVENT_PRIORITYBLEND = 4, |
||
591 | |||
592 | D3DXEVENT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ |
||
593 | } D3DXEVENT_TYPE; |
||
594 | |||
595 | //---------------------------------------------------------------------------- |
||
596 | // D3DXTRANSITION_TYPE: |
||
597 | // -------------------- |
||
598 | // This enum defines the type of transtion performed on a event that |
||
599 | // transitions from one value to another. |
||
600 | //---------------------------------------------------------------------------- |
||
601 | typedef enum _D3DXTRANSITION_TYPE { |
||
602 | D3DXTRANSITION_LINEAR = 0x000, // Linear transition from one value to the next |
||
603 | D3DXTRANSITION_EASEINEASEOUT = 0x001, // Ease-In Ease-Out spline transtion from one value to the next |
||
604 | |||
605 | D3DXTRANSITION_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ |
||
606 | } D3DXTRANSITION_TYPE; |
||
607 | |||
608 | //---------------------------------------------------------------------------- |
||
609 | // D3DXEVENT_DESC: |
||
610 | // --------------- |
||
611 | // This structure describes a animation controller event. |
||
612 | // It gives the event's type, track (if the event is a track event), global |
||
613 | // start time, duration, transition method, and target value. |
||
614 | //---------------------------------------------------------------------------- |
||
615 | typedef struct _D3DXEVENT_DESC |
||
616 | { |
||
617 | D3DXEVENT_TYPE Type; |
||
618 | UINT Track; |
||
619 | DOUBLE StartTime; |
||
620 | DOUBLE Duration; |
||
621 | D3DXTRANSITION_TYPE Transition; |
||
622 | union |
||
623 | { |
||
624 | FLOAT Weight; |
||
625 | FLOAT Speed; |
||
626 | DOUBLE Position; |
||
627 | BOOL Enable; |
||
628 | }; |
||
629 | } D3DXEVENT_DESC, *LPD3DXEVENT_DESC; |
||
630 | |||
631 | //---------------------------------------------------------------------------- |
||
632 | // D3DXEVENTHANDLE: |
||
633 | // ---------------- |
||
634 | // Handle values used to efficiently reference animation controller events. |
||
635 | //---------------------------------------------------------------------------- |
||
636 | typedef DWORD D3DXEVENTHANDLE; |
||
637 | typedef D3DXEVENTHANDLE *LPD3DXEVENTHANDLE; |
||
638 | |||
639 | |||
640 | //---------------------------------------------------------------------------- |
||
641 | // ID3DXAnimationCallbackHandler: |
||
642 | // ------------------------------ |
||
643 | // This interface is intended to be implemented by the application, and can |
||
644 | // be used to handle callbacks in animation sets generated when |
||
645 | // ID3DXAnimationController::AdvanceTime() is called. |
||
646 | //---------------------------------------------------------------------------- |
||
647 | typedef interface ID3DXAnimationCallbackHandler ID3DXAnimationCallbackHandler; |
||
648 | typedef interface ID3DXAnimationCallbackHandler *LPD3DXANIMATIONCALLBACKHANDLER; |
||
649 | |||
650 | #undef INTERFACE |
||
651 | #define INTERFACE ID3DXAnimationCallbackHandler |
||
652 | |||
653 | DECLARE_INTERFACE(ID3DXAnimationCallbackHandler) |
||
654 | { |
||
655 | //---------------------------------------------------------------------------- |
||
656 | // ID3DXAnimationCallbackHandler::HandleCallback: |
||
657 | // ---------------------------------------------- |
||
658 | // This method gets called when a callback occurs for an animation set in one |
||
659 | // of the tracks during the ID3DXAnimationController::AdvanceTime() call. |
||
660 | // |
||
661 | // Parameters: |
||
662 | // Track |
||
663 | // Index of the track on which the callback occured. |
||
664 | // pCallbackData |
||
665 | // Pointer to user owned callback data. |
||
666 | // |
||
667 | //---------------------------------------------------------------------------- |
||
668 | STDMETHOD(HandleCallback)(THIS_ UINT Track, LPVOID pCallbackData) PURE; |
||
669 | }; |
||
670 | |||
671 | |||
672 | //---------------------------------------------------------------------------- |
||
673 | // ID3DXAnimationController: |
||
674 | // ------------------------- |
||
675 | // This interface implements the main animation functionality. It connects |
||
676 | // animation sets with the transform frames that are being animated. Allows |
||
677 | // mixing multiple animations for blended animations or for transistions |
||
678 | // It adds also has methods to modify blending parameters over time to |
||
679 | // enable smooth transistions and other effects. |
||
680 | //---------------------------------------------------------------------------- |
||
681 | typedef interface ID3DXAnimationController ID3DXAnimationController; |
||
682 | typedef interface ID3DXAnimationController *LPD3DXANIMATIONCONTROLLER; |
||
683 | |||
684 | #undef INTERFACE |
||
685 | #define INTERFACE ID3DXAnimationController |
||
686 | |||
687 | DECLARE_INTERFACE_(ID3DXAnimationController, IUnknown) |
||
688 | { |
||
689 | // IUnknown |
||
690 | STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; |
||
691 | STDMETHOD_(ULONG, AddRef)(THIS) PURE; |
||
692 | STDMETHOD_(ULONG, Release)(THIS) PURE; |
||
693 | |||
694 | // Max sizes |
||
695 | STDMETHOD_(UINT, GetMaxNumAnimationOutputs)(THIS) PURE; |
||
696 | STDMETHOD_(UINT, GetMaxNumAnimationSets)(THIS) PURE; |
||
697 | STDMETHOD_(UINT, GetMaxNumTracks)(THIS) PURE; |
||
698 | STDMETHOD_(UINT, GetMaxNumEvents)(THIS) PURE; |
||
699 | |||
700 | // Animation output registration |
||
701 | STDMETHOD(RegisterAnimationOutput)(THIS_ |
||
702 | LPCSTR pName, |
||
703 | D3DXMATRIX *pMatrix, |
||
704 | D3DXVECTOR3 *pScale, |
||
705 | D3DXQUATERNION *pRotation, |
||
706 | D3DXVECTOR3 *pTranslation) PURE; |
||
707 | |||
708 | // Animation set registration |
||
709 | STDMETHOD(RegisterAnimationSet)(THIS_ LPD3DXANIMATIONSET pAnimSet) PURE; |
||
710 | STDMETHOD(UnregisterAnimationSet)(THIS_ LPD3DXANIMATIONSET pAnimSet) PURE; |
||
711 | |||
712 | STDMETHOD_(UINT, GetNumAnimationSets)(THIS) PURE; |
||
713 | STDMETHOD(GetAnimationSet)(THIS_ UINT Index, LPD3DXANIMATIONSET *ppAnimationSet) PURE; |
||
714 | STDMETHOD(GetAnimationSetByName)(THIS_ LPCSTR szName, LPD3DXANIMATIONSET *ppAnimationSet) PURE; |
||
715 | |||
716 | // Global time |
||
717 | STDMETHOD(AdvanceTime)(THIS_ DOUBLE TimeDelta, LPD3DXANIMATIONCALLBACKHANDLER pCallbackHandler) PURE; |
||
718 | STDMETHOD(ResetTime)(THIS) PURE; |
||
719 | STDMETHOD_(DOUBLE, GetTime)(THIS) PURE; |
||
720 | |||
721 | // Tracks |
||
722 | STDMETHOD(SetTrackAnimationSet)(THIS_ UINT Track, LPD3DXANIMATIONSET pAnimSet) PURE; |
||
723 | STDMETHOD(GetTrackAnimationSet)(THIS_ UINT Track, LPD3DXANIMATIONSET *ppAnimSet) PURE; |
||
724 | |||
725 | STDMETHOD(SetTrackPriority)(THIS_ UINT Track, D3DXPRIORITY_TYPE Priority) PURE; |
||
726 | |||
727 | STDMETHOD(SetTrackSpeed)(THIS_ UINT Track, FLOAT Speed) PURE; |
||
728 | STDMETHOD(SetTrackWeight)(THIS_ UINT Track, FLOAT Weight) PURE; |
||
729 | STDMETHOD(SetTrackPosition)(THIS_ UINT Track, DOUBLE Position) PURE; |
||
730 | STDMETHOD(SetTrackEnable)(THIS_ UINT Track, BOOL Enable) PURE; |
||
731 | |||
732 | STDMETHOD(SetTrackDesc)(THIS_ UINT Track, LPD3DXTRACK_DESC pDesc) PURE; |
||
733 | STDMETHOD(GetTrackDesc)(THIS_ UINT Track, LPD3DXTRACK_DESC pDesc) PURE; |
||
734 | |||
735 | // Priority blending |
||
736 | STDMETHOD(SetPriorityBlend)(THIS_ FLOAT BlendWeight) PURE; |
||
737 | STDMETHOD_(FLOAT, GetPriorityBlend)(THIS) PURE; |
||
738 | |||
739 | // Event keying |
||
740 | STDMETHOD_(D3DXEVENTHANDLE, KeyTrackSpeed)(THIS_ UINT Track, FLOAT NewSpeed, DOUBLE StartTime, DOUBLE Duration, D3DXTRANSITION_TYPE Transition) PURE; |
||
741 | STDMETHOD_(D3DXEVENTHANDLE, KeyTrackWeight)(THIS_ UINT Track, FLOAT NewWeight, DOUBLE StartTime, DOUBLE Duration, D3DXTRANSITION_TYPE Transition) PURE; |
||
742 | STDMETHOD_(D3DXEVENTHANDLE, KeyTrackPosition)(THIS_ UINT Track, DOUBLE NewPosition, DOUBLE StartTime) PURE; |
||
743 | STDMETHOD_(D3DXEVENTHANDLE, KeyTrackEnable)(THIS_ UINT Track, BOOL NewEnable, DOUBLE StartTime) PURE; |
||
744 | |||
745 | STDMETHOD_(D3DXEVENTHANDLE, KeyPriorityBlend)(THIS_ FLOAT NewBlendWeight, DOUBLE StartTime, DOUBLE Duration, D3DXTRANSITION_TYPE Transition) PURE; |
||
746 | |||
747 | // Event unkeying |
||
748 | STDMETHOD(UnkeyEvent)(THIS_ D3DXEVENTHANDLE hEvent) PURE; |
||
749 | |||
750 | STDMETHOD(UnkeyAllTrackEvents)(THIS_ UINT Track) PURE; |
||
751 | STDMETHOD(UnkeyAllPriorityBlends)(THIS) PURE; |
||
752 | |||
753 | // Event enumeration |
||
754 | STDMETHOD_(D3DXEVENTHANDLE, GetCurrentTrackEvent)(THIS_ UINT Track, D3DXEVENT_TYPE EventType) PURE; |
||
755 | STDMETHOD_(D3DXEVENTHANDLE, GetCurrentPriorityBlend)(THIS) PURE; |
||
756 | |||
757 | STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingTrackEvent)(THIS_ UINT Track, D3DXEVENTHANDLE hEvent) PURE; |
||
758 | STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingPriorityBlend)(THIS_ D3DXEVENTHANDLE hEvent) PURE; |
||
759 | |||
760 | STDMETHOD(ValidateEvent)(THIS_ D3DXEVENTHANDLE hEvent) PURE; |
||
761 | |||
762 | STDMETHOD(GetEventDesc)(THIS_ D3DXEVENTHANDLE hEvent, LPD3DXEVENT_DESC pDesc) PURE; |
||
763 | |||
764 | // Cloning |
||
765 | STDMETHOD(CloneAnimationController)(THIS_ |
||
766 | UINT MaxNumAnimationOutputs, |
||
767 | UINT MaxNumAnimationSets, |
||
768 | UINT MaxNumTracks, |
||
769 | UINT MaxNumEvents, |
||
770 | LPD3DXANIMATIONCONTROLLER *ppAnimController) PURE; |
||
771 | }; |
||
772 | |||
773 | #ifdef __cplusplus |
||
774 | extern "C" { |
||
775 | #endif //__cplusplus |
||
776 | |||
777 | |||
778 | //---------------------------------------------------------------------------- |
||
779 | // D3DXLoadMeshHierarchyFromX: |
||
780 | // --------------------------- |
||
781 | // Loads the first frame hierarchy in a .X file. |
||
782 | // |
||
783 | // Parameters: |
||
784 | // Filename |
||
785 | // Name of the .X file |
||
786 | // MeshOptions |
||
787 | // Mesh creation options for meshes in the file (see d3dx9mesh.h) |
||
788 | // pD3DDevice |
||
789 | // D3D9 device on which meshes in the file are created in |
||
790 | // pAlloc |
||
791 | // Allocation interface used to allocate nodes of the frame hierarchy |
||
792 | // pUserDataLoader |
||
793 | // Application provided interface to allow loading of user data |
||
794 | // ppFrameHierarchy |
||
795 | // Returns root node pointer of the loaded frame hierarchy |
||
796 | // ppAnimController |
||
797 | // Returns pointer to an animation controller corresponding to animation |
||
798 | // in the .X file. This is created with default max tracks and events |
||
799 | // |
||
800 | //---------------------------------------------------------------------------- |
||
801 | HRESULT WINAPI |
||
802 | D3DXLoadMeshHierarchyFromXA |
||
803 | ( |
||
804 | LPCSTR Filename, |
||
805 | DWORD MeshOptions, |
||
806 | LPDIRECT3DDEVICE9 pD3DDevice, |
||
807 | LPD3DXALLOCATEHIERARCHY pAlloc, |
||
808 | LPD3DXLOADUSERDATA pUserDataLoader, |
||
809 | LPD3DXFRAME *ppFrameHierarchy, |
||
810 | LPD3DXANIMATIONCONTROLLER *ppAnimController |
||
811 | ); |
||
812 | |||
813 | HRESULT WINAPI |
||
814 | D3DXLoadMeshHierarchyFromXW |
||
815 | ( |
||
816 | LPCWSTR Filename, |
||
817 | DWORD MeshOptions, |
||
818 | LPDIRECT3DDEVICE9 pD3DDevice, |
||
819 | LPD3DXALLOCATEHIERARCHY pAlloc, |
||
820 | LPD3DXLOADUSERDATA pUserDataLoader, |
||
821 | LPD3DXFRAME *ppFrameHierarchy, |
||
822 | LPD3DXANIMATIONCONTROLLER *ppAnimController |
||
823 | ); |
||
824 | |||
825 | #ifdef UNICODE |
||
826 | #define D3DXLoadMeshHierarchyFromX D3DXLoadMeshHierarchyFromXW |
||
827 | #else |
||
828 | #define D3DXLoadMeshHierarchyFromX D3DXLoadMeshHierarchyFromXA |
||
829 | #endif |
||
830 | |||
831 | HRESULT WINAPI |
||
832 | D3DXLoadMeshHierarchyFromXInMemory |
||
833 | ( |
||
834 | LPCVOID Memory, |
||
835 | DWORD SizeOfMemory, |
||
836 | DWORD MeshOptions, |
||
837 | LPDIRECT3DDEVICE9 pD3DDevice, |
||
838 | LPD3DXALLOCATEHIERARCHY pAlloc, |
||
839 | LPD3DXLOADUSERDATA pUserDataLoader, |
||
840 | LPD3DXFRAME *ppFrameHierarchy, |
||
841 | LPD3DXANIMATIONCONTROLLER *ppAnimController |
||
842 | ); |
||
843 | |||
844 | //---------------------------------------------------------------------------- |
||
845 | // D3DXSaveMeshHierarchyToFile: |
||
846 | // ---------------------------- |
||
847 | // Creates a .X file and saves the mesh hierarchy and corresponding animations |
||
848 | // in it |
||
849 | // |
||
850 | // Parameters: |
||
851 | // Filename |
||
852 | // Name of the .X file |
||
853 | // XFormat |
||
854 | // Format of the .X file (text or binary, compressed or not, etc) |
||
855 | // pFrameRoot |
||
856 | // Root node of the hierarchy to be saved |
||
857 | // pAnimController |
||
858 | // The animation controller whose animation sets are to be stored |
||
859 | // pUserDataSaver |
||
860 | // Application provided interface to allow adding of user data to |
||
861 | // data objects saved to .X file |
||
862 | // |
||
863 | //---------------------------------------------------------------------------- |
||
864 | HRESULT WINAPI |
||
865 | D3DXSaveMeshHierarchyToFileA |
||
866 | ( |
||
867 | LPCSTR Filename, |
||
868 | DWORD XFormat, |
||
869 | CONST D3DXFRAME *pFrameRoot, |
||
870 | LPD3DXANIMATIONCONTROLLER pAnimcontroller, |
||
871 | LPD3DXSAVEUSERDATA pUserDataSaver |
||
872 | ); |
||
873 | |||
874 | HRESULT WINAPI |
||
875 | D3DXSaveMeshHierarchyToFileW |
||
876 | ( |
||
877 | LPCWSTR Filename, |
||
878 | DWORD XFormat, |
||
879 | CONST D3DXFRAME *pFrameRoot, |
||
880 | LPD3DXANIMATIONCONTROLLER pAnimController, |
||
881 | LPD3DXSAVEUSERDATA pUserDataSaver |
||
882 | ); |
||
883 | |||
884 | #ifdef UNICODE |
||
885 | #define D3DXSaveMeshHierarchyToFile D3DXSaveMeshHierarchyToFileW |
||
886 | #else |
||
887 | #define D3DXSaveMeshHierarchyToFile D3DXSaveMeshHierarchyToFileA |
||
888 | #endif |
||
889 | |||
890 | //---------------------------------------------------------------------------- |
||
891 | // D3DXFrameDestroy: |
||
892 | // ----------------- |
||
893 | // Destroys the subtree of frames under the root, including the root |
||
894 | // |
||
895 | // Parameters: |
||
896 | // pFrameRoot |
||
897 | // Pointer to the root node |
||
898 | // pAlloc |
||
899 | // Allocation interface used to de-allocate nodes of the frame hierarchy |
||
900 | // |
||
901 | //---------------------------------------------------------------------------- |
||
902 | HRESULT WINAPI |
||
903 | D3DXFrameDestroy |
||
904 | ( |
||
905 | LPD3DXFRAME pFrameRoot, |
||
906 | LPD3DXALLOCATEHIERARCHY pAlloc |
||
907 | ); |
||
908 | |||
909 | //---------------------------------------------------------------------------- |
||
910 | // D3DXFrameAppendChild: |
||
911 | // --------------------- |
||
912 | // Add a child frame to a frame |
||
913 | // |
||
914 | // Parameters: |
||
915 | // pFrameParent |
||
916 | // Pointer to the parent node |
||
917 | // pFrameChild |
||
918 | // Pointer to the child node |
||
919 | // |
||
920 | //---------------------------------------------------------------------------- |
||
921 | HRESULT WINAPI |
||
922 | D3DXFrameAppendChild |
||
923 | ( |
||
924 | LPD3DXFRAME pFrameParent, |
||
925 | CONST D3DXFRAME *pFrameChild |
||
926 | ); |
||
927 | |||
928 | //---------------------------------------------------------------------------- |
||
929 | // D3DXFrameFind: |
||
930 | // -------------- |
||
931 | // Finds a frame with the given name. Returns NULL if no frame found. |
||
932 | // |
||
933 | // Parameters: |
||
934 | // pFrameRoot |
||
935 | // Pointer to the root node |
||
936 | // Name |
||
937 | // Name of frame to find |
||
938 | // |
||
939 | //---------------------------------------------------------------------------- |
||
940 | LPD3DXFRAME WINAPI |
||
941 | D3DXFrameFind |
||
942 | ( |
||
943 | CONST D3DXFRAME *pFrameRoot, |
||
944 | LPCSTR Name |
||
945 | ); |
||
946 | |||
947 | //---------------------------------------------------------------------------- |
||
948 | // D3DXFrameRegisterNamedMatrices: |
||
949 | // ------------------------------- |
||
950 | // Finds all frames that have non-null names and registers each of those frame |
||
951 | // matrices to the given animation controller |
||
952 | // |
||
953 | // Parameters: |
||
954 | // pFrameRoot |
||
955 | // Pointer to the root node |
||
956 | // pAnimController |
||
957 | // Pointer to the animation controller where the matrices are registered |
||
958 | // |
||
959 | //---------------------------------------------------------------------------- |
||
960 | HRESULT WINAPI |
||
961 | D3DXFrameRegisterNamedMatrices |
||
962 | ( |
||
963 | LPD3DXFRAME pFrameRoot, |
||
964 | LPD3DXANIMATIONCONTROLLER pAnimController |
||
965 | ); |
||
966 | |||
967 | //---------------------------------------------------------------------------- |
||
968 | // D3DXFrameNumNamedMatrices: |
||
969 | // -------------------------- |
||
970 | // Counts number of frames in a subtree that have non-null names |
||
971 | // |
||
972 | // Parameters: |
||
973 | // pFrameRoot |
||
974 | // Pointer to the root node of the subtree |
||
975 | // Return Value: |
||
976 | // Count of frames |
||
977 | // |
||
978 | //---------------------------------------------------------------------------- |
||
979 | UINT WINAPI |
||
980 | D3DXFrameNumNamedMatrices |
||
981 | ( |
||
982 | CONST D3DXFRAME *pFrameRoot |
||
983 | ); |
||
984 | |||
985 | //---------------------------------------------------------------------------- |
||
986 | // D3DXFrameCalculateBoundingSphere: |
||
987 | // --------------------------------- |
||
988 | // Computes the bounding sphere of all the meshes in the frame hierarchy. |
||
989 | // |
||
990 | // Parameters: |
||
991 | // pFrameRoot |
||
992 | // Pointer to the root node |
||
993 | // pObjectCenter |
||
994 | // Returns the center of the bounding sphere |
||
995 | // pObjectRadius |
||
996 | // Returns the radius of the bounding sphere |
||
997 | // |
||
998 | //---------------------------------------------------------------------------- |
||
999 | HRESULT WINAPI |
||
1000 | D3DXFrameCalculateBoundingSphere |
||
1001 | ( |
||
1002 | CONST D3DXFRAME *pFrameRoot, |
||
1003 | LPD3DXVECTOR3 pObjectCenter, |
||
1004 | FLOAT *pObjectRadius |
||
1005 | ); |
||
1006 | |||
1007 | |||
1008 | //---------------------------------------------------------------------------- |
||
1009 | // D3DXCreateKeyframedAnimationSet: |
||
1010 | // -------------------------------- |
||
1011 | // This function creates a compressable keyframed animations set interface. |
||
1012 | // |
||
1013 | // Parameters: |
||
1014 | // pName |
||
1015 | // Name of the animation set |
||
1016 | // TicksPerSecond |
||
1017 | // Number of keyframe ticks that elapse per second |
||
1018 | // Playback |
||
1019 | // Playback mode of keyframe looping |
||
1020 | // NumAnimations |
||
1021 | // Number of SRT animations |
||
1022 | // NumCallbackKeys |
||
1023 | // Number of callback keys |
||
1024 | // pCallbackKeys |
||
1025 | // Array of callback keys |
||
1026 | // ppAnimationSet |
||
1027 | // Returns the animation set interface |
||
1028 | // |
||
1029 | //----------------------------------------------------------------------------- |
||
1030 | HRESULT WINAPI |
||
1031 | D3DXCreateKeyframedAnimationSet |
||
1032 | ( |
||
1033 | LPCSTR pName, |
||
1034 | DOUBLE TicksPerSecond, |
||
1035 | D3DXPLAYBACK_TYPE Playback, |
||
1036 | UINT NumAnimations, |
||
1037 | UINT NumCallbackKeys, |
||
1038 | CONST D3DXKEY_CALLBACK *pCallbackKeys, |
||
1039 | LPD3DXKEYFRAMEDANIMATIONSET *ppAnimationSet |
||
1040 | ); |
||
1041 | |||
1042 | |||
1043 | //---------------------------------------------------------------------------- |
||
1044 | // D3DXCreateCompressedAnimationSet: |
||
1045 | // -------------------------------- |
||
1046 | // This function creates a compressed animations set interface from |
||
1047 | // compressed data. |
||
1048 | // |
||
1049 | // Parameters: |
||
1050 | // pName |
||
1051 | // Name of the animation set |
||
1052 | // TicksPerSecond |
||
1053 | // Number of keyframe ticks that elapse per second |
||
1054 | // Playback |
||
1055 | // Playback mode of keyframe looping |
||
1056 | // pCompressedData |
||
1057 | // Compressed animation SRT data |
||
1058 | // NumCallbackKeys |
||
1059 | // Number of callback keys |
||
1060 | // pCallbackKeys |
||
1061 | // Array of callback keys |
||
1062 | // ppAnimationSet |
||
1063 | // Returns the animation set interface |
||
1064 | // |
||
1065 | //----------------------------------------------------------------------------- |
||
1066 | HRESULT WINAPI |
||
1067 | D3DXCreateCompressedAnimationSet |
||
1068 | ( |
||
1069 | LPCSTR pName, |
||
1070 | DOUBLE TicksPerSecond, |
||
1071 | D3DXPLAYBACK_TYPE Playback, |
||
1072 | LPD3DXBUFFER pCompressedData, |
||
1073 | UINT NumCallbackKeys, |
||
1074 | CONST D3DXKEY_CALLBACK *pCallbackKeys, |
||
1075 | LPD3DXCOMPRESSEDANIMATIONSET *ppAnimationSet |
||
1076 | ); |
||
1077 | |||
1078 | |||
1079 | //---------------------------------------------------------------------------- |
||
1080 | // D3DXCreateAnimationController: |
||
1081 | // ------------------------------ |
||
1082 | // This function creates an animation controller object. |
||
1083 | // |
||
1084 | // Parameters: |
||
1085 | // MaxNumMatrices |
||
1086 | // Maximum number of matrices that can be animated |
||
1087 | // MaxNumAnimationSets |
||
1088 | // Maximum number of animation sets that can be played |
||
1089 | // MaxNumTracks |
||
1090 | // Maximum number of animation sets that can be blended |
||
1091 | // MaxNumEvents |
||
1092 | // Maximum number of outstanding events that can be scheduled at any given time |
||
1093 | // ppAnimController |
||
1094 | // Returns the animation controller interface |
||
1095 | // |
||
1096 | //----------------------------------------------------------------------------- |
||
1097 | HRESULT WINAPI |
||
1098 | D3DXCreateAnimationController |
||
1099 | ( |
||
1100 | UINT MaxNumMatrices, |
||
1101 | UINT MaxNumAnimationSets, |
||
1102 | UINT MaxNumTracks, |
||
1103 | UINT MaxNumEvents, |
||
1104 | LPD3DXANIMATIONCONTROLLER *ppAnimController |
||
1105 | ); |
||
1106 | |||
1107 | |||
1108 | #ifdef __cplusplus |
||
1109 | } |
||
1110 | #endif //__cplusplus |
||
1111 | |||
1112 | #endif //__D3DX9ANIM_H__ |
||
1113 | |||
1114 |