Add btBvhTriangleMeshShape::buildOptimizedBvh() in preparation of next commit. This patch has been approved already and will be in Bullet 2.76.
This commit is contained in:
@@ -30,22 +30,9 @@ m_ownsBvh(false)
|
|||||||
//construct bvh from meshInterface
|
//construct bvh from meshInterface
|
||||||
#ifndef DISABLE_BVH
|
#ifndef DISABLE_BVH
|
||||||
|
|
||||||
btVector3 bvhAabbMin,bvhAabbMax;
|
|
||||||
if(meshInterface->hasPremadeAabb())
|
|
||||||
{
|
|
||||||
meshInterface->getPremadeAabb(&bvhAabbMin, &bvhAabbMax);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
meshInterface->calculateAabbBruteForce(bvhAabbMin,bvhAabbMax);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buildBvh)
|
if (buildBvh)
|
||||||
{
|
{
|
||||||
void* mem = btAlignedAlloc(sizeof(btOptimizedBvh),16);
|
buildOptimizedBvh();
|
||||||
m_bvh = new (mem) btOptimizedBvh();
|
|
||||||
m_bvh->build(meshInterface,m_useQuantizedAabbCompression,bvhAabbMin,bvhAabbMax);
|
|
||||||
m_ownsBvh = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //DISABLE_BVH
|
#endif //DISABLE_BVH
|
||||||
@@ -343,20 +330,25 @@ void btBvhTriangleMeshShape::setLocalScaling(const btVector3& scaling)
|
|||||||
if ((getLocalScaling() -scaling).length2() > SIMD_EPSILON)
|
if ((getLocalScaling() -scaling).length2() > SIMD_EPSILON)
|
||||||
{
|
{
|
||||||
btTriangleMeshShape::setLocalScaling(scaling);
|
btTriangleMeshShape::setLocalScaling(scaling);
|
||||||
if (m_ownsBvh)
|
buildOptimizedBvh();
|
||||||
{
|
|
||||||
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::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)
|
void btBvhTriangleMeshShape::setOptimizedBvh(btOptimizedBvh* bvh, const btVector3& scaling)
|
||||||
{
|
{
|
||||||
btAssert(!m_bvh);
|
btAssert(!m_bvh);
|
||||||
|
@@ -76,6 +76,8 @@ public:
|
|||||||
|
|
||||||
void setOptimizedBvh(btOptimizedBvh* bvh, const btVector3& localScaling=btVector3(1,1,1));
|
void setOptimizedBvh(btOptimizedBvh* bvh, const btVector3& localScaling=btVector3(1,1,1));
|
||||||
|
|
||||||
|
void buildOptimizedBvh();
|
||||||
|
|
||||||
bool usesQuantizedAabbCompression() const
|
bool usesQuantizedAabbCompression() const
|
||||||
{
|
{
|
||||||
return m_useQuantizedAabbCompression;
|
return m_useQuantizedAabbCompression;
|
||||||
|
Reference in New Issue
Block a user