hkMeshSectionBuilder.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_MESH_SECTION_BUILDER_H
  9. #define HK_MESH_SECTION_BUILDER_H
  10. #include <Common/GeometryUtilities/Mesh/hkMeshShape.h>
  11. /// This utility is designed to help the construction of mesh sections
  12. ///
  13. /// Specifically it hold all of the indices needed to construct a shape, as well as the hkMeshSectionCinfos
  14. ///
  15. /// Usage is of the form of calling 'startMeshSection' at the start of a new mesh section. You can optionally pass
  16. /// in the vertexBuffer and material associated with the section. Next multiple addTriangleIndices or addUnindexed
  17. /// calls can be made - and these will be accumulated in internally buffers. Once all of the indices have been
  18. /// added for the section a call to endMeshSection can be called.
  19. ///
  20. /// Before calling endMeshSection - if the vertexBuffer or the material haven't been set - they can be set with
  21. /// setVertexBuffer or setMaterial. It is invalid to have not set this data either in startMeshSection or with these methods
  22. /// before the endMeshSection call.
  23. ///
  24. /// Once all of the mesh sections have been added the hkMeshSectionCinfo array needed for construction can be retrieved
  25. /// by calling 'getSections' and the number of sections from getNumSections
  26. ///
  27. /// A hkMeshSectionBuilder can be emptied of its contents by calling 'clear' - allowing any internal allocation used for
  28. /// building to be potentially reused.
  29. ///
  30. /// sa hkMeshMaterial hkMeshShape
  31. class hkMeshSectionBuilder
  32. {
  33.     public:
  34.         HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SCENE_DATA, hkMeshSectionBuilder );
  35. /// Dtor
  36. ~hkMeshSectionBuilder();
  37.             /// Remove everything
  38.         void clear();
  39.             /// Start a new primitive
  40.         void startMeshSection(hkMeshVertexBuffer* vertexBuffer = HK_NULL, hkMeshMaterial* material = HK_NULL);
  41. /// Add indices to the current primitive
  42. hkResult concatPrimitives(hkMeshSection::PrimitiveType primType, const hkUint16* indices, int numIndices, int indexBase = 0);
  43. /// Add indices to the current primitive
  44. hkResult concatPrimitives(hkMeshSection::PrimitiveType primType, const hkUint32* indices, int numIndices, int indexBase = 0);
  45. /// Add non indexed - this will add a new mesh section
  46. hkResult concatUnindexed(hkMeshSection::PrimitiveType primType, int vertexStartIndex, int numIndices);
  47.             /// End the current primitive
  48.         void endMeshSection();
  49. /// Can only be performed once in start/end - and must not have been set up at start
  50. void setVertexBuffer(hkMeshVertexBuffer* vertexBuffer);
  51. /// Can only be performed once in start/end - and must not have been set up at start
  52. void setMaterial(hkMeshMaterial* material);
  53.             /// Get an array of primitives
  54.         HK_FORCE_INLINE const hkMeshSectionCinfo* getSections() const { return m_sections.begin(); }
  55.             /// Get the number of primitives
  56.         HK_FORCE_INLINE int getNumSections() const { return m_sections.getSize(); }
  57. static hkBool canConcatPrimitives(hkMeshSection::PrimitiveType b, hkMeshSection::PrimitiveType a);
  58.     protected:
  59. hkUint32* _addIndices32(int numIndices);
  60. hkUint16* _addIndices16(int numIndices);
  61. hkBool _canConcatPrimitive(hkMeshSection::PrimitiveType primType);
  62. void _makeIndices32();
  63. void _concatIndices(int vertexStartIndex, int numIndices);
  64. void _concatIndices(const hkUint16* srcIndices, int numIndices, int indexBase = 0);
  65. void _concatIndices(const hkUint32* srcIndices, int numIndices, int indexBase = 0);
  66. hkResult _makeConcatable(hkMeshSection::PrimitiveType primType);
  67. hkBool _isIndexed() const;
  68. hkResult _concatPrimitives(hkMeshSection::PrimitiveType primType, const hkUint16* indices, int numIndices, int indexBase);
  69. hkResult _concatPrimitives(hkMeshSection::PrimitiveType primType, const hkUint32* indices, int numIndices, int indexBase);
  70. static hkBool HK_CALL _needsIndices32(const hkUint16* srcIndices, int numIndices, int indexBase);
  71. int m_indexBase16;
  72. int m_indexBase32;
  73. hkArray<hkMeshSectionCinfo> m_sections;             ///
  74.         hkArray<hkUint16> m_indices16;                        ///
  75. hkArray<hkUint32> m_indices32; ///
  76. };
  77. #endif // HK_MESH_SECTION_BUILDER_H
  78. /*
  79. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  80. * Confidential Information of Havok.  (C) Copyright 1999-2009
  81. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  82. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  83. * rights, and intellectual property rights in the Havok software remain in
  84. * Havok and/or its suppliers.
  85. * Use of this software for evaluation purposes is subject to and indicates
  86. * acceptance of the End User licence Agreement for this product. A copy of
  87. * the license is included with this software and is also available at www.havok.com/tryhavok.
  88. */