hkMeshVertexBufferUtil.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_VERTEX_BUFFER_UTIL_H
  9. #define HK_VERTEX_BUFFER_UTIL_H
  10. #include <Common/GeometryUtilities/Mesh/hkMeshVertexBuffer.h>
  11. class hkMeshSystem;
  12. /// A utility to help in the processing of vertices and vertex buffers
  13. class hkMeshVertexBufferUtil
  14. {
  15.     public:
  16.         struct Thresholds
  17.         {
  18.             Thresholds():
  19.                 m_positionThreshold(1e-5f),
  20.                 m_normalThreshold(1e-3f),
  21.                 m_colorThreshold(1.0f / 255.0f),
  22.                 m_otherThreshold(1e-5f),
  23.                 m_texCoordThreshold(1e-6f)
  24.             {
  25.             }
  26.             hkReal m_positionThreshold;
  27.             hkReal m_normalThreshold;
  28.             hkReal m_colorThreshold;
  29.             hkReal m_otherThreshold;
  30.             hkReal m_texCoordThreshold;
  31.         };
  32.         enum TransformFlag
  33.         {
  34.             TRANSFORM_NORMALIZE = 0x1,                      
  35.             TRANSFORM_PRE_NEGATE = 0x2,                     
  36.             TRANSFORM_POST_NEGATE = 0x4,                    
  37.         };
  38.             /// Extract the buffer as vector4s
  39.         static hkResult HK_CALL getElementVectorArray(const hkMeshVertexBuffer::LockedVertices::Buffer& buffer, hkVector4* out, int numVertices);
  40.             /// Get components and store in a hkVector4 array (helper function - calls getElementVectorArray with the appropriate buffer)
  41.         static hkResult HK_CALL getElementVectorArray(const hkMeshVertexBuffer::LockedVertices& lockedVertices, int bufferIndex, hkVector4* dst);
  42.             /// Set components held in buffer from an array of hkVector4s
  43.         static hkResult HK_CALL setElementVectorArray(const hkMeshVertexBuffer::LockedVertices::Buffer& buffer, const hkVector4* src, int numVertices);
  44.             /// Set components from a hkVector4 array (helper fucntion - calls setElementVectorArray with the appropritate buffer)
  45.         static hkResult HK_CALL setElementVectorArray(const hkMeshVertexBuffer::LockedVertices& lockedVertices, int bufferIndex, const hkVector4* src);
  46. /// The elements being extracted must have been previously been locked with lock/partialLock.
  47. static hkResult HK_CALL getElementIntArray(const hkMeshVertexBuffer::LockedVertices& lockedVertices, int elementIndex, int* dst);
  48. /// Sets the elements of an array doing conversions from ints as needed. Converts only integral types.
  49. /// The elements being set must have previously have been locked with lock/partialLock.
  50. static hkResult HK_CALL setElementIntArray(const hkMeshVertexBuffer::LockedVertices& lockedVertices, int elementIndex, const int* src);
  51.             /// Copy the elements of src to dst of elementSize with the appropriate striding
  52.         static void HK_CALL stridedCopy(const void* srcIn, int srcStride, void* dstIn, int dstStride, int elementSize, int numVertices);
  53.             /// Zero the strided destination data
  54.         static void HK_CALL stridedZero(void* dstIn, int dstStride, int elementSize, int numVertices);
  55.             /// Copy vertex data from srcVertices to dstVertices
  56.         static void HK_CALL copy(const hkMeshVertexBuffer::LockedVertices& srcVertices, const hkMeshVertexBuffer::LockedVertices& dstVertices);
  57.             /// Copy the data from one buffer to the other - they must be the same type (m_type + m_numValues the same)
  58.         static void HK_CALL copy(const hkMeshVertexBuffer::LockedVertices::Buffer& srcBuffer, const hkMeshVertexBuffer::LockedVertices::Buffer& dstBuffer, int numVertices);
  59.             /// Copy/convert all of the src buffers into the destination buffers.
  60.         static void HK_CALL convert(const hkMeshVertexBuffer::LockedVertices& srcVertices, const hkMeshVertexBuffer::LockedVertices& dstVertices);
  61. /// Copys/converts all members of src into dst
  62. static void HK_CALL convert(hkMeshVertexBuffer* src, hkMeshVertexBuffer* dst);
  63.             /// Copy and convert as necessary
  64.         static void HK_CALL convert(const hkMeshVertexBuffer::LockedVertices::Buffer& srcBuffer, const hkMeshVertexBuffer::LockedVertices::Buffer& dstBuffer, int numVertices);
  65.             /// Finds out if the locked vertex data is contiguous
  66.         static hkBool HK_CALL isContiguous(const hkMeshVertexBuffer::LockedVertices& srcVertices, void** start, int& dataSize);
  67.             /// Partition the format into shared and non shared (instanced) elements
  68.         static void HK_CALL partitionVertexFormat(const hkVertexFormat& format, hkVertexFormat& sharedFormat, hkVertexFormat& instanceFormat);
  69.             /// Get array component
  70.         static hkResult HK_CALL getElementVectorArray(hkMeshVertexBuffer* vertexBuffer, hkVertexFormat::DataUsage usage, int subUsage, hkArray<hkVector4>& vectorsOut);
  71.             /// Transform the content of the buffer
  72.         static void HK_CALL transform(const hkMeshVertexBuffer::LockedVertices::Buffer& srcBuffer, const hkMatrix4& transform, int transformFlags, int numVertices);
  73.             /// Transform the content of the vertex buffer
  74.         static hkResult HK_CALL transform(hkMeshVertexBuffer* buffer, const hkMatrix4& transform, int transformFlags);
  75.             /// Produces a new vertex buffer which is a concatenation of the input buffers. If only 1 buffer is input the original buffer is returned with an extra ref count.
  76.         static hkMeshVertexBuffer* HK_CALL concatVertexBuffers(hkMeshSystem* system, hkMeshVertexBuffer** buffers, int numBuffers);
  77.             /// Compares two buffers - all values must be equal within the threshold to return true.
  78.         static hkBool HK_CALL isBufferDataEqual(const hkMeshVertexBuffer::LockedVertices::Buffer& bufferA, const hkMeshVertexBuffer::LockedVertices::Buffer& bufferB, hkReal threshold);
  79. /// Compare - handle data as a normal (use dot products difference from 1 as measure of error)
  80. static hkBool HK_CALL isBufferNormalDataEqual(const hkMeshVertexBuffer::LockedVertices::Buffer& bufferA, const hkMeshVertexBuffer::LockedVertices::Buffer& bufferB, hkReal threshold);
  81.             /// Compares an array of buffer data. Uses the thresholds strucuture to determine what is equal based on type
  82.         static hkBool HK_CALL isBufferDataEqual(const hkMeshVertexBuffer::LockedVertices::Buffer* a, const hkMeshVertexBuffer::LockedVertices::Buffer* b, int numBuffers, const Thresholds& thresholds);
  83. };
  84. #endif // HK_VERTEX_BUFFER_UTIL_H
  85. /*
  86. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  87. * Confidential Information of Havok.  (C) Copyright 1999-2009
  88. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  89. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  90. * rights, and intellectual property rights in the Havok software remain in
  91. * Havok and/or its suppliers.
  92. * Use of this software for evaluation purposes is subject to and indicates
  93. * acceptance of the End User licence Agreement for this product. A copy of
  94. * the license is included with this software and is also available at www.havok.com/tryhavok.
  95. */