hkaMultithreadedAnimationUtils.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:4k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_MUTLITHREADED_ANIMATION_UTILS_H
  9. #define HK_MUTLITHREADED_ANIMATION_UTILS_H
  10. #include <Common/Base/hkBase.h>
  11. #include <Animation/Animation/Playback/Multithreaded/hkaAnimationJobs.h>
  12. class hkaMultithreadedAnimationUtils
  13. {
  14. public:
  15. /*
  16.  * Sample and Combine jobs
  17.  */
  18. /// Uses the memory manager to preallocate the animation control buffer 
  19. static void HK_CALL allocateSampleAndCombineJob(const hkaAnimatedSkeleton* skeleton, hkaAnimationSampleAndCombineJob& jobOut);
  20. /// Frees the animation control buffer using the memory manager
  21. static void HK_CALL deallocateSampleAndCombineJob( hkaAnimationSampleAndCombineJob& jobOut);
  22. /// Grab the current data from the animated skeleton and fill in the job structure
  23. /// Note: the controlData pointer in the structure must be preallocated and capable of holding 
  24. /// a number of entries equal to the number of active (non zero weight) controls.
  25. /// use allocateSampleAndCombineJob or allocate this manually
  26. static void HK_CALL createSampleAndCombineJob(const hkaAnimatedSkeleton* skeleton, hkUint32 maxBone, hkQsTransform* poseOut, hkUint32 maxFloat, hkReal* floatSlotsOut, hkInt16* parentIndicesForLocalToModel, hkaAnimationSampleAndCombineJob& jobOut);
  27. /// By default we use 70k max space (DEFAULT_MAX_COMPRESSED_ANIM_DATA) for animation buffer. 
  28. /// which is very conservative. Use this method to get an upper bound on the size of the buffer required
  29. /// for a given hkaAnimationSampleAndCombineJob. Then set the job.m_bufferSize appropriately.
  30. static int HK_CALL getMaxSizeRequiredForSampleAndCombineJobBuffer(const hkaAnimatedSkeleton* skeleton);
  31. /// See getMaxSizeRequiredForSampleAndCombineJobBuffer(), but usable offline on a per-animation basis.
  32. /// At runtime, getMaxSizeRequiredForSampleAndCombineJobBuffer() called on an animated sksleton
  33. /// should return the same as the maximum of getConservativeMaxSizeRequiredForSampleAndCombineJobBuffer()
  34. /// over all animations used by the corresponding hkaAnimatedSkeleton.
  35. static int HK_CALL getConservativeMaxSizeRequiredForSampleAndCombineJobBuffer(const hkaAnimation* animation); 
  36. /// There is a requirement when using animation jobs for sampling on SPU that the float slot array
  37. /// be allocated to a size (number of bytes) which is a multiple of 16. The hkaPose class handles this automatically
  38. /// by setting the m_floatSlotValues array to have a *capacity* rounded up to a multiple of 4, but if you are not using 
  39. /// this class you may wish to use this helper method.
  40. /// To deallocate, use deallocateFloatSlotsArray().
  41. static hkReal* HK_CALL allocateFloatSlotsArrayRoundedUpToMultipleOf16(int numFloatSlots);
  42. /// There is a requirement when using animation jobs for sampling on SPU that the float slot array
  43. /// be allocated to a size (number of bytes) which is a multiple of 16. If you have allocated this array using
  44. /// allocateFloatSlotsArrayRoundedUpToMultipleOf16(), then use this method to deallocate.
  45. static void HK_CALL deallocateFloatSlotsArray(hkReal* array);
  46. };
  47. #endif // HK_MUTLITHREADED_ANIMATION_UTILS_H
  48. /*
  49. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  50. * Confidential Information of Havok.  (C) Copyright 1999-2009
  51. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  52. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  53. * rights, and intellectual property rights in the Havok software remain in
  54. * Havok and/or its suppliers.
  55. * Use of this software for evaluation purposes is subject to and indicates
  56. * acceptance of the End User licence Agreement for this product. A copy of
  57. * the license is included with this software and is also available at www.havok.com/tryhavok.
  58. */