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-2012 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 *mEmbeddedZipArchiveFactory;
00100         ArchiveFactory *mFileSystemArchiveFactory;
00101         ResourceGroupManager* mResourceGroupManager;
00102         ResourceBackgroundQueue* mResourceBackgroundQueue;
00103         ShadowTextureManager* mShadowTextureManager;
00104         RenderSystemCapabilitiesManager* mRenderSystemCapabilitiesManager;
00105         ScriptCompilerManager *mCompilerManager;
00106         LodStrategyManager *mLodStrategyManager;
00107 
00108         Timer* mTimer;
00109         RenderWindow* mAutoWindow;
00110         Profiler* mProfiler;
00111         HighLevelGpuProgramManager* mHighLevelGpuProgramManager;
00112         ExternalTextureSourceManager* mExternalTextureSourceManager;
00113         CompositorManager* mCompositorManager;      
00114         unsigned long mNextFrame;
00115         Real mFrameSmoothingTime;
00116         bool mRemoveQueueStructuresOnClear;
00117         Real mDefaultMinPixelSize;
00118 
00119     public:
00120         typedef vector<DynLib*>::type PluginLibList;
00121         typedef vector<Plugin*>::type PluginInstanceList;
00122     protected:
00124         PluginLibList mPluginLibs;
00126         PluginInstanceList mPlugins;
00127 
00128         typedef map<String, MovableObjectFactory*>::type MovableObjectFactoryMap;
00129         MovableObjectFactoryMap mMovableObjectFactoryMap;
00130         uint32 mNextMovableObjectTypeFlag;
00131         // stock movable factories
00132         MovableObjectFactory* mEntityFactory;
00133         MovableObjectFactory* mLightFactory;
00134         MovableObjectFactory* mBillboardSetFactory;
00135         MovableObjectFactory* mManualObjectFactory;
00136         MovableObjectFactory* mBillboardChainFactory;
00137         MovableObjectFactory* mRibbonTrailFactory;
00138 
00139         typedef map<String, RenderQueueInvocationSequence*>::type RenderQueueInvocationSequenceMap;
00140         RenderQueueInvocationSequenceMap mRQSequenceMap;
00141 
00143         bool mIsInitialised;
00144 
00145         WorkQueue* mWorkQueue;
00146 
00148         bool mIsBlendIndicesGpuRedundant;
00150         bool mIsBlendWeightsGpuRedundant;
00151 
00158         void loadPlugins( const String& pluginsfile = "plugins.cfg" );
00162         void initialisePlugins();
00166         void shutdownPlugins();
00167 
00170         void unloadPlugins();
00171 
00172         // Internal method for one-time tasks after first window creation
00173         void oneTimePostWindowInit(void);
00174 
00176         set<FrameListener*>::type mFrameListeners;
00177 
00179         set<FrameListener*>::type mRemovedFrameListeners;
00180 
00182         enum FrameEventTimeType {
00183             FETT_ANY = 0, 
00184             FETT_STARTED = 1, 
00185             FETT_QUEUED = 2, 
00186             FETT_ENDED = 3, 
00187             FETT_COUNT = 4
00188         };
00189 
00191         typedef deque<unsigned long>::type EventTimesQueue;
00192         EventTimesQueue mEventTimes[FETT_COUNT];
00193 
00198         Real calculateEventTime(unsigned long now, FrameEventTimeType type);
00199 
00201         void populateFrameEvent(FrameEventTimeType type, FrameEvent& evtToUpdate);
00202 
00203     public:
00204 
00213         Root(const String& pluginFileName = "plugins.cfg", 
00214             const String& configFileName = "ogre.cfg", 
00215             const String& logFileName = "Ogre.log");
00216         ~Root();
00217 
00223         void saveConfig(void);
00224 
00237         bool restoreConfig(void);
00238 
00255         bool showConfigDialog(void);
00256 
00268         void addRenderSystem(RenderSystem* newRend);
00269 
00276         const RenderSystemList& getAvailableRenderers(void);
00277 
00284         RenderSystem* getRenderSystemByName(const String& name);
00285 
00303         void setRenderSystem(RenderSystem* system);
00304 
00307         RenderSystem* getRenderSystem(void);
00308 
00324         RenderWindow* initialise(bool autoCreateWindow, const String& windowTitle = "OGRE Render Window",
00325                                     const String& customCapabilitiesConfig = StringUtil::BLANK);
00326 
00328         bool isInitialised(void) const { return mIsInitialised; }
00329 
00335         void useCustomRenderSystemCapabilities(RenderSystemCapabilities* capabilities);
00336 
00340         bool getRemoveRenderQueueStructuresOnClear() const { return mRemoveQueueStructuresOnClear; }
00341 
00345         void setRemoveRenderQueueStructuresOnClear(bool r) { mRemoveQueueStructuresOnClear = r; }
00346 
00352         void addSceneManagerFactory(SceneManagerFactory* fact);
00353 
00356         void removeSceneManagerFactory(SceneManagerFactory* fact);
00357 
00367         const SceneManagerMetaData* getSceneManagerMetaData(const String& typeName) const;
00368 
00372         SceneManagerEnumerator::MetaDataIterator getSceneManagerMetaDataIterator(void) const;
00373 
00385         SceneManager* createSceneManager(const String& typeName, 
00386             const String& instanceName = StringUtil::BLANK);
00387 
00400         SceneManager* createSceneManager(SceneTypeMask typeMask, 
00401             const String& instanceName = StringUtil::BLANK);
00402 
00404         void destroySceneManager(SceneManager* sm);
00405 
00410         SceneManager* getSceneManager(const String& instanceName) const;
00411 
00415         bool hasSceneManager(const String& instanceName) const;
00417         SceneManagerEnumerator::SceneManagerIterator getSceneManagerIterator(void);
00418 
00434         TextureManager* getTextureManager(void);
00435 
00441         MeshManager* getMeshManager(void);
00442 
00446         String getErrorDescription(long errorNumber);
00447 
00464         void addFrameListener(FrameListener* newListener);
00465 
00470         void removeFrameListener(FrameListener* oldListener);
00471 
00480         void queueEndRendering(void);
00481 
00509         void startRendering(void);
00510 
00516         bool renderOneFrame(void);
00517 
00524         bool renderOneFrame(Real timeSinceLastFrame);
00525 
00533         void shutdown(void);
00534 
00581         void addResourceLocation(const String& name, const String& locType, 
00582             const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
00583             bool recursive = false);
00584 
00591         void removeResourceLocation(const String& name, 
00592             const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
00593 
00615         DataStreamPtr createFileStream(const String& filename, const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
00616             bool overwrite = false, const String& locationPattern = StringUtil::BLANK);
00617 
00632         DataStreamPtr openFileStream(const String& filename, const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
00633             const String& locationPattern = StringUtil::BLANK);
00634 
00643         void convertColourValue(const ColourValue& colour, uint32* pDest);
00644 
00653         RenderWindow* getAutoCreatedWindow(void);
00654 
00657         RenderWindow* createRenderWindow(const String &name, unsigned int width, unsigned int height, 
00658             bool fullScreen, const NameValuePairList *miscParams = 0) ;
00659 
00662         bool createRenderWindows(const RenderWindowDescriptionList& renderWindowDescriptions,
00663             RenderWindowList& createdWindows);
00664     
00670         RenderTarget* detachRenderTarget( RenderTarget* pWin );
00671 
00677         RenderTarget* detachRenderTarget( const String & name );
00678 
00681         void destroyRenderTarget(RenderTarget* target);
00682 
00685         void destroyRenderTarget(const String &name);
00686 
00689         RenderTarget * getRenderTarget(const String &name);
00690 
00701         void loadPlugin(const String& pluginName);
00702 
00712         void unloadPlugin(const String& pluginName);
00713 
00724         void installPlugin(Plugin* plugin);
00725 
00734         void uninstallPlugin(Plugin* plugin);
00735 
00737         const PluginInstanceList& getInstalledPlugins() const { return mPlugins; }
00738 
00740         Timer* getTimer(void);
00741 
00761         bool _fireFrameStarted(FrameEvent& evt);
00771         bool _fireFrameRenderingQueued(FrameEvent& evt);
00772 
00789         bool _fireFrameEnded(FrameEvent& evt);
00807         bool _fireFrameStarted();
00818         bool _fireFrameRenderingQueued();
00833         bool _fireFrameEnded();
00834 
00843         unsigned long getNextFrameNumber(void) const { return mNextFrame; }
00844 
00850         SceneManager* _getCurrentSceneManager(void) const;
00855         void _pushCurrentSceneManager(SceneManager* sm);
00860         void _popCurrentSceneManager(SceneManager* sm);
00861 
00872         bool _updateAllRenderTargets(void);
00873 
00885         bool _updateAllRenderTargets(FrameEvent& evt);
00886 
00891         RenderQueueInvocationSequence* createRenderQueueInvocationSequence(
00892             const String& name);
00893 
00897         RenderQueueInvocationSequence* getRenderQueueInvocationSequence(
00898             const String& name);
00899 
00905         void destroyRenderQueueInvocationSequence(
00906             const String& name);
00907 
00913         void destroyAllRenderQueueInvocationSequences(void);
00914 
00930         static Root& getSingleton(void);
00946         static Root* getSingletonPtr(void);
00947 
00956         void clearEventTimes(void);
00957 
00970         void setFrameSmoothingPeriod(Real period) { mFrameSmoothingTime = period; }
00972         Real getFrameSmoothingPeriod(void) const { return mFrameSmoothingTime; }
00973 
00986         void addMovableObjectFactory(MovableObjectFactory* fact, 
00987             bool overrideExisting = false);
00995         void removeMovableObjectFactory(MovableObjectFactory* fact);
00997         bool hasMovableObjectFactory(const String& typeName) const;
00999         MovableObjectFactory* getMovableObjectFactory(const String& typeName);
01005         uint32 _allocateNextMovableObjectTypeFlag(void);
01006 
01007         typedef ConstMapIterator<MovableObjectFactoryMap> MovableObjectFactoryIterator;
01011         MovableObjectFactoryIterator getMovableObjectFactoryIterator(void) const;
01012 
01016         unsigned int getDisplayMonitorCount() const;
01017 
01024         WorkQueue* getWorkQueue() const { return mWorkQueue; }
01025 
01034         void setWorkQueue(WorkQueue* queue);
01035             
01042         void setBlendIndicesGpuRedundant(bool redundant) {  mIsBlendIndicesGpuRedundant = redundant; }
01046         bool isBlendIndicesGpuRedundant() const { return mIsBlendIndicesGpuRedundant; }
01047 
01054         void setBlendWeightsGpuRedundant(bool redundant) {  mIsBlendWeightsGpuRedundant = redundant; }
01058         bool isBlendWeightsGpuRedundant() const { return mIsBlendWeightsGpuRedundant; }
01059     
01064         void setDefaultMinPixelSize(Real pixelSize) { mDefaultMinPixelSize = pixelSize; }
01065 
01068         Real getDefaultMinPixelSize() { return mDefaultMinPixelSize; }
01069     
01070 
01071     };
01074 } // Namespace Ogre
01075 #endif

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Fri May 25 23:36:26 2012