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

其他游戏

开发平台:

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. typedef hkReal hkSimdReal;
  9. typedef hkReal hkSimdRealParameter;
  10. class hkVector4;
  11. typedef const hkVector4& hkVector4Parameter;
  12. #define HK_SIMD_REAL(a) hkSimdReal(a)
  13. HK_FORCE_INLINE void hkSimdReal_setMax(  hkSimdRealParameter a, hkSimdRealParameter b, hkSimdReal& result ) 
  14. {
  15. result = (a>b)?a:b;
  16. }
  17. HK_FORCE_INLINE void hkSimdReal_setMin(  hkSimdRealParameter a, hkSimdRealParameter b, hkSimdReal& result ) 
  18. {
  19. result = (a<b)?a:b;
  20. }
  21. HK_FORCE_INLINE void hkSimdReal_store(  hkSimdRealParameter a, float *f) 
  22. {
  23. *f = a;
  24. }
  25. #define HK_TRANSPOSE4_SWAP(a,b) t = a; a = b; b = t
  26. #define HK_TRANSPOSE4(v0,v1,v2,v3) { hkReal t; 
  27. HK_TRANSPOSE4_SWAP( v0(1), v1(0) ); 
  28. HK_TRANSPOSE4_SWAP( v0(2), v2(0) ); 
  29. HK_TRANSPOSE4_SWAP( v0(3), v3(0) ); 
  30. HK_TRANSPOSE4_SWAP( v1(2), v2(1) ); 
  31. HK_TRANSPOSE4_SWAP( v1(3), v3(1) ); 
  32. HK_TRANSPOSE4_SWAP( v2(3), v3(2) ); }
  33. #define HK_TRANSPOSE3_SWAP(a,b) t = a; a = b; b = t
  34. #define HK_TRANSPOSE3(v0,v1,v2) { hkReal t; 
  35. HK_TRANSPOSE3_SWAP( v0(1), v1(0) ); 
  36. HK_TRANSPOSE3_SWAP( v0(2), v2(0) ); 
  37. HK_TRANSPOSE3_SWAP( v1(2), v2(1) ); }
  38. struct hkQuadReal
  39. {
  40. HK_ALIGN16( hkReal x );
  41. hkReal y;
  42. hkReal z;
  43. hkReal w;
  44. };
  45. #define HK_QUADREAL_CONSTANT(a,b,c,d) {a,b,c,d}
  46. union hkQuadRealUnion
  47. {
  48. hkReal r[4];
  49. hkQuadReal q;
  50. };
  51. #define HK_SIMD_COMPARE_MASK_X 8
  52. /// Result of a hkVector4 comparison.
  53. class hkVector4Comparison
  54. {
  55. public:
  56. enum Mask
  57. {
  58. MASK_NONE = 0,
  59. MASK_W = 1,
  60. MASK_Z = 2,
  61. MASK_ZW = 3,
  62. MASK_Y = 4,
  63. MASK_YW = 5,
  64. MASK_YZ = 6,
  65. MASK_YZW = 7,
  66. MASK_X = 8,
  67. MASK_XW = 9,
  68. MASK_XZ = 10,
  69. MASK_XZW = 11,
  70. MASK_XY = 12,
  71. MASK_XYW = 13,
  72. MASK_XYZ = 14,
  73. MASK_XYZW = 15
  74. };
  75. static const Mask s_components[4];
  76. void setAnd( hkVector4Comparison a, hkVector4Comparison b ) { m_mask = a.m_mask & b.m_mask; }
  77. void set( Mask m ) { m_mask = m; }
  78. void setOr( hkVector4Comparison a, hkVector4Comparison b ) { m_mask = a.m_mask | b.m_mask; }
  79. void setNot( hkVector4Comparison a ) { m_mask = (~a.m_mask) & MASK_XYZW ; }
  80. HK_FORCE_INLINE void setSelect( hkVector4Comparison a, hkVector4Comparison b, hkVector4Comparison comp) 
  81. {
  82. m_mask = (comp.m_mask & b.m_mask) | (~comp.m_mask & a.m_mask);
  83. }
  84. hkBool32 allAreSet( Mask m ) const { return (m_mask & m) == m; }
  85. hkBool32 anyIsSet( Mask m ) const { return m_mask & m; }
  86. hkBool32 allAreSet() const { return m_mask == MASK_XYZW; }
  87. hkBool32 anyIsSet() const { return m_mask; }
  88. int getMask() const { return m_mask; }
  89. int getMask(Mask m) const { return m_mask & m; }
  90. private:
  91. int m_mask;
  92. friend class hkVector4;
  93. };
  94. typedef hkVector4Comparison hkVector4ComparisonParameter;
  95. /*
  96. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  97. * Confidential Information of Havok.  (C) Copyright 1999-2009
  98. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  99. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  100. * rights, and intellectual property rights in the Havok software remain in
  101. * Havok and/or its suppliers.
  102. * Use of this software for evaluation purposes is subject to and indicates
  103. * acceptance of the End User licence Agreement for this product. A copy of
  104. * the license is included with this software and is also available at www.havok.com/tryhavok.
  105. */