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

其他游戏

开发平台:

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_SCENE_EXPORT_ATTRIBUTES_H
  9. #define HK_SCENE_EXPORT_ATTRIBUTES_H
  10. #include <Common/Serialize/Packfile/Xml/hkXmlPackfileReader.h>
  11. #include <Common/Base/hkBase.h>
  12. #include <Common/SceneData/Graph/hkxNode.h>
  13. #include <Common/SceneData/Attributes/hkxAttribute.h>
  14. #include <ContentTools/Common/SceneExport/AttributeProcessing/hctAttributeDescription.h>
  15. /// An instance of this class can be used to handle the manipulation of attributes before export (the transformation
  16. /// of attributes based on hctAttributeDescription objects). 
  17. class hctAttributeProcessingUtil
  18. {
  19. public:
  20. /// Initializes an instance of this class. Usually a single instance is used to process all attributes before export.
  21. /// A memory trackes is passed - it will be used for any allocations done during processing.
  22. hkBool init ( class hctFilterMemoryTracker* memoryTracker);
  23. /// Loads all attribute descriptions in the given path.
  24. hkBool loadAttributeDescriptions(const char* attributeDescriptionPath );
  25. /// Given an attribute holder (node/material), it merges attribute groups with the same name and then processes each group,
  26. /// following the instructions in the attribute descriptions stored in the database.
  27. void processAttributes (hkxAttributeHolder* attributeHolder);
  28. /// Given two attribute groups, merges them into a third one.
  29. void mergeTwoAttributeGroups(const hkxAttributeGroup& groupOne, const hkxAttributeGroup& groupTwo, hkxAttributeGroup& mergedGroup);
  30. /// Returns true if no valid attribute description data has been loaded yet.
  31. hkBool isEmpty () const;
  32. /// Destructor, frees up allocated memory.
  33. ~hctAttributeProcessingUtil();
  34. private:
  35. hctAttributeDescriptionDatabase m_database;
  36. hkArray<hkXmlPackfileReader*> m_packfileReaders;
  37. // To keep track of what we allocate.
  38. hctFilterMemoryTracker* m_trackedMemory; 
  39. private:
  40. // Given an attribute group, it processes the attributes inside it, following the instructions in the attribute description.
  41. void processAttributeGroup (hkxAttributeGroup& attrGroup);
  42. // Merging (EXP-497)
  43. void mergeAttributeDescriptionDatabase (const hctAttributeDescriptionDatabase& newDatabase);
  44. void mergeAttributeGroupDescriptions (const hctAttributeGroupDescription& newGroupDesc, hctAttributeGroupDescription& currentGroupDesc);
  45. void mergeAttributeDescriptions(const hctAttributeDescription& newAttDesc, hctAttributeDescription& currentAttDesc);
  46. // When we merge we may have to create new arrays of group descriptions or attribute descriptions
  47. // We keep track of them so we can delete them
  48. hkArray<hctAttributeGroupDescription*> m_newGroupDescriptions;
  49. hkArray<hctAttributeDescription*> m_newAttDescriptions;
  50. void mergeXYZToVector (hkArray<hkxAttribute>& attributes);
  51. void scaleFloats (hkArray<hkxAttribute>& attributes, const struct hctAttributeGroupDescription* attrGroupDesc);
  52. void mergeTransAndRotToMatrix (hkArray<hkxAttribute>& attributes);
  53. void enforceTypes (hkArray<hkxAttribute>& attributes, const struct hctAttributeGroupDescription* attrGroupDesc);
  54. void enforceChangePairs (hkArray<hkxAttribute>& attributes);
  55. void enforceEnabledBy (hkArray<hkxAttribute>& attributes, const struct hctAttributeGroupDescription* attrGroupDesc);
  56. void enforceHints (hkArray<hkxAttribute>& attributes, const struct hctAttributeGroupDescription* attrGroupDesc);
  57. // Supported attribute conversions
  58. struct hkxAnimatedQuaternion* convertEulerToQuaternion (struct hkxAnimatedVector* animatedVector);
  59. struct hkxAnimatedQuaternion* convertMatrixToQuaternion (struct hkxAnimatedMatrix* animatedMatrix);
  60. struct hkxSparselyAnimatedEnum* convertIntToEnum (struct hkxSparselyAnimatedInt* animatedInt, const class hkClassEnum* enumClass);
  61. struct hkxSparselyAnimatedString* convertIntToString (struct hkxSparselyAnimatedInt* animatedInt, const class hkClassEnum* enumClass);
  62. struct hkxSparselyAnimatedString* convertEnumToString (struct hkxSparselyAnimatedEnum* animatedEnum);
  63. };
  64. #endif //HK_SCENE_EXPORT_ATTRIBUTES_H
  65. /*
  66. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  67. * Confidential Information of Havok.  (C) Copyright 1999-2009
  68. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  69. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  70. * rights, and intellectual property rights in the Havok software remain in
  71. * Havok and/or its suppliers.
  72. * Use of this software for evaluation purposes is subject to and indicates
  73. * acceptance of the End User licence Agreement for this product. A copy of
  74. * the license is included with this software and is also available at www.havok.com/tryhavok.
  75. */