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> 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 00095 Timer* mTimer; 00096 RenderWindow* mAutoWindow; 00097 Profiler* mProfiler; 00098 HighLevelGpuProgramManager* mHighLevelGpuProgramManager; 00099 ExternalTextureSourceManager* mExternalTextureSourceManager; 00100 CompositorManager* mCompositorManager; 00101 unsigned long mCurrentFrame; 00102 Real mFrameSmoothingTime; 00103 00104 public: 00105 typedef std::vector<DynLib*> PluginLibList; 00106 typedef std::vector<Plugin*> PluginInstanceList; 00107 protected: 00109 PluginLibList mPluginLibs; 00111 PluginInstanceList mPlugins; 00112 00113 typedef std::map<String, MovableObjectFactory*> MovableObjectFactoryMap; 00114 MovableObjectFactoryMap mMovableObjectFactoryMap; 00115 uint32 mNextMovableObjectTypeFlag; 00116 // stock movable factories 00117 MovableObjectFactory* mEntityFactory; 00118 MovableObjectFactory* mLightFactory; 00119 MovableObjectFactory* mBillboardSetFactory; 00120 MovableObjectFactory* mManualObjectFactory; 00121 MovableObjectFactory* mBillboardChainFactory; 00122 MovableObjectFactory* mRibbonTrailFactory; 00123 00124 typedef std::map<String, RenderQueueInvocationSequence*> RenderQueueInvocationSequenceMap; 00125 RenderQueueInvocationSequenceMap mRQSequenceMap; 00126 00128 bool mIsInitialised; 00129 00136 void loadPlugins( const String& pluginsfile = "plugins.cfg" ); 00140 void initialisePlugins(); 00144 void shutdownPlugins(); 00145 00148 void unloadPlugins(); 00149 00150 // Internal method for one-time tasks after first window creation 00151 void oneTimePostWindowInit(void); 00152 00154 std::set<FrameListener*> mFrameListeners; 00155 00157 std::set<FrameListener*> mRemovedFrameListeners; 00158 00160 enum FrameEventTimeType { 00161 FETT_ANY, FETT_STARTED, FETT_ENDED 00162 }; 00163 00165 std::deque<unsigned long> mEventTimes[3]; 00166 00171 Real calculateEventTime(unsigned long now, FrameEventTimeType type); 00172 public: 00173 00182 Root(const String& pluginFileName = "plugins.cfg", 00183 const String& configFileName = "ogre.cfg", 00184 const String& logFileName = "Ogre.log"); 00185 ~Root(); 00186 00192 void saveConfig(void); 00193 00206 bool restoreConfig(void); 00207 00224 bool showConfigDialog(void); 00225 00237 void addRenderSystem(RenderSystem* newRend); 00238 00245 RenderSystemList* getAvailableRenderers(void); 00246 00253 RenderSystem* getRenderSystemByName(const String& name); 00254 00272 void setRenderSystem(RenderSystem* system); 00273 00276 RenderSystem* getRenderSystem(void); 00277 00293 RenderWindow* initialise(bool autoCreateWindow, const String& windowTitle = "OGRE Render Window"); 00294 00296 bool isInitialised(void) const { return mIsInitialised; } 00297 00303 void addSceneManagerFactory(SceneManagerFactory* fact); 00304 00307 void removeSceneManagerFactory(SceneManagerFactory* fact); 00308 00318 const SceneManagerMetaData* getSceneManagerMetaData(const String& typeName) const; 00319 00323 SceneManagerEnumerator::MetaDataIterator getSceneManagerMetaDataIterator(void) const; 00324 00336 SceneManager* createSceneManager(const String& typeName, 00337 const String& instanceName = StringUtil::BLANK); 00338 00351 SceneManager* createSceneManager(SceneTypeMask typeMask, 00352 const String& instanceName = StringUtil::BLANK); 00353 00355 void destroySceneManager(SceneManager* sm); 00356 00361 SceneManager* getSceneManager(const String& instanceName) const; 00362 00364 SceneManagerEnumerator::SceneManagerIterator getSceneManagerIterator(void); 00365 00381 TextureManager* getTextureManager(void); 00382 00388 MeshManager* getMeshManager(void); 00389 00393 String getErrorDescription(long errorNumber); 00394 00411 void addFrameListener(FrameListener* newListener); 00412 00417 void removeFrameListener(FrameListener* oldListener); 00418 00427 void queueEndRendering(void); 00428 00456 void startRendering(void); 00457 00463 bool renderOneFrame(void); 00471 void shutdown(void); 00472 00519 void addResourceLocation(const String& name, const String& locType, 00520 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 00521 bool recursive = false); 00522 00529 void removeResourceLocation(const String& name, 00530 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 00531 00540 void convertColourValue(const ColourValue& colour, uint32* pDest); 00541 00550 RenderWindow* getAutoCreatedWindow(void); 00551 00554 RenderWindow* createRenderWindow(const String &name, unsigned int width, unsigned int height, 00555 bool fullScreen, const NameValuePairList *miscParams = 0) ; 00556 00559 void detachRenderTarget( RenderTarget* pWin ); 00560 00563 void detachRenderTarget( const String & name ); 00564 00567 RenderTarget * getRenderTarget(const String &name); 00568 00579 void loadPlugin(const String& pluginName); 00580 00590 void unloadPlugin(const String& pluginName); 00591 00602 void installPlugin(Plugin* plugin); 00603 00612 void uninstallPlugin(Plugin* plugin); 00613 00615 const PluginInstanceList& getInstalledPlugins() const { return mPlugins; } 00616 00618 Timer* getTimer(void); 00619 00639 bool _fireFrameStarted(FrameEvent& evt); 00656 bool _fireFrameEnded(FrameEvent& evt); 00674 bool _fireFrameStarted(); 00689 bool _fireFrameEnded(); 00690 00692 unsigned long getCurrentFrameNumber(void) const { return mCurrentFrame; } 00693 00699 SceneManager* _getCurrentSceneManager(void) const { return mCurrentSceneManager; } 00704 void _setCurrentSceneManager(SceneManager* sm); 00705 00715 void _updateAllRenderTargets(void); 00716 00721 RenderQueueInvocationSequence* createRenderQueueInvocationSequence( 00722 const String& name); 00723 00727 RenderQueueInvocationSequence* getRenderQueueInvocationSequence( 00728 const String& name); 00729 00735 void destroyRenderQueueInvocationSequence( 00736 const String& name); 00737 00743 void destroyAllRenderQueueInvocationSequences(void); 00744 00760 static Root& getSingleton(void); 00776 static Root* getSingletonPtr(void); 00777 00786 void clearEventTimes(void); 00787 00800 void setFrameSmoothingPeriod(Real period) { mFrameSmoothingTime = period; } 00802 Real getFrameSmoothingPeriod(void) const { return mFrameSmoothingTime; } 00803 00816 void addMovableObjectFactory(MovableObjectFactory* fact, 00817 bool overrideExisting = false); 00825 void removeMovableObjectFactory(MovableObjectFactory* fact); 00827 bool hasMovableObjectFactory(const String& typeName) const; 00829 MovableObjectFactory* getMovableObjectFactory(const String& typeName); 00835 uint32 _allocateNextMovableObjectTypeFlag(void); 00836 00837 typedef ConstMapIterator<MovableObjectFactoryMap> MovableObjectFactoryIterator; 00841 MovableObjectFactoryIterator getMovableObjectFactoryIterator(void) const; 00842 }; 00843 } // Namespace Ogre 00844 #endif
Copyright © 2000-2005 by The OGRE Team
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Mar 25 13:03:16 2007