Add btBvhTriangleMeshShape::buildOptimizedBvh() in preparation of next commit. This...
authorBenoit Bolsee <benoit.bolsee@online.be>
Wed, 3 Feb 2010 21:20:06 +0000 (21:20 +0000)
committerBenoit Bolsee <benoit.bolsee@online.be>
Wed, 3 Feb 2010 21:20:06 +0000 (21:20 +0000)
extern/bullet2/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp
extern/bullet2/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h

index 68ff5e2d7bba9f910c746316b0802b209579d989..4d3501969434218cdeb40276bcc102d2c500335c 100644 (file)
@@ -30,22 +30,9 @@ m_ownsBvh(false)
        //construct bvh from meshInterface
 #ifndef DISABLE_BVH
 
-       btVector3 bvhAabbMin,bvhAabbMax;
-       if(meshInterface->hasPremadeAabb())
-       {
-               meshInterface->getPremadeAabb(&bvhAabbMin, &bvhAabbMax);
-       }
-       else
-       {
-               meshInterface->calculateAabbBruteForce(bvhAabbMin,bvhAabbMax);
-       }
-       
        if (buildBvh)
        {
-               void* mem = btAlignedAlloc(sizeof(btOptimizedBvh),16);
-               m_bvh = new (mem) btOptimizedBvh();
-               m_bvh->build(meshInterface,m_useQuantizedAabbCompression,bvhAabbMin,bvhAabbMax);
-               m_ownsBvh = true;
+               buildOptimizedBvh();
        }
 
 #endif //DISABLE_BVH
@@ -343,20 +330,25 @@ void   btBvhTriangleMeshShape::setLocalScaling(const btVector3& scaling)
    if ((getLocalScaling() -scaling).length2() > SIMD_EPSILON)
    {
       btTriangleMeshShape::setLocalScaling(scaling);
-      if (m_ownsBvh)
-      {
-         m_bvh->~btOptimizedBvh();
-         btAlignedFree(m_bvh);
-      }
-      ///m_localAabbMin/m_localAabbMax is already re-calculated in btTriangleMeshShape. We could just scale aabb, but this needs some more work
-      void* mem = btAlignedAlloc(sizeof(btOptimizedBvh),16);
-      m_bvh = new(mem) btOptimizedBvh();
-      //rebuild the bvh...
-      m_bvh->build(m_meshInterface,m_useQuantizedAabbCompression,m_localAabbMin,m_localAabbMax);
-      m_ownsBvh = true;
+         buildOptimizedBvh();
    }
 }
 
+void   btBvhTriangleMeshShape::buildOptimizedBvh()
+{
+       if (m_ownsBvh)
+       {
+               m_bvh->~btOptimizedBvh();
+               btAlignedFree(m_bvh);
+       }
+       ///m_localAabbMin/m_localAabbMax is already re-calculated in btTriangleMeshShape. We could just scale aabb, but this needs some more work
+       void* mem = btAlignedAlloc(sizeof(btOptimizedBvh),16);
+       m_bvh = new(mem) btOptimizedBvh();
+       //rebuild the bvh...
+       m_bvh->build(m_meshInterface,m_useQuantizedAabbCompression,m_localAabbMin,m_localAabbMax);
+       m_ownsBvh = true;
+}
+
 void   btBvhTriangleMeshShape::setOptimizedBvh(btOptimizedBvh* bvh, const btVector3& scaling)
 {
    btAssert(!m_bvh);
index cb2c326574e443323b98cac0373d7e32267d6d84..ab54bd1a1edc222bdff09fc5f99807910a7e248e 100644 (file)
@@ -76,6 +76,8 @@ public:
 
        void    setOptimizedBvh(btOptimizedBvh* bvh, const btVector3& localScaling=btVector3(1,1,1));
 
+       void    buildOptimizedBvh();
+
        bool    usesQuantizedAabbCompression() const
        {
                return  m_useQuantizedAabbCompression;