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 © 2000-2002 The OGRE Team 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 */ 00025 #ifndef __ROOT__ 00026 #define __ROOT__ 00027 00028 // Precompiler options 00029 #include "OgrePrerequisites.h" 00030 00031 #include "OgreSingleton.h" 00032 #include "OgreString.h" 00033 #include "OgreSceneManagerEnumerator.h" 00034 #include "OgreMeshManager.h" 00035 #include "OgreTextureManager.h" 00036 #include "OgreDynLibManager.h" 00037 #include "OgrePlatformManager.h" 00038 #include "OgreArchiveManager.h" 00039 00040 #include <exception> 00041 00042 #if OGRE_COMPILER == COMPILER_MSVC || OGRE_COMPILER == COMPILER_BORL 00043 # define SET_TERM_HANDLER { set_terminate( &Ogre::Root::termHandler ); } 00044 #else 00045 # define SET_TERM_HANDLER { std::set_terminate( &Ogre::Root::termHandler ); } 00046 #endif 00047 00048 namespace Ogre 00049 { 00050 typedef std::vector<RenderSystem*> RenderSystemList; 00051 00065 class _OgreExport Root : public Singleton<Root> 00066 { 00067 // To allow update of active renderer if 00068 // RenderSystem::initialise is used directly 00069 friend class RenderSystem; 00070 private: 00071 RenderSystemList mRenderers; 00072 RenderSystem* mActiveRenderer; 00073 String mVersion; 00074 String mConfigFileName; 00075 bool mQueuedEnd; 00076 00077 // Singletons 00078 LogManager* mLogManager; 00079 ControllerManager* mControllerManager; 00080 SceneManagerEnumerator* mSceneManagerEnum; 00081 SceneManager* mCurrentSceneManager; 00082 DynLibManager* mDynLibManager; 00083 PlatformManager* mPlatformManager; 00084 ArchiveManager* mArchiveManager; 00085 MaterialManager* mMaterialManager; 00086 MeshManager* mMeshManager; 00087 ParticleSystemManager* mParticleManager; 00088 SkeletonManager* mSkeletonManager; 00089 GuiManager* mGuiManager; 00090 OverlayManager* mOverlayManager; 00091 FontManager* mFontManager; 00092 ArchiveFactory *mZipArchiveFactory; 00093 Codec* mPNGCodec, *mJPGCodec, *mJPEGCodec, *mTGACodec, *mDDSCodec, *mBMPCodec; 00094 Timer* mTimer; 00095 RenderWindow* mAutoWindow; 00096 Profiler* mProfiler; 00097 HighLevelGpuProgramManager* mHighLevelGpuProgramManager; 00098 ExternalTextureSourceManager* mExternalTextureSourceManager; 00099 unsigned long mCurrentFrame; 00100 00101 std::vector<DynLib*> mPluginLibs; 00108 void loadPlugins( const String& pluginsfile = "plugins.cfg" ); 00111 void unloadPlugins(); 00112 00113 // Internal method for one-time tasks after first window creation 00114 void oneTimePostWindowInit(void); 00115 00117 std::set<FrameListener*> mFrameListeners; 00118 00119 00121 enum FrameEventTimeType { 00122 FETT_ANY, FETT_STARTED, FETT_ENDED 00123 }; 00124 00126 std::deque<unsigned long> mEventTimes[3]; 00127 00132 Real calculateEventTime(unsigned long now, FrameEventTimeType type); 00133 public: 00134 00135 static void termHandler(); 00136 00142 Root(const String& pluginFileName = "plugins.cfg", const String& configFileName = "ogre.cfg", const String& logFileName = "Ogre.log"); 00143 ~Root(); 00144 00150 void saveConfig(void); 00151 00164 bool restoreConfig(void); 00165 00182 bool showConfigDialog(void); 00183 00195 void addRenderSystem(RenderSystem* newRend); 00196 00204 void setSceneManager(SceneType sType, SceneManager* sm); 00205 00212 RenderSystemList* getAvailableRenderers(void); 00213 00231 void setRenderSystem(RenderSystem* system); 00232 00235 RenderSystem* getRenderSystem(void); 00236 00252 RenderWindow* initialise(bool autoCreateWindow, const String& windowTitle = "OGRE Render Window"); 00253 00280 SceneManager* getSceneManager(SceneType sceneType); 00281 00297 TextureManager* getTextureManager(void); 00298 00304 MeshManager* getMeshManager(void); 00305 00309 String getErrorDescription(long errorNumber); 00310 00327 void addFrameListener(FrameListener* newListener); 00328 00333 void removeFrameListener(FrameListener* oldListener); 00334 00343 void queueEndRendering(void); 00344 00370 void startRendering(void); 00371 00377 bool renderOneFrame(void); 00385 void shutdown(void); 00386 00428 void addResourceLocation(const String& name, const String& locType, ResourceType resType = RESTYPE_ALL); 00429 00438 void convertColourValue(const ColourValue& colour, unsigned long* pDest); 00439 00448 RenderWindow* getAutoCreatedWindow(void); 00449 00486 RenderWindow* createRenderWindow(const String &name, unsigned int width, unsigned int height, unsigned int colourDepth, 00487 bool fullScreen, int left = 0, int top = 0, bool depthBuffer = true, 00488 RenderWindow* parentWindowHandle = 0); 00489 00492 void detachRenderTarget( RenderTarget* pWin ); 00493 00496 void detachRenderTarget( const String & name ); 00497 00500 RenderTarget * getRenderTarget(const String &name); 00501 00518 void loadPlugin(const String& pluginName); 00519 00527 void unloadPlugin(const String& pluginName); 00528 00530 Timer* getTimer(void); 00531 00551 bool _fireFrameStarted(FrameEvent& evt); 00568 bool _fireFrameEnded(FrameEvent& evt); 00586 bool _fireFrameStarted(); 00601 bool _fireFrameEnded(); 00602 00604 unsigned long getCurrentFrameNumber(void) { return mCurrentFrame; } 00605 00611 SceneManager* _getCurrentSceneManager(void) { return mCurrentSceneManager; } 00616 void _setCurrentSceneManager(SceneManager* sm) { mCurrentSceneManager = sm; } 00617 00627 void _updateAllRenderTargets(void); 00628 00644 static Root& getSingleton(void); 00660 static Root* getSingletonPtr(void); 00661 00662 }; 00663 } // Namespace Ogre 00664 #endif
Copyright © 2002-2003 by The OGRE Team
Last modified Fri May 14 23:22:41 2004