Make btParallelConstraintSolver 64-bit ready
add an optional assert method for the btCollisionDispatcher, to make sure the contact pool is contiguous (needed for btParallelConstraintSolver)
This commit is contained in:
@@ -26,6 +26,7 @@ class btOverlappingPairCache;
|
||||
|
||||
class btPersistentManifold;
|
||||
class btStackAlloc;
|
||||
class btPoolAllocator;
|
||||
|
||||
struct btDispatcherInfo
|
||||
{
|
||||
@@ -97,6 +98,10 @@ public:
|
||||
|
||||
virtual btPersistentManifold** getInternalManifoldPointer() = 0;
|
||||
|
||||
virtual btPoolAllocator* getInternalManifoldPool() = 0;
|
||||
|
||||
virtual const btPoolAllocator* getInternalManifoldPool() const = 0;
|
||||
|
||||
virtual void* allocateCollisionAlgorithm(int size) = 0;
|
||||
|
||||
virtual void freeCollisionAlgorithm(void* ptr) = 0;
|
||||
|
||||
@@ -92,8 +92,16 @@ btPersistentManifold* btCollisionDispatcher::getNewManifold(void* b0,void* b1)
|
||||
mem = m_persistentManifoldPoolAllocator->allocate(sizeof(btPersistentManifold));
|
||||
} else
|
||||
{
|
||||
mem = btAlignedAlloc(sizeof(btPersistentManifold),16);
|
||||
|
||||
//we got a pool memory overflow, by default we fallback to dynamically allocate memory. If we require a contiguous contact pool then assert.
|
||||
if ((m_dispatcherFlags&CD_DISABLE_CONTACTPOOL_DYNAMIC_ALLOCATION)==0)
|
||||
{
|
||||
mem = btAlignedAlloc(sizeof(btPersistentManifold),16);
|
||||
} else
|
||||
{
|
||||
btAssert(0);
|
||||
//make sure to increase the m_defaultMaxPersistentManifoldPoolSize in the btDefaultCollisionConstructionInfo/btDefaultCollisionConfiguration
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
btPersistentManifold* manifold = new(mem) btPersistentManifold (body0,body1,0,contactBreakingThreshold,contactProcessingThreshold);
|
||||
manifold->m_index1a = m_manifoldsPtr.size();
|
||||
|
||||
@@ -67,7 +67,8 @@ public:
|
||||
enum DispatcherFlags
|
||||
{
|
||||
CD_STATIC_STATIC_REPORTED = 1,
|
||||
CD_USE_RELATIVE_CONTACT_BREAKING_THRESHOLD = 2
|
||||
CD_USE_RELATIVE_CONTACT_BREAKING_THRESHOLD = 2,
|
||||
CD_DISABLE_CONTACTPOOL_DYNAMIC_ALLOCATION = 4
|
||||
};
|
||||
|
||||
int getDispatcherFlags() const
|
||||
@@ -155,6 +156,16 @@ public:
|
||||
m_collisionConfiguration = config;
|
||||
}
|
||||
|
||||
virtual btPoolAllocator* getInternalManifoldPool()
|
||||
{
|
||||
return m_persistentManifoldPoolAllocator;
|
||||
}
|
||||
|
||||
virtual const btPoolAllocator* getInternalManifoldPool() const
|
||||
{
|
||||
return m_persistentManifoldPoolAllocator;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif //BT_COLLISION__DISPATCHER_H
|
||||
|
||||
Reference in New Issue
Block a user