From 9447dfdcfb7245283e23f9e0a8e10aa2640618f6 Mon Sep 17 00:00:00 2001 From: ejcoumans Date: Fri, 7 Dec 2007 06:24:19 +0000 Subject: [PATCH] demo cleanup part 5, fixed memory leaks in ConstraintDemo --- Demos/ConstraintDemo/ConstraintDemo.cpp | 58 ++++++++++++++++++++----- Demos/ConstraintDemo/ConstraintDemo.h | 14 ++++++ 2 files changed, 61 insertions(+), 11 deletions(-) diff --git a/Demos/ConstraintDemo/ConstraintDemo.cpp b/Demos/ConstraintDemo/ConstraintDemo.cpp index 0c58ec5d5..eee1408e6 100644 --- a/Demos/ConstraintDemo/ConstraintDemo.cpp +++ b/Demos/ConstraintDemo/ConstraintDemo.cpp @@ -65,21 +65,16 @@ void ConstraintDemo::initPhysics() { setCameraDistance(26.f); -// btCollisionShape* groundShape = new btBoxShape(btVector3(50,3,50)); - btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); - btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration); + m_collisionConfiguration = new btDefaultCollisionConfiguration(); + m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); btVector3 worldMin(-1000,-1000,-1000); btVector3 worldMax(1000,1000,1000); - btBroadphaseInterface* pairCache = new btAxisSweep3(worldMin,worldMax); - //btBroadphaseInterface* broadphase = new btSimpleBroadphase(); - btConstraintSolver* constraintSolver = new btSequentialImpulseConstraintSolver(); - //ConstraintSolver* solver = new OdeConstraintSolver; - m_dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,pairCache,constraintSolver,collisionConfiguration); - - //m_dynamicsWorld->setGravity(btVector3(0,0,0)); - + m_overlappingPairCache = new btAxisSweep3(worldMin,worldMax); + m_constraintSolver = new btSequentialImpulseConstraintSolver(); + m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_overlappingPairCache,m_constraintSolver,m_collisionConfiguration); btCollisionShape* shape = new btBoxShape(btVector3(CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS,CUBE_HALF_EXTENTS)); + m_collisionShapes.push_back(shape); btTransform trans; trans.setIdentity(); trans.setOrigin(btVector3(0,20,0)); @@ -155,6 +150,47 @@ void ConstraintDemo::initPhysics() } +ConstraintDemo::~ConstraintDemo() +{ + //cleanup in the reverse order of creation/initialization + + //remove the rigidbodies from the dynamics world and delete them + int i; + for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--) + { + btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i]; + btRigidBody* body = btRigidBody::upcast(obj); + if (body && body->getMotionState()) + { + delete body->getMotionState(); + } + m_dynamicsWorld->removeCollisionObject( obj ); + delete obj; + } + + //delete collision shapes + for (int j=0;j m_collisionShapes; + + class btBroadphaseInterface* m_overlappingPairCache; + + class btCollisionDispatcher* m_dispatcher; + + class btConstraintSolver* m_constraintSolver; + + class btDefaultCollisionConfiguration* m_collisionConfiguration; + public: + + virtual ~ConstraintDemo(); + void initPhysics(); virtual void clientMoveAndDisplay();