From 094f04608718acb35e81336d82cc16c982245681 Mon Sep 17 00:00:00 2001 From: cc9cii Date: Thu, 16 Oct 2014 07:29:46 +1100 Subject: [PATCH] Convert OverlaySystem to a OpenCS style singleton. --- apps/opencs/CMakeLists.txt | 2 +- apps/opencs/editor.cpp | 3 +- apps/opencs/editor.hpp | 2 ++ apps/opencs/view/render/overlaysystem.cpp | 40 +++++++++++++++++++++++ apps/opencs/view/render/overlaysystem.hpp | 34 ++++++------------- apps/opencs/view/render/scenewidget.cpp | 1 + 6 files changed, 55 insertions(+), 27 deletions(-) create mode 100644 apps/opencs/view/render/overlaysystem.cpp diff --git a/apps/opencs/CMakeLists.txt b/apps/opencs/CMakeLists.txt index 0336f51db0..e2e5aa2e5a 100644 --- a/apps/opencs/CMakeLists.txt +++ b/apps/opencs/CMakeLists.txt @@ -82,7 +82,7 @@ opencs_units (view/render opencs_units_noqt (view/render navigation navigation1st navigationfree navigationorbit lighting lightingday lightingnight - lightingbright object cell terrainstorage textoverlay overlaymask + lightingbright object cell terrainstorage textoverlay overlaymask overlaysystem ) opencs_hdrs_noqt (view/render diff --git a/apps/opencs/editor.cpp b/apps/opencs/editor.cpp index a8fc6cd571..ba1cbb8fa9 100644 --- a/apps/opencs/editor.cpp +++ b/apps/opencs/editor.cpp @@ -18,7 +18,6 @@ #include "model/doc/document.hpp" #include "model/world/data.hpp" -#include "view/render/overlaysystem.hpp" CS::Editor::Editor (OgreInit::OgreInit& ogreInit) : mUserSettings (mCfgMgr), mDocumentManager (mCfgMgr), mViewManager (mDocumentManager), @@ -276,7 +275,7 @@ std::auto_ptr CS::Editor::setupGraphics() Ogre::Root::getSingleton().setRenderSystem(Ogre::Root::getSingleton().getRenderSystemByName(renderSystem)); // Initialise Ogre::OverlaySystem after Ogre::Root but before initialisation - CSVRender::OverlaySystem::instance(); + mOverlaySystem.get(); Ogre::Root::getSingleton().initialise(false); diff --git a/apps/opencs/editor.hpp b/apps/opencs/editor.hpp index 88479f68c3..f252748c41 100644 --- a/apps/opencs/editor.hpp +++ b/apps/opencs/editor.hpp @@ -27,6 +27,7 @@ #include "view/doc/newgame.hpp" #include "view/settings/dialog.hpp" +#include "view/render/overlaysystem.hpp" namespace OgreInit { @@ -42,6 +43,7 @@ namespace CS Nif::Cache mNifCache; Files::ConfigurationManager mCfgMgr; CSMSettings::UserSettings mUserSettings; + CSVRender::OverlaySystem mOverlaySystem; CSMDoc::DocumentManager mDocumentManager; CSVDoc::ViewManager mViewManager; CSVDoc::StartupDialogue mStartup; diff --git a/apps/opencs/view/render/overlaysystem.cpp b/apps/opencs/view/render/overlaysystem.cpp new file mode 100644 index 0000000000..d72fd35ed5 --- /dev/null +++ b/apps/opencs/view/render/overlaysystem.cpp @@ -0,0 +1,40 @@ +#include "overlaysystem.hpp" + +#include + +namespace CSVRender +{ + OverlaySystem *OverlaySystem::mOverlaySystemInstance = 0; + + OverlaySystem::OverlaySystem() : mOverlaySystem(NULL) + { + assert(!mOverlaySystemInstance); + mOverlaySystemInstance = this; + } + + OverlaySystem::~OverlaySystem() + { + if(mOverlaySystem) + delete mOverlaySystem; + } + + OverlaySystem &OverlaySystem::instance() + { + assert(mOverlaySystemInstance); + return *mOverlaySystemInstance; + } + + Ogre::OverlaySystem *OverlaySystem::get() + { + if(!mOverlaySystem) + mOverlaySystem = new Ogre::OverlaySystem(); + return mOverlaySystem; + } + + void OverlaySystem::destroy() + { + delete mOverlaySystem; + mOverlaySystem = NULL; + } +} + diff --git a/apps/opencs/view/render/overlaysystem.hpp b/apps/opencs/view/render/overlaysystem.hpp index 087d414ff6..c9bc533c18 100644 --- a/apps/opencs/view/render/overlaysystem.hpp +++ b/apps/opencs/view/render/overlaysystem.hpp @@ -1,40 +1,26 @@ #ifndef OPENCS_VIEW_OVERLAYSYSTEM_H #define OPENCS_VIEW_OVERLAYSYSTEM_H -#include +namespace Ogre +{ + class OverlaySystem; +} namespace CSVRender { class OverlaySystem { Ogre::OverlaySystem *mOverlaySystem; - - OverlaySystem() { - mOverlaySystem = new Ogre::OverlaySystem(); - } - - ~OverlaySystem() { - if(mOverlaySystem) delete mOverlaySystem; - } - - OverlaySystem(OverlaySystem const&); - void operator=(OverlaySystem const&); + static OverlaySystem *mOverlaySystemInstance; public: - static OverlaySystem &instance() { - static OverlaySystem mInstance; - return mInstance; - } + OverlaySystem(); + ~OverlaySystem(); + static OverlaySystem &instance(); - Ogre::OverlaySystem *get() { - return mOverlaySystem; - } - - void destroy() { - delete mOverlaySystem; - mOverlaySystem = NULL; - } + Ogre::OverlaySystem *get(); + void destroy(); }; } diff --git a/apps/opencs/view/render/scenewidget.cpp b/apps/opencs/view/render/scenewidget.cpp index 2c0893ce01..3171e04969 100644 --- a/apps/opencs/view/render/scenewidget.cpp +++ b/apps/opencs/view/render/scenewidget.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include "../widget/scenetoolmode.hpp" #include "../../model/settings/usersettings.hpp"