From 30ca167bf9d4421736e689fa52d2198a93c5fd7b Mon Sep 17 00:00:00 2001 From: Daniel Chappuis Date: Wed, 6 Oct 2021 21:22:33 +0200 Subject: [PATCH] Create a custom logger for the testbed application and edit demo scenes for this --- testbed/CMakeLists.txt | 2 + .../BallAndSocketJointScene.cpp | 11 +-- .../BallAndSocketJointScene.h | 2 +- .../BallAndSocketJointsChainScene.cpp | 11 +-- .../BallAndSocketJointsChainScene.h | 2 +- .../BallAndSocketJointsNetScene.cpp | 11 +-- .../BallAndSocketJointsNetScene.h | 2 +- testbed/scenes/boxtower/BoxTowerScene.cpp | 11 +-- testbed/scenes/boxtower/BoxTowerScene.h | 2 +- testbed/scenes/bridge/BridgeScene.cpp | 11 +-- testbed/scenes/bridge/BridgeScene.h | 2 +- .../CollisionDetectionScene.cpp | 11 +-- .../CollisionDetectionScene.h | 2 +- .../collisionshapes/CollisionShapesScene.cpp | 11 +-- .../collisionshapes/CollisionShapesScene.h | 2 +- .../scenes/concavemesh/ConcaveMeshScene.cpp | 11 +-- testbed/scenes/concavemesh/ConcaveMeshScene.h | 2 +- testbed/scenes/cubes/CubesScene.cpp | 11 +-- testbed/scenes/cubes/CubesScene.h | 2 +- testbed/scenes/cubestack/CubeStackScene.cpp | 11 +-- testbed/scenes/cubestack/CubeStackScene.h | 2 +- testbed/scenes/fixedjoint/FixedJointScene.cpp | 11 +-- testbed/scenes/fixedjoint/FixedJointScene.h | 2 +- .../scenes/heightfield/HeightFieldScene.cpp | 11 +-- testbed/scenes/heightfield/HeightFieldScene.h | 2 +- testbed/scenes/hingejoint/HingeJointScene.cpp | 11 +-- testbed/scenes/hingejoint/HingeJointScene.h | 2 +- .../HingeJointsChainScene.cpp | 11 +-- .../hingejointschain/HingeJointsChainScene.h | 2 +- testbed/scenes/joints/JointsScene.cpp | 11 +-- testbed/scenes/joints/JointsScene.h | 2 +- testbed/scenes/pile/PileScene.cpp | 11 +-- testbed/scenes/pile/PileScene.h | 2 +- testbed/scenes/ragdoll/RagdollScene.cpp | 11 +-- testbed/scenes/ragdoll/RagdollScene.h | 2 +- testbed/scenes/raycast/RaycastScene.cpp | 11 +-- testbed/scenes/raycast/RaycastScene.h | 2 +- testbed/scenes/rope/RopeScene.cpp | 11 +-- testbed/scenes/rope/RopeScene.h | 2 +- .../scenes/sliderjoint/SliderJointScene.cpp | 11 +-- testbed/scenes/sliderjoint/SliderJointScene.h | 2 +- testbed/src/SceneDemo.cpp | 4 +- testbed/src/SceneDemo.h | 5 +- testbed/src/TestbedApplication.cpp | 86 ++++++++++++---- testbed/src/TestbedApplication.h | 7 ++ testbed/src/TestbedLogger.cpp | 98 +++++++++++++++++++ testbed/src/TestbedLogger.h | 74 ++++++++++++++ 47 files changed, 312 insertions(+), 224 deletions(-) create mode 100644 testbed/src/TestbedLogger.cpp create mode 100644 testbed/src/TestbedLogger.h diff --git a/testbed/CMakeLists.txt b/testbed/CMakeLists.txt index 51930299..4b6ebfb4 100755 --- a/testbed/CMakeLists.txt +++ b/testbed/CMakeLists.txt @@ -91,6 +91,8 @@ set(TESTBED_SOURCES src/SceneDemo.h src/SceneDemo.cpp src/Timer.h + src/TestbedLogger.h + src/TestbedLogger.cpp ) # Common source files diff --git a/testbed/scenes/ballandsocketjoint/BallAndSocketJointScene.cpp b/testbed/scenes/ballandsocketjoint/BallAndSocketJointScene.cpp index 939c8295..19f3b5b8 100644 --- a/testbed/scenes/ballandsocketjoint/BallAndSocketJointScene.cpp +++ b/testbed/scenes/ballandsocketjoint/BallAndSocketJointScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace ballandsocketjointscene; // Constructor -BallAndSocketJointScene::BallAndSocketJointScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +BallAndSocketJointScene::BallAndSocketJointScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { // Compute the radius and the center of the scene openglframework::Vector3 center(0, 5, 0); @@ -42,13 +42,6 @@ BallAndSocketJointScene::BallAndSocketJointScene(const std::string& name, Engine setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/ballandsocketjoint/BallAndSocketJointScene.h b/testbed/scenes/ballandsocketjoint/BallAndSocketJointScene.h index 4626e269..062cf594 100644 --- a/testbed/scenes/ballandsocketjoint/BallAndSocketJointScene.h +++ b/testbed/scenes/ballandsocketjoint/BallAndSocketJointScene.h @@ -70,7 +70,7 @@ class BallAndSocketJointScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - BallAndSocketJointScene(const std::string& name, EngineSettings& settings); + BallAndSocketJointScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~BallAndSocketJointScene() override ; diff --git a/testbed/scenes/ballandsocketjointschain/BallAndSocketJointsChainScene.cpp b/testbed/scenes/ballandsocketjointschain/BallAndSocketJointsChainScene.cpp index 00e96e67..dd09bd2c 100644 --- a/testbed/scenes/ballandsocketjointschain/BallAndSocketJointsChainScene.cpp +++ b/testbed/scenes/ballandsocketjointschain/BallAndSocketJointsChainScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace ballandsocketjointschainscene; // Constructor -BallAndSocketJointsChainScene::BallAndSocketJointsChainScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +BallAndSocketJointsChainScene::BallAndSocketJointsChainScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { std::string meshFolderPath("meshes/"); @@ -44,13 +44,6 @@ BallAndSocketJointsChainScene::BallAndSocketJointsChainScene(const std::string& setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/ballandsocketjointschain/BallAndSocketJointsChainScene.h b/testbed/scenes/ballandsocketjointschain/BallAndSocketJointsChainScene.h index 658e249d..71f4fe36 100644 --- a/testbed/scenes/ballandsocketjointschain/BallAndSocketJointsChainScene.h +++ b/testbed/scenes/ballandsocketjointschain/BallAndSocketJointsChainScene.h @@ -65,7 +65,7 @@ class BallAndSocketJointsChainScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - BallAndSocketJointsChainScene(const std::string& name, EngineSettings& settings); + BallAndSocketJointsChainScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~BallAndSocketJointsChainScene() override ; diff --git a/testbed/scenes/ballandsocketjointsnet/BallAndSocketJointsNetScene.cpp b/testbed/scenes/ballandsocketjointsnet/BallAndSocketJointsNetScene.cpp index af38b7e5..f4ded287 100644 --- a/testbed/scenes/ballandsocketjointsnet/BallAndSocketJointsNetScene.cpp +++ b/testbed/scenes/ballandsocketjointsnet/BallAndSocketJointsNetScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace ballandsocketjointsnetscene; // Constructor -BallAndSocketJointsNetScene::BallAndSocketJointsNetScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +BallAndSocketJointsNetScene::BallAndSocketJointsNetScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { std::string meshFolderPath("meshes/"); @@ -49,13 +49,6 @@ BallAndSocketJointsNetScene::BallAndSocketJointsNetScene(const std::string& name rp3d::PhysicsWorld::WorldSettings worldSettings; worldSettings.worldName = name; - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); - // Create the physics world for the physics simulation rp3d::PhysicsWorld* physicsWorld = mPhysicsCommon.createPhysicsWorld(worldSettings); physicsWorld->setEventListener(this); diff --git a/testbed/scenes/ballandsocketjointsnet/BallAndSocketJointsNetScene.h b/testbed/scenes/ballandsocketjointsnet/BallAndSocketJointsNetScene.h index 4e9e4826..6c06ebdb 100644 --- a/testbed/scenes/ballandsocketjointsnet/BallAndSocketJointsNetScene.h +++ b/testbed/scenes/ballandsocketjointsnet/BallAndSocketJointsNetScene.h @@ -65,7 +65,7 @@ class BallAndSocketJointsNetScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - BallAndSocketJointsNetScene(const std::string& name, EngineSettings& settings); + BallAndSocketJointsNetScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~BallAndSocketJointsNetScene() override ; diff --git a/testbed/scenes/boxtower/BoxTowerScene.cpp b/testbed/scenes/boxtower/BoxTowerScene.cpp index 4c35672f..c32eb47d 100644 --- a/testbed/scenes/boxtower/BoxTowerScene.cpp +++ b/testbed/scenes/boxtower/BoxTowerScene.cpp @@ -31,8 +31,8 @@ using namespace openglframework; using namespace boxtowerscene; // Constructor -BoxTowerScene::BoxTowerScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +BoxTowerScene::BoxTowerScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { std::string meshFolderPath("meshes/"); @@ -46,13 +46,6 @@ BoxTowerScene::BoxTowerScene(const std::string& name, EngineSettings& settings) rp3d::Vector3 gravity(0, -9.81f, 0); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/boxtower/BoxTowerScene.h b/testbed/scenes/boxtower/BoxTowerScene.h index 297e76bf..f52336d0 100644 --- a/testbed/scenes/boxtower/BoxTowerScene.h +++ b/testbed/scenes/boxtower/BoxTowerScene.h @@ -77,7 +77,7 @@ class BoxTowerScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - BoxTowerScene(const std::string& name, EngineSettings& settings); + BoxTowerScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon &physicsCommon); /// Destructor virtual ~BoxTowerScene() override; diff --git a/testbed/scenes/bridge/BridgeScene.cpp b/testbed/scenes/bridge/BridgeScene.cpp index e3364fe1..7e502a2d 100644 --- a/testbed/scenes/bridge/BridgeScene.cpp +++ b/testbed/scenes/bridge/BridgeScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace bridgescene; // Constructor -BridgeScene::BridgeScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +BridgeScene::BridgeScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { std::string meshFolderPath("meshes/"); @@ -44,13 +44,6 @@ BridgeScene::BridgeScene(const std::string& name, EngineSettings& settings) setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/bridge/BridgeScene.h b/testbed/scenes/bridge/BridgeScene.h index d00f4021..0b0b7896 100644 --- a/testbed/scenes/bridge/BridgeScene.h +++ b/testbed/scenes/bridge/BridgeScene.h @@ -72,7 +72,7 @@ class BridgeScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - BridgeScene(const std::string& name, EngineSettings& settings); + BridgeScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~BridgeScene() override ; diff --git a/testbed/scenes/collisiondetection/CollisionDetectionScene.cpp b/testbed/scenes/collisiondetection/CollisionDetectionScene.cpp index cf27321d..3a736ba9 100644 --- a/testbed/scenes/collisiondetection/CollisionDetectionScene.cpp +++ b/testbed/scenes/collisiondetection/CollisionDetectionScene.cpp @@ -33,8 +33,8 @@ using namespace openglframework; using namespace collisiondetectionscene; // Constructor -CollisionDetectionScene::CollisionDetectionScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, SCENE_RADIUS, false), mMeshFolderPath("meshes/"), +CollisionDetectionScene::CollisionDetectionScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, SCENE_RADIUS, false), mMeshFolderPath("meshes/"), mContactManager(mPhongShader, mMeshFolderPath, mSnapshotsContactPoints), mAreNormalsDisplayed(false) { @@ -52,13 +52,6 @@ CollisionDetectionScene::CollisionDetectionScene(const std::string& name, Engine rp3d::PhysicsWorld::WorldSettings worldSettings; worldSettings.worldName = name; - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); - // Create the physics world for the physics simulation mPhysicsWorld = mPhysicsCommon.createPhysicsWorld(worldSettings); diff --git a/testbed/scenes/collisiondetection/CollisionDetectionScene.h b/testbed/scenes/collisiondetection/CollisionDetectionScene.h index 83dc6bef..5fd529a5 100644 --- a/testbed/scenes/collisiondetection/CollisionDetectionScene.h +++ b/testbed/scenes/collisiondetection/CollisionDetectionScene.h @@ -121,7 +121,7 @@ class CollisionDetectionScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - CollisionDetectionScene(const std::string& name, EngineSettings& settings); + CollisionDetectionScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~CollisionDetectionScene() override; diff --git a/testbed/scenes/collisionshapes/CollisionShapesScene.cpp b/testbed/scenes/collisionshapes/CollisionShapesScene.cpp index 3f705d71..8cb457e1 100644 --- a/testbed/scenes/collisionshapes/CollisionShapesScene.cpp +++ b/testbed/scenes/collisionshapes/CollisionShapesScene.cpp @@ -31,8 +31,8 @@ using namespace openglframework; using namespace collisionshapesscene; // Constructor -CollisionShapesScene::CollisionShapesScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +CollisionShapesScene::CollisionShapesScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { std::string meshFolderPath("meshes/"); @@ -43,13 +43,6 @@ CollisionShapesScene::CollisionShapesScene(const std::string& name, EngineSettin setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/collisionshapes/CollisionShapesScene.h b/testbed/scenes/collisionshapes/CollisionShapesScene.h index 98705ca8..e1598ebd 100644 --- a/testbed/scenes/collisionshapes/CollisionShapesScene.h +++ b/testbed/scenes/collisionshapes/CollisionShapesScene.h @@ -89,7 +89,7 @@ class CollisionShapesScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - CollisionShapesScene(const std::string& name, EngineSettings& settings); + CollisionShapesScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~CollisionShapesScene() override; diff --git a/testbed/scenes/concavemesh/ConcaveMeshScene.cpp b/testbed/scenes/concavemesh/ConcaveMeshScene.cpp index 6a4f2d7b..361f4374 100644 --- a/testbed/scenes/concavemesh/ConcaveMeshScene.cpp +++ b/testbed/scenes/concavemesh/ConcaveMeshScene.cpp @@ -31,8 +31,8 @@ using namespace openglframework; using namespace trianglemeshscene; // Constructor -ConcaveMeshScene::ConcaveMeshScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +ConcaveMeshScene::ConcaveMeshScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { std::string meshFolderPath("meshes/"); @@ -43,13 +43,6 @@ ConcaveMeshScene::ConcaveMeshScene(const std::string& name, EngineSettings& sett setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/concavemesh/ConcaveMeshScene.h b/testbed/scenes/concavemesh/ConcaveMeshScene.h index c4f5cdad..708fbb30 100644 --- a/testbed/scenes/concavemesh/ConcaveMeshScene.h +++ b/testbed/scenes/concavemesh/ConcaveMeshScene.h @@ -87,7 +87,7 @@ class ConcaveMeshScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - ConcaveMeshScene(const std::string& name, EngineSettings& settings); + ConcaveMeshScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~ConcaveMeshScene() override; diff --git a/testbed/scenes/cubes/CubesScene.cpp b/testbed/scenes/cubes/CubesScene.cpp index 6bb57f7f..be6f8a64 100644 --- a/testbed/scenes/cubes/CubesScene.cpp +++ b/testbed/scenes/cubes/CubesScene.cpp @@ -31,8 +31,8 @@ using namespace openglframework; using namespace cubesscene; // Constructor -CubesScene::CubesScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +CubesScene::CubesScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { iter = 0; @@ -43,13 +43,6 @@ CubesScene::CubesScene(const std::string& name, EngineSettings& settings) setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/cubes/CubesScene.h b/testbed/scenes/cubes/CubesScene.h index bc767630..22d30f43 100755 --- a/testbed/scenes/cubes/CubesScene.h +++ b/testbed/scenes/cubes/CubesScene.h @@ -63,7 +63,7 @@ class CubesScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - CubesScene(const std::string& name, EngineSettings& settings); + CubesScene(const std::string& name, EngineSettings& settings, rp3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~CubesScene() override; diff --git a/testbed/scenes/cubestack/CubeStackScene.cpp b/testbed/scenes/cubestack/CubeStackScene.cpp index 71ab9acc..6e8f1f4e 100644 --- a/testbed/scenes/cubestack/CubeStackScene.cpp +++ b/testbed/scenes/cubestack/CubeStackScene.cpp @@ -31,8 +31,8 @@ using namespace openglframework; using namespace cubestackscene; // Constructor -CubeStackScene::CubeStackScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +CubeStackScene::CubeStackScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { // Compute the radius and the center of the scene openglframework::Vector3 center(0, 5, 0); @@ -41,13 +41,6 @@ CubeStackScene::CubeStackScene(const std::string& name, EngineSettings& settings setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Create the physics world diff --git a/testbed/scenes/cubestack/CubeStackScene.h b/testbed/scenes/cubestack/CubeStackScene.h index 275db5a6..e4229c86 100644 --- a/testbed/scenes/cubestack/CubeStackScene.h +++ b/testbed/scenes/cubestack/CubeStackScene.h @@ -61,7 +61,7 @@ class CubeStackScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - CubeStackScene(const std::string& name, EngineSettings& settings); + CubeStackScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~CubeStackScene() override; diff --git a/testbed/scenes/fixedjoint/FixedJointScene.cpp b/testbed/scenes/fixedjoint/FixedJointScene.cpp index 36f4270b..32f21618 100644 --- a/testbed/scenes/fixedjoint/FixedJointScene.cpp +++ b/testbed/scenes/fixedjoint/FixedJointScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace fixedjointscene; // Constructor -FixedJointScene::FixedJointScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +FixedJointScene::FixedJointScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { // Compute the radius and the center of the scene openglframework::Vector3 center(0, 5, 0); @@ -42,13 +42,6 @@ FixedJointScene::FixedJointScene(const std::string& name, EngineSettings& settin setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/fixedjoint/FixedJointScene.h b/testbed/scenes/fixedjoint/FixedJointScene.h index 1021955a..d4b6991f 100644 --- a/testbed/scenes/fixedjoint/FixedJointScene.h +++ b/testbed/scenes/fixedjoint/FixedJointScene.h @@ -70,7 +70,7 @@ class FixedJointScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - FixedJointScene(const std::string& name, EngineSettings& settings); + FixedJointScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~FixedJointScene() override ; diff --git a/testbed/scenes/heightfield/HeightFieldScene.cpp b/testbed/scenes/heightfield/HeightFieldScene.cpp index d8250b91..37fa8bce 100644 --- a/testbed/scenes/heightfield/HeightFieldScene.cpp +++ b/testbed/scenes/heightfield/HeightFieldScene.cpp @@ -31,8 +31,8 @@ using namespace openglframework; using namespace heightfieldscene; // Constructor -HeightFieldScene::HeightFieldScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +HeightFieldScene::HeightFieldScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { mWorldSettings.gravity = rp3d::Vector3(settings.gravity.x, settings.gravity.y, settings.gravity.z); @@ -45,13 +45,6 @@ HeightFieldScene::HeightFieldScene(const std::string& name, EngineSettings& sett setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/heightfield/HeightFieldScene.h b/testbed/scenes/heightfield/HeightFieldScene.h index f6f761fd..5d1a9ea9 100644 --- a/testbed/scenes/heightfield/HeightFieldScene.h +++ b/testbed/scenes/heightfield/HeightFieldScene.h @@ -88,7 +88,7 @@ class HeightFieldScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - HeightFieldScene(const std::string& name, EngineSettings& settings); + HeightFieldScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~HeightFieldScene() override; diff --git a/testbed/scenes/hingejoint/HingeJointScene.cpp b/testbed/scenes/hingejoint/HingeJointScene.cpp index 36e7f7ea..561e1037 100644 --- a/testbed/scenes/hingejoint/HingeJointScene.cpp +++ b/testbed/scenes/hingejoint/HingeJointScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace hingejointscene; // Constructor -HingeJointScene::HingeJointScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +HingeJointScene::HingeJointScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { // Compute the radius and the center of the scene openglframework::Vector3 center(0, 5, 0); @@ -42,13 +42,6 @@ HingeJointScene::HingeJointScene(const std::string& name, EngineSettings& settin setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/hingejoint/HingeJointScene.h b/testbed/scenes/hingejoint/HingeJointScene.h index 49f679ff..d55eff82 100644 --- a/testbed/scenes/hingejoint/HingeJointScene.h +++ b/testbed/scenes/hingejoint/HingeJointScene.h @@ -70,7 +70,7 @@ class HingeJointScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - HingeJointScene(const std::string& name, EngineSettings& settings); + HingeJointScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~HingeJointScene() override ; diff --git a/testbed/scenes/hingejointschain/HingeJointsChainScene.cpp b/testbed/scenes/hingejointschain/HingeJointsChainScene.cpp index 1ea40dad..ea82c1b4 100644 --- a/testbed/scenes/hingejointschain/HingeJointsChainScene.cpp +++ b/testbed/scenes/hingejointschain/HingeJointsChainScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace hingejointschainscene; // Constructor -HingeJointsChainScene::HingeJointsChainScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +HingeJointsChainScene::HingeJointsChainScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { std::string meshFolderPath("meshes/"); @@ -47,13 +47,6 @@ HingeJointsChainScene::HingeJointsChainScene(const std::string& name, EngineSett rp3d::Vector3 gravity(0, rp3d::decimal(-9.81), 0); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/hingejointschain/HingeJointsChainScene.h b/testbed/scenes/hingejointschain/HingeJointsChainScene.h index 5826309b..f745c6d3 100644 --- a/testbed/scenes/hingejointschain/HingeJointsChainScene.h +++ b/testbed/scenes/hingejointschain/HingeJointsChainScene.h @@ -65,7 +65,7 @@ class HingeJointsChainScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - HingeJointsChainScene(const std::string& name, EngineSettings& settings); + HingeJointsChainScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~HingeJointsChainScene() override ; diff --git a/testbed/scenes/joints/JointsScene.cpp b/testbed/scenes/joints/JointsScene.cpp index b5e43c85..baff2172 100644 --- a/testbed/scenes/joints/JointsScene.cpp +++ b/testbed/scenes/joints/JointsScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace jointsscene; // Constructor -JointsScene::JointsScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +JointsScene::JointsScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { // Compute the radius and the center of the scene openglframework::Vector3 center(0, 5, 0); @@ -45,13 +45,6 @@ JointsScene::JointsScene(const std::string& name, EngineSettings& settings) rp3d::Vector3 gravity(0, rp3d::decimal(-9.81), 0); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/joints/JointsScene.h b/testbed/scenes/joints/JointsScene.h index 8a946bb3..55138a66 100644 --- a/testbed/scenes/joints/JointsScene.h +++ b/testbed/scenes/joints/JointsScene.h @@ -115,7 +115,7 @@ class JointsScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - JointsScene(const std::string& name, EngineSettings& settings); + JointsScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~JointsScene() override ; diff --git a/testbed/scenes/pile/PileScene.cpp b/testbed/scenes/pile/PileScene.cpp index b3ef3bd3..4cedb340 100644 --- a/testbed/scenes/pile/PileScene.cpp +++ b/testbed/scenes/pile/PileScene.cpp @@ -31,8 +31,8 @@ using namespace openglframework; using namespace pilescene; // Constructor -PileScene::PileScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +PileScene::PileScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { std::string meshFolderPath("meshes/"); @@ -43,13 +43,6 @@ PileScene::PileScene(const std::string& name, EngineSettings& settings) setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/pile/PileScene.h b/testbed/scenes/pile/PileScene.h index 1cb12b9c..429f21cf 100644 --- a/testbed/scenes/pile/PileScene.h +++ b/testbed/scenes/pile/PileScene.h @@ -89,7 +89,7 @@ class PileScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - PileScene(const std::string& name, EngineSettings& settings); + PileScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~PileScene() override; diff --git a/testbed/scenes/ragdoll/RagdollScene.cpp b/testbed/scenes/ragdoll/RagdollScene.cpp index 72190da1..a69020a2 100644 --- a/testbed/scenes/ragdoll/RagdollScene.cpp +++ b/testbed/scenes/ragdoll/RagdollScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace ragdollscene; // Constructor -RagdollScene::RagdollScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +RagdollScene::RagdollScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { // Compute the radius and the center of the scene openglframework::Vector3 center(0, 5, 0); @@ -42,13 +42,6 @@ RagdollScene::RagdollScene(const std::string& name, EngineSettings& settings) setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/ragdoll/RagdollScene.h b/testbed/scenes/ragdoll/RagdollScene.h index d3186329..290274c5 100644 --- a/testbed/scenes/ragdoll/RagdollScene.h +++ b/testbed/scenes/ragdoll/RagdollScene.h @@ -145,7 +145,7 @@ class RagdollScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - RagdollScene(const std::string& name, EngineSettings& settings); + RagdollScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~RagdollScene() override ; diff --git a/testbed/scenes/raycast/RaycastScene.cpp b/testbed/scenes/raycast/RaycastScene.cpp index f13cc6cc..55ede5ae 100644 --- a/testbed/scenes/raycast/RaycastScene.cpp +++ b/testbed/scenes/raycast/RaycastScene.cpp @@ -31,8 +31,8 @@ using namespace openglframework; using namespace raycastscene; // Constructor -RaycastScene::RaycastScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, SCENE_RADIUS, false), mMeshFolderPath("meshes/"), +RaycastScene::RaycastScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, SCENE_RADIUS, false), mMeshFolderPath("meshes/"), mRaycastManager(mMeshFolderPath, mSnapshotsContactPoints), mCurrentBodyIndex(-1), mAreNormalsDisplayed(false), mVBOVertices(GL_ARRAY_BUFFER) { @@ -45,13 +45,6 @@ RaycastScene::RaycastScene(const std::string& name, EngineSettings& settings) rp3d::PhysicsWorld::WorldSettings worldSettings; worldSettings.worldName = name; - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); - // Create the physics world for the physics simulation mPhysicsWorld = mPhysicsCommon.createPhysicsWorld(worldSettings); diff --git a/testbed/scenes/raycast/RaycastScene.h b/testbed/scenes/raycast/RaycastScene.h index 9317b026..8c9bd910 100644 --- a/testbed/scenes/raycast/RaycastScene.h +++ b/testbed/scenes/raycast/RaycastScene.h @@ -146,7 +146,7 @@ class RaycastScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - RaycastScene(const std::string& name, EngineSettings& settings); + RaycastScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~RaycastScene() override; diff --git a/testbed/scenes/rope/RopeScene.cpp b/testbed/scenes/rope/RopeScene.cpp index cea1c720..e42396a5 100644 --- a/testbed/scenes/rope/RopeScene.cpp +++ b/testbed/scenes/rope/RopeScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace ropescene; // Constructor -RopeScene::RopeScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS), nbIterations(0), nbTorqueIterations(200) { +RopeScene::RopeScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS), nbIterations(0), nbTorqueIterations(200) { std::string meshFolderPath("meshes/"); @@ -46,13 +46,6 @@ RopeScene::RopeScene(const std::string& name, EngineSettings& settings) setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/rope/RopeScene.h b/testbed/scenes/rope/RopeScene.h index f8825c95..887ca28d 100644 --- a/testbed/scenes/rope/RopeScene.h +++ b/testbed/scenes/rope/RopeScene.h @@ -81,7 +81,7 @@ class RopeScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - RopeScene(const std::string& name, EngineSettings& settings); + RopeScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~RopeScene() override ; diff --git a/testbed/scenes/sliderjoint/SliderJointScene.cpp b/testbed/scenes/sliderjoint/SliderJointScene.cpp index c726ddcb..f171fa8a 100644 --- a/testbed/scenes/sliderjoint/SliderJointScene.cpp +++ b/testbed/scenes/sliderjoint/SliderJointScene.cpp @@ -32,8 +32,8 @@ using namespace openglframework; using namespace sliderjointscene; // Constructor -SliderJointScene::SliderJointScene(const std::string& name, EngineSettings& settings) - : SceneDemo(name, settings, true, SCENE_RADIUS) { +SliderJointScene::SliderJointScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon) + : SceneDemo(name, settings, physicsCommon, true, SCENE_RADIUS) { // Compute the radius and the center of the scene openglframework::Vector3 center(0, 5, 0); @@ -42,13 +42,6 @@ SliderJointScene::SliderJointScene(const std::string& name, EngineSettings& sett setScenePosition(center, SCENE_RADIUS); mWorldSettings.worldName = name; - - // Logger - rp3d::DefaultLogger* defaultLogger = mPhysicsCommon.createDefaultLogger(); - uint logLevel = static_cast(rp3d::Logger::Level::Information) | static_cast(rp3d::Logger::Level::Warning) | - static_cast(rp3d::Logger::Level::Error); - defaultLogger->addFileDestination("rp3d_log_" + name + ".html", logLevel, rp3d::DefaultLogger::Format::HTML); - mPhysicsCommon.setLogger(defaultLogger); } // Destructor diff --git a/testbed/scenes/sliderjoint/SliderJointScene.h b/testbed/scenes/sliderjoint/SliderJointScene.h index 70d7f25b..d03b6b3c 100644 --- a/testbed/scenes/sliderjoint/SliderJointScene.h +++ b/testbed/scenes/sliderjoint/SliderJointScene.h @@ -67,7 +67,7 @@ class SliderJointScene : public SceneDemo { // -------------------- Methods -------------------- // /// Constructor - SliderJointScene(const std::string& name, EngineSettings& settings); + SliderJointScene(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon); /// Destructor virtual ~SliderJointScene() override ; diff --git a/testbed/src/SceneDemo.cpp b/testbed/src/SceneDemo.cpp index e9e9604c..a5085820 100644 --- a/testbed/src/SceneDemo.cpp +++ b/testbed/src/SceneDemo.cpp @@ -40,14 +40,14 @@ openglframework::Color SceneDemo::mSleepingColorDemo = Color(1.0f, 0.25f, 0.25f, openglframework::Color SceneDemo::mSelectedObjectColorDemo = Color(0.09f, 0.59f, 0.88f, 1.0f); // Constructor -SceneDemo::SceneDemo(const std::string& name, EngineSettings& settings, bool isPhysicsWorldSimulated, float sceneRadius, bool isShadowMappingEnabled) +SceneDemo::SceneDemo(const std::string& name, EngineSettings& settings, reactphysics3d::PhysicsCommon& physicsCommon, bool isPhysicsWorldSimulated, bool isShadowMappingEnabled) : Scene(name, settings, isShadowMappingEnabled), mIsShadowMappingInitialized(false), mDepthShader("shaders/depth.vert", "shaders/depth.frag"), mPhongShader("shaders/phong.vert", "shaders/phong.frag"), mColorShader("shaders/color.vert", "shaders/color.frag"), mQuadShader("shaders/quad.vert", "shaders/quad.frag"), mVBOQuad(GL_ARRAY_BUFFER), mDebugVBOLinesVertices(GL_ARRAY_BUFFER), mDebugVBOTrianglesVertices(GL_ARRAY_BUFFER), - mMeshFolderPath("meshes/"), mPhysicsWorld(nullptr), mIsPhysicsWorldSimulated(isPhysicsWorldSimulated), + mMeshFolderPath("meshes/"), mPhysicsCommon(physicsCommon), mPhysicsWorld(nullptr), mIsPhysicsWorldSimulated(isPhysicsWorldSimulated), mIsMovingBody(false), mMovingBody(nullptr) { shadowMapTextureLevel++; diff --git a/testbed/src/SceneDemo.h b/testbed/src/SceneDemo.h index 05d9e78c..b765cd62 100644 --- a/testbed/src/SceneDemo.h +++ b/testbed/src/SceneDemo.h @@ -31,6 +31,7 @@ #include "VisualContactPoint.h" #include #include "PhysicsObject.h" +#include "TestbedLogger.h" // Constants const int SHADOWMAP_WIDTH = 2048; @@ -113,7 +114,7 @@ class SceneDemo : public Scene, rp3d::RaycastCallback { std::string mMeshFolderPath; - rp3d::PhysicsCommon mPhysicsCommon; + rp3d::PhysicsCommon& mPhysicsCommon; std::vector mPhysicsObjects; @@ -168,7 +169,7 @@ class SceneDemo : public Scene, rp3d::RaycastCallback { // -------------------- Methods -------------------- // /// Constructor - SceneDemo(const std::string& name, EngineSettings& settings, bool isPhysicsWorldSimulated, float sceneRadius, bool isShadowMappingEnabled = true); + SceneDemo(const std::string& name, EngineSettings& settings, rp3d::PhysicsCommon& physicsCommon, bool isPhysicsWorldSimulated, bool isShadowMappingEnabled = true); /// Destructor virtual ~SceneDemo() override; diff --git a/testbed/src/TestbedApplication.cpp b/testbed/src/TestbedApplication.cpp index 75cf1ac4..a72c5fb4 100755 --- a/testbed/src/TestbedApplication.cpp +++ b/testbed/src/TestbedApplication.cpp @@ -105,6 +105,9 @@ TestbedApplication::~TestbedApplication() { // Initialize the viewer void TestbedApplication::init() { + // Logger + rp3d::PhysicsCommon::setLogger(&mLogger); + // Create all the scenes createScenes(); @@ -137,85 +140,128 @@ void TestbedApplication::init() { // Create all the scenes void TestbedApplication::createScenes() { + uint logLevel = static_cast(rp3d::Logger::Level::Information); + // Cubes scene - CubesScene* cubeScene = new CubesScene("Cubes", mDefaultEngineSettings); + std::string sceneName = "Cubes"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + CubesScene* cubeScene = new CubesScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(cubeScene); // Cube Stack scene - CubeStackScene* cubeStackScene = new CubeStackScene("Cube Stack", mDefaultEngineSettings); + sceneName = "Cube Stack"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + CubeStackScene* cubeStackScene = new CubeStackScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(cubeStackScene); // Joints scene - JointsScene* jointsScene = new JointsScene("Joints", mDefaultEngineSettings); + sceneName = "Joints"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + JointsScene* jointsScene = new JointsScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(jointsScene); // Collision shapes scene - CollisionShapesScene* collisionShapesScene = new CollisionShapesScene("Collision Shapes", mDefaultEngineSettings); + sceneName = "Collision Shapes"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + CollisionShapesScene* collisionShapesScene = new CollisionShapesScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(collisionShapesScene); // Heightfield shape scene - HeightFieldScene* heightFieldScene = new HeightFieldScene("Heightfield", mDefaultEngineSettings); + sceneName = "Heightfield"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + HeightFieldScene* heightFieldScene = new HeightFieldScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(heightFieldScene); // Raycast scene - RaycastScene* raycastScene = new RaycastScene("Raycast", mDefaultEngineSettings); + sceneName = "Raycast"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + RaycastScene* raycastScene = new RaycastScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(raycastScene); // Collision Detection scene - CollisionDetectionScene* collisionDetectionScene = new CollisionDetectionScene("Collision Detection", mDefaultEngineSettings); + sceneName = "Collision Detection"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + CollisionDetectionScene* collisionDetectionScene = new CollisionDetectionScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(collisionDetectionScene); // Concave Mesh scene - ConcaveMeshScene* concaveMeshScene = new ConcaveMeshScene("Concave Mesh", mDefaultEngineSettings); + sceneName = "Concave Mesh"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + ConcaveMeshScene* concaveMeshScene = new ConcaveMeshScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(concaveMeshScene); // Pile scene - PileScene* pileScene = new PileScene("Pile", mDefaultEngineSettings); + sceneName = "Pile"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + PileScene* pileScene = new PileScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(pileScene); // Ball and Socket joint scene - BallAndSocketJointScene* ballAndSocketJointScene = new BallAndSocketJointScene("Ball and Socket joint", mDefaultEngineSettings); + sceneName = "Ball and Socket joint"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + BallAndSocketJointScene* ballAndSocketJointScene = new BallAndSocketJointScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(ballAndSocketJointScene); // Box Tower scene - BoxTowerScene* boxTowerScene = new BoxTowerScene("Box Tower", mDefaultEngineSettings); + sceneName = "Box Tower"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + BoxTowerScene* boxTowerScene = new BoxTowerScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(boxTowerScene); // Ball and Socket joints Net scene - BallAndSocketJointsNetScene* ballAndSocketJointsNetScene = new BallAndSocketJointsNetScene("BallAndSocket Joints Net", mDefaultEngineSettings); + sceneName = "BallAndSocket Joints Net"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + BallAndSocketJointsNetScene* ballAndSocketJointsNetScene = new BallAndSocketJointsNetScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(ballAndSocketJointsNetScene); // Ball and Socket joints chain scene - BallAndSocketJointsChainScene* ballAndSocketJointsChainScene = new BallAndSocketJointsChainScene("BallAndSocket Joints Chain", mDefaultEngineSettings); + sceneName = "BallAndSoket Joints Chain"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + BallAndSocketJointsChainScene* ballAndSocketJointsChainScene = new BallAndSocketJointsChainScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(ballAndSocketJointsChainScene); // Hinge joints chain scene - HingeJointsChainScene* hingeJointsChainScene = new HingeJointsChainScene("Hinge Joints Chain", mDefaultEngineSettings); + sceneName = "Hinge Joints Chain"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + HingeJointsChainScene* hingeJointsChainScene = new HingeJointsChainScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(hingeJointsChainScene); // Bridge scene - BridgeScene* bridgeScene = new BridgeScene("Bridge", mDefaultEngineSettings); + sceneName = "Bridge"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + BridgeScene* bridgeScene = new BridgeScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(bridgeScene); // Fixed joint scene - FixedJointScene* fixedJointScene = new FixedJointScene("Fixed joint", mDefaultEngineSettings); + sceneName = "Fixed joint"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + FixedJointScene* fixedJointScene = new FixedJointScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(fixedJointScene); // Hinge joint scene - HingeJointScene* hingeJointScene = new HingeJointScene("Hinge joint", mDefaultEngineSettings); + sceneName = "Hinge joint"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + HingeJointScene* hingeJointScene = new HingeJointScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(hingeJointScene); // Slider joint scene - SliderJointScene* sliderJointScene = new SliderJointScene("Slider joint", mDefaultEngineSettings); + sceneName = "Slider joint"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + SliderJointScene* sliderJointScene = new SliderJointScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(sliderJointScene); // Ragdoll scene - RagdollScene* ragdollScene = new RagdollScene("Ragdoll", mDefaultEngineSettings); + sceneName = "Ragdoll"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + RagdollScene* ragdollScene = new RagdollScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(ragdollScene); // Rope scene - RopeScene* ropeScene = new RopeScene("Rope", mDefaultEngineSettings); + sceneName = "Rope"; + mLogger.addFileDestination(sceneName, logLevel, rp3d::DefaultLogger::Format::HTML); + RopeScene* ropeScene = new RopeScene(sceneName, mDefaultEngineSettings, mPhysicsCommon); mScenes.push_back(ropeScene); + assert(mScenes.size() > 0); } diff --git a/testbed/src/TestbedApplication.h b/testbed/src/TestbedApplication.h index 70824dbb..1c683cc5 100644 --- a/testbed/src/TestbedApplication.h +++ b/testbed/src/TestbedApplication.h @@ -32,6 +32,7 @@ #include "Scene.h" #include "Timer.h" #include +#include "TestbedLogger.h" using namespace nanogui; @@ -56,6 +57,9 @@ class TestbedApplication : public Screen { /// Timer Timer mTimer; + /// Physics common object + rp3d::PhysicsCommon mPhysicsCommon; + /// List of 3D scenes std::vector mScenes; @@ -127,6 +131,9 @@ class TestbedApplication : public Screen { /// True if the debug renderer is enabled bool mIsDebugRendererEnabled; + /// Logger + TestbedLogger mLogger; + // -------------------- Methods -------------------- // /// Private copy-constructor (for the singleton class) diff --git a/testbed/src/TestbedLogger.cpp b/testbed/src/TestbedLogger.cpp new file mode 100644 index 00000000..7795da9f --- /dev/null +++ b/testbed/src/TestbedLogger.cpp @@ -0,0 +1,98 @@ +/******************************************************************************** +* ReactPhysics3D physics library, http://www.reactphysics3d.com * +* Copyright (c) 2010-2021 Daniel Chappuis * +********************************************************************************* +* * +* 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. * +* * +********************************************************************************/ + +// Libraries +#include "TestbedLogger.h" + +using namespace reactphysics3d; + +// Constructor +TestbedLogger::TestbedLogger() { + + // Create the log formatters + mFormatters.insert({reactphysics3d::DefaultLogger::Format::Text, new reactphysics3d::DefaultLogger::TextFormatter()}); + mFormatters.insert({reactphysics3d::DefaultLogger::Format::HTML, new reactphysics3d::DefaultLogger::HtmlFormatter()}); + + // Add destination to send warning and errors to standard output + uint warningsErrors = static_cast(reactphysics3d::Logger::Level::Warning); + addStreamDestination(std::cout, warningsErrors, reactphysics3d::DefaultLogger::Format::Text); +} + +// Destructor +TestbedLogger::~TestbedLogger() { + + // Delete all the destinations + for (auto& item: mMapWorldToDestinations) { + delete item.second; + } + + delete mStandardOutputDestination; +} + +// Log something +void TestbedLogger::log(Level level, const std::string& physicsWorldName, Category category, const std::string& message, const char* filename, int lineNumber) { + + // Get current time + auto now = std::chrono::system_clock::now(); + auto time = std::chrono::system_clock::to_time_t(now); + + // Get the destination file for this world + DefaultLogger::Destination* destination = mMapWorldToDestinations[physicsWorldName]; + + mMutex.lock(); + + // Write the log file into the file of the corresponding scene + destination->write(time, physicsWorldName, message, level, category, filename, lineNumber); + + // Write the log into the standard output + mStandardOutputDestination->write(time, physicsWorldName, message, level, category, filename, lineNumber); + + mMutex.unlock(); +} + +// Return the corresponding format +DefaultLogger::Formatter* TestbedLogger::getFormatter(DefaultLogger::Format format) const { + + auto it = mFormatters.find(format); + if (it != mFormatters.end()) { + return it->second; + } + + return nullptr; +} + +// Add a log file destination to the logger +void TestbedLogger::addFileDestination(const std::string& worldName, uint logLevelFlag, reactphysics3d::DefaultLogger::Format format) { + + std::string filePath = "rp3d_log_" + worldName + ".html"; + reactphysics3d::DefaultLogger::FileDestination* destination = new reactphysics3d::DefaultLogger::FileDestination(filePath, logLevelFlag, getFormatter(format)); + mMapWorldToDestinations.insert({worldName, destination}); +} + +// Add a stream destination to the logger +void TestbedLogger::addStreamDestination(std::ostream& outputStream, uint logLevelFlag, reactphysics3d::DefaultLogger::Format format) { + + mStandardOutputDestination = new reactphysics3d::DefaultLogger::StreamDestination(outputStream, logLevelFlag, getFormatter(format)); +} diff --git a/testbed/src/TestbedLogger.h b/testbed/src/TestbedLogger.h new file mode 100644 index 00000000..2718ac5e --- /dev/null +++ b/testbed/src/TestbedLogger.h @@ -0,0 +1,74 @@ +/******************************************************************************** +* ReactPhysics3D physics library, http://www.reactphysics3d.com * +* Copyright (c) 2010-2016 Daniel Chappuis * +********************************************************************************* +* * +* 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 TESTBED_LOGGER_H +#define TESTBED_LOGGER_H + +// Libraries +#include +#include +#include + +/// Class TestbedApplication +class TestbedLogger : public reactphysics3d::Logger { + + private: + + /// Map a log format to the given formatter object + std::unordered_map mFormatters; + + /// Map the name of a world with the corresponding log destination + std::unordered_map mMapWorldToDestinations; + + reactphysics3d::DefaultLogger::StreamDestination* mStandardOutputDestination; + + /// Mutex + std::mutex mMutex; + + // -------------------- Methods -------------------- // + + /// Return the corresponding formatter + reactphysics3d::DefaultLogger::Formatter* getFormatter(reactphysics3d::DefaultLogger::Format format) const; + + /// Add a stream destination to the logger + void addStreamDestination(std::ostream& outputStream, uint logLevelFlag, reactphysics3d::DefaultLogger::Format format); + + public: + + /// Constructor + TestbedLogger(); + + /// Destructor + ~TestbedLogger(); + + /// Add a log file destination to the logger + void addFileDestination(const std::string& worldName, uint logLevelFlag, reactphysics3d::DefaultLogger::Format format); + + + /// Log something + virtual void log(Level level, const std::string& physicsWorldName, Category category, const std::string& message, const char* filename, int lineNumber) override; +}; + +#endif