Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

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 © 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