hkpConvexTransformShape.inl
上传用户: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. inline const hkpConvexShape* hkpConvexTransformShape::getChildShape() const 
  9. return static_cast<const hkpConvexShape*>(m_childShape.getChild()); 
  10. }
  11. inline hkTransform& hkpConvexTransformShape::getTransform() 
  12. return m_transform; 
  13. }
  14. inline const hkTransform& hkpConvexTransformShape::getTransform() const 
  15. return m_transform; 
  16. }
  17. inline int hkpConvexTransformShape::calcSizeForSpu(const CalcSizeForSpuInput& input, int spuBufferSizeLeft) const
  18. {
  19. // only cascades that will fit in total into one of the spu's shape buffers are allowed to be uploaded onto spu.
  20. int maxAvailableBufferSizeForChild = spuBufferSizeLeft - sizeof(*this);
  21. int childSize = m_childShape.getChild()->calcSizeForSpu(input, maxAvailableBufferSizeForChild);
  22. if ( childSize < 0 )
  23. {
  24. // Child shape will print a more detailed error message (with a reason).
  25. HK_WARN(0xdbc05911, "hkpConvexTransformShape child (" << hkGetShapeTypeName(getChildShape()->getType()) << ") cannot be processed on SPU.");
  26. return -1;
  27. }
  28. if ( childSize > maxAvailableBufferSizeForChild )
  29. {
  30. // early out if cascade will not fit into spu's shape buffer
  31. HK_WARN(0xdbc05911, "hkpConvexTransformShape child (" << hkGetShapeTypeName(getChildShape()->getType()) << ") will not fit on SPU.");
  32. return -1;
  33. }
  34. // if child is consecutive in memory, set flag and return total size
  35. if ( hkUlong(m_childShape.getChild()) == hkUlong((this+1)) )
  36. {
  37. m_childShapeSize = 0;
  38. return sizeof(*this) + childSize;
  39. }
  40. // the spu will need this value to properly dma the child shape in one go
  41. m_childShapeSize = childSize;
  42. // if child is not consecutive in memory, restart size calculation with just us
  43. return sizeof(*this);
  44. }
  45. inline void hkpConvexTransformShape::initializeSpu( const hkpConvexShape* childShape, const hkTransform& transform, hkReal radius )
  46. {
  47. m_type = HK_SHAPE_CONVEX_TRANSFORM;
  48. m_childShape = childShape; 
  49. m_radius = radius;
  50. m_transform = transform;
  51. m_childShapeSize = 0;
  52. }
  53. /*
  54. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  55. * Confidential Information of Havok.  (C) Copyright 1999-2009
  56. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  57. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  58. * rights, and intellectual property rights in the Havok software remain in
  59. * Havok and/or its suppliers.
  60. * Use of this software for evaluation purposes is subject to and indicates
  61. * acceptance of the End User licence Agreement for this product. A copy of
  62. * the license is included with this software and is also available at www.havok.com/tryhavok.
  63. */