Refactoring for parallel processing of islands, collision detection and constraint solving.
This commit is contained in:
@@ -33,7 +33,7 @@ public:
|
|||||||
virtual void DestroyProxy(BroadphaseProxy* proxy)=0;
|
virtual void DestroyProxy(BroadphaseProxy* proxy)=0;
|
||||||
virtual void SetAabb(BroadphaseProxy* proxy,const SimdVector3& aabbMin,const SimdVector3& aabbMax)=0;
|
virtual void SetAabb(BroadphaseProxy* proxy,const SimdVector3& aabbMin,const SimdVector3& aabbMax)=0;
|
||||||
virtual void CleanProxyFromPairs(BroadphaseProxy* proxy)=0;
|
virtual void CleanProxyFromPairs(BroadphaseProxy* proxy)=0;
|
||||||
virtual void DispatchAllCollisionPairs(Dispatcher& dispatcher,DispatcherInfo& dispatchInfo)=0;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -147,67 +147,4 @@ void OverlappingPairCache::RemoveOverlappingPairsContainingProxy(BroadphaseProxy
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void OverlappingPairCache::DispatchAllCollisionPairs(Dispatcher& dispatcher,DispatcherInfo& dispatchInfo)
|
|
||||||
{
|
|
||||||
m_blockedForChanges = true;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
int dispatcherId = dispatcher.GetUniqueId();
|
|
||||||
|
|
||||||
RefreshOverlappingPairs();
|
|
||||||
|
|
||||||
for (i=0;i<m_NumOverlapBroadphasePair;i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
BroadphasePair& pair = m_OverlappingPairs[i];
|
|
||||||
|
|
||||||
if (dispatcherId>= 0)
|
|
||||||
{
|
|
||||||
//dispatcher will keep algorithms persistent in the collision pair
|
|
||||||
if (!pair.m_algorithms[dispatcherId])
|
|
||||||
{
|
|
||||||
pair.m_algorithms[dispatcherId] = dispatcher.FindAlgorithm(
|
|
||||||
*pair.m_pProxy0,
|
|
||||||
*pair.m_pProxy1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pair.m_algorithms[dispatcherId])
|
|
||||||
{
|
|
||||||
if (dispatchInfo.m_dispatchFunc == DispatcherInfo::DISPATCH_DISCRETE)
|
|
||||||
{
|
|
||||||
pair.m_algorithms[dispatcherId]->ProcessCollision(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
float toi = pair.m_algorithms[dispatcherId]->CalculateTimeOfImpact(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
|
||||||
if (dispatchInfo.m_timeOfImpact > toi)
|
|
||||||
dispatchInfo.m_timeOfImpact = toi;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
//non-persistent algorithm dispatcher
|
|
||||||
CollisionAlgorithm* algo = dispatcher.FindAlgorithm(
|
|
||||||
*pair.m_pProxy0,
|
|
||||||
*pair.m_pProxy1);
|
|
||||||
|
|
||||||
if (algo)
|
|
||||||
{
|
|
||||||
if (dispatchInfo.m_dispatchFunc == DispatcherInfo::DISPATCH_DISCRETE)
|
|
||||||
{
|
|
||||||
algo->ProcessCollision(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
float toi = algo->CalculateTimeOfImpact(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
|
||||||
if (dispatchInfo.m_timeOfImpact > toi)
|
|
||||||
dispatchInfo.m_timeOfImpact = toi;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
m_blockedForChanges = false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ class OverlappingPairCache : public BroadphaseInterface
|
|||||||
return collides;
|
return collides;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DispatchAllCollisionPairs(Dispatcher& dispatcher,DispatcherInfo& dispatchInfo);
|
|
||||||
|
|
||||||
virtual void RefreshOverlappingPairs() =0;
|
virtual void RefreshOverlappingPairs() =0;
|
||||||
|
|
||||||
|
|||||||
42
Bullet/CollisionDispatch/CollisionCreateFunc.h
Normal file
42
Bullet/CollisionDispatch/CollisionCreateFunc.h
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COLLISION_CREATE_FUNC
|
||||||
|
#define COLLISION_CREATE_FUNC
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
typedef std::vector<struct CollisionObject*> CollisionObjectArray;
|
||||||
|
class CollisionAlgorithm;
|
||||||
|
struct BroadphaseProxy;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct CollisionAlgorithmCreateFunc
|
||||||
|
{
|
||||||
|
bool m_swapped;
|
||||||
|
|
||||||
|
CollisionAlgorithmCreateFunc()
|
||||||
|
:m_swapped(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
virtual ~CollisionAlgorithmCreateFunc(){};
|
||||||
|
|
||||||
|
virtual CollisionAlgorithm* CreateCollisionAlgorithm(BroadphaseProxy& proxy0,BroadphaseProxy& proxy1)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif //COLLISION_CREATE_FUNC
|
||||||
@@ -24,6 +24,7 @@ subject to the following restrictions:
|
|||||||
#include "CollisionShapes/CollisionShape.h"
|
#include "CollisionShapes/CollisionShape.h"
|
||||||
#include "CollisionDispatch/CollisionObject.h"
|
#include "CollisionDispatch/CollisionObject.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include "BroadphaseCollision/OverlappingPairCache.h"
|
||||||
|
|
||||||
int gNumManifold = 0;
|
int gNumManifold = 0;
|
||||||
|
|
||||||
@@ -293,3 +294,69 @@ void CollisionDispatcher::ReleaseManifoldResult(ManifoldResult*)
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CollisionDispatcher::DispatchAllCollisionPairs(OverlappingPairCache* pairCache,DispatcherInfo& dispatchInfo)
|
||||||
|
{
|
||||||
|
//m_blockedForChanges = true;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
int dispatcherId = GetUniqueId();
|
||||||
|
|
||||||
|
pairCache->RefreshOverlappingPairs();
|
||||||
|
|
||||||
|
for (i=0;i<pairCache->GetNumOverlappingPairs();i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
BroadphasePair& pair = pairCache->GetOverlappingPair(i);
|
||||||
|
|
||||||
|
if (dispatcherId>= 0)
|
||||||
|
{
|
||||||
|
//dispatcher will keep algorithms persistent in the collision pair
|
||||||
|
if (!pair.m_algorithms[dispatcherId])
|
||||||
|
{
|
||||||
|
pair.m_algorithms[dispatcherId] = FindAlgorithm(
|
||||||
|
*pair.m_pProxy0,
|
||||||
|
*pair.m_pProxy1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pair.m_algorithms[dispatcherId])
|
||||||
|
{
|
||||||
|
if (dispatchInfo.m_dispatchFunc == DispatcherInfo::DISPATCH_DISCRETE)
|
||||||
|
{
|
||||||
|
pair.m_algorithms[dispatcherId]->ProcessCollision(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
float toi = pair.m_algorithms[dispatcherId]->CalculateTimeOfImpact(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
||||||
|
if (dispatchInfo.m_timeOfImpact > toi)
|
||||||
|
dispatchInfo.m_timeOfImpact = toi;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
//non-persistent algorithm dispatcher
|
||||||
|
CollisionAlgorithm* algo = FindAlgorithm(
|
||||||
|
*pair.m_pProxy0,
|
||||||
|
*pair.m_pProxy1);
|
||||||
|
|
||||||
|
if (algo)
|
||||||
|
{
|
||||||
|
if (dispatchInfo.m_dispatchFunc == DispatcherInfo::DISPATCH_DISCRETE)
|
||||||
|
{
|
||||||
|
algo->ProcessCollision(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
float toi = algo->CalculateTimeOfImpact(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
||||||
|
if (dispatchInfo.m_timeOfImpact > toi)
|
||||||
|
dispatchInfo.m_timeOfImpact = toi;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//m_blockedForChanges = false;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -22,28 +22,15 @@ subject to the following restrictions:
|
|||||||
#include "CollisionDispatch/ManifoldResult.h"
|
#include "CollisionDispatch/ManifoldResult.h"
|
||||||
|
|
||||||
#include "BroadphaseCollision/BroadphaseProxy.h"
|
#include "BroadphaseCollision/BroadphaseProxy.h"
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
class IDebugDraw;
|
class IDebugDraw;
|
||||||
|
class OverlappingPairCache;
|
||||||
typedef std::vector<struct CollisionObject*> CollisionObjectArray;
|
|
||||||
|
|
||||||
|
|
||||||
struct CollisionAlgorithmCreateFunc
|
#include "CollisionCreateFunc.h"
|
||||||
{
|
|
||||||
bool m_swapped;
|
|
||||||
|
|
||||||
CollisionAlgorithmCreateFunc()
|
|
||||||
:m_swapped(false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
virtual ~CollisionAlgorithmCreateFunc(){};
|
|
||||||
|
|
||||||
virtual CollisionAlgorithm* CreateCollisionAlgorithm(BroadphaseProxy& proxy0,BroadphaseProxy& proxy1)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///CollisionDispatcher supports algorithms that handle ConvexConvex and ConvexConcave collision pairs.
|
///CollisionDispatcher supports algorithms that handle ConvexConvex and ConvexConcave collision pairs.
|
||||||
@@ -131,7 +118,7 @@ public:
|
|||||||
|
|
||||||
virtual int GetUniqueId() { return RIGIDBODY_DISPATCHER;}
|
virtual int GetUniqueId() { return RIGIDBODY_DISPATCHER;}
|
||||||
|
|
||||||
|
virtual void DispatchAllCollisionPairs(OverlappingPairCache* pairCache,DispatcherInfo& dispatchInfo);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -150,10 +150,13 @@ void CollisionWorld::PerformDiscreteCollisionDetection()
|
|||||||
for (size_t i=0;i<m_collisionObjects.size();i++)
|
for (size_t i=0;i<m_collisionObjects.size();i++)
|
||||||
{
|
{
|
||||||
m_collisionObjects[i]->m_collisionShape->GetAabb(m_collisionObjects[i]->m_worldTransform,aabbMin,aabbMax);
|
m_collisionObjects[i]->m_collisionShape->GetAabb(m_collisionObjects[i]->m_worldTransform,aabbMin,aabbMax);
|
||||||
m_broadphase->SetAabb(m_collisionObjects[i]->m_broadphaseHandle,aabbMin,aabbMax);
|
m_pairCache->SetAabb(m_collisionObjects[i]->m_broadphaseHandle,aabbMin,aabbMax);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_broadphase->DispatchAllCollisionPairs(*GetDispatcher(),dispatchInfo);
|
CollisionDispatcher* dispatcher = GetDispatcher();
|
||||||
|
if (dispatcher)
|
||||||
|
dispatcher->DispatchAllCollisionPairs(m_pairCache,dispatchInfo);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ class BroadphaseInterface;
|
|||||||
#include "SimdTransform.h"
|
#include "SimdTransform.h"
|
||||||
#include "CollisionObject.h"
|
#include "CollisionObject.h"
|
||||||
#include "CollisionDispatcher.h" //for definition of CollisionObjectArray
|
#include "CollisionDispatcher.h" //for definition of CollisionObjectArray
|
||||||
|
#include "BroadphaseCollision/OverlappingPairCache.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@@ -85,13 +86,14 @@ class CollisionWorld
|
|||||||
|
|
||||||
CollisionDispatcher* m_dispatcher;
|
CollisionDispatcher* m_dispatcher;
|
||||||
|
|
||||||
BroadphaseInterface* m_broadphase;
|
OverlappingPairCache* m_pairCache;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
CollisionWorld(CollisionDispatcher* dispatcher,BroadphaseInterface* broadphase)
|
CollisionWorld(CollisionDispatcher* dispatcher,OverlappingPairCache* pairCache)
|
||||||
:m_dispatcher(dispatcher),
|
:m_dispatcher(dispatcher),
|
||||||
m_broadphase(broadphase)
|
m_pairCache(pairCache)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -102,9 +104,15 @@ public:
|
|||||||
|
|
||||||
BroadphaseInterface* GetBroadphase()
|
BroadphaseInterface* GetBroadphase()
|
||||||
{
|
{
|
||||||
return m_broadphase;
|
return m_pairCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OverlappingPairCache* GetPairCache()
|
||||||
|
{
|
||||||
|
return m_pairCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CollisionDispatcher* GetDispatcher()
|
CollisionDispatcher* GetDispatcher()
|
||||||
{
|
{
|
||||||
return m_dispatcher;
|
return m_dispatcher;
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ subject to the following restrictions:
|
|||||||
struct CollisionObject;
|
struct CollisionObject;
|
||||||
class PersistentManifold;
|
class PersistentManifold;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///ManifoldResult is a helper class to manage contact results.
|
///ManifoldResult is a helper class to manage contact results.
|
||||||
class ManifoldResult : public DiscreteCollisionDetectorInterface::Result
|
class ManifoldResult : public DiscreteCollisionDetectorInterface::Result
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ subject to the following restrictions:
|
|||||||
|
|
||||||
#include "Dynamics/RigidBody.h"
|
#include "Dynamics/RigidBody.h"
|
||||||
#include "CollisionDispatch/CollisionDispatcher.h"
|
#include "CollisionDispatch/CollisionDispatcher.h"
|
||||||
|
|
||||||
|
#include "ParallelIslandDispatcher.h"
|
||||||
|
|
||||||
#include "BroadphaseCollision/SimpleBroadphase.h"
|
#include "BroadphaseCollision/SimpleBroadphase.h"
|
||||||
#include "BroadphaseCollision/AxisSweep3.h"
|
#include "BroadphaseCollision/AxisSweep3.h"
|
||||||
#include "ConstraintSolver/Point2PointConstraint.h"
|
#include "ConstraintSolver/Point2PointConstraint.h"
|
||||||
@@ -128,13 +131,13 @@ int main(int argc,char** argv)
|
|||||||
|
|
||||||
|
|
||||||
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
||||||
|
Dispatcher* dispatcher2 = new ParallelIslandDispatcher();
|
||||||
|
|
||||||
SimdVector3 worldAabbMin(-30000,-30000,-30000);
|
SimdVector3 worldAabbMin(-30000,-30000,-30000);
|
||||||
SimdVector3 worldAabbMax(30000,30000,30000);
|
SimdVector3 worldAabbMax(30000,30000,30000);
|
||||||
|
|
||||||
//BroadphaseInterface* broadphase = new AxisSweep3(worldAabbMin,worldAabbMax,maxProxies,maxOverlap);
|
//BroadphaseInterface* broadphase = new AxisSweep3(worldAabbMin,worldAabbMax,maxProxies,maxOverlap);
|
||||||
BroadphaseInterface* broadphase = new SimpleBroadphase(maxProxies,maxOverlap);
|
OverlappingPairCache* broadphase = new SimpleBroadphase(maxProxies,maxOverlap);
|
||||||
|
|
||||||
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
||||||
physicsEnvironmentPtr->setDeactivationTime(2.f);
|
physicsEnvironmentPtr->setDeactivationTime(2.f);
|
||||||
|
|||||||
@@ -844,7 +844,7 @@ int main(int argc,char** argv)
|
|||||||
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
||||||
SimdVector3 worldAabbMin(-10000,-10000,-10000);
|
SimdVector3 worldAabbMin(-10000,-10000,-10000);
|
||||||
SimdVector3 worldAabbMax(10000,10000,10000);
|
SimdVector3 worldAabbMax(10000,10000,10000);
|
||||||
BroadphaseInterface* broadphase = new AxisSweep3(worldAabbMin,worldAabbMax);
|
OverlappingPairCache* broadphase = new AxisSweep3(worldAabbMin,worldAabbMax);
|
||||||
//BroadphaseInterface* broadphase = new SimpleBroadphase();
|
//BroadphaseInterface* broadphase = new SimpleBroadphase();
|
||||||
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
||||||
physicsEnvironmentPtr->setDeactivationTime(2.f);
|
physicsEnvironmentPtr->setDeactivationTime(2.f);
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ int main(int argc,char** argv)
|
|||||||
|
|
||||||
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
||||||
|
|
||||||
BroadphaseInterface* broadphase = new SimpleBroadphase();
|
OverlappingPairCache* broadphase = new SimpleBroadphase();
|
||||||
|
|
||||||
|
|
||||||
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ int main(int argc,char** argv)
|
|||||||
|
|
||||||
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
||||||
|
|
||||||
BroadphaseInterface* broadphase = new SimpleBroadphase();
|
OverlappingPairCache* broadphase = new SimpleBroadphase();
|
||||||
|
|
||||||
|
|
||||||
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
||||||
|
|||||||
@@ -337,8 +337,8 @@ int main(int argc,char** argv)
|
|||||||
SimdVector3 worldAabbMin(-10000,-10000,-10000);
|
SimdVector3 worldAabbMin(-10000,-10000,-10000);
|
||||||
SimdVector3 worldAabbMax(10000,10000,10000);
|
SimdVector3 worldAabbMax(10000,10000,10000);
|
||||||
|
|
||||||
BroadphaseInterface* broadphase = new AxisSweep3(worldAabbMin,worldAabbMax);
|
OverlappingPairCache* broadphase = new AxisSweep3(worldAabbMin,worldAabbMax);
|
||||||
//BroadphaseInterface* broadphase = new SimpleBroadphase();
|
//OverlappingPairCache* broadphase = new SimpleBroadphase();
|
||||||
|
|
||||||
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
||||||
physicsEnvironmentPtr->setDeactivationTime(2.f);
|
physicsEnvironmentPtr->setDeactivationTime(2.f);
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ static void DrawAabb(IDebugDraw* debugDrawer,const SimdVector3& from,const SimdV
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
CcdPhysicsEnvironment::CcdPhysicsEnvironment(CollisionDispatcher* dispatcher,BroadphaseInterface* broadphase)
|
CcdPhysicsEnvironment::CcdPhysicsEnvironment(CollisionDispatcher* dispatcher,OverlappingPairCache* pairCache)
|
||||||
:m_scalingPropagated(false),
|
:m_scalingPropagated(false),
|
||||||
m_numIterations(4),
|
m_numIterations(4),
|
||||||
m_numTimeSubSteps(1),
|
m_numTimeSubSteps(1),
|
||||||
@@ -336,18 +336,18 @@ m_enableSatCollisionDetection(false)
|
|||||||
{
|
{
|
||||||
m_triggerCallbacks[i] = 0;
|
m_triggerCallbacks[i] = 0;
|
||||||
}
|
}
|
||||||
if (!dispatcher)
|
//if (!dispatcher)
|
||||||
dispatcher = new CollisionDispatcher();
|
// dispatcher = new CollisionDispatcher();
|
||||||
|
|
||||||
|
|
||||||
if(!broadphase)
|
if(!pairCache)
|
||||||
{
|
{
|
||||||
|
|
||||||
//todo: calculate/let user specify this world sizes
|
//todo: calculate/let user specify this world sizes
|
||||||
SimdVector3 worldMin(-10000,-10000,-10000);
|
SimdVector3 worldMin(-10000,-10000,-10000);
|
||||||
SimdVector3 worldMax(10000,10000,10000);
|
SimdVector3 worldMax(10000,10000,10000);
|
||||||
|
|
||||||
broadphase = new AxisSweep3(worldMin,worldMax);
|
pairCache = new AxisSweep3(worldMin,worldMax);
|
||||||
|
|
||||||
//broadphase = new SimpleBroadphase();
|
//broadphase = new SimpleBroadphase();
|
||||||
}
|
}
|
||||||
@@ -355,7 +355,7 @@ m_enableSatCollisionDetection(false)
|
|||||||
|
|
||||||
setSolverType(1);//issues with quickstep and memory allocations
|
setSolverType(1);//issues with quickstep and memory allocations
|
||||||
|
|
||||||
m_collisionWorld = new CollisionWorld(dispatcher,broadphase);
|
m_collisionWorld = new CollisionWorld(dispatcher,pairCache);
|
||||||
|
|
||||||
m_debugDrawer = 0;
|
m_debugDrawer = 0;
|
||||||
m_gravity = SimdVector3(0.f,-10.f,0.f);
|
m_gravity = SimdVector3(0.f,-10.f,0.f);
|
||||||
@@ -654,7 +654,7 @@ bool CcdPhysicsEnvironment::proceedDeltaTimeOneStep(float timeStep)
|
|||||||
Profiler::endBlock("predictIntegratedTransform");
|
Profiler::endBlock("predictIntegratedTransform");
|
||||||
#endif //USE_QUICKPROF
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
BroadphaseInterface* scene = GetBroadphase();
|
OverlappingPairCache* scene = m_collisionWorld->GetPairCache();
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -675,7 +675,7 @@ bool CcdPhysicsEnvironment::proceedDeltaTimeOneStep(float timeStep)
|
|||||||
dispatchInfo.m_stepCount = 0;
|
dispatchInfo.m_stepCount = 0;
|
||||||
dispatchInfo.m_enableSatConvex = m_enableSatCollisionDetection;
|
dispatchInfo.m_enableSatConvex = m_enableSatCollisionDetection;
|
||||||
|
|
||||||
scene->DispatchAllCollisionPairs(*GetDispatcher(),dispatchInfo);///numsubstep,g);
|
GetDispatcher()->DispatchAllCollisionPairs(scene,dispatchInfo);
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_QUICKPROF
|
#ifdef USE_QUICKPROF
|
||||||
@@ -842,7 +842,8 @@ bool CcdPhysicsEnvironment::proceedDeltaTimeOneStep(float timeStep)
|
|||||||
dispatchInfo.m_stepCount = 0;
|
dispatchInfo.m_stepCount = 0;
|
||||||
dispatchInfo.m_dispatchFunc = DispatcherInfo::DISPATCH_CONTINUOUS;
|
dispatchInfo.m_dispatchFunc = DispatcherInfo::DISPATCH_CONTINUOUS;
|
||||||
|
|
||||||
scene->DispatchAllCollisionPairs( *GetDispatcher(),dispatchInfo);///numsubstep,g);
|
GetDispatcher()->DispatchAllCollisionPairs(scene,dispatchInfo);
|
||||||
|
|
||||||
toi = dispatchInfo.m_timeOfImpact;
|
toi = dispatchInfo.m_timeOfImpact;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ class Dispatcher;
|
|||||||
class WrapperVehicle;
|
class WrapperVehicle;
|
||||||
class PersistentManifold;
|
class PersistentManifold;
|
||||||
class BroadphaseInterface;
|
class BroadphaseInterface;
|
||||||
|
class OverlappingPairCache;
|
||||||
class IDebugDraw;
|
class IDebugDraw;
|
||||||
|
|
||||||
/// CcdPhysicsEnvironment is experimental mainloop for physics simulation using optional continuous collision detection.
|
/// CcdPhysicsEnvironment is experimental mainloop for physics simulation using optional continuous collision detection.
|
||||||
@@ -62,7 +63,7 @@ class CcdPhysicsEnvironment : public PHY_IPhysicsEnvironment
|
|||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CcdPhysicsEnvironment(CollisionDispatcher* dispatcher=0, BroadphaseInterface* broadphase=0);
|
CcdPhysicsEnvironment(CollisionDispatcher* dispatcher=0, OverlappingPairCache* pairCache=0);
|
||||||
|
|
||||||
virtual ~CcdPhysicsEnvironment();
|
virtual ~CcdPhysicsEnvironment();
|
||||||
|
|
||||||
|
|||||||
295
Extras/PhysicsInterface/CcdPhysics/ParallelIslandDispatcher.cpp
Normal file
295
Extras/PhysicsInterface/CcdPhysics/ParallelIslandDispatcher.cpp
Normal file
@@ -0,0 +1,295 @@
|
|||||||
|
/*
|
||||||
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "ParallelIslandDispatcher.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "BroadphaseCollision/CollisionAlgorithm.h"
|
||||||
|
#include "CollisionDispatch/ConvexConvexAlgorithm.h"
|
||||||
|
#include "CollisionDispatch/EmptyCollisionAlgorithm.h"
|
||||||
|
#include "CollisionDispatch/ConvexConcaveCollisionAlgorithm.h"
|
||||||
|
#include "CollisionShapes/CollisionShape.h"
|
||||||
|
#include "CollisionDispatch/CollisionObject.h"
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
static int gNumManifold2 = 0;
|
||||||
|
|
||||||
|
void ParallelIslandDispatcher::FindUnions()
|
||||||
|
{
|
||||||
|
if (m_useIslands)
|
||||||
|
{
|
||||||
|
for (int i=0;i<GetNumManifolds();i++)
|
||||||
|
{
|
||||||
|
const PersistentManifold* manifold = this->GetManifoldByIndexInternal(i);
|
||||||
|
//static objects (invmass 0.f) don't merge !
|
||||||
|
|
||||||
|
const CollisionObject* colObj0 = static_cast<const CollisionObject*>(manifold->GetBody0());
|
||||||
|
const CollisionObject* colObj1 = static_cast<const CollisionObject*>(manifold->GetBody1());
|
||||||
|
|
||||||
|
if (colObj0 && colObj1 && NeedsResponse(*colObj0,*colObj1))
|
||||||
|
{
|
||||||
|
if (((colObj0) && ((colObj0)->mergesSimulationIslands())) &&
|
||||||
|
((colObj1) && ((colObj1)->mergesSimulationIslands())))
|
||||||
|
{
|
||||||
|
|
||||||
|
m_unionFind.unite((colObj0)->m_islandTag1,
|
||||||
|
(colObj1)->m_islandTag1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParallelIslandDispatcher::ParallelIslandDispatcher ():
|
||||||
|
m_useIslands(true),
|
||||||
|
m_defaultManifoldResult(0,0,0),
|
||||||
|
m_count(0)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i=0;i<MAX_BROADPHASE_COLLISION_TYPES;i++)
|
||||||
|
{
|
||||||
|
for (int j=0;j<MAX_BROADPHASE_COLLISION_TYPES;j++)
|
||||||
|
{
|
||||||
|
m_doubleDispatch[i][j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
PersistentManifold* ParallelIslandDispatcher::GetNewManifold(void* b0,void* b1)
|
||||||
|
{
|
||||||
|
gNumManifold2++;
|
||||||
|
|
||||||
|
//ASSERT(gNumManifold < 65535);
|
||||||
|
|
||||||
|
|
||||||
|
CollisionObject* body0 = (CollisionObject*)b0;
|
||||||
|
CollisionObject* body1 = (CollisionObject*)b1;
|
||||||
|
|
||||||
|
PersistentManifold* manifold = new PersistentManifold (body0,body1);
|
||||||
|
m_manifoldsPtr.push_back(manifold);
|
||||||
|
|
||||||
|
return manifold;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ParallelIslandDispatcher::ClearManifold(PersistentManifold* manifold)
|
||||||
|
{
|
||||||
|
manifold->ClearManifold();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ParallelIslandDispatcher::ReleaseManifold(PersistentManifold* manifold)
|
||||||
|
{
|
||||||
|
|
||||||
|
gNumManifold2--;
|
||||||
|
|
||||||
|
//printf("ReleaseManifold: gNumManifold2 %d\n",gNumManifold2);
|
||||||
|
|
||||||
|
ClearManifold(manifold);
|
||||||
|
|
||||||
|
std::vector<PersistentManifold*>::iterator i =
|
||||||
|
std::find(m_manifoldsPtr.begin(), m_manifoldsPtr.end(), manifold);
|
||||||
|
if (!(i == m_manifoldsPtr.end()))
|
||||||
|
{
|
||||||
|
std::swap(*i, m_manifoldsPtr.back());
|
||||||
|
m_manifoldsPtr.pop_back();
|
||||||
|
delete manifold;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// todo: this is random access, it can be walked 'cache friendly'!
|
||||||
|
//
|
||||||
|
void ParallelIslandDispatcher::BuildAndProcessIslands(CollisionObjectArray& collisionObjects, IslandCallback* callback)
|
||||||
|
{
|
||||||
|
int numBodies = collisionObjects.size();
|
||||||
|
|
||||||
|
for (int islandId=0;islandId<numBodies;islandId++)
|
||||||
|
{
|
||||||
|
|
||||||
|
std::vector<PersistentManifold*> islandmanifold;
|
||||||
|
|
||||||
|
//int numSleeping = 0;
|
||||||
|
|
||||||
|
bool allSleeping = true;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i=0;i<numBodies;i++)
|
||||||
|
{
|
||||||
|
CollisionObject* colObj0 = collisionObjects[i];
|
||||||
|
if (colObj0->m_islandTag1 == islandId)
|
||||||
|
{
|
||||||
|
if (colObj0->GetActivationState()== ACTIVE_TAG)
|
||||||
|
{
|
||||||
|
allSleeping = false;
|
||||||
|
}
|
||||||
|
if (colObj0->GetActivationState()== DISABLE_DEACTIVATION)
|
||||||
|
{
|
||||||
|
allSleeping = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (i=0;i<GetNumManifolds();i++)
|
||||||
|
{
|
||||||
|
PersistentManifold* manifold = this->GetManifoldByIndexInternal(i);
|
||||||
|
|
||||||
|
//filtering for response
|
||||||
|
|
||||||
|
CollisionObject* colObj0 = static_cast<CollisionObject*>(manifold->GetBody0());
|
||||||
|
CollisionObject* colObj1 = static_cast<CollisionObject*>(manifold->GetBody1());
|
||||||
|
{
|
||||||
|
if (((colObj0) && (colObj0)->m_islandTag1 == (islandId)) ||
|
||||||
|
((colObj1) && (colObj1)->m_islandTag1 == (islandId)))
|
||||||
|
{
|
||||||
|
|
||||||
|
if (NeedsResponse(*colObj0,*colObj1))
|
||||||
|
islandmanifold.push_back(manifold);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (allSleeping)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i=0;i<numBodies;i++)
|
||||||
|
{
|
||||||
|
CollisionObject* colObj0 = collisionObjects[i];
|
||||||
|
if (colObj0->m_islandTag1 == islandId)
|
||||||
|
{
|
||||||
|
colObj0->SetActivationState( ISLAND_SLEEPING );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i=0;i<numBodies;i++)
|
||||||
|
{
|
||||||
|
CollisionObject* colObj0 = collisionObjects[i];
|
||||||
|
if (colObj0->m_islandTag1 == islandId)
|
||||||
|
{
|
||||||
|
if ( colObj0->GetActivationState() == ISLAND_SLEEPING)
|
||||||
|
{
|
||||||
|
colObj0->SetActivationState( WANTS_DEACTIVATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Process the actual simulation, only if not sleeping/deactivated
|
||||||
|
if (islandmanifold.size())
|
||||||
|
{
|
||||||
|
callback->ProcessIsland(&islandmanifold[0],islandmanifold.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CollisionAlgorithm* ParallelIslandDispatcher::InternalFindAlgorithm(BroadphaseProxy& proxy0,BroadphaseProxy& proxy1)
|
||||||
|
{
|
||||||
|
m_count++;
|
||||||
|
CollisionObject* body0 = (CollisionObject*)proxy0.m_clientObject;
|
||||||
|
CollisionObject* body1 = (CollisionObject*)proxy1.m_clientObject;
|
||||||
|
|
||||||
|
CollisionAlgorithmConstructionInfo ci;
|
||||||
|
ci.m_dispatcher = this;
|
||||||
|
|
||||||
|
if (body0->m_collisionShape->IsConvex() && body1->m_collisionShape->IsConvex() )
|
||||||
|
{
|
||||||
|
return new ConvexConvexAlgorithm(0,ci,&proxy0,&proxy1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body0->m_collisionShape->IsConvex() && body1->m_collisionShape->IsConcave())
|
||||||
|
{
|
||||||
|
return new ConvexConcaveCollisionAlgorithm(ci,&proxy0,&proxy1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body1->m_collisionShape->IsConvex() && body0->m_collisionShape->IsConcave())
|
||||||
|
{
|
||||||
|
return new ConvexConcaveCollisionAlgorithm(ci,&proxy1,&proxy0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//failed to find an algorithm
|
||||||
|
return new EmptyAlgorithm(ci);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ParallelIslandDispatcher::NeedsResponse(const CollisionObject& colObj0,const CollisionObject& colObj1)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
//here you can do filtering
|
||||||
|
bool hasResponse =
|
||||||
|
(!(colObj0.m_collisionFlags & CollisionObject::noContactResponse)) &&
|
||||||
|
(!(colObj1.m_collisionFlags & CollisionObject::noContactResponse));
|
||||||
|
hasResponse = hasResponse &&
|
||||||
|
(colObj0.IsActive() || colObj1.IsActive());
|
||||||
|
return hasResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ParallelIslandDispatcher::NeedsCollision(BroadphaseProxy& proxy0,BroadphaseProxy& proxy1)
|
||||||
|
{
|
||||||
|
|
||||||
|
CollisionObject* body0 = (CollisionObject*)proxy0.m_clientObject;
|
||||||
|
CollisionObject* body1 = (CollisionObject*)proxy1.m_clientObject;
|
||||||
|
|
||||||
|
assert(body0);
|
||||||
|
assert(body1);
|
||||||
|
|
||||||
|
bool needsCollision = true;
|
||||||
|
|
||||||
|
if ((body0->m_collisionFlags & CollisionObject::isStatic) &&
|
||||||
|
(body1->m_collisionFlags & CollisionObject::isStatic))
|
||||||
|
needsCollision = false;
|
||||||
|
|
||||||
|
if ((!body0->IsActive()) && (!body1->IsActive()))
|
||||||
|
needsCollision = false;
|
||||||
|
|
||||||
|
return needsCollision ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
///allows the user to get contact point callbacks
|
||||||
|
ManifoldResult* ParallelIslandDispatcher::GetNewManifoldResult(CollisionObject* obj0,CollisionObject* obj1,PersistentManifold* manifold)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
//in-place, this prevents parallel dispatching, but just adding a list would fix that.
|
||||||
|
ManifoldResult* manifoldResult = new (&m_defaultManifoldResult) ManifoldResult(obj0,obj1,manifold);
|
||||||
|
return manifoldResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
///allows the user to get contact point callbacks
|
||||||
|
void ParallelIslandDispatcher::ReleaseManifoldResult(ManifoldResult*)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
126
Extras/PhysicsInterface/CcdPhysics/ParallelIslandDispatcher.h
Normal file
126
Extras/PhysicsInterface/CcdPhysics/ParallelIslandDispatcher.h
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
/*
|
||||||
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PARALLEL_ISLAND_DISPATCHER_H
|
||||||
|
#define PARALLEL_ISLAND_DISPATCHER_H
|
||||||
|
|
||||||
|
#include "BroadphaseCollision/Dispatcher.h"
|
||||||
|
#include "NarrowPhaseCollision/PersistentManifold.h"
|
||||||
|
#include "CollisionDispatch/UnionFind.h"
|
||||||
|
#include "CollisionDispatch/ManifoldResult.h"
|
||||||
|
|
||||||
|
#include "BroadphaseCollision/BroadphaseProxy.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class IDebugDraw;
|
||||||
|
|
||||||
|
|
||||||
|
#include "CollisionDispatch/CollisionCreateFunc.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///ParallelIslandDispatcher dispatches entire simulation islands in parallel.
|
||||||
|
///For both collision detection and constraint solving.
|
||||||
|
///This development heads toward multi-core, CELL SPU and GPU approach
|
||||||
|
class ParallelIslandDispatcher : public Dispatcher
|
||||||
|
{
|
||||||
|
|
||||||
|
std::vector<PersistentManifold*> m_manifoldsPtr;
|
||||||
|
|
||||||
|
UnionFind m_unionFind;
|
||||||
|
|
||||||
|
bool m_useIslands;
|
||||||
|
|
||||||
|
ManifoldResult m_defaultManifoldResult;
|
||||||
|
|
||||||
|
CollisionAlgorithmCreateFunc* m_doubleDispatch[MAX_BROADPHASE_COLLISION_TYPES][MAX_BROADPHASE_COLLISION_TYPES];
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UnionFind& GetUnionFind() { return m_unionFind;}
|
||||||
|
|
||||||
|
struct IslandCallback
|
||||||
|
{
|
||||||
|
virtual ~IslandCallback() {};
|
||||||
|
|
||||||
|
virtual void ProcessIsland(PersistentManifold** manifolds,int numManifolds) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int GetNumManifolds() const
|
||||||
|
{
|
||||||
|
return m_manifoldsPtr.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
PersistentManifold* GetManifoldByIndexInternal(int index)
|
||||||
|
{
|
||||||
|
return m_manifoldsPtr[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
const PersistentManifold* GetManifoldByIndexInternal(int index) const
|
||||||
|
{
|
||||||
|
return m_manifoldsPtr[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitUnionFind(int n)
|
||||||
|
{
|
||||||
|
if (m_useIslands)
|
||||||
|
m_unionFind.reset(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindUnions();
|
||||||
|
|
||||||
|
int m_count;
|
||||||
|
|
||||||
|
ParallelIslandDispatcher ();
|
||||||
|
virtual ~ParallelIslandDispatcher() {};
|
||||||
|
|
||||||
|
virtual PersistentManifold* GetNewManifold(void* b0,void* b1);
|
||||||
|
|
||||||
|
virtual void ReleaseManifold(PersistentManifold* manifold);
|
||||||
|
|
||||||
|
|
||||||
|
virtual void BuildAndProcessIslands(CollisionObjectArray& collisionObjects, IslandCallback* callback);
|
||||||
|
|
||||||
|
///allows the user to get contact point callbacks
|
||||||
|
virtual ManifoldResult* GetNewManifoldResult(CollisionObject* obj0,CollisionObject* obj1,PersistentManifold* manifold);
|
||||||
|
|
||||||
|
///allows the user to get contact point callbacks
|
||||||
|
virtual void ReleaseManifoldResult(ManifoldResult*);
|
||||||
|
|
||||||
|
virtual void ClearManifold(PersistentManifold* manifold);
|
||||||
|
|
||||||
|
|
||||||
|
CollisionAlgorithm* FindAlgorithm(BroadphaseProxy& proxy0,BroadphaseProxy& proxy1)
|
||||||
|
{
|
||||||
|
CollisionAlgorithm* algo = InternalFindAlgorithm(proxy0,proxy1);
|
||||||
|
return algo;
|
||||||
|
}
|
||||||
|
|
||||||
|
CollisionAlgorithm* InternalFindAlgorithm(BroadphaseProxy& proxy0,BroadphaseProxy& proxy1);
|
||||||
|
|
||||||
|
virtual bool NeedsCollision(BroadphaseProxy& proxy0,BroadphaseProxy& proxy1);
|
||||||
|
|
||||||
|
virtual bool NeedsResponse(const CollisionObject& colObj0,const CollisionObject& colObj1);
|
||||||
|
|
||||||
|
virtual int GetUniqueId() { return RIGIDBODY_DISPATCHER;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //PARALLEL_ISLAND_DISPATCHER_H
|
||||||
|
|
||||||
@@ -0,0 +1,406 @@
|
|||||||
|
/*
|
||||||
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "ParallelPhysicsEnvironment.h"
|
||||||
|
#include "CcdPhysicsController.h"
|
||||||
|
#include "ParallelIslandDispatcher.h"
|
||||||
|
|
||||||
|
|
||||||
|
ParallelPhysicsEnvironment::ParallelPhysicsEnvironment(ParallelIslandDispatcher* dispatcher, OverlappingPairCache* pairCache):
|
||||||
|
CcdPhysicsEnvironment(0,pairCache)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ParallelPhysicsEnvironment::~ParallelPhysicsEnvironment()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// Perform an integration step of duration 'timeStep'.
|
||||||
|
bool ParallelPhysicsEnvironment::proceedDeltaTimeOneStep(float timeStep)
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
//printf("CcdPhysicsEnvironment::proceedDeltaTime\n");
|
||||||
|
|
||||||
|
if (SimdFuzzyZero(timeStep))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (m_debugDrawer)
|
||||||
|
{
|
||||||
|
gDisableDeactivation = (m_debugDrawer->GetDebugMode() & IDebugDraw::DBG_NoDeactivation);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::beginBlock("SyncMotionStates");
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
|
||||||
|
//this is needed because scaling is not known in advance, and scaling has to propagate to the shape
|
||||||
|
if (!m_scalingPropagated)
|
||||||
|
{
|
||||||
|
SyncMotionStates(timeStep);
|
||||||
|
m_scalingPropagated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::endBlock("SyncMotionStates");
|
||||||
|
|
||||||
|
Profiler::beginBlock("predictIntegratedTransform");
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
{
|
||||||
|
// std::vector<CcdPhysicsController*>::iterator i;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int k;
|
||||||
|
for (k=0;k<GetNumControllers();k++)
|
||||||
|
{
|
||||||
|
CcdPhysicsController* ctrl = m_controllers[k];
|
||||||
|
// SimdTransform predictedTrans;
|
||||||
|
RigidBody* body = ctrl->GetRigidBody();
|
||||||
|
if (body->IsActive())
|
||||||
|
{
|
||||||
|
if (!body->IsStatic())
|
||||||
|
{
|
||||||
|
body->applyForces( timeStep);
|
||||||
|
body->integrateVelocities( timeStep);
|
||||||
|
body->predictIntegratedTransform(timeStep,body->m_interpolationWorldTransform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::endBlock("predictIntegratedTransform");
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
BroadphaseInterface* scene = GetBroadphase();
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// collision detection (?)
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::beginBlock("DispatchAllCollisionPairs");
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
|
||||||
|
int numsubstep = m_numIterations;
|
||||||
|
|
||||||
|
|
||||||
|
DispatcherInfo dispatchInfo;
|
||||||
|
dispatchInfo.m_timeStep = timeStep;
|
||||||
|
dispatchInfo.m_stepCount = 0;
|
||||||
|
dispatchInfo.m_enableSatConvex = m_enableSatCollisionDetection;
|
||||||
|
|
||||||
|
scene->DispatchAllCollisionPairs(*GetDispatcher(),dispatchInfo);///numsubstep,g);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::endBlock("DispatchAllCollisionPairs");
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
|
||||||
|
int numRigidBodies = m_controllers.size();
|
||||||
|
|
||||||
|
m_collisionWorld->UpdateActivationState();
|
||||||
|
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int numConstraints = m_constraints.size();
|
||||||
|
for (i=0;i< numConstraints ; i++ )
|
||||||
|
{
|
||||||
|
TypedConstraint* constraint = m_constraints[i];
|
||||||
|
|
||||||
|
const RigidBody* colObj0 = &constraint->GetRigidBodyA();
|
||||||
|
const RigidBody* colObj1 = &constraint->GetRigidBodyB();
|
||||||
|
|
||||||
|
if (((colObj0) && ((colObj0)->mergesSimulationIslands())) &&
|
||||||
|
((colObj1) && ((colObj1)->mergesSimulationIslands())))
|
||||||
|
{
|
||||||
|
if (colObj0->IsActive() || colObj1->IsActive())
|
||||||
|
{
|
||||||
|
GetDispatcher()->GetUnionFind().unite((colObj0)->m_islandTag1,
|
||||||
|
(colObj1)->m_islandTag1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_collisionWorld->StoreIslandActivationState();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//contacts
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::beginBlock("SolveConstraint");
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
|
||||||
|
//solve the regular constraints (point 2 point, hinge, etc)
|
||||||
|
|
||||||
|
for (int g=0;g<numsubstep;g++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// constraint solving
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
int i;
|
||||||
|
int numConstraints = m_constraints.size();
|
||||||
|
|
||||||
|
//point to point constraints
|
||||||
|
for (i=0;i< numConstraints ; i++ )
|
||||||
|
{
|
||||||
|
TypedConstraint* constraint = m_constraints[i];
|
||||||
|
|
||||||
|
constraint->BuildJacobian();
|
||||||
|
constraint->SolveConstraint( timeStep );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::endBlock("SolveConstraint");
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
//solve the vehicles
|
||||||
|
|
||||||
|
#ifdef NEW_BULLET_VEHICLE_SUPPORT
|
||||||
|
//vehicles
|
||||||
|
int numVehicles = m_wrapperVehicles.size();
|
||||||
|
for (int i=0;i<numVehicles;i++)
|
||||||
|
{
|
||||||
|
WrapperVehicle* wrapperVehicle = m_wrapperVehicles[i];
|
||||||
|
RaycastVehicle* vehicle = wrapperVehicle->GetVehicle();
|
||||||
|
vehicle->UpdateVehicle( timeStep);
|
||||||
|
}
|
||||||
|
#endif //NEW_BULLET_VEHICLE_SUPPORT
|
||||||
|
|
||||||
|
|
||||||
|
struct InplaceSolverIslandCallback : public ParallelIslandDispatcher::IslandCallback
|
||||||
|
{
|
||||||
|
|
||||||
|
ContactSolverInfo& m_solverInfo;
|
||||||
|
ConstraintSolver* m_solver;
|
||||||
|
IDebugDraw* m_debugDrawer;
|
||||||
|
|
||||||
|
InplaceSolverIslandCallback(
|
||||||
|
ContactSolverInfo& solverInfo,
|
||||||
|
ConstraintSolver* solver,
|
||||||
|
IDebugDraw* debugDrawer)
|
||||||
|
:m_solverInfo(solverInfo),
|
||||||
|
m_solver(solver),
|
||||||
|
m_debugDrawer(debugDrawer)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void ProcessIsland(PersistentManifold** manifolds,int numManifolds)
|
||||||
|
{
|
||||||
|
m_solver->SolveGroup( manifolds, numManifolds,m_solverInfo,m_debugDrawer);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
m_solverInfo.m_friction = 0.9f;
|
||||||
|
m_solverInfo.m_numIterations = m_numIterations;
|
||||||
|
m_solverInfo.m_timeStep = timeStep;
|
||||||
|
m_solverInfo.m_restitution = 0.f;//m_restitution;
|
||||||
|
|
||||||
|
InplaceSolverIslandCallback solverCallback(
|
||||||
|
m_solverInfo,
|
||||||
|
m_solver,
|
||||||
|
m_debugDrawer);
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::beginBlock("BuildAndProcessIslands");
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
/// solve all the contact points and contact friction
|
||||||
|
GetDispatcher()->BuildAndProcessIslands(m_collisionWorld->GetCollisionObjectArray(),&solverCallback);
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::endBlock("BuildAndProcessIslands");
|
||||||
|
|
||||||
|
Profiler::beginBlock("CallbackTriggers");
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
CallbackTriggers();
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::endBlock("CallbackTriggers");
|
||||||
|
|
||||||
|
|
||||||
|
Profiler::beginBlock("proceedToTransform");
|
||||||
|
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UpdateAabbs(timeStep);
|
||||||
|
|
||||||
|
|
||||||
|
float toi = 1.f;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (m_ccdMode == 3)
|
||||||
|
{
|
||||||
|
DispatcherInfo dispatchInfo;
|
||||||
|
dispatchInfo.m_timeStep = timeStep;
|
||||||
|
dispatchInfo.m_stepCount = 0;
|
||||||
|
dispatchInfo.m_dispatchFunc = DispatcherInfo::DISPATCH_CONTINUOUS;
|
||||||
|
|
||||||
|
scene->DispatchAllCollisionPairs( *GetDispatcher(),dispatchInfo);///numsubstep,g);
|
||||||
|
toi = dispatchInfo.m_timeOfImpact;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// integrating solution
|
||||||
|
//
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
std::vector<CcdPhysicsController*>::iterator i;
|
||||||
|
|
||||||
|
for (i=m_controllers.begin();
|
||||||
|
!(i==m_controllers.end()); i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
CcdPhysicsController* ctrl = *i;
|
||||||
|
|
||||||
|
SimdTransform predictedTrans;
|
||||||
|
RigidBody* body = ctrl->GetRigidBody();
|
||||||
|
|
||||||
|
if (body->IsActive())
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!body->IsStatic())
|
||||||
|
{
|
||||||
|
body->predictIntegratedTransform(timeStep* toi, predictedTrans);
|
||||||
|
body->proceedToTransform( predictedTrans);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// disable sleeping physics objects
|
||||||
|
//
|
||||||
|
|
||||||
|
std::vector<CcdPhysicsController*> m_sleepingControllers;
|
||||||
|
|
||||||
|
std::vector<CcdPhysicsController*>::iterator i;
|
||||||
|
|
||||||
|
for (i=m_controllers.begin();
|
||||||
|
!(i==m_controllers.end()); i++)
|
||||||
|
{
|
||||||
|
CcdPhysicsController* ctrl = (*i);
|
||||||
|
RigidBody* body = ctrl->GetRigidBody();
|
||||||
|
|
||||||
|
ctrl->UpdateDeactivation(timeStep);
|
||||||
|
|
||||||
|
|
||||||
|
if (ctrl->wantsSleeping())
|
||||||
|
{
|
||||||
|
if (body->GetActivationState() == ACTIVE_TAG)
|
||||||
|
body->SetActivationState( WANTS_DEACTIVATION );
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
if (body->GetActivationState() != DISABLE_DEACTIVATION)
|
||||||
|
body->SetActivationState( ACTIVE_TAG );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (useIslands)
|
||||||
|
{
|
||||||
|
if (body->GetActivationState() == ISLAND_SLEEPING)
|
||||||
|
{
|
||||||
|
m_sleepingControllers.push_back(ctrl);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
if (ctrl->wantsSleeping())
|
||||||
|
{
|
||||||
|
m_sleepingControllers.push_back(ctrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::endBlock("proceedToTransform");
|
||||||
|
|
||||||
|
Profiler::beginBlock("SyncMotionStates");
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
SyncMotionStates(timeStep);
|
||||||
|
|
||||||
|
#ifdef USE_QUICKPROF
|
||||||
|
Profiler::endBlock("SyncMotionStates");
|
||||||
|
|
||||||
|
Profiler::endProfilingCycle();
|
||||||
|
#endif //USE_QUICKPROF
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef NEW_BULLET_VEHICLE_SUPPORT
|
||||||
|
//sync wheels for vehicles
|
||||||
|
int numVehicles = m_wrapperVehicles.size();
|
||||||
|
for (int i=0;i<numVehicles;i++)
|
||||||
|
{
|
||||||
|
WrapperVehicle* wrapperVehicle = m_wrapperVehicles[i];
|
||||||
|
|
||||||
|
wrapperVehicle->SyncWheels();
|
||||||
|
}
|
||||||
|
#endif //NEW_BULLET_VEHICLE_SUPPORT
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PARALLELPHYSICSENVIRONMENT
|
||||||
|
#define PARALLELPHYSICSENVIRONMENT
|
||||||
|
|
||||||
|
#include "CcdPhysicsEnvironment.h"
|
||||||
|
class ParallelIslandDispatcher;
|
||||||
|
|
||||||
|
|
||||||
|
/// ParallelPhysicsEnvironment is experimental parallel mainloop for physics simulation
|
||||||
|
/// Physics Environment takes care of stepping the simulation and is a container for physics entities.
|
||||||
|
/// It stores rigidbodies,constraints, materials etc.
|
||||||
|
/// A derived class may be able to 'construct' entities by loading and/or converting
|
||||||
|
class ParallelPhysicsEnvironment : public CcdPhysicsEnvironment
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
ParallelPhysicsEnvironment(ParallelIslandDispatcher* dispatcher=0, OverlappingPairCache* pairCache=0);
|
||||||
|
|
||||||
|
virtual ~ParallelPhysicsEnvironment();
|
||||||
|
|
||||||
|
|
||||||
|
/// Perform an integration step of duration 'timeStep'.
|
||||||
|
bool proceedDeltaTimeOneStep(float timeStep);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //PARALLELPHYSICSENVIRONMENT
|
||||||
@@ -1,15 +1,17 @@
|
|||||||
<?xml version="1.0" encoding = "Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="8.00"
|
Version="8.00"
|
||||||
Name="libbulletccdphysics"
|
Name="libbulletccdphysics"
|
||||||
ProjectGUID="{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}"
|
ProjectGUID="{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}"
|
||||||
SccProjectName=""
|
>
|
||||||
SccLocalPath="">
|
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform
|
<Platform
|
||||||
Name="Win32"/>
|
Name="Win32"
|
||||||
|
/>
|
||||||
</Platforms>
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release|Win32"
|
Name="Release|Win32"
|
||||||
@@ -17,73 +19,82 @@
|
|||||||
IntermediateDirectory="..\..\out\release8\build\libbulletccdphysics\"
|
IntermediateDirectory="..\..\out\release8\build\libbulletccdphysics\"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="..\..\out\release8\build\libbulletccdphysics\libbulletccdphysics.tlb"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="2"
|
|
||||||
StringPooling="TRUE"
|
|
||||||
EnableFunctionLevelLinking="TRUE"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
BufferSecurityCheck="FALSE"
|
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;WIN32"
|
|
||||||
OptimizeForProcessor="1"
|
|
||||||
ExceptionHandling="0"
|
|
||||||
AdditionalOptions=" "
|
AdditionalOptions=" "
|
||||||
|
Optimization="2"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
||||||
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;WIN32"
|
||||||
|
StringPooling="true"
|
||||||
|
ExceptionHandling="0"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
BufferSecurityCheck="false"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
PrecompiledHeaderFile="..\..\out\release8\build\libbulletccdphysics\libbulletccdphysics.pch"
|
PrecompiledHeaderFile="..\..\out\release8\build\libbulletccdphysics\libbulletccdphysics.pch"
|
||||||
AssemblerListingLocation="..\..\out\release8\build\libbulletccdphysics\"
|
AssemblerListingLocation="..\..\out\release8\build\libbulletccdphysics\"
|
||||||
ObjectFile="..\..\out\release8\build\libbulletccdphysics\"
|
ObjectFile="..\..\out\release8\build\libbulletccdphysics\"
|
||||||
ProgramDataBaseFileName="..\..\out\release8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
ProgramDataBaseFileName="..\..\out\release8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
SuppressStartupBanner="TRUE"
|
SuppressStartupBanner="true"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="true"
|
||||||
TreatWChar_tAsBuiltInType="false"
|
DebugInformationFormat="3"
|
||||||
CompileAs="0"/>
|
CompileAs="0"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCManagedResourceCompilerTool"
|
||||||
<Tool
|
/>
|
||||||
Name="VCLinkerTool"
|
|
||||||
LinkIncremental="1"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
IgnoreDefaultLibraryNames="LIBC,LIBCD"
|
|
||||||
AdditionalOptions=" "
|
|
||||||
AdditionalDependencies=""
|
|
||||||
IgnoreImportLibrary="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateManifest="false"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
ProgramDatabaseFile="..\..\out\release8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="..\..\out\release8\libs\libbulletccdphysics.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName="..\..\out\release8\build\libbulletccdphysics\libbulletccdphysics.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
||||||
|
Culture="1033"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
||||||
Culture="1033"/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="..\..\out\release8\libs\libbulletccdphysics.lib"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Debug|Win32"
|
Name="Debug|Win32"
|
||||||
@@ -91,93 +102,126 @@
|
|||||||
IntermediateDirectory="..\..\out\debug8\build\libbulletccdphysics\"
|
IntermediateDirectory="..\..\out\debug8\build\libbulletccdphysics\"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="..\..\out\debug8\build\libbulletccdphysics\libbulletccdphysics.tlb"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
|
||||||
MinimalRebuild="TRUE"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
RuntimeTypeInfo="FALSE"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;WIN32"
|
|
||||||
OptimizeForProcessor="1"
|
|
||||||
ExceptionHandling="0"
|
|
||||||
AdditionalOptions=" "
|
AdditionalOptions=" "
|
||||||
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
||||||
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;WIN32"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
ExceptionHandling="0"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
PrecompiledHeaderFile="..\..\out\debug8\build\libbulletccdphysics\libbulletccdphysics.pch"
|
PrecompiledHeaderFile="..\..\out\debug8\build\libbulletccdphysics\libbulletccdphysics.pch"
|
||||||
AssemblerListingLocation="..\..\out\debug8\build\libbulletccdphysics\"
|
AssemblerListingLocation="..\..\out\debug8\build\libbulletccdphysics\"
|
||||||
ObjectFile="..\..\out\debug8\build\libbulletccdphysics\"
|
ObjectFile="..\..\out\debug8\build\libbulletccdphysics\"
|
||||||
ProgramDataBaseFileName="..\..\out\debug8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
ProgramDataBaseFileName="..\..\out\debug8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
SuppressStartupBanner="TRUE"
|
SuppressStartupBanner="true"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="true"
|
||||||
TreatWChar_tAsBuiltInType="false"
|
DebugInformationFormat="4"
|
||||||
CompileAs="0"/>
|
CompileAs="0"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCManagedResourceCompilerTool"
|
||||||
<Tool
|
/>
|
||||||
Name="VCLinkerTool"
|
|
||||||
LinkIncremental="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
IgnoreDefaultLibraryNames="LIBC,LIBCD"
|
|
||||||
AdditionalOptions=" "
|
|
||||||
AdditionalDependencies=""
|
|
||||||
IgnoreImportLibrary="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateManifest="false"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
ProgramDatabaseFile="..\..\out\debug8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="..\..\out\debug8\libs\libbulletccdphysics_d.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName="..\..\out\debug8\build\libbulletccdphysics\libbulletccdphysics.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
||||||
|
Culture="1033"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
||||||
Culture="1033"/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="..\..\out\debug8\libs\libbulletccdphysics_d.lib"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</Configurations>
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
<Files>
|
<Files>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Source Files"
|
Name="Source Files"
|
||||||
Filter="">
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsController.cpp">
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsController.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsEnvironment.cpp">
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsEnvironment.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
Filter="">
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsController.h">
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsController.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsEnvironment.h">
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsEnvironment.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\ParallelIslandDispatcher.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\ParallelIslandDispatcher.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\ParallelPhysicsEnvironment.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\ParallelPhysicsEnvironment.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
<Globals>
|
<Globals>
|
||||||
</Globals>
|
</Globals>
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
<?xml version="1.0" encoding = "Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="8.00"
|
Version="8.00"
|
||||||
Name="libbulletdynamics"
|
Name="libbulletdynamics"
|
||||||
ProjectGUID="{61BD1097-CF2E-B296-DAA9-73A6FE135319}"
|
ProjectGUID="{61BD1097-CF2E-B296-DAA9-73A6FE135319}"
|
||||||
SccProjectName=""
|
>
|
||||||
SccLocalPath="">
|
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform
|
<Platform
|
||||||
Name="Win32"/>
|
Name="Win32"
|
||||||
|
/>
|
||||||
</Platforms>
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release|Win32"
|
Name="Release|Win32"
|
||||||
@@ -17,73 +19,82 @@
|
|||||||
IntermediateDirectory="..\..\out\release8\build\libbulletdynamics\"
|
IntermediateDirectory="..\..\out\release8\build\libbulletdynamics\"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="..\..\out\release8\build\libbulletdynamics\libbulletdynamics.tlb"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="2"
|
|
||||||
StringPooling="TRUE"
|
|
||||||
EnableFunctionLevelLinking="TRUE"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
BufferSecurityCheck="FALSE"
|
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;WIN32"
|
|
||||||
OptimizeForProcessor="1"
|
|
||||||
ExceptionHandling="0"
|
|
||||||
AdditionalOptions=" "
|
AdditionalOptions=" "
|
||||||
|
Optimization="2"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;WIN32"
|
||||||
|
StringPooling="true"
|
||||||
|
ExceptionHandling="0"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
BufferSecurityCheck="false"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
PrecompiledHeaderFile="..\..\out\release8\build\libbulletdynamics\libbulletdynamics.pch"
|
PrecompiledHeaderFile="..\..\out\release8\build\libbulletdynamics\libbulletdynamics.pch"
|
||||||
AssemblerListingLocation="..\..\out\release8\build\libbulletdynamics\"
|
AssemblerListingLocation="..\..\out\release8\build\libbulletdynamics\"
|
||||||
ObjectFile="..\..\out\release8\build\libbulletdynamics\"
|
ObjectFile="..\..\out\release8\build\libbulletdynamics\"
|
||||||
ProgramDataBaseFileName="..\..\out\release8\build\libbulletdynamics\bulletdynamics.pdb"
|
ProgramDataBaseFileName="..\..\out\release8\build\libbulletdynamics\bulletdynamics.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
SuppressStartupBanner="TRUE"
|
SuppressStartupBanner="true"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="true"
|
||||||
TreatWChar_tAsBuiltInType="false"
|
DebugInformationFormat="3"
|
||||||
CompileAs="0"/>
|
CompileAs="0"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCManagedResourceCompilerTool"
|
||||||
<Tool
|
/>
|
||||||
Name="VCLinkerTool"
|
|
||||||
LinkIncremental="1"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
IgnoreDefaultLibraryNames="LIBC,LIBCD"
|
|
||||||
AdditionalOptions=" "
|
|
||||||
AdditionalDependencies=""
|
|
||||||
IgnoreImportLibrary="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateManifest="false"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
ProgramDatabaseFile="..\..\out\release8\build\libbulletdynamics\bulletdynamics.pdb"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="..\..\out\release8\libs\libbulletdynamics.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName="..\..\out\release8\build\libbulletdynamics\libbulletdynamics.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
||||||
|
Culture="1033"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
Culture="1033"/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="..\..\out\release8\libs\libbulletdynamics.lib"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Debug|Win32"
|
Name="Debug|Win32"
|
||||||
@@ -91,151 +102,188 @@
|
|||||||
IntermediateDirectory="..\..\out\debug8\build\libbulletdynamics\"
|
IntermediateDirectory="..\..\out\debug8\build\libbulletdynamics\"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="..\..\out\debug8\build\libbulletdynamics\libbulletdynamics.tlb"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
|
||||||
MinimalRebuild="TRUE"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
RuntimeTypeInfo="FALSE"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;WIN32"
|
|
||||||
OptimizeForProcessor="1"
|
|
||||||
ExceptionHandling="0"
|
|
||||||
AdditionalOptions=" "
|
AdditionalOptions=" "
|
||||||
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;WIN32"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
ExceptionHandling="0"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
PrecompiledHeaderFile="..\..\out\debug8\build\libbulletdynamics\libbulletdynamics.pch"
|
PrecompiledHeaderFile="..\..\out\debug8\build\libbulletdynamics\libbulletdynamics.pch"
|
||||||
AssemblerListingLocation="..\..\out\debug8\build\libbulletdynamics\"
|
AssemblerListingLocation="..\..\out\debug8\build\libbulletdynamics\"
|
||||||
ObjectFile="..\..\out\debug8\build\libbulletdynamics\"
|
ObjectFile="..\..\out\debug8\build\libbulletdynamics\"
|
||||||
ProgramDataBaseFileName="..\..\out\debug8\build\libbulletdynamics\bulletdynamics.pdb"
|
ProgramDataBaseFileName="..\..\out\debug8\build\libbulletdynamics\bulletdynamics.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
SuppressStartupBanner="TRUE"
|
SuppressStartupBanner="true"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="true"
|
||||||
TreatWChar_tAsBuiltInType="false"
|
DebugInformationFormat="4"
|
||||||
CompileAs="0"/>
|
CompileAs="0"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCManagedResourceCompilerTool"
|
||||||
<Tool
|
/>
|
||||||
Name="VCLinkerTool"
|
|
||||||
LinkIncremental="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
IgnoreDefaultLibraryNames="LIBC,LIBCD"
|
|
||||||
AdditionalOptions=" "
|
|
||||||
AdditionalDependencies=""
|
|
||||||
IgnoreImportLibrary="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateManifest="false"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
ProgramDatabaseFile="..\..\out\debug8\build\libbulletdynamics\bulletdynamics.pdb"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="..\..\out\debug8\libs\libbulletdynamics_d.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName="..\..\out\debug8\build\libbulletdynamics\libbulletdynamics.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
||||||
|
Culture="1033"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
Culture="1033"/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="..\..\out\debug8\libs\libbulletdynamics_d.lib"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</Configurations>
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
<Files>
|
<Files>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Source Files"
|
Name="Source Files"
|
||||||
Filter="">
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\Dynamics\BU_Joint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\HingeConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\Dynamics\ContactJoint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Point2PointConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\SequentialImpulseConstraintSolver.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\HingeConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Solve2LinearConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Point2PointConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\TypedConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\Dynamics\RigidBody.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\BU_Joint.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\SequentialImpulseConstraintSolver.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\ContactJoint.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Solve2LinearConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\RigidBody.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\TypedConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
Filter="">
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\ConstraintSolver.h">
|
RelativePath="..\..\BulletDynamics\Dynamics\BU_Joint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\ConstraintSolver.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactSolverInfo.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.h">
|
RelativePath="..\..\BulletDynamics\Dynamics\ContactJoint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\HingeConstraint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactSolverInfo.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\JacobianEntry.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Point2PointConstraint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\HingeConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\SequentialImpulseConstraintSolver.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\JacobianEntry.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Solve2LinearConstraint.h">
|
RelativePath="..\..\BulletDynamics\Dynamics\MassProps.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\TypedConstraint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Point2PointConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\BU_Joint.h">
|
RelativePath="..\..\BulletDynamics\Dynamics\RigidBody.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\ContactJoint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\SequentialImpulseConstraintSolver.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\MassProps.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Solve2LinearConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\RigidBody.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\TypedConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
</Files>
|
</Files>
|
||||||
|
|||||||
Reference in New Issue
Block a user