hkVertexBufferSharingUtil.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_VERTEX_BUFFER_SHARING_UTIL_H
  9. #define HK_VERTEX_BUFFER_SHARING_UTIL_H
  10. class hkMeshSystem;
  11. class hkMeshShape;
  12. /// Vertex buffer sharing utility
  13. ///
  14. /// Given a array of mesh shapes, will reconstruct all of the mesh shapes, combining vertex buffers of the same format
  15. /// into buffers of maxVertices or less. If a mesh section indexes more than maxVertices vertices, a vertex buffer will
  16. /// be constructed of that size.
  17. ///
  18. /// Note that the algorithm reconstructs all hkMeshShapes using the system, even if its possible it doesn't need to
  19. /// - for example if the a section indexes all of the vertices in a vertex buffer which has more than maxVertices.
  20. ///
  21. /// Also note that all mesh sections get translated into triangle lists - this is generally necessary as the sharing means
  22. /// reindexing of the primitives.
  23. ///
  24. /// The algorithm uses the actually contained vertex data as indexed by mesh sections. Vertex data doesn't have to be exactly the same, and there
  25. /// is a threshold for what makes vertices equal. This means
  26. ///
  27. /// 1) If the input are already using shared vertex buffers, the output will throw out un indexed vertex indices
  28. /// 2) If there are are more than one vertex buffer that contains a vertex which is 'approximately equal', they will all be potentially shared
  29. /// 3) Since there is a limit on the vertices in combined vertex buffer - a vertex which is 'approximately equal' may appear multiple times
  30. ///
  31. /// Future updates could take into account how many vertices are shared when recombining - at the moment, the smallest are
  32. /// recombined together, the thinking is that the small pieces are likely to be used together.
  33. class hkVertexBufferSharingUtil
  34. {
  35.     public:
  36.         HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SCENE_DATA, hkVertexBufferSharingUtil );
  37.             /// Shares vertex buffers, up to max vertices and constructs new meshes that share the vertex buffers
  38.         static void HK_CALL shareVertexBuffers(hkMeshSystem* system, const hkArray<const hkMeshShape*>& shapes, int maxVertices, hkArray<hkMeshShape*>& shapesOut);
  39. };
  40. #endif // HK_VERTEX_BUFFER_SHARING_UTIL_H
  41. /*
  42. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  43. * Confidential Information of Havok.  (C) Copyright 1999-2009
  44. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  45. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  46. * rights, and intellectual property rights in the Havok software remain in
  47. * Havok and/or its suppliers.
  48. * Use of this software for evaluation purposes is subject to and indicates
  49. * acceptance of the End User licence Agreement for this product. A copy of
  50. * the license is included with this software and is also available at www.havok.com/tryhavok.
  51. */