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

其他游戏

开发平台:

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_MEMORY_MESH_VERTEX_BUFFER_H
  9. #define HK_MEMORY_MESH_VERTEX_BUFFER_H
  10. #include <Common/GeometryUtilities/Mesh/hkMeshVertexBuffer.h>
  11. extern const hkClass hkMemoryMeshVertexBufferClass;
  12. /// A memory implementation of a hkMeshVertexBuffer
  13. class hkMemoryMeshVertexBuffer: public hkMeshVertexBuffer
  14. {
  15.     public:
  16.         HK_DECLARE_CLASS_ALLOCATOR(HK_MEMORY_CLASS_SCENE_DATA);
  17.             /// Default Ctor
  18.         hkMemoryMeshVertexBuffer();
  19.             /// Ctor
  20.         hkMemoryMeshVertexBuffer(const hkVertexFormat& format, int numVertices);
  21.             /// Dtor
  22.         virtual ~hkMemoryMeshVertexBuffer();
  23.             // hkMeshVertexBuffer implementation
  24.         virtual void getVertexFormat( hkVertexFormat& formatOut ) { formatOut = m_format; }
  25.             // hkMeshVertexBuffer implementation
  26.         virtual int getNumVertices() { return m_numVertices; }
  27.             // hkMeshVertexBuffer implementation
  28. virtual LockResult lock( const LockInput& input, LockedVertices& lockedVerticesOut );
  29.             // hkMeshVertexBuffer implementation
  30. virtual LockResult partialLock( const LockInput& input, const PartialLockInput& partialInput, LockedVertices& lockedOut);
  31.             // hkMeshVertexBuffer implementation
  32. virtual void getElementVectorArray(const LockedVertices& lockedVertices, int elementIndex, hkVector4* compData);
  33.             // hkMeshVertexBuffer implementation
  34. virtual void setElementVectorArray(const LockedVertices& lockedVertices, int elementIndex, const hkVector4* compData);
  35.             // hkMeshVertexBuffer implementation
  36. virtual void getElementIntArray(const LockedVertices& lockedVertices, int elementIndex, int* compData);
  37.             // hkMeshVertexBuffer implementation
  38. virtual void setElementIntArray(const LockedVertices& lockedVertices, int elementIndex, const int* compData);
  39.             // hkMeshVertexBuffer implementation
  40.         virtual void unlock( const LockedVertices& lockedVertices );
  41.     // hkReferencedObject Implementation
  42.         virtual const hkClass* getClassType() const { return &hkMemoryMeshVertexBufferClass; }
  43.             // hkReferencedObject Implementation
  44.         virtual void calcContentStatistics( hkStatisticsCollector* collector,const hkClass* cls ) const;
  45.             /// hkMeshVertexBuffer implementation
  46. virtual hkMeshVertexBuffer* clone();
  47.             /// hkMeshVertexBuffer implementation
  48.         virtual bool isSharable() { return m_isSharable; }
  49.             /// Get the buffer (avoids having to do a lock)
  50.         void getLockedVerticesBuffer(int elementIndex, LockedVertices::Buffer& buffer);
  51.             /// Get a locked vertex buffer structure for a range of vertices. (avoids doing a lock)
  52.         void getLockedVertices( int startVertex, int numVertices, LockedVertices& lockedVerticesOut );
  53.             /// Set a different vertex format - will set up as having zero vertices
  54.         void setVertexFormat(const hkVertexFormat& format);
  55.             /// Set up the amount of vertices - will zero the memory
  56.         void setNumVerticesAndZero(int numVertices);
  57.             /// Use an external buffer for data storage. bufferSize must be equal to the vertex stride * numVertices
  58.             /// The buffer must stay in scope as long as the hkMemoryVertexBuffer exists
  59.         void useExternalBuffer(void* data, int numVertices, int bufferSize);
  60.             /// Get the vertex data
  61.         hkUint8* getVertexData() { return m_memory.begin(); }
  62.             /// Get the vertex data
  63.         const hkUint8* getVertexData() const { return m_memory.begin(); }
  64.             /// Get the vertex stride
  65.         int getVertexStride() const { return m_vertexStride; }
  66.             /// Calculates the offset to each component, as well as the total size of a vertex
  67.         static int HK_CALL calculateElementOffsets(const hkVertexFormat& format, int offsets[hkVertexFormat::MAX_ELEMENTS]);
  68.     protected:
  69.         hkVertexFormat m_format;                                    ///
  70.         int m_elementOffsets[hkVertexFormat::MAX_ELEMENTS];         ///
  71.         hkArray<hkUint8> m_memory;                                  ///
  72.         int m_vertexStride;                                         ///
  73.         hkBool m_locked;                                            ///
  74.         int m_numVertices;                                          ///
  75.         hkBool m_isSharable;
  76. };
  77. #endif // HK_MEMORY_MESH_VERTEX_BUFFER_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. */