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-2011 Torus Knot Software Ltd
00008 
00009 Permission is hereby granted, free of charge, to any person obtaining a copy
00010 of this software and associated documentation files (the "Software"), to deal
00011 in the Software without restriction, including without limitation the rights
00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00013 copies of the Software, and to permit persons to whom the Software is
00014 furnished to do so, subject to the following conditions:
00015 
00016 The above copyright notice and this permission notice shall be included in
00017 all copies or substantial portions of the Software.
00018 
00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00025 THE SOFTWARE.
00026 -----------------------------------------------------------------------------
00027 */
00028 #ifndef __ROOT__
00029 #define __ROOT__
00030 
00031 // Precompiler options
00032 #include "OgrePrerequisites.h"
00033 
00034 #include "OgreSingleton.h"
00035 #include "OgreString.h"
00036 #include "OgreSceneManagerEnumerator.h"
00037 #include "OgreResourceGroupManager.h"
00038 #include "OgreLodStrategyManager.h"
00039 #include "OgreWorkQueue.h"
00040 
00041 #include <exception>
00042 
00043 namespace Ogre
00044 {
00052     typedef vector<RenderSystem*>::type RenderSystemList;
00053     
00067     class _OgreExport Root : public Singleton<Root>, public RootAlloc
00068     {
00069         // To allow update of active renderer if
00070         // RenderSystem::initialise is used directly
00071         friend class RenderSystem;
00072     protected:
00073         RenderSystemList mRenderers;
00074         RenderSystem* mActiveRenderer;
00075         String mVersion;
00076         String mConfigFileName;
00077         bool mQueuedEnd;
00078         // In case multiple render windows are created, only once are the resources loaded.
00079         bool mFirstTimePostWindowInit;
00080 
00081         // Singletons
00082         LogManager* mLogManager;
00083         ControllerManager* mControllerManager;
00084         SceneManagerEnumerator* mSceneManagerEnum;
00085         typedef deque<SceneManager*>::type SceneManagerStack;
00086         SceneManagerStack mSceneManagerStack;
00087         DynLibManager* mDynLibManager;
00088         ArchiveManager* mArchiveManager;
00089         MaterialManager* mMaterialManager;
00090         MeshManager* mMeshManager;
00091         ParticleSystemManager* mParticleManager;
00092         SkeletonManager* mSkeletonManager;
00093         OverlayElementFactory* mPanelFactory;
00094         OverlayElementFactory* mBorderPanelFactory;
00095         OverlayElementFactory* mTextAreaFactory;
00096         OverlayManager* mOverlayManager;
00097         FontManager* mFontManager;
00098         ArchiveFactory *mZipArchiveFactory;
00099         ArchiveFactory *mFileSystemArchiveFactory;
00100         ResourceGroupManager* mResourceGroupManager;
00101         ResourceBackgroundQueue* mResourceBackgroundQueue;
00102         ShadowTextureManager* mShadowTextureManager;
00103         RenderSystemCapabilitiesManager* mRenderSystemCapabilitiesManager;
00104         ScriptCompilerManager *mCompilerManager;
00105         LodStrategyManager *mLodStrategyManager;
00106 
00107         Timer* mTimer;
00108         RenderWindow* mAutoWindow;
00109         Profiler* mProfiler;
00110         HighLevelGpuProgramManager* mHighLevelGpuProgramManager;
00111         ExternalTextureSourceManager* mExternalTextureSourceManager;
00112         CompositorManager* mCompositorManager;      
00113         unsigned long mNextFrame;
00114         Real mFrameSmoothingTime;
00115         bool mRemoveQueueStructuresOnClear;
00116 
00117     public:
00118         typedef vector<DynLib*>::type PluginLibList;
00119         typedef vector<Plugin*>::type PluginInstanceList;
00120     protected:
00122         PluginLibList mPluginLibs;
00124         PluginInstanceList mPlugins;
00125 
00126         typedef map<String, MovableObjectFactory*>::type MovableObjectFactoryMap;
00127         MovableObjectFactoryMap mMovableObjectFactoryMap;
00128         uint32 mNextMovableObjectTypeFlag;
00129         // stock movable factories
00130         MovableObjectFactory* mEntityFactory;
00131         MovableObjectFactory* mLightFactory;
00132         MovableObjectFactory* mBillboardSetFactory;
00133         MovableObjectFactory* mManualObjectFactory;
00134         MovableObjectFactory* mBillboardChainFactory;
00135         MovableObjectFactory* mRibbonTrailFactory;
00136 
00137         typedef map<String, RenderQueueInvocationSequence*>::type RenderQueueInvocationSequenceMap;
00138         RenderQueueInvocationSequenceMap mRQSequenceMap;
00139 
00141         bool mIsInitialised;
00142 
00143         WorkQueue* mWorkQueue;
00144 
00151         void loadPlugins( const String& pluginsfile = "plugins.cfg" );
00155         void initialisePlugins();
00159         void shutdownPlugins();
00160 
00163         void unloadPlugins();
00164 
00165         // Internal method for one-time tasks after first window creation
00166         void oneTimePostWindowInit(void);
00167 
00169         set<FrameListener*>::type mFrameListeners;
00170 
00172         set<FrameListener*>::type mRemovedFrameListeners;
00173 
00175         enum FrameEventTimeType {
00176             FETT_ANY = 0, 
00177             FETT_STARTED = 1, 
00178             FETT_QUEUED = 2, 
00179             FETT_ENDED = 3, 
00180             FETT_COUNT = 4
00181         };
00182 
00184         typedef deque<unsigned long>::type EventTimesQueue;
00185         EventTimesQueue mEventTimes[FETT_COUNT];
00186 
00191         Real calculateEventTime(unsigned long now, FrameEventTimeType type);
00192 
00194         void populateFrameEvent(FrameEventTimeType type, FrameEvent& evtToUpdate);
00195 
00196     public:
00197 
00206         Root(const String& pluginFileName = "plugins.cfg", 
00207             const String& configFileName = "ogre.cfg", 
00208             const String& logFileName = "Ogre.log");
00209         ~Root();
00210 
00216         void saveConfig(void);
00217 
00230         bool restoreConfig(void);
00231 
00248         bool showConfigDialog(void);
00249 
00261         void addRenderSystem(RenderSystem* newRend);
00262 
00269         const RenderSystemList& getAvailableRenderers(void);
00270 
00277         RenderSystem* getRenderSystemByName(const String& name);
00278 
00296         void setRenderSystem(RenderSystem* system);
00297 
00300         RenderSystem* getRenderSystem(void);
00301 
00317         RenderWindow* initialise(bool autoCreateWindow, const String& windowTitle = "OGRE Render Window",
00318                                     const String& customCapabilitiesConfig = StringUtil::BLANK);
00319 
00321         bool isInitialised(void) const { return mIsInitialised; }
00322 
00328         void useCustomRenderSystemCapabilities(RenderSystemCapabilities* capabilities);
00329 
00333         bool getRemoveRenderQueueStructuresOnClear() const { return mRemoveQueueStructuresOnClear; }
00334 
00338         void setRemoveRenderQueueStructuresOnClear(bool r) { mRemoveQueueStructuresOnClear = r; }
00339 
00345         void addSceneManagerFactory(SceneManagerFactory* fact);
00346 
00349         void removeSceneManagerFactory(SceneManagerFactory* fact);
00350 
00360         const SceneManagerMetaData* getSceneManagerMetaData(const String& typeName) const;
00361 
00365         SceneManagerEnumerator::MetaDataIterator getSceneManagerMetaDataIterator(void) const;
00366 
00378         SceneManager* createSceneManager(const String& typeName, 
00379             const String& instanceName = StringUtil::BLANK);
00380 
00393         SceneManager* createSceneManager(SceneTypeMask typeMask, 
00394             const String& instanceName = StringUtil::BLANK);
00395 
00397         void destroySceneManager(SceneManager* sm);
00398 
00403         SceneManager* getSceneManager(const String& instanceName) const;
00404 
00408         bool hasSceneManager(const String& instanceName) const;
00410         SceneManagerEnumerator::SceneManagerIterator getSceneManagerIterator(void);
00411 
00427         TextureManager* getTextureManager(void);
00428 
00434         MeshManager* getMeshManager(void);
00435 
00439         String getErrorDescription(long errorNumber);
00440 
00457         void addFrameListener(FrameListener* newListener);
00458 
00463         void removeFrameListener(FrameListener* oldListener);
00464 
00473         void queueEndRendering(void);
00474 
00502         void startRendering(void);
00503 
00509         bool renderOneFrame(void);
00510 
00517         bool renderOneFrame(Real timeSinceLastFrame);
00518 
00526         void shutdown(void);
00527 
00574         void addResourceLocation(const String& name, const String& locType, 
00575             const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
00576             bool recursive = false);
00577 
00584         void removeResourceLocation(const String& name, 
00585             const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
00586 
00608         DataStreamPtr createFileStream(const String& filename, const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
00609             bool overwrite = false, const String& locationPattern = StringUtil::BLANK);
00610 
00625         DataStreamPtr openFileStream(const String& filename, const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
00626             const String& locationPattern = StringUtil::BLANK);
00627 
00636         void convertColourValue(const ColourValue& colour, uint32* pDest);
00637 
00646         RenderWindow* getAutoCreatedWindow(void);
00647 
00650         RenderWindow* createRenderWindow(const String &name, unsigned int width, unsigned int height, 
00651             bool fullScreen, const NameValuePairList *miscParams = 0) ;
00652 
00655         bool createRenderWindows(const RenderWindowDescriptionList& renderWindowDescriptions,
00656             RenderWindowList& createdWindows);
00657     
00660         void detachRenderTarget( RenderTarget* pWin );
00661 
00664         void detachRenderTarget( const String & name );
00665 
00668         void destroyRenderTarget(RenderTarget* target);
00669 
00672         void destroyRenderTarget(const String &name);
00673 
00676         RenderTarget * getRenderTarget(const String &name);
00677 
00688         void loadPlugin(const String& pluginName);
00689 
00699         void unloadPlugin(const String& pluginName);
00700 
00711         void installPlugin(Plugin* plugin);
00712 
00721         void uninstallPlugin(Plugin* plugin);
00722 
00724         const PluginInstanceList& getInstalledPlugins() const { return mPlugins; }
00725 
00727         Timer* getTimer(void);
00728 
00748         bool _fireFrameStarted(FrameEvent& evt);
00758         bool _fireFrameRenderingQueued(FrameEvent& evt);
00759 
00776         bool _fireFrameEnded(FrameEvent& evt);
00794         bool _fireFrameStarted();
00805         bool _fireFrameRenderingQueued();
00820         bool _fireFrameEnded();
00821 
00830         unsigned long getNextFrameNumber(void) const { return mNextFrame; }
00831 
00837         SceneManager* _getCurrentSceneManager(void) const;
00842         void _pushCurrentSceneManager(SceneManager* sm);
00847         void _popCurrentSceneManager(SceneManager* sm);
00848 
00859         bool _updateAllRenderTargets(void);
00860 
00872         bool _updateAllRenderTargets(FrameEvent& evt);
00873 
00878         RenderQueueInvocationSequence* createRenderQueueInvocationSequence(
00879             const String& name);
00880 
00884         RenderQueueInvocationSequence* getRenderQueueInvocationSequence(
00885             const String& name);
00886 
00892         void destroyRenderQueueInvocationSequence(
00893             const String& name);
00894 
00900         void destroyAllRenderQueueInvocationSequences(void);
00901 
00917         static Root& getSingleton(void);
00933         static Root* getSingletonPtr(void);
00934 
00943         void clearEventTimes(void);
00944 
00957         void setFrameSmoothingPeriod(Real period) { mFrameSmoothingTime = period; }
00959         Real getFrameSmoothingPeriod(void) const { return mFrameSmoothingTime; }
00960 
00973         void addMovableObjectFactory(MovableObjectFactory* fact, 
00974             bool overrideExisting = false);
00982         void removeMovableObjectFactory(MovableObjectFactory* fact);
00984         bool hasMovableObjectFactory(const String& typeName) const;
00986         MovableObjectFactory* getMovableObjectFactory(const String& typeName);
00992         uint32 _allocateNextMovableObjectTypeFlag(void);
00993 
00994         typedef ConstMapIterator<MovableObjectFactoryMap> MovableObjectFactoryIterator;
00998         MovableObjectFactoryIterator getMovableObjectFactoryIterator(void) const;
00999 
01003         unsigned int getDisplayMonitorCount() const;
01004 
01011         WorkQueue* getWorkQueue() const { return mWorkQueue; }
01012 
01021         void setWorkQueue(WorkQueue* queue);
01022             
01023     };
01026 } // Namespace Ogre
01027 #endif

Copyright © 2008 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Sat Jan 14 2012 18:40:44