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

其他游戏

开发平台:

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_MESH_SECTION_LOCK_SET_H
  9. #define HK_MESH_SECTION_LOCK_SET_H
  10. #include <Common/GeometryUtilities/Mesh/hkMeshShape.h>
  11. class hkMeshVertexBuffer;
  12. /// A utility to handle automatic unlocking of hkMeshSections from a hkMeshShape
  13. ///
  14. /// When an instantiation of hkMeshSectionLockSet goes out of scope and hkMeshSections locked using it
  15. /// will be automatically unlocked. Using the class will help avoid problems causing by incorrectly balancing
  16. /// locks and unlocks of hkMeshSections on a hkMeshShape - which can cause memory leaks.
  17. ///
  18. /// sa hkMeshShape
  19. class hkMeshSectionLockSet
  20. {
  21.     public:
  22.         HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SCENE_DATA, hkMeshSectionLockSet );
  23.             /// Dtor
  24.         ~hkMeshSectionLockSet();
  25.             /// Will add and lock all of the sections in shape in order
  26.         void addMeshSections(const hkMeshShape* shape, hkUint8 accessFlags);
  27.             /// Add a mesh section (not the reference will be invalidated if any other sections are added, or clear is called)
  28.         const hkMeshSection& addMeshSection(const hkMeshShape* shape, int index, hkUint8 accessFlags);
  29.             /// Remove all of the current locked sections
  30.         void clear();
  31.             /// Finds a section - return HK_NULL if not found
  32.         const hkMeshSection* findSection(const hkMeshShape* shape, int sectionIndex) const;
  33.             /// Get a section
  34.         HK_FORCE_INLINE const hkMeshSection& getSection(int index) const { return m_sections[index]; }
  35.             /// Get the shape a section was locked on
  36.         const hkMeshShape* getShape(int index) const { return m_shapes[index]; }
  37. /// Get the number of locked sections currently held
  38. int getNumSections() const { return m_sections.getSize(); }
  39. /// Get an array of all of the sections
  40. const hkMeshSection* getSections() const { return m_sections.begin(); }
  41.             /// Finds all of the unique vertex buffers out of all of the locked sections
  42.         void findUniqueVertexBuffers(hkArray<hkMeshVertexBuffer*>& buffersOut);
  43.     protected:
  44. hkArray<hkMeshSection> m_sections; ///
  45.         hkArray<const hkMeshShape*> m_shapes; ///
  46. };
  47. #endif // HK_MESH_SECTION_LOCK_SET_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. */