Преглед на файлове

Explicitly cast infinity to float in btVector3 code to prevent narrowing errors on TDM-GCC. Closes #1637.

Lasse Öörni преди 9 години
родител
ревизия
00f414416e
променени са 1 файла, в които са добавени 6 реда и са изтрити 4 реда
  1. 6 4
      Source/ThirdParty/Bullet/src/LinearMath/btVector3.cpp

+ 6 - 4
Source/ThirdParty/Bullet/src/LinearMath/btVector3.cpp

@@ -15,7 +15,7 @@
  This source version has been altered.
  */
 
- // Modified by Yao Wei Tjong for Urho3D
+ // Modified by Yao Wei Tjong & Lasse Oorni for Urho3D
 
 #if defined (_WIN32) || defined (__i386__)
 #define BT_USE_SSE_IN_API
@@ -54,11 +54,12 @@ long _maxdot_large( const float *vv, const float *vec, unsigned long count, floa
 {
     const float4 *vertices = (const float4*) vv;
     static const unsigned char indexTable[16] = {(unsigned char)-1, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 };
-    float4 dotMax = btAssign128( -BT_INFINITY,  -BT_INFINITY,  -BT_INFINITY,  -BT_INFINITY );
+    // Urho3D: cast to float in case BT_INFINITY is double on some MinGW derived compilers to prevent narrowing errors
+    float4 dotMax = btAssign128( static_cast<float>(-BT_INFINITY),  static_cast<float>(-BT_INFINITY), static_cast<float>(-BT_INFINITY), static_cast<float>(-BT_INFINITY) );
     float4 vvec = _mm_loadu_ps( vec );
     float4 vHi = btCastiTo128f(_mm_shuffle_epi32( btCastfTo128i( vvec), 0xaa ));          /// zzzz
     float4 vLo = _mm_movelh_ps( vvec, vvec );                               /// xyxy
-    
+
     long maxIndex = -1L;
     
     size_t segment = 0;
@@ -439,7 +440,8 @@ long _mindot_large( const float *vv, const float *vec, unsigned long count, floa
 {
     const float4 *vertices = (const float4*) vv;
     static const unsigned char indexTable[16] = {(unsigned char)-1, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 };
-    float4 dotmin = btAssign128( BT_INFINITY,  BT_INFINITY,  BT_INFINITY,  BT_INFINITY );
+    // Urho3D: cast to float in case BT_INFINITY is double on some MinGW derived compilers to prevent narrowing errors
+    float4 dotmin = btAssign128( static_cast<float>(BT_INFINITY), static_cast<float>(BT_INFINITY), static_cast<float>(BT_INFINITY), static_cast<float>(BT_INFINITY) );
     float4 vvec = _mm_loadu_ps( vec );
     float4 vHi = btCastiTo128f(_mm_shuffle_epi32( btCastfTo128i( vvec), 0xaa ));          /// zzzz
     float4 vLo = _mm_movelh_ps( vvec, vvec );                               /// xyxy