From 7d133d508d4ec7db1cf33bcd64bb65f4159d4c4c Mon Sep 17 00:00:00 2001 From: cc9cii Date: Wed, 5 Nov 2014 07:10:14 +1100 Subject: [PATCH] Remove unused code. Move the cleanup of global resources used by the PhysicsEngine to PhysicsManager. --- apps/opencs/view/render/mousestate.cpp | 8 +- apps/opencs/view/world/physicsengine.cpp | 16 ++-- apps/opencs/view/world/physicsengine.hpp | 101 +--------------------- apps/opencs/view/world/physicsmanager.cpp | 15 ++++ 4 files changed, 32 insertions(+), 108 deletions(-) diff --git a/apps/opencs/view/render/mousestate.cpp b/apps/opencs/view/render/mousestate.cpp index 94ab9bc0b..45e846f74 100644 --- a/apps/opencs/view/render/mousestate.cpp +++ b/apps/opencs/view/render/mousestate.cpp @@ -255,7 +255,7 @@ namespace CSVRender std::pair result = terrainUnderCursor(event->x(), event->y()); if(result.first != "") { - // FIXME: terrain editing + // FIXME: terrain editing goes here } break; } @@ -266,9 +266,9 @@ namespace CSVRender void MouseState::mouseDoubleClickEvent (QMouseEvent *event) { - //event->ignore(); - mPhysics->toggleDebugRendering(mSceneManager); - mParent->flagAsModified(); + event->ignore(); + //mPhysics->toggleDebugRendering(mSceneManager); + //mParent->flagAsModified(); } bool MouseState::wheelEvent (QWheelEvent *event) diff --git a/apps/opencs/view/world/physicsengine.cpp b/apps/opencs/view/world/physicsengine.cpp index 7e7078a0f..05dcc3426 100644 --- a/apps/opencs/view/world/physicsengine.cpp +++ b/apps/opencs/view/world/physicsengine.cpp @@ -16,8 +16,9 @@ // PLEASE NOTE: // -// This file is based on libs/openengine/bullet/physic.cpp. The commit history and -// credits for the code below stem from that file. +// This file is based on libs/openengine/bullet/physic.cpp. Please see the commit +// history and credits for the code below, which is mostly copied from there and +// adapted for use with OpenCS. namespace CSVWorld { @@ -132,14 +133,17 @@ namespace CSVWorld } } - delete mDynamicsWorld; // FIXME: need to reference count?? + + delete mDynamicsWorld; delete mSolver; delete mCollisionConfiguration; delete mDispatcher; delete mBroadphase; delete mShapeLoader; - delete OEngine::Physic::BulletShapeManager::getSingletonPtr(); // FIXME: need to reference count + // NOTE: the global resources such as "BtOgre/DebugLines" and the + // BulletShapeManager singleton need to be deleted only when all physics + // engines are deleted in PhysicsManager::removeDocument() } int PhysicsEngine::toggleDebugRendering(Ogre::SceneManager *sceneMgr) @@ -159,8 +163,8 @@ namespace CSVWorld mDebugDrawers[sceneMgr]->setDebugMode(1 /*mDebugDrawFlags*/); else mDebugDrawers[sceneMgr]->setDebugMode(0); + mDynamicsWorld->debugDrawWorld(); - mDynamicsWorld->debugDrawWorld(); // FIXME: call this now? return mDebugDrawers[sceneMgr]->getDebugMode(); } } @@ -290,9 +294,7 @@ namespace CSVWorld const Ogre::Vector3 &position, const Ogre::Quaternion &rotation) { btTransform tr; - //Ogre::Quaternion boxrot = rotation * boxRotation; Ogre::Quaternion boxrot = rotation * Ogre::Quaternion::IDENTITY; - //Ogre::Vector3 transrot = boxrot * scaledBoxTranslation; Ogre::Vector3 transrot = boxrot * Ogre::Vector3::ZERO; Ogre::Vector3 newPosition = transrot + position; diff --git a/apps/opencs/view/world/physicsengine.hpp b/apps/opencs/view/world/physicsengine.hpp index b14d35820..d960abdff 100644 --- a/apps/opencs/view/world/physicsengine.hpp +++ b/apps/opencs/view/world/physicsengine.hpp @@ -1,26 +1,16 @@ #ifndef CSV_WORLD_PHYSICSENGINE_H #define CSV_WORLD_PHYSICSENGINE_H -//#include #include #include -//#include "BulletCollision/CollisionDispatch/btGhostObject.h" -//#include -//#include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h" -//#include -//#include -//#include - -//class btRigidBody; class btBroadphaseInterface; class btDefaultCollisionConfiguration; class btSequentialImpulseConstraintSolver; class btCollisionDispatcher; class btDiscreteDynamicsWorld; class btHeightfieldTerrainShape; -//class btCollisionObject; namespace BtOgre { @@ -45,46 +35,6 @@ namespace OEngine namespace CSVWorld { - - // enum btIDebugDraw::DebugDrawModes - // { - // DBG_NoDebug=0, - // DBG_DrawWireframe = 1, - // DBG_DrawAabb=2, - // DBG_DrawFeaturesText=4, - // DBG_DrawContactPoints=8, - // DBG_NoDeactivation=16, - // DBG_NoHelpText = 32, - // DBG_DrawText=64, - // DBG_ProfileTimings = 128, - // DBG_EnableSatComparison = 256, - // DBG_DisableBulletLCP = 512, - // DBG_EnableCCD = 1024, - // DBG_DrawConstraints = (1 << 11), - // DBG_DrawConstraintLimits = (1 << 12), - // DBG_FastWireframe = (1<<13), - // DBG_DrawNormals = (1<<14), - // DBG_MAX_DEBUG_DRAW_MODE - // }; - // -#if 0 - class CSVDebugDrawer : public BtOgre::DebugDrawer - { - BtOgre::DebugDrawer *mDebugDrawer; - Ogre::SceneManager *mSceneMgr; - Ogre::SceneNode *mSceneNode; - int mDebugMode; - - public: - - CSVDebugDrawer(Ogre::SceneManager *sceneMgr, btDiscreteDynamicsWorld *dynamicsWorld); - ~CSVDebugDrawer(); - - void setDebugMode(int mode); - bool toggleDebugRendering(); - }; -#endif - // This class is just an extension of normal btRigidBody in order to add extra info. // When bullet give back a btRigidBody, you can just do a static_cast to RigidBody, // so one never should use btRigidBody directly! @@ -106,12 +56,9 @@ namespace CSVWorld RigidBody* mBody; }; - /** - * The PhysicsEngine class contain everything which is needed for Physic. - * It's needed that Ogre Resources are set up before the PhysicsEngine is created. - * Note:deleting it WILL NOT delete the RigidBody! - * TODO:unload unused resources? - */ + // The PhysicsEngine class contain everything which is needed for Physic. + // It's needed that Ogre Resources are set up before the PhysicsEngine is created. + // Note:deleting it WILL NOT delete the RigidBody! class PhysicsEngine { //Bullet Stuff @@ -135,20 +82,6 @@ namespace CSVWorld std::map mDebugDrawers; std::map mDebugSceneNodes; -#if 0 - // from bullet - enum CollisionFilterGroups - { - DefaultFilter = 1, - StaticFilter = 2, - KinematicFilter = 4, - DebrisFilter = 8, - SensorTrigger = 16, - CharacterFilter = 32, - AllFilter = -1 //all bits sets: DefaultFilter | StaticFilter | KinematicFilter | DebrisFilter | SensorTrigger - }; -#endif - enum CollisionType { CollisionType_Nothing = 0, // > rayTest2(const btVector3 &from, const btVector3 &to, int filterGroup=0xff); - - std::pair sphereCast (float radius, btVector3 &from, btVector3 &to); - ///< @return (hit, relative distance) - - std::vector getCollisions(const std::string &name, int collisionGroup, int collisionMask); - - // Get the nearest object that's inside the given object, filtering out objects of the - // provided name - std::pair getFilteredContact(const std::string &filter, - const btVector3 &origin, - btCollisionObject *object); -#endif }; } #endif // CSV_WORLD_PHYSICSENGINE_H diff --git a/apps/opencs/view/world/physicsmanager.cpp b/apps/opencs/view/world/physicsmanager.cpp index 2d8dcd95a..ce5748e8d 100644 --- a/apps/opencs/view/world/physicsmanager.cpp +++ b/apps/opencs/view/world/physicsmanager.cpp @@ -2,6 +2,9 @@ #include +#include +#include + #include "../render/worldspacewidget.hpp" #include "physicssystem.hpp" @@ -54,6 +57,18 @@ namespace CSVWorld { mSceneWidgets.erase(it); } + + // cleanup global resources + if(mPhysics.empty()) + { + // delete the extra resources created in removeDebugDraw + if (Ogre::MaterialManager::getSingleton().resourceExists("BtOgre/DebugLines")) + Ogre::MaterialManager::getSingleton().remove("BtOgre/DebugLines"); + if (Ogre::ResourceGroupManager::getSingleton().resourceGroupExists("BtOgre")) + Ogre::ResourceGroupManager::getSingleton().destroyResourceGroup("BtOgre"); + + delete OEngine::Physic::BulletShapeManager::getSingletonPtr(); + } } // called from CSVRender::WorldspaceWidget() to get widgets' association with Document&