OgreRoot.h

Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright (c) 2000-2006 Torus Knot Software Ltd
00008 Also see acknowledgements in Readme.html
00009 
00010 This program is free software; you can redistribute it and/or modify it under
00011 the terms of the GNU Lesser General Public License as published by the Free Software
00012 Foundation; either version 2 of the License, or (at your option) any later
00013 version.
00014 
00015 This program is distributed in the hope that it will be useful, but WITHOUT
00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public License along with
00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
00022 http://www.gnu.org/copyleft/lesser.txt.
00023 
00024 You may alternatively use this source under the terms of a specific version of
00025 the OGRE Unrestricted License provided you have obtained such a license from
00026 Torus Knot Software Ltd.
00027 -----------------------------------------------------------------------------
00028 */
00029 #ifndef __ROOT__
00030 #define __ROOT__
00031 
00032 // Precompiler options
00033 #include "OgrePrerequisites.h"
00034 
00035 #include "OgreSingleton.h"
00036 #include "OgreString.h"
00037 #include "OgreSceneManagerEnumerator.h"
00038 #include "OgreResourceGroupManager.h"
00039 
00040 #include <exception>
00041 
00042 namespace Ogre
00043 {
00044     typedef std::vector<RenderSystem*> RenderSystemList;
00045     
00059     class _OgreExport Root : public Singleton<Root>, public RootAlloc
00060     {
00061         // To allow update of active renderer if
00062         // RenderSystem::initialise is used directly
00063         friend class RenderSystem;
00064     private:
00065         RenderSystemList mRenderers;
00066         RenderSystem* mActiveRenderer;
00067         String mVersion;
00068         String mConfigFileName;
00069         bool mQueuedEnd;
00070         // In case multiple render windows are created, only once are the resources loaded.
00071         bool mFirstTimePostWindowInit;
00072 
00073         // Singletons
00074         LogManager* mLogManager;
00075         ControllerManager* mControllerManager;
00076         SceneManagerEnumerator* mSceneManagerEnum;
00077         SceneManager* mCurrentSceneManager;
00078         DynLibManager* mDynLibManager;
00079         ArchiveManager* mArchiveManager;
00080         MaterialManager* mMaterialManager;
00081         MeshManager* mMeshManager;
00082         ParticleSystemManager* mParticleManager;
00083         SkeletonManager* mSkeletonManager;
00084         OverlayElementFactory* mPanelFactory;
00085         OverlayElementFactory* mBorderPanelFactory;
00086         OverlayElementFactory* mTextAreaFactory;
00087         OverlayManager* mOverlayManager;
00088         FontManager* mFontManager;
00089         ArchiveFactory *mZipArchiveFactory;
00090         ArchiveFactory *mFileSystemArchiveFactory;
00091         ResourceGroupManager* mResourceGroupManager;
00092         ResourceBackgroundQueue* mResourceBackgroundQueue;
00093         ShadowTextureManager* mShadowTextureManager;
00094         RenderSystemCapabilitiesManager* mRenderSystemCapabilitiesManager;
00095         ScriptCompilerManager *mCompilerManager;
00096 
00097         Timer* mTimer;
00098         RenderWindow* mAutoWindow;
00099         Profiler* mProfiler;
00100         HighLevelGpuProgramManager* mHighLevelGpuProgramManager;
00101         ExternalTextureSourceManager* mExternalTextureSourceManager;
00102         CompositorManager* mCompositorManager;      
00103         unsigned long mNextFrame;
00104         Real mFrameSmoothingTime;
00105 
00106     public:
00107         typedef std::vector<DynLib*> PluginLibList;
00108         typedef std::vector<Plugin*> PluginInstanceList;
00109     protected:
00111         PluginLibList mPluginLibs;
00113         PluginInstanceList mPlugins;
00114 
00115         typedef std::map<String, MovableObjectFactory*> MovableObjectFactoryMap;
00116         MovableObjectFactoryMap mMovableObjectFactoryMap;
00117         uint32 mNextMovableObjectTypeFlag;
00118         // stock movable factories
00119         MovableObjectFactory* mEntityFactory;
00120         MovableObjectFactory* mLightFactory;
00121         MovableObjectFactory* mBillboardSetFactory;
00122         MovableObjectFactory* mManualObjectFactory;
00123         MovableObjectFactory* mBillboardChainFactory;
00124         MovableObjectFactory* mRibbonTrailFactory;
00125 
00126         typedef std::map<String, RenderQueueInvocationSequence*> RenderQueueInvocationSequenceMap;
00127         RenderQueueInvocationSequenceMap mRQSequenceMap;
00128 
00130         bool mIsInitialised;
00131 
00138         void loadPlugins( const String& pluginsfile = "plugins.cfg" );
00142         void initialisePlugins();
00146         void shutdownPlugins();
00147 
00150         void unloadPlugins();
00151 
00152         // Internal method for one-time tasks after first window creation
00153         void oneTimePostWindowInit(void);
00154 
00156         std::set<FrameListener*> mFrameListeners;
00157 
00159         std::set<FrameListener*> mRemovedFrameListeners;
00160 
00162         enum FrameEventTimeType {
00163             FETT_ANY = 0, 
00164             FETT_STARTED = 1, 
00165             FETT_QUEUED = 2, 
00166             FETT_ENDED = 3, 
00167             FETT_COUNT = 4
00168         };
00169 
00171         std::deque<unsigned long> mEventTimes[FETT_COUNT];
00172 
00177         Real calculateEventTime(unsigned long now, FrameEventTimeType type);
00178     public:
00179 
00188         Root(const String& pluginFileName = "plugins.cfg", 
00189             const String& configFileName = "ogre.cfg", 
00190             const String& logFileName = "Ogre.log");
00191         ~Root();
00192 
00198         void saveConfig(void);
00199 
00212         bool restoreConfig(void);
00213 
00230         bool showConfigDialog(void);
00231 
00243         void addRenderSystem(RenderSystem* newRend);
00244 
00251         RenderSystemList* getAvailableRenderers(void);
00252 
00259         RenderSystem* getRenderSystemByName(const String& name);
00260 
00278         void setRenderSystem(RenderSystem* system);
00279 
00282         RenderSystem* getRenderSystem(void);
00283 
00299         RenderWindow* initialise(bool autoCreateWindow, const String& windowTitle = "OGRE Render Window",
00300                                     const String& customCapabilitiesConfig = StringUtil::BLANK);
00301 
00303         bool isInitialised(void) const { return mIsInitialised; }
00304 
00310         void useCustomRenderSystemCapabilities(RenderSystemCapabilities* capabilities);
00311 
00317         void addSceneManagerFactory(SceneManagerFactory* fact);
00318 
00321         void removeSceneManagerFactory(SceneManagerFactory* fact);
00322 
00332         const SceneManagerMetaData* getSceneManagerMetaData(const String& typeName) const;
00333 
00337         SceneManagerEnumerator::MetaDataIterator getSceneManagerMetaDataIterator(void) const;
00338 
00350         SceneManager* createSceneManager(const String& typeName, 
00351             const String& instanceName = StringUtil::BLANK);
00352 
00365         SceneManager* createSceneManager(SceneTypeMask typeMask, 
00366             const String& instanceName = StringUtil::BLANK);
00367 
00369         void destroySceneManager(SceneManager* sm);
00370 
00375         SceneManager* getSceneManager(const String& instanceName) const;
00376 
00378         SceneManagerEnumerator::SceneManagerIterator getSceneManagerIterator(void);
00379 
00395         TextureManager* getTextureManager(void);
00396 
00402         MeshManager* getMeshManager(void);
00403 
00407         String getErrorDescription(long errorNumber);
00408 
00425         void addFrameListener(FrameListener* newListener);
00426 
00431         void removeFrameListener(FrameListener* oldListener);
00432 
00441         void queueEndRendering(void);
00442 
00470         void startRendering(void);
00471 
00477         bool renderOneFrame(void);
00485         void shutdown(void);
00486 
00533         void addResourceLocation(const String& name, const String& locType, 
00534             const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
00535             bool recursive = false);
00536 
00543         void removeResourceLocation(const String& name, 
00544             const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
00545 
00554         void convertColourValue(const ColourValue& colour, uint32* pDest);
00555 
00564         RenderWindow* getAutoCreatedWindow(void);
00565 
00568         RenderWindow* createRenderWindow(const String &name, unsigned int width, unsigned int height, 
00569             bool fullScreen, const NameValuePairList *miscParams = 0) ;
00570 
00573         void detachRenderTarget( RenderTarget* pWin );
00574 
00577         void detachRenderTarget( const String & name );
00578 
00581         RenderTarget * getRenderTarget(const String &name);
00582 
00593         void loadPlugin(const String& pluginName);
00594 
00604         void unloadPlugin(const String& pluginName);
00605 
00616         void installPlugin(Plugin* plugin);
00617 
00626         void uninstallPlugin(Plugin* plugin);
00627 
00629         const PluginInstanceList& getInstalledPlugins() const { return mPlugins; }
00630 
00632         Timer* getTimer(void);
00633 
00653         bool _fireFrameStarted(FrameEvent& evt);
00663         bool _fireFrameRenderingQueued(FrameEvent& evt);
00664 
00681         bool _fireFrameEnded(FrameEvent& evt);
00699         bool _fireFrameStarted();
00710         bool _fireFrameRenderingQueued();
00725         bool _fireFrameEnded();
00726 
00735         unsigned long getNextFrameNumber(void) const { return mNextFrame; }
00736 
00742         SceneManager* _getCurrentSceneManager(void) const { return mCurrentSceneManager; }
00747         void _setCurrentSceneManager(SceneManager* sm);
00748 
00759         bool _updateAllRenderTargets(void);
00760 
00765         RenderQueueInvocationSequence* createRenderQueueInvocationSequence(
00766             const String& name);
00767 
00771         RenderQueueInvocationSequence* getRenderQueueInvocationSequence(
00772             const String& name);
00773 
00779         void destroyRenderQueueInvocationSequence(
00780             const String& name);
00781 
00787         void destroyAllRenderQueueInvocationSequences(void);
00788 
00804         static Root& getSingleton(void);
00820         static Root* getSingletonPtr(void);
00821 
00830         void clearEventTimes(void);
00831 
00844         void setFrameSmoothingPeriod(Real period) { mFrameSmoothingTime = period; }
00846         Real getFrameSmoothingPeriod(void) const { return mFrameSmoothingTime; }
00847 
00860         void addMovableObjectFactory(MovableObjectFactory* fact, 
00861             bool overrideExisting = false);
00869         void removeMovableObjectFactory(MovableObjectFactory* fact);
00871         bool hasMovableObjectFactory(const String& typeName) const;
00873         MovableObjectFactory* getMovableObjectFactory(const String& typeName);
00879         uint32 _allocateNextMovableObjectTypeFlag(void);
00880 
00881         typedef ConstMapIterator<MovableObjectFactoryMap> MovableObjectFactoryIterator;
00885         MovableObjectFactoryIterator getMovableObjectFactoryIterator(void) const;
00886     };
00887 } // Namespace Ogre
00888 #endif

Copyright © 2008 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Sep 27 22:02:25 2009