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

其他游戏

开发平台:

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_SYSTEM_H
  9. #define HK_MESH_SYSTEM_H
  10. class hkMeshShape;
  11. class hkMeshBody;
  12. class hkMeshMaterial;
  13. class hkMeshMaterialRegistry;
  14. class hkMeshVertexBuffer;
  15. struct hkMeshSectionCinfo;
  16. struct hkVertexFormat;
  17. struct hkIndexedTransformSetCinfo;
  18. extern const hkClass hkMeshSystemClass;
  19. /// The hkMeshSystem interface is designed to be a fairly low level interface to a rendering system.
  20. ///
  21. /// The interfaces involved with the hkMeshSystem are
  22. ///
  23. /// hkMeshMaterial      - A wrapper for a render specific implementation of a material
  24. /// hkMeshVertexBuffer  - An interface to an array of vertices, whose style is described by an hkVertexFormat object.
  25. /// hkMeshShape         - A set of one or more mesh sections - a mesh section defines a material, a vertex buffer and a number of render primitives.
  26. /// hkMeshBody          - A renderable instantiation of a hkMeshShape. Holds the position of the shape in the world - may hold per instance vertex data.
  27. /// hkMeshSystem        - Can construct all of the above, and holds the set of all of the hkMeshBodys which are being rendered.
  28. ///
  29. /// Only objects created on the hkMeshSystem can be used to create other hkMeshSystem objects. For example behavior is
  30. /// undefined if you create a vertex buffer on one instantiation of the hkMeshSystem interface, and try and use it on
  31. /// another.
  32. ///
  33. /// In the SDK there are currently two implementations of the hkMeshSystem interface - hkgMeshSystem and hkMemoryMeshSystem. The hkgMeshSystem
  34. /// implements the hkMeshSystem for Havoks' platform independent 'hkg' graphics library. The hkMemoryMeshSystem is an implementation
  35. /// which cannot perform any rendering, but holds all of the information about vertex buffers, materials and so forth in memory.
  36. /// Thus it allows you to use all of the hkMeshSystem converters and utilities even in an environment with no graphics support.
  37. /// For example you could use the hkMemoryMeshSystem implementation in an exporter to provide processing support.
  38. /// Also depending on your target hkMeshSystem implementation, using the hkMemoryMeshSystem may be significantly faster
  39. /// during processing, as it uses cached system memory - whereas a hardware implementation of a vertex buffer may return
  40. /// memory which is slow.
  41. ///
  42. /// An important point about hkMeshShape construction is that the hkMeshVertexBuffers that the hkMeshShape references, must already be filled in with
  43. /// information. This is necessary - because an implementation may use that information to create a bounding volume around the object.
  44. ///
  45. /// NOTE! That once a hkMeshShape has been constructed with a hkVertexBuffer it should be considered immutable. Altering a vertex buffer
  46. /// once a hkMeshShape has been constructed using it produces undefined results, and is implementation specific. Not having the
  47. /// restriction allows an implementation more opportunities to optimize vertex data, and for simpler implementation.
  48. ///
  49. /// If there is a need for modifications of vertex data - this can be achieved by specifying the elements of the vertex buffer
  50. /// as being not shared - and so they can be modified via the vertex buffer retrieved from the hkMeshBody. The only limitation
  51. /// is that it is not possible to have all instantiations of bodies vertex buffers change by altering a single vertex buffer.
  52. ///
  53. /// sa hkMeshMaterial hkMeshVertexBuffer hkMeshShape hkMeshBody
  54. class hkMeshSystem: public hkReferencedObject
  55. {
  56. public:
  57.         HK_DECLARE_CLASS_ALLOCATOR(HK_MEMORY_CLASS_SCENE_DATA);
  58. /// Get the material registry
  59. virtual hkMeshMaterialRegistry* getMaterialRegistry() const = 0;
  60.             /// Create a mesh shape
  61.             /// Returns HK_NULL if not successful.
  62.         virtual hkMeshShape* createShape(const hkMeshSectionCinfo* sections, int numSections) = 0;
  63. /// Create a compound shape. The compound will produce a new shape, with each contained
  64. /// shape, having a transform index to allow control of each 'contained' shape individually.
  65. /// An implementation can change the structure of the object (for example producing a single shared vertex buffer), but
  66. /// graphically must look the same. Also note there is no way to find out the shapes used to construct the compound.
  67. /// It is possible to create a shape that has the same functionality as a shape created this way by using the m_transformIndex in the hkMeshSection.
  68.             /// Returns HK_NULL if not successful.
  69. virtual hkMeshShape* createCompoundShape(const hkMeshShape*const* shapes, const hkMatrix4* transforms, int numShapes) = 0;
  70. /// Create mesh body with the specified local position, and transform set
  71. /// The transform set is only needed for compound, or skinned usage. Passing in HK_NULL will disable skinning or per hkMeshSection transforms
  72.             /// Returns HK_NULL if not successful.
  73.         virtual hkMeshBody* createBody(const hkMeshShape* shape, const hkMatrix4& mat, hkIndexedTransformSetCinfo* transformSet) = 0;
  74.             /// Create a vertex buffer. Returns HK_NULL if not successful.
  75.         virtual hkMeshVertexBuffer* createVertexBuffer(const hkVertexFormat& vertexFormat, int numVertices) = 0;
  76.             /// Returns a vertex format which is suitable for this mesh system, based on the format passed in.
  77.         virtual void findSuitableVertexFormat(const hkVertexFormat& format, hkVertexFormat& formatOut) = 0;
  78.             /// Returns an 'empty' material. Will be of the right type for the mesh system. In order to make the material
  79.             /// appear correctly code for a specific engine implementation needs to set the internal state appropriately.
  80.         virtual hkMeshMaterial* createMaterial() = 0;
  81. /// Add a body
  82. virtual void addBody(hkMeshBody* body) = 0;
  83. /// Remove a body
  84. virtual void removeBody(hkMeshBody* body) = 0;
  85.             /// Called once per frame - required to perform any system wide per frame operations.
  86. virtual void update() = 0;
  87. };
  88. #endif // HK_MESH_SYSTEM_H
  89. /*
  90. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  91. * Confidential Information of Havok.  (C) Copyright 1999-2009
  92. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  93. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  94. * rights, and intellectual property rights in the Havok software remain in
  95. * Havok and/or its suppliers.
  96. * Use of this software for evaluation purposes is subject to and indicates
  97. * acceptance of the End User licence Agreement for this product. A copy of
  98. * the license is included with this software and is also available at www.havok.com/tryhavok.
  99. */