| [148] | 1 | /* | 
|---|
 | 2 | ----------------------------------------------------------------------------- | 
|---|
 | 3 | This source file is part of OGRE | 
|---|
 | 4 |     (Object-oriented Graphics Rendering Engine) | 
|---|
 | 5 | For the latest info, see http://www.ogre3d.org/ | 
|---|
 | 6 |  | 
|---|
 | 7 | Copyright (c) 2000-2013 Torus Knot Software Ltd | 
|---|
 | 8 |  | 
|---|
 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy | 
|---|
 | 10 | of this software and associated documentation files (the "Software"), to deal | 
|---|
 | 11 | in the Software without restriction, including without limitation the rights | 
|---|
 | 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
|---|
 | 13 | copies of the Software, and to permit persons to whom the Software is | 
|---|
 | 14 | furnished to do so, subject to the following conditions: | 
|---|
 | 15 |  | 
|---|
 | 16 | The above copyright notice and this permission notice shall be included in | 
|---|
 | 17 | all copies or substantial portions of the Software. | 
|---|
 | 18 |  | 
|---|
 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
|---|
 | 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
|---|
 | 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
|---|
 | 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
|---|
 | 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
|---|
 | 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 
|---|
 | 25 | THE SOFTWARE. | 
|---|
 | 26 | ----------------------------------------------------------------------------- | 
|---|
 | 27 | */ | 
|---|
 | 28 | #ifndef __ROOT__ | 
|---|
 | 29 | #define __ROOT__ | 
|---|
 | 30 |  | 
|---|
 | 31 | // Precompiler options | 
|---|
 | 32 | #include "OgrePrerequisites.h" | 
|---|
 | 33 |  | 
|---|
 | 34 | #include "OgreSingleton.h" | 
|---|
 | 35 | #include "OgreString.h" | 
|---|
 | 36 | #include "OgreSceneManagerEnumerator.h" | 
|---|
 | 37 | #include "OgreResourceGroupManager.h" | 
|---|
 | 38 | #include "OgreLodStrategyManager.h" | 
|---|
 | 39 | #include "OgreWorkQueue.h"        | 
|---|
 | 40 |  | 
|---|
 | 41 | #if OGRE_PLATFORM == OGRE_PLATFORM_ANDROID | 
|---|
 | 42 | #include "Android/OgreAndroidLogListener.h" | 
|---|
 | 43 | #endif | 
|---|
 | 44 |  | 
|---|
 | 45 | #include <exception> | 
|---|
 | 46 |  | 
|---|
 | 47 | namespace Ogre | 
|---|
 | 48 | { | 
|---|
 | 49 |         /** \addtogroup Core | 
|---|
 | 50 |         *  @{ | 
|---|
 | 51 |         */ | 
|---|
 | 52 |         /** \addtogroup General | 
|---|
 | 53 |         *  @{ | 
|---|
 | 54 |         */ | 
|---|
 | 55 |  | 
|---|
 | 56 |     typedef vector<RenderSystem*>::type RenderSystemList; | 
|---|
 | 57 |          | 
|---|
 | 58 |     /** The root class of the Ogre system. | 
|---|
 | 59 |         @remarks | 
|---|
 | 60 |             The Ogre::Root class represents a starting point for the client | 
|---|
 | 61 |             application. From here, the application can gain access to the | 
|---|
 | 62 |             fundamentals of the system, namely the rendering systems | 
|---|
 | 63 |             available, management of saved configurations, logging, and | 
|---|
 | 64 |             access to other classes in the system. Acts as a hub from which | 
|---|
 | 65 |             all other objects may be reached. An instance of Root must be | 
|---|
 | 66 |             created before any other Ogre operations are called. Once an | 
|---|
 | 67 |             instance has been created, the same instance is accessible | 
|---|
 | 68 |             throughout the life of that object by using Root::getSingleton | 
|---|
 | 69 |             (as a reference) or Root::getSingletonPtr (as a pointer). | 
|---|
 | 70 |     */ | 
|---|
 | 71 |     class _OgreExport Root : public Singleton<Root>, public RootAlloc | 
|---|
 | 72 |     { | 
|---|
 | 73 |         // To allow update of active renderer if | 
|---|
 | 74 |         // RenderSystem::initialise is used directly | 
|---|
 | 75 |         friend class RenderSystem; | 
|---|
 | 76 |         protected: | 
|---|
 | 77 |         RenderSystemList mRenderers; | 
|---|
 | 78 |         RenderSystem* mActiveRenderer; | 
|---|
 | 79 |         String mVersion; | 
|---|
 | 80 |                 String mConfigFileName; | 
|---|
 | 81 |             bool mQueuedEnd; | 
|---|
 | 82 |         /// In case multiple render windows are created, only once are the resources loaded. | 
|---|
 | 83 |         bool mFirstTimePostWindowInit; | 
|---|
 | 84 |  | 
|---|
 | 85 |         // Singletons | 
|---|
 | 86 |         LogManager* mLogManager; | 
|---|
 | 87 |         ControllerManager* mControllerManager; | 
|---|
 | 88 |         SceneManagerEnumerator* mSceneManagerEnum; | 
|---|
 | 89 |                 typedef deque<SceneManager*>::type SceneManagerStack; | 
|---|
 | 90 |                 SceneManagerStack mSceneManagerStack; | 
|---|
 | 91 |         DynLibManager* mDynLibManager; | 
|---|
 | 92 |         ArchiveManager* mArchiveManager; | 
|---|
 | 93 |         MaterialManager* mMaterialManager; | 
|---|
 | 94 |         MeshManager* mMeshManager; | 
|---|
 | 95 |         ParticleSystemManager* mParticleManager; | 
|---|
 | 96 |         SkeletonManager* mSkeletonManager; | 
|---|
 | 97 |          | 
|---|
 | 98 |         ArchiveFactory *mZipArchiveFactory; | 
|---|
 | 99 |         ArchiveFactory *mEmbeddedZipArchiveFactory; | 
|---|
 | 100 |         ArchiveFactory *mFileSystemArchiveFactory; | 
|---|
 | 101 |          | 
|---|
 | 102 | #if OGRE_PLATFORM == OGRE_PLATFORM_ANDROID | 
|---|
 | 103 |         AndroidLogListener* mAndroidLogger; | 
|---|
 | 104 | #endif | 
|---|
 | 105 |          | 
|---|
 | 106 |                 ResourceGroupManager* mResourceGroupManager; | 
|---|
 | 107 |                 ResourceBackgroundQueue* mResourceBackgroundQueue; | 
|---|
 | 108 |                 ShadowTextureManager* mShadowTextureManager; | 
|---|
 | 109 |                 RenderSystemCapabilitiesManager* mRenderSystemCapabilitiesManager; | 
|---|
 | 110 |         ScriptCompilerManager *mCompilerManager; | 
|---|
 | 111 |         LodStrategyManager *mLodStrategyManager; | 
|---|
 | 112 |         PMWorker* mPMWorker; | 
|---|
 | 113 |         PMInjector* mPMInjector; | 
|---|
 | 114 |  | 
|---|
 | 115 |         Timer* mTimer; | 
|---|
 | 116 |         RenderWindow* mAutoWindow; | 
|---|
 | 117 |         Profiler* mProfiler; | 
|---|
 | 118 |         HighLevelGpuProgramManager* mHighLevelGpuProgramManager; | 
|---|
 | 119 |                 ExternalTextureSourceManager* mExternalTextureSourceManager; | 
|---|
 | 120 |         CompositorManager* mCompositorManager;       | 
|---|
 | 121 |         unsigned long mNextFrame; | 
|---|
 | 122 |                 Real mFrameSmoothingTime; | 
|---|
 | 123 |                 bool mRemoveQueueStructuresOnClear; | 
|---|
 | 124 |                 Real mDefaultMinPixelSize; | 
|---|
 | 125 |  | 
|---|
 | 126 |         public: | 
|---|
 | 127 |                 typedef vector<DynLib*>::type PluginLibList; | 
|---|
 | 128 |                 typedef vector<Plugin*>::type PluginInstanceList; | 
|---|
 | 129 |         protected: | 
|---|
 | 130 |                 /// List of plugin DLLs loaded | 
|---|
 | 131 |         PluginLibList mPluginLibs; | 
|---|
 | 132 |                 /// List of Plugin instances registered | 
|---|
 | 133 |                 PluginInstanceList mPlugins; | 
|---|
 | 134 |  | 
|---|
 | 135 |                 typedef map<String, MovableObjectFactory*>::type MovableObjectFactoryMap; | 
|---|
 | 136 |                 MovableObjectFactoryMap mMovableObjectFactoryMap; | 
|---|
 | 137 |                 uint32 mNextMovableObjectTypeFlag; | 
|---|
 | 138 |                 // stock movable factories | 
|---|
 | 139 |                 MovableObjectFactory* mEntityFactory; | 
|---|
 | 140 |                 MovableObjectFactory* mLightFactory; | 
|---|
 | 141 |                 MovableObjectFactory* mBillboardSetFactory; | 
|---|
 | 142 |                 MovableObjectFactory* mManualObjectFactory; | 
|---|
 | 143 |                 MovableObjectFactory* mBillboardChainFactory; | 
|---|
 | 144 |                 MovableObjectFactory* mRibbonTrailFactory; | 
|---|
 | 145 |  | 
|---|
 | 146 |                 typedef map<String, RenderQueueInvocationSequence*>::type RenderQueueInvocationSequenceMap; | 
|---|
 | 147 |                 RenderQueueInvocationSequenceMap mRQSequenceMap; | 
|---|
 | 148 |  | 
|---|
 | 149 |                 /// Are we initialised yet? | 
|---|
 | 150 |                 bool mIsInitialised; | 
|---|
 | 151 |  | 
|---|
 | 152 |                 WorkQueue* mWorkQueue; | 
|---|
 | 153 |  | 
|---|
 | 154 |                 ///Tells whether blend indices information needs to be passed to the GPU | 
|---|
 | 155 |                 bool mIsBlendIndicesGpuRedundant; | 
|---|
 | 156 |                 ///Tells whether blend weights information needs to be passed to the GPU | 
|---|
 | 157 |                 bool mIsBlendWeightsGpuRedundant; | 
|---|
 | 158 |  | 
|---|
 | 159 |         /** Method reads a plugins configuration file and instantiates all | 
|---|
 | 160 |             plugins. | 
|---|
 | 161 |             @param | 
|---|
 | 162 |                 pluginsfile The file that contains plugins information. | 
|---|
 | 163 |                 Defaults to "plugins.cfg" in release and to "plugins_d.cfg" | 
|---|
 | 164 |                 in debug build. | 
|---|
 | 165 |         */ | 
|---|
 | 166 |         void loadPlugins(const String& pluginsfile = "plugins" OGRE_BUILD_SUFFIX ".cfg"); | 
|---|
 | 167 |                 /** Initialise all loaded plugins - allows plugins to perform actions | 
|---|
 | 168 |                         once the renderer is initialised. | 
|---|
 | 169 |                 */ | 
|---|
 | 170 |                 void initialisePlugins(); | 
|---|
 | 171 |                 /** Shuts down all loaded plugins - allows things to be tidied up whilst | 
|---|
 | 172 |                         all plugins are still loaded. | 
|---|
 | 173 |                 */ | 
|---|
 | 174 |                 void shutdownPlugins(); | 
|---|
 | 175 |  | 
|---|
 | 176 |                 /** Unloads all loaded plugins. | 
|---|
 | 177 |         */ | 
|---|
 | 178 |         void unloadPlugins(); | 
|---|
 | 179 |  | 
|---|
 | 180 |         /// Internal method for one-time tasks after first window creation | 
|---|
 | 181 |         void oneTimePostWindowInit(void); | 
|---|
 | 182 |  | 
|---|
 | 183 |         /** Set of registered frame listeners */ | 
|---|
 | 184 |         set<FrameListener*>::type mFrameListeners; | 
|---|
 | 185 |  | 
|---|
 | 186 |         /** Set of frame listeners marked for removal and addition*/ | 
|---|
 | 187 |         set<FrameListener*>::type mRemovedFrameListeners; | 
|---|
 | 188 |         set<FrameListener*>::type mAddedFrameListeners; | 
|---|
 | 189 |         void _syncAddedRemovedFrameListeners(); | 
|---|
 | 190 |  | 
|---|
 | 191 |         /** Indicates the type of event to be considered by calculateEventTime(). */ | 
|---|
 | 192 |         enum FrameEventTimeType { | 
|---|
 | 193 |             FETT_ANY = 0,  | 
|---|
 | 194 |                         FETT_STARTED = 1,  | 
|---|
 | 195 |                         FETT_QUEUED = 2,  | 
|---|
 | 196 |                         FETT_ENDED = 3,  | 
|---|
 | 197 |                         FETT_COUNT = 4 | 
|---|
 | 198 |         }; | 
|---|
 | 199 |  | 
|---|
 | 200 |         /// Contains the times of recently fired events | 
|---|
 | 201 |                 typedef deque<unsigned long>::type EventTimesQueue; | 
|---|
 | 202 |         EventTimesQueue mEventTimes[FETT_COUNT]; | 
|---|
 | 203 |  | 
|---|
 | 204 |         /** Internal method for calculating the average time between recently fired events. | 
|---|
 | 205 |         @param now The current time in ms. | 
|---|
 | 206 |         @param type The type of event to be considered. | 
|---|
 | 207 |         */ | 
|---|
 | 208 |         Real calculateEventTime(unsigned long now, FrameEventTimeType type); | 
|---|
 | 209 |  | 
|---|
 | 210 |                 /** Update a set of event times (note, progressive, only call once for each type per frame) */ | 
|---|
 | 211 |                 void populateFrameEvent(FrameEventTimeType type, FrameEvent& evtToUpdate); | 
|---|
 | 212 |  | 
|---|
 | 213 |     public: | 
|---|
 | 214 |  | 
|---|
 | 215 |         /** Constructor | 
|---|
 | 216 |         @param pluginFileName The file that contains plugins information. | 
|---|
 | 217 |             Defaults to "plugins.cfg" in release build and to "plugins_d.cfg" | 
|---|
 | 218 |             in debug build. May be left blank to ignore. | 
|---|
 | 219 |                 @param configFileName The file that contains the configuration to be loaded. | 
|---|
 | 220 |                         Defaults to "ogre.cfg", may be left blank to load nothing. | 
|---|
 | 221 |                 @param logFileName The logfile to create, defaults to Ogre.log, may be  | 
|---|
 | 222 |                         left blank if you've already set up LogManager & Log yourself | 
|---|
 | 223 |                 */ | 
|---|
 | 224 |         Root(const String& pluginFileName = "plugins" OGRE_BUILD_SUFFIX ".cfg",  | 
|---|
 | 225 |                         const String& configFileName = "ogre.cfg",  | 
|---|
 | 226 |                         const String& logFileName = "Ogre.log"); | 
|---|
 | 227 |         ~Root(); | 
|---|
 | 228 |  | 
|---|
 | 229 |         /** Saves the details of the current configuration | 
|---|
 | 230 |             @remarks | 
|---|
 | 231 |                 Stores details of the current configuration so it may be | 
|---|
 | 232 |                 restored later on. | 
|---|
 | 233 |         */ | 
|---|
 | 234 |         void saveConfig(void); | 
|---|
 | 235 |  | 
|---|
 | 236 |         /** Checks for saved video/sound/etc settings | 
|---|
 | 237 |             @remarks | 
|---|
 | 238 |                 This method checks to see if there is a valid saved configuration | 
|---|
 | 239 |                 from a previous run. If there is, the state of the system will | 
|---|
 | 240 |                 be restored to that configuration. | 
|---|
 | 241 |  | 
|---|
 | 242 |             @return | 
|---|
 | 243 |                 If a valid configuration was found, <b>true</b> is returned. | 
|---|
 | 244 |             @par | 
|---|
 | 245 |                 If there is no saved configuration, or if the system failed | 
|---|
 | 246 |                 with the last config settings, <b>false</b> is returned. | 
|---|
 | 247 |         */ | 
|---|
 | 248 |         bool restoreConfig(void); | 
|---|
 | 249 |  | 
|---|
 | 250 |         /** Displays a dialog asking the user to choose system settings. | 
|---|
 | 251 |             @remarks | 
|---|
 | 252 |                 This method displays the default dialog allowing the user to | 
|---|
 | 253 |                 choose the rendering system, video mode etc. If there is are | 
|---|
 | 254 |                 any settings saved already, they will be restored automatically | 
|---|
 | 255 |                 before displaying the dialogue. When the user accepts a group of | 
|---|
 | 256 |                 settings, this will automatically call Root::setRenderSystem, | 
|---|
 | 257 |                 RenderSystem::setConfigOption and Root::saveConfig with the | 
|---|
 | 258 |                 user's choices. This is the easiest way to get the system | 
|---|
 | 259 |                 configured. | 
|---|
 | 260 |             @return | 
|---|
 | 261 |                 If the user clicked 'Ok', <b>true</b> is returned. | 
|---|
 | 262 |             @par | 
|---|
 | 263 |                 If they clicked 'Cancel' (in which case the app should | 
|---|
 | 264 |                 strongly consider terminating), <b>false</b> is returned. | 
|---|
 | 265 |          */ | 
|---|
 | 266 |         bool showConfigDialog(void); | 
|---|
 | 267 |  | 
|---|
 | 268 |         /** Adds a new rendering subsystem to the list of available renderers. | 
|---|
 | 269 |             @remarks | 
|---|
 | 270 |                 Intended for use by advanced users and plugin writers only! | 
|---|
 | 271 |                 Calling this method with a pointer to a valid RenderSystem | 
|---|
 | 272 |                 (subclass) adds a rendering API implementation to the list of | 
|---|
 | 273 |                 available ones. Typical examples would be an OpenGL | 
|---|
 | 274 |                 implementation and a Direct3D implementation. | 
|---|
 | 275 |             @note | 
|---|
 | 276 |                 <br>This should usually be called from the dllStartPlugin() | 
|---|
 | 277 |                 function of an extension plug-in. | 
|---|
 | 278 |         */ | 
|---|
 | 279 |         void addRenderSystem(RenderSystem* newRend); | 
|---|
 | 280 |  | 
|---|
 | 281 |         /** Retrieve a list of the available render systems. | 
|---|
 | 282 |             @remarks | 
|---|
 | 283 |                 Retrieves a pointer to the list of available renderers as a | 
|---|
 | 284 |                 list of RenderSystem subclasses. Can be used to build a | 
|---|
 | 285 |                 custom settings dialog. | 
|---|
 | 286 |         */ | 
|---|
 | 287 |         const RenderSystemList& getAvailableRenderers(void); | 
|---|
 | 288 |  | 
|---|
 | 289 |         /** Retrieve a pointer to the render system by the given name | 
|---|
 | 290 |             @param | 
|---|
 | 291 |                 name Name of the render system intend to retrieve. | 
|---|
 | 292 |             @return | 
|---|
 | 293 |                 A pointer to the render system, <b>NULL</b> if no found. | 
|---|
 | 294 |         */ | 
|---|
 | 295 |         RenderSystem* getRenderSystemByName(const String& name); | 
|---|
 | 296 |  | 
|---|
 | 297 |         /** Sets the rendering subsystem to be used. | 
|---|
 | 298 |             @remarks | 
|---|
 | 299 |                 This method indicates to OGRE which rendering system is to be | 
|---|
 | 300 |                 used (e.g. Direct3D, OpenGL etc). This is called | 
|---|
 | 301 |                 automatically by the default config dialog, and when settings | 
|---|
 | 302 |                 are restored from a previous configuraion. If used manually | 
|---|
 | 303 |                 it could be used to set the renderer from a custom settings | 
|---|
 | 304 |                 dialog. Once this has been done, the renderer can be | 
|---|
 | 305 |                 initialised using Root::initialise. | 
|---|
 | 306 |             @par | 
|---|
 | 307 |                 This method is also called by render systems if they are | 
|---|
 | 308 |                 initialised directly. | 
|---|
 | 309 |             @param | 
|---|
 | 310 |                 system Pointer to the render system to use. | 
|---|
 | 311 |             @see | 
|---|
 | 312 |                 RenderSystem | 
|---|
 | 313 |         */ | 
|---|
 | 314 |         void setRenderSystem(RenderSystem* system); | 
|---|
 | 315 |  | 
|---|
 | 316 |         /** Retrieve a pointer to the currently selected render system. | 
|---|
 | 317 |         */ | 
|---|
 | 318 |         RenderSystem* getRenderSystem(void); | 
|---|
 | 319 |  | 
|---|
 | 320 |         /** Initialises the renderer. | 
|---|
 | 321 |             @remarks | 
|---|
 | 322 |                 This method can only be called after a renderer has been | 
|---|
 | 323 |                 selected with Root::setRenderSystem, and it will initialise | 
|---|
 | 324 |                 the selected rendering system ready for use. | 
|---|
 | 325 |             @param | 
|---|
 | 326 |                 autoCreateWindow If true, a rendering window will | 
|---|
 | 327 |                 automatically be created (saving a call to | 
|---|
 | 328 |                 Root::createRenderWindow). The window will be | 
|---|
 | 329 |                 created based on the options currently set on the render | 
|---|
 | 330 |                 system. | 
|---|
 | 331 |             @return | 
|---|
 | 332 |                 A pointer to the automatically created window, if | 
|---|
 | 333 |                 requested, otherwise <b>NULL</b>. | 
|---|
 | 334 |         */ | 
|---|
 | 335 |             RenderWindow* initialise(bool autoCreateWindow, const String& windowTitle = "OGRE Render Window", | 
|---|
 | 336 |                                     const String& customCapabilitiesConfig = StringUtil::BLANK); | 
|---|
 | 337 |  | 
|---|
 | 338 |                 /** Returns whether the system is initialised or not. */ | 
|---|
 | 339 |                 bool isInitialised(void) const { return mIsInitialised; } | 
|---|
 | 340 |  | 
|---|
 | 341 |         /** Requests active RenderSystem to use custom RenderSystemCapabilities | 
|---|
 | 342 |         @remarks | 
|---|
 | 343 |             This is useful for testing how the RenderSystem would behave on a machine with | 
|---|
 | 344 |             less advanced GPUs. This method MUST be called before creating the first RenderWindow | 
|---|
 | 345 |         */ | 
|---|
 | 346 |         void useCustomRenderSystemCapabilities(RenderSystemCapabilities* capabilities); | 
|---|
 | 347 |  | 
|---|
 | 348 |                 /** Get whether the entire render queue structure should be emptied on clearing,  | 
|---|
 | 349 |                         or whether just the objects themselves should be cleared. | 
|---|
 | 350 |                 */ | 
|---|
 | 351 |                 bool getRemoveRenderQueueStructuresOnClear() const { return mRemoveQueueStructuresOnClear; } | 
|---|
 | 352 |  | 
|---|
 | 353 |                 /** Set whether the entire render queue structure should be emptied on clearing,  | 
|---|
 | 354 |                 or whether just the objects themselves should be cleared. | 
|---|
 | 355 |                 */ | 
|---|
 | 356 |                 void setRemoveRenderQueueStructuresOnClear(bool r) { mRemoveQueueStructuresOnClear = r; } | 
|---|
 | 357 |  | 
|---|
 | 358 |                 /** Register a new SceneManagerFactory, a factory object for creating instances | 
|---|
 | 359 |                         of specific SceneManagers.  | 
|---|
 | 360 |                 @remarks | 
|---|
 | 361 |                         Plugins should call this to register as new SceneManager providers. | 
|---|
 | 362 |                 */ | 
|---|
 | 363 |                 void addSceneManagerFactory(SceneManagerFactory* fact); | 
|---|
 | 364 |  | 
|---|
 | 365 |                 /** Unregister a SceneManagerFactory. | 
|---|
 | 366 |                 */ | 
|---|
 | 367 |                 void removeSceneManagerFactory(SceneManagerFactory* fact); | 
|---|
 | 368 |  | 
|---|
 | 369 |                 /** Get more information about a given type of SceneManager. | 
|---|
 | 370 |                 @remarks | 
|---|
 | 371 |                         The metadata returned tells you a few things about a given type  | 
|---|
 | 372 |                         of SceneManager, which can be created using a factory that has been | 
|---|
 | 373 |                         registered already.  | 
|---|
 | 374 |                 @param typeName The type name of the SceneManager you want to enquire on. | 
|---|
 | 375 |                         If you don't know the typeName already, you can iterate over the  | 
|---|
 | 376 |                         metadata for all types using getMetaDataIterator. | 
|---|
 | 377 |                 */ | 
|---|
 | 378 |                 const SceneManagerMetaData* getSceneManagerMetaData(const String& typeName) const; | 
|---|
 | 379 |  | 
|---|
 | 380 |                 /** Iterate over all types of SceneManager available for construction,  | 
|---|
 | 381 |                         providing some information about each one. | 
|---|
 | 382 |                 */ | 
|---|
 | 383 |                 SceneManagerEnumerator::MetaDataIterator getSceneManagerMetaDataIterator(void) const; | 
|---|
 | 384 |  | 
|---|
 | 385 |                 /** Create a SceneManager instance of a given type. | 
|---|
 | 386 |                 @remarks | 
|---|
 | 387 |                         You can use this method to create a SceneManager instance of a  | 
|---|
 | 388 |                         given specific type. You may know this type already, or you may | 
|---|
 | 389 |                         have discovered it by looking at the results from getMetaDataIterator. | 
|---|
 | 390 |                 @note | 
|---|
 | 391 |                         This method throws an exception if the named type is not found. | 
|---|
 | 392 |                 @param typeName String identifying a unique SceneManager type | 
|---|
 | 393 |                 @param instanceName Optional name to given the new instance that is | 
|---|
 | 394 |                         created. If you leave this blank, an auto name will be assigned. | 
|---|
 | 395 |                 */ | 
|---|
 | 396 |                 SceneManager* createSceneManager(const String& typeName,  | 
|---|
 | 397 |                         const String& instanceName = StringUtil::BLANK); | 
|---|
 | 398 |  | 
|---|
 | 399 |                 /** Create a SceneManager instance based on scene type support. | 
|---|
 | 400 |                 @remarks | 
|---|
 | 401 |                         Creates an instance of a SceneManager which supports the scene types | 
|---|
 | 402 |                         identified in the parameter. If more than one type of SceneManager  | 
|---|
 | 403 |                         has been registered as handling that combination of scene types,  | 
|---|
 | 404 |                         in instance of the last one registered is returned. | 
|---|
 | 405 |                 @note This method always succeeds, if a specific scene manager is not | 
|---|
 | 406 |                         found, the default implementation is always returned. | 
|---|
 | 407 |                 @param typeMask A mask containing one or more SceneType flags | 
|---|
 | 408 |                 @param instanceName Optional name to given the new instance that is | 
|---|
 | 409 |                         created. If you leave this blank, an auto name will be assigned. | 
|---|
 | 410 |                 */ | 
|---|
 | 411 |                 SceneManager* createSceneManager(SceneTypeMask typeMask,  | 
|---|
 | 412 |                         const String& instanceName = StringUtil::BLANK); | 
|---|
 | 413 |  | 
|---|
 | 414 |                 /** Destroy an instance of a SceneManager. */ | 
|---|
 | 415 |                 void destroySceneManager(SceneManager* sm); | 
|---|
 | 416 |  | 
|---|
 | 417 |                 /** Get an existing SceneManager instance that has already been created, | 
|---|
 | 418 |                         identified by the instance name. | 
|---|
 | 419 |                 @param instanceName The name of the instance to retrieve. | 
|---|
 | 420 |                 */ | 
|---|
 | 421 |                 SceneManager* getSceneManager(const String& instanceName) const; | 
|---|
 | 422 |  | 
|---|
 | 423 |                 /** Determines if a given SceneManager already exists | 
|---|
 | 424 |                 @param instanceName The name of the instance to retrieve. | 
|---|
 | 425 |                 */ | 
|---|
 | 426 |                 bool hasSceneManager(const String& instanceName) const; | 
|---|
 | 427 |                 /** Get an iterator over all the existing SceneManager instances. */ | 
|---|
 | 428 |                 SceneManagerEnumerator::SceneManagerIterator getSceneManagerIterator(void); | 
|---|
 | 429 |  | 
|---|
 | 430 |         /** Retrieves a reference to the current TextureManager. | 
|---|
 | 431 |             @remarks | 
|---|
 | 432 |                 This performs the same function as | 
|---|
 | 433 |                 TextureManager::getSingleton, but is provided for convenience | 
|---|
 | 434 |                 particularly to scripting engines. | 
|---|
 | 435 |             @par | 
|---|
 | 436 |                 Note that a TextureManager will NOT be available until the | 
|---|
 | 437 |                 Ogre system has been initialised by selecting a RenderSystem, | 
|---|
 | 438 |                 calling Root::initialise and a window having been created | 
|---|
 | 439 |                 (this may have been done by initialise if required). This is | 
|---|
 | 440 |                 because the exact runtime subclass which will be implementing | 
|---|
 | 441 |                 the calls will differ depending on the rendering engine | 
|---|
 | 442 |                 selected, and these typically require a window upon which to | 
|---|
 | 443 |                 base texture format decisions. | 
|---|
 | 444 |         */ | 
|---|
 | 445 |         TextureManager* getTextureManager(void); | 
|---|
 | 446 |  | 
|---|
 | 447 |         /** Retrieves a reference to the current MeshManager. | 
|---|
 | 448 |             @remarks | 
|---|
 | 449 |                 This performs the same function as MeshManager::getSingleton | 
|---|
 | 450 |                 and is provided for convenience to scripting engines. | 
|---|
 | 451 |         */ | 
|---|
 | 452 |         MeshManager* getMeshManager(void); | 
|---|
 | 453 |  | 
|---|
 | 454 |         /** Utility function for getting a better description of an error | 
|---|
 | 455 |             code. | 
|---|
 | 456 |         */ | 
|---|
 | 457 |         String getErrorDescription(long errorNumber); | 
|---|
 | 458 |  | 
|---|
 | 459 |         /** Registers a FrameListener which will be called back every frame. | 
|---|
 | 460 |             @remarks | 
|---|
 | 461 |                 A FrameListener is a class which implements methods which | 
|---|
 | 462 |                 will be called every frame. | 
|---|
 | 463 |             @par | 
|---|
 | 464 |                 See the FrameListener class for more details on the specifics | 
|---|
 | 465 |                 It is imperitive that the instance passed to this method is | 
|---|
 | 466 |                 not destroyed before either the rendering loop ends, or the | 
|---|
 | 467 |                 class is removed from the listening list using | 
|---|
 | 468 |                 removeFrameListener. | 
|---|
 | 469 |             @note | 
|---|
 | 470 |                 <br>This method can only be called after Root::initialise has | 
|---|
 | 471 |                 been called. | 
|---|
 | 472 |             @see | 
|---|
 | 473 |                 FrameListener, Root::removeFrameListener | 
|---|
 | 474 |         */ | 
|---|
 | 475 |         void addFrameListener(FrameListener* newListener); | 
|---|
 | 476 |  | 
|---|
 | 477 |         /** Removes a FrameListener from the list of listening classes. | 
|---|
 | 478 |             @see | 
|---|
 | 479 |                 FrameListener, Root::addFrameListener | 
|---|
 | 480 |         */ | 
|---|
 | 481 |         void removeFrameListener(FrameListener* oldListener); | 
|---|
 | 482 |  | 
|---|
 | 483 |         /** Queues the end of rendering. | 
|---|
 | 484 |             @remarks | 
|---|
 | 485 |                 This method will do nothing unless startRendering() has | 
|---|
 | 486 |                 been called, in which case before the next frame is rendered | 
|---|
 | 487 |                 the rendering loop will bail out. | 
|---|
 | 488 |             @see | 
|---|
 | 489 |                 Root, Root::startRendering | 
|---|
 | 490 |         */ | 
|---|
 | 491 |         void queueEndRendering(bool state = true); | 
|---|
 | 492 |  | 
|---|
 | 493 |         /** Check for planned end of rendering. | 
|---|
 | 494 |             @remarks | 
|---|
 | 495 |                 This method return true if queueEndRendering() was called before. | 
|---|
 | 496 |             @see | 
|---|
 | 497 |                 Root, Root::queueEndRendering, Root::startRendering | 
|---|
 | 498 |         */ | 
|---|
 | 499 |         bool endRenderingQueued(void); | 
|---|
 | 500 |  | 
|---|
 | 501 |         /** Starts / restarts the automatic rendering cycle. | 
|---|
 | 502 |             @remarks | 
|---|
 | 503 |                 This method begins the automatic rendering of the scene. It | 
|---|
 | 504 |                 will <b>NOT</b> return until the rendering cycle is halted. | 
|---|
 | 505 |             @par | 
|---|
 | 506 |                 During rendering, any FrameListener classes registered using | 
|---|
 | 507 |                 addFrameListener will be called back for each frame that is | 
|---|
 | 508 |                 to be rendered, These classes can tell OGRE to halt the | 
|---|
 | 509 |                 rendering if required, which will cause this method to | 
|---|
 | 510 |                 return. | 
|---|
 | 511 |             @note | 
|---|
 | 512 |                 <br>Users of the OGRE library do not have to use this | 
|---|
 | 513 |                 automatic rendering loop. It is there as a convenience and is | 
|---|
 | 514 |                 most useful for high frame rate applications e.g. games. For | 
|---|
 | 515 |                 applications that don't need to constantly refresh the | 
|---|
 | 516 |                 rendering targets (e.g. an editor utility), it is better to | 
|---|
 | 517 |                 manually refresh each render target only when required by | 
|---|
 | 518 |                 calling RenderTarget::update, or if you want to run your own | 
|---|
 | 519 |                                 render loop you can update all targets on demand using | 
|---|
 | 520 |                                 Root::renderOneFrame. | 
|---|
 | 521 |             @note | 
|---|
 | 522 |                 This frees up the CPU to do other things in between | 
|---|
 | 523 |                 refreshes, since in this case frame rate is less important. | 
|---|
 | 524 |             @note | 
|---|
 | 525 |                 This method can only be called after Root::initialise has | 
|---|
 | 526 |                 been called. | 
|---|
 | 527 |         */ | 
|---|
 | 528 |         void startRendering(void); | 
|---|
 | 529 |  | 
|---|
 | 530 |         /** Render one frame.  | 
|---|
 | 531 |         @remarks | 
|---|
 | 532 |             Updates all the render targets automatically and then returns, | 
|---|
 | 533 |             raising frame events before and after. | 
|---|
 | 534 |         */ | 
|---|
 | 535 |         bool renderOneFrame(void); | 
|---|
 | 536 |  | 
|---|
 | 537 |                 /** Render one frame, with custom frame time information.  | 
|---|
 | 538 |                 @remarks | 
|---|
 | 539 |                 Updates all the render targets automatically and then returns, | 
|---|
 | 540 |                 raising frame events before and after - all per-frame times are based on | 
|---|
 | 541 |                 the time value you pass in. | 
|---|
 | 542 |                 */ | 
|---|
 | 543 |                 bool renderOneFrame(Real timeSinceLastFrame); | 
|---|
 | 544 |  | 
|---|
 | 545 |         /** Shuts down the system manually. | 
|---|
 | 546 |             @remarks | 
|---|
 | 547 |                 This is normally done by Ogre automatically so don't think | 
|---|
 | 548 |                 you have to call this yourself. However this is here for | 
|---|
 | 549 |                 convenience, especially for dealing with unexpected errors or | 
|---|
 | 550 |                 for systems which need to shut down Ogre on demand. | 
|---|
 | 551 |         */ | 
|---|
 | 552 |         void shutdown(void); | 
|---|
 | 553 |  | 
|---|
 | 554 |         /** Adds a location to the list of searchable locations for a | 
|---|
 | 555 |             Resource type. | 
|---|
 | 556 |             @remarks | 
|---|
 | 557 |                 Resource files (textures, models etc) need to be loaded from | 
|---|
 | 558 |                 specific locations. By calling this method, you add another  | 
|---|
 | 559 |                                 search location to the list. Locations added first are preferred | 
|---|
 | 560 |                                 over locations added later. | 
|---|
 | 561 |             @par | 
|---|
 | 562 |                 Locations can be folders, compressed archives, even perhaps | 
|---|
 | 563 |                 remote locations. Facilities for loading from different | 
|---|
 | 564 |                 locations are provided by plugins which provide | 
|---|
 | 565 |                 implementations of the Archive class. | 
|---|
 | 566 |                 All the application user has to do is specify a 'loctype' | 
|---|
 | 567 |                 string in order to indicate the type of location, which | 
|---|
 | 568 |                 should map onto one of the provided plugins. Ogre comes | 
|---|
 | 569 |                 configured with the 'FileSystem' (folders) and 'Zip' (archive | 
|---|
 | 570 |                 compressed with the pkzip / WinZip etc utilities) types. | 
|---|
 | 571 |             @par | 
|---|
 | 572 |                                 You can also supply the name of a resource group which should | 
|---|
 | 573 |                                 have this location applied to it. The  | 
|---|
 | 574 |                                 ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME group is the | 
|---|
 | 575 |                                 default, and one resource group which will always exist. You | 
|---|
 | 576 |                                 should consider defining resource groups for your more specific | 
|---|
 | 577 |                                 resources (e.g. per level) so that you can control loading / | 
|---|
 | 578 |                                 unloading better. | 
|---|
 | 579 |             @param | 
|---|
 | 580 |                 name The name of the location, e.g. './data' or | 
|---|
 | 581 |                 '/compressed/gamedata.zip' | 
|---|
 | 582 |             @param | 
|---|
 | 583 |                 locType A string identifying the location type, e.g. | 
|---|
 | 584 |                 'FileSystem' (for folders), 'Zip' etc. Must map to a | 
|---|
 | 585 |                 registered plugin which deals with this type (FileSystem and | 
|---|
 | 586 |                 Zip should always be available) | 
|---|
 | 587 |             @param | 
|---|
 | 588 |                 groupName Type of name of the resource group which this location | 
|---|
 | 589 |                                 should apply to; defaults to the General group which applies to | 
|---|
 | 590 |                                 all non-specific resources. | 
|---|
 | 591 |                         @param | 
|---|
 | 592 |                                 recursive If the resource location has a concept of recursive | 
|---|
 | 593 |                                 directory traversal, enabling this option will mean you can load | 
|---|
 | 594 |                                 resources in subdirectories using only their unqualified name. | 
|---|
 | 595 |                                 The default is to disable this so that resources in subdirectories | 
|---|
 | 596 |                                 with the same name are still unique. | 
|---|
 | 597 |             @see | 
|---|
 | 598 |                 Archive | 
|---|
 | 599 |         */ | 
|---|
 | 600 |         void addResourceLocation(const String& name, const String& locType,  | 
|---|
 | 601 |                         const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,  | 
|---|
 | 602 |                         bool recursive = false); | 
|---|
 | 603 |  | 
|---|
 | 604 |                 /** Removes a resource location from the list. | 
|---|
 | 605 |                 @see addResourceLocation | 
|---|
 | 606 |                 @param name The name of the resource location as specified in addResourceLocation | 
|---|
 | 607 |                 @param groupName The name of the resource group to which this location  | 
|---|
 | 608 |                         was assigned. | 
|---|
 | 609 |                 */ | 
|---|
 | 610 |                 void removeResourceLocation(const String& name,  | 
|---|
 | 611 |                         const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); | 
|---|
 | 612 |  | 
|---|
 | 613 |                 /** Helper method to assist you in creating writeable file streams. | 
|---|
 | 614 |                 @remarks | 
|---|
 | 615 |                         This is a high-level utility method which you can use to find a place to  | 
|---|
 | 616 |                         save a file more easily. If the filename you specify is either an | 
|---|
 | 617 |                         absolute or relative filename (ie it includes path separators), then | 
|---|
 | 618 |                         the file will be created in the normal filesystem using that specification. | 
|---|
 | 619 |                         If it doesn't, then the method will look for a writeable resource location | 
|---|
 | 620 |                         via ResourceGroupManager::createResource using the other params provided. | 
|---|
 | 621 |                 @param filename The name of the file to create. If it includes path separators,  | 
|---|
 | 622 |                         the filesystem will be accessed direct. If no path separators are | 
|---|
 | 623 |                         present the resource system is used, falling back on the raw filesystem after. | 
|---|
 | 624 |                 @param groupName The name of the group in which to create the file, if the  | 
|---|
 | 625 |                         resource system is used | 
|---|
 | 626 |                 @param overwrite If true, an existing file will be overwritten, if false | 
|---|
 | 627 |                         an error will occur if the file already exists | 
|---|
 | 628 |                 @param locationPattern If the resource group contains multiple locations,  | 
|---|
 | 629 |                         then usually the file will be created in the first writable location. If you  | 
|---|
 | 630 |                         want to be more specific, you can include a location pattern here and  | 
|---|
 | 631 |                         only locations which match that pattern (as determined by StringUtil::match) | 
|---|
 | 632 |                         will be considered candidates for creation. | 
|---|
 | 633 |                 */ | 
|---|
 | 634 |                 DataStreamPtr createFileStream(const String& filename, const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,  | 
|---|
 | 635 |                         bool overwrite = false, const String& locationPattern = StringUtil::BLANK); | 
|---|
 | 636 |  | 
|---|
 | 637 |                 /** Helper method to assist you in accessing readable file streams. | 
|---|
 | 638 |                 @remarks | 
|---|
 | 639 |                         This is a high-level utility method which you can use to find a place to  | 
|---|
 | 640 |                         open a file more easily. It checks the resource system first, and if | 
|---|
 | 641 |                         that fails falls back on accessing the file system directly. | 
|---|
 | 642 |                 @param filename The name of the file to open.  | 
|---|
 | 643 |                 @param groupName The name of the group in which to create the file, if the  | 
|---|
 | 644 |                         resource system is used | 
|---|
 | 645 |                 @param locationPattern If the resource group contains multiple locations,  | 
|---|
 | 646 |                         then usually the file will be created in the first writable location. If you  | 
|---|
 | 647 |                         want to be more specific, you can include a location pattern here and  | 
|---|
 | 648 |                         only locations which match that pattern (as determined by StringUtil::match) | 
|---|
 | 649 |                         will be considered candidates for creation. | 
|---|
 | 650 |                 */               | 
|---|
 | 651 |                 DataStreamPtr openFileStream(const String& filename, const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,  | 
|---|
 | 652 |                         const String& locationPattern = StringUtil::BLANK); | 
|---|
 | 653 |  | 
|---|
 | 654 |         /** Generates a packed data version of the passed in ColourValue suitable for | 
|---|
 | 655 |             use with the current RenderSystem. | 
|---|
 | 656 |         @remarks | 
|---|
 | 657 |             Since different render systems have different colour data formats (eg | 
|---|
 | 658 |             RGBA for GL, ARGB for D3D) this method allows you to use 1 method for all. | 
|---|
 | 659 |         @param colour The colour to convert | 
|---|
 | 660 |         @param pDest Pointer to location to put the result. | 
|---|
 | 661 |         */ | 
|---|
 | 662 |         void convertColourValue(const ColourValue& colour, uint32* pDest); | 
|---|
 | 663 |  | 
|---|
 | 664 |         /** Retrieves a pointer to the window that was created automatically | 
|---|
 | 665 |             @remarks | 
|---|
 | 666 |                 When Root is initialised an optional window is created. This | 
|---|
 | 667 |                 method retrieves a pointer to that window. | 
|---|
 | 668 |             @note | 
|---|
 | 669 |                 returns a null pointer when Root has not been initialised with | 
|---|
 | 670 |                 the option of creating a window. | 
|---|
 | 671 |         */ | 
|---|
 | 672 |         RenderWindow* getAutoCreatedWindow(void); | 
|---|
 | 673 |  | 
|---|
 | 674 |         /** @copydoc RenderSystem::_createRenderWindow | 
|---|
 | 675 |         */ | 
|---|
 | 676 |                 RenderWindow* createRenderWindow(const String &name, unsigned int width, unsigned int height,  | 
|---|
 | 677 |                         bool fullScreen, const NameValuePairList *miscParams = 0) ; | 
|---|
 | 678 |  | 
|---|
 | 679 |                 /** @copydoc RenderSystem::_createRenderWindows | 
|---|
 | 680 |                 */ | 
|---|
 | 681 |                 bool createRenderWindows(const RenderWindowDescriptionList& renderWindowDescriptions, | 
|---|
 | 682 |                         RenderWindowList& createdWindows); | 
|---|
 | 683 |          | 
|---|
 | 684 |         /** Detaches a RenderTarget from the active render system | 
|---|
 | 685 |         and returns a pointer to it. | 
|---|
 | 686 |         @note | 
|---|
 | 687 |         If the render target cannot be found, NULL is returned. | 
|---|
 | 688 |         */ | 
|---|
 | 689 |         RenderTarget* detachRenderTarget( RenderTarget* pWin ); | 
|---|
 | 690 |  | 
|---|
 | 691 |         /** Detaches a named RenderTarget from the active render system | 
|---|
 | 692 |         and returns a pointer to it. | 
|---|
 | 693 |         @note | 
|---|
 | 694 |         If the render target cannot be found, NULL is returned. | 
|---|
 | 695 |         */ | 
|---|
 | 696 |         RenderTarget* detachRenderTarget( const String & name ); | 
|---|
 | 697 |  | 
|---|
 | 698 |         /** Destroys the given RenderTarget. | 
|---|
 | 699 |         */ | 
|---|
 | 700 |         void destroyRenderTarget(RenderTarget* target); | 
|---|
 | 701 |  | 
|---|
 | 702 |         /** Destroys the given named RenderTarget. | 
|---|
 | 703 |         */ | 
|---|
 | 704 |         void destroyRenderTarget(const String &name); | 
|---|
 | 705 |  | 
|---|
 | 706 |         /** Retrieves a pointer to a named render target. | 
|---|
 | 707 |         */ | 
|---|
 | 708 |         RenderTarget * getRenderTarget(const String &name); | 
|---|
 | 709 |  | 
|---|
 | 710 |                 /** Manually load a Plugin contained in a DLL / DSO. | 
|---|
 | 711 |                  @remarks | 
|---|
 | 712 |                         Plugins embedded in DLLs can be loaded at startup using the plugin  | 
|---|
 | 713 |                         configuration file specified when you create Root. | 
|---|
 | 714 |                         This method allows you to load plugin DLLs directly in code. | 
|---|
 | 715 |                         The DLL in question is expected to implement a dllStartPlugin  | 
|---|
 | 716 |                         method which instantiates a Plugin subclass and calls Root::installPlugin. | 
|---|
 | 717 |                         It should also implement dllStopPlugin (see Root::unloadPlugin) | 
|---|
 | 718 |                 @param pluginName Name of the plugin library to load | 
|---|
 | 719 |                 */ | 
|---|
 | 720 |                 void loadPlugin(const String& pluginName); | 
|---|
 | 721 |  | 
|---|
 | 722 |                 /** Manually unloads a Plugin contained in a DLL / DSO. | 
|---|
 | 723 |                  @remarks | 
|---|
 | 724 |                         Plugin DLLs are unloaded at shutdown automatically. This method  | 
|---|
 | 725 |                         allows you to unload plugins in code, but make sure their  | 
|---|
 | 726 |                         dependencies are decoupled first. This method will call the  | 
|---|
 | 727 |                         dllStopPlugin method defined in the DLL, which in turn should call | 
|---|
 | 728 |                         Root::uninstallPlugin. | 
|---|
 | 729 |                 @param pluginName Name of the plugin library to unload | 
|---|
 | 730 |                 */ | 
|---|
 | 731 |                 void unloadPlugin(const String& pluginName); | 
|---|
 | 732 |  | 
|---|
 | 733 |                 /** Install a new plugin. | 
|---|
 | 734 |                 @remarks | 
|---|
 | 735 |                         This installs a new extension to OGRE. The plugin itself may be loaded | 
|---|
 | 736 |                         from a DLL / DSO, or it might be statically linked into your own  | 
|---|
 | 737 |                         application. Either way, something has to call this method to get | 
|---|
 | 738 |                         it registered and functioning. You should only call this method directly | 
|---|
 | 739 |                         if your plugin is not in a DLL that could otherwise be loaded with  | 
|---|
 | 740 |                         loadPlugin, since the DLL function dllStartPlugin should call this | 
|---|
 | 741 |                         method when the DLL is loaded.  | 
|---|
 | 742 |                 */ | 
|---|
 | 743 |                 void installPlugin(Plugin* plugin); | 
|---|
 | 744 |  | 
|---|
 | 745 |                 /** Uninstall an existing plugin. | 
|---|
 | 746 |                 @remarks | 
|---|
 | 747 |                         This uninstalls an extension to OGRE. Plugins are automatically  | 
|---|
 | 748 |                         uninstalled at shutdown but this lets you remove them early.  | 
|---|
 | 749 |                         If the plugin was loaded from a DLL / DSO you should call unloadPlugin | 
|---|
 | 750 |                         which should result in this method getting called anyway (if the DLL | 
|---|
 | 751 |                         is well behaved). | 
|---|
 | 752 |                 */ | 
|---|
 | 753 |                 void uninstallPlugin(Plugin* plugin); | 
|---|
 | 754 |  | 
|---|
 | 755 |                 /** Gets a read-only list of the currently installed plugins. */ | 
|---|
 | 756 |                 const PluginInstanceList& getInstalledPlugins() const { return mPlugins; } | 
|---|
 | 757 |  | 
|---|
 | 758 |         /** Gets a pointer to the central timer used for all OGRE timings */ | 
|---|
 | 759 |         Timer* getTimer(void); | 
|---|
 | 760 |  | 
|---|
 | 761 |         /** Method for raising frame started events.  | 
|---|
 | 762 |         @remarks | 
|---|
 | 763 |             This method is only for internal use when you use OGRE's inbuilt rendering | 
|---|
 | 764 |             loop (Root::startRendering). However, if you run your own rendering loop then | 
|---|
 | 765 |             you should call this method to ensure that FrameListener objects are notified | 
|---|
 | 766 |             of frame events; processes like texture animation and particle systems rely on  | 
|---|
 | 767 |             this. | 
|---|
 | 768 |         @par | 
|---|
 | 769 |             Calling this method also increments the frame number, which is | 
|---|
 | 770 |             important for keeping some elements of the engine up to date. | 
|---|
 | 771 |         @note | 
|---|
 | 772 |             This method takes an event object as a parameter, so you can specify the times | 
|---|
 | 773 |             yourself. If you are happy for OGRE to automatically calculate the frame time | 
|---|
 | 774 |             for you, then call the other version of this method with no parameters. | 
|---|
 | 775 |         @param evt Event object which includes all the timing information which you have  | 
|---|
 | 776 |             calculated for yourself | 
|---|
 | 777 |         @return False if one or more frame listeners elected that the rendering loop should | 
|---|
 | 778 |             be terminated, true otherwise. | 
|---|
 | 779 |         */ | 
|---|
 | 780 |         bool _fireFrameStarted(FrameEvent& evt); | 
|---|
 | 781 |         /** Method for raising frame rendering queued events.  | 
|---|
 | 782 |         @remarks | 
|---|
 | 783 |             This method is only for internal use when you use OGRE's inbuilt rendering | 
|---|
 | 784 |             loop (Root::startRendering). However, if you run your own rendering loop then | 
|---|
 | 785 |             you should call this method too, to ensure that all state is updated | 
|---|
 | 786 |                         correctly. You should call it after the windows have been updated | 
|---|
 | 787 |                         but before the buffers are swapped, or if you are not separating the | 
|---|
 | 788 |                         update and buffer swap, then after the update just before _fireFrameEnded. | 
|---|
 | 789 |         */ | 
|---|
 | 790 |         bool _fireFrameRenderingQueued(FrameEvent& evt); | 
|---|
 | 791 |  | 
|---|
 | 792 |         /** Method for raising frame ended events.  | 
|---|
 | 793 |         @remarks | 
|---|
 | 794 |             This method is only for internal use when you use OGRE's inbuilt rendering | 
|---|
 | 795 |             loop (Root::startRendering). However, if you run your own rendering loop then | 
|---|
 | 796 |             you should call this method to ensure that FrameListener objects are notified | 
|---|
 | 797 |             of frame events; processes like texture animation and particle systems rely on  | 
|---|
 | 798 |             this. | 
|---|
 | 799 |         @note | 
|---|
 | 800 |             This method takes an event object as a parameter, so you can specify the times | 
|---|
 | 801 |             yourself. If you are happy for OGRE to automatically calculate the frame time | 
|---|
 | 802 |             for you, then call the other version of this method with no parameters. | 
|---|
 | 803 |         @param evt Event object which includes all the timing information which you have  | 
|---|
 | 804 |             calculated for yourself | 
|---|
 | 805 |         @return False if one or more frame listeners elected that the rendering loop should | 
|---|
 | 806 |             be terminated, true otherwise. | 
|---|
 | 807 |         */ | 
|---|
 | 808 |         bool _fireFrameEnded(FrameEvent& evt); | 
|---|
 | 809 |         /** Method for raising frame started events.  | 
|---|
 | 810 |         @remarks | 
|---|
 | 811 |             This method is only for internal use when you use OGRE's inbuilt rendering | 
|---|
 | 812 |             loop (Root::startRendering). However, if you run your own rendering loop then | 
|---|
 | 813 |             you should call this method to ensure that FrameListener objects are notified | 
|---|
 | 814 |             of frame events; processes like texture animation and particle systems rely on  | 
|---|
 | 815 |             this. | 
|---|
 | 816 |         @par | 
|---|
 | 817 |             Calling this method also increments the frame number, which is | 
|---|
 | 818 |             important for keeping some elements of the engine up to date. | 
|---|
 | 819 |         @note | 
|---|
 | 820 |             This method calculates the frame timing information for you based on the elapsed | 
|---|
 | 821 |             time. If you want to specify elapsed times yourself you should call the other  | 
|---|
 | 822 |             version of this method which takes event details as a parameter. | 
|---|
 | 823 |         @return False if one or more frame listeners elected that the rendering loop should | 
|---|
 | 824 |             be terminated, true otherwise. | 
|---|
 | 825 |         */ | 
|---|
 | 826 |         bool _fireFrameStarted(); | 
|---|
 | 827 |         /** Method for raising frame rendering queued events.  | 
|---|
 | 828 |         @remarks | 
|---|
 | 829 |             This method is only for internal use when you use OGRE's inbuilt rendering | 
|---|
 | 830 |             loop (Root::startRendering). However, if you run your own rendering loop then | 
|---|
 | 831 |             you you may want to call this method too, although nothing in OGRE relies on this | 
|---|
 | 832 |                         particular event. Really if you're running your own rendering loop at | 
|---|
 | 833 |                         this level of detail then you can get the same effect as doing your | 
|---|
 | 834 |                         updates in a frameRenderingQueued callback by just calling  | 
|---|
 | 835 |                         RenderWindow::update with the 'swapBuffers' option set to false.  | 
|---|
 | 836 |         */ | 
|---|
 | 837 |         bool _fireFrameRenderingQueued(); | 
|---|
 | 838 |         /** Method for raising frame ended events.  | 
|---|
 | 839 |         @remarks | 
|---|
 | 840 |             This method is only for internal use when you use OGRE's inbuilt rendering | 
|---|
 | 841 |             loop (Root::startRendering). However, if you run your own rendering loop then | 
|---|
 | 842 |             you should call this method to ensure that FrameListener objects are notified | 
|---|
 | 843 |             of frame events; processes like texture animation and particle systems rely on  | 
|---|
 | 844 |             this. | 
|---|
 | 845 |         @note | 
|---|
 | 846 |             This method calculates the frame timing information for you based on the elapsed | 
|---|
 | 847 |             time. If you want to specify elapsed times yourself you should call the other  | 
|---|
 | 848 |             version of this method which takes event details as a parameter. | 
|---|
 | 849 |         @return False if one or more frame listeners elected that the rendering loop should | 
|---|
 | 850 |             be terminated, true otherwise. | 
|---|
 | 851 |         */ | 
|---|
 | 852 |         bool _fireFrameEnded(); | 
|---|
 | 853 |  | 
|---|
 | 854 |         /** Gets the number of the next frame to be rendered.  | 
|---|
 | 855 |                 @remarks | 
|---|
 | 856 |                         Note that this is 'next frame' rather than 'current frame' because | 
|---|
 | 857 |                         it indicates the frame number that current changes made to the scene | 
|---|
 | 858 |                         will take effect. It is incremented after all rendering commands for | 
|---|
 | 859 |                         the current frame have been queued, thus reflecting that if you  | 
|---|
 | 860 |                         start performing changes then, you will actually see them in the  | 
|---|
 | 861 |                         next frame. */ | 
|---|
 | 862 |         unsigned long getNextFrameNumber(void) const { return mNextFrame; } | 
|---|
 | 863 |  | 
|---|
 | 864 |         /** Returns the scene manager currently being used to render a frame. | 
|---|
 | 865 |         @remarks | 
|---|
 | 866 |             This is only intended for internal use; it is only valid during the | 
|---|
 | 867 |             rendering of a frame. | 
|---|
 | 868 |         */ | 
|---|
 | 869 |         SceneManager* _getCurrentSceneManager(void) const; | 
|---|
 | 870 |         /** Pushes the scene manager currently being used to render. | 
|---|
 | 871 |         @remarks | 
|---|
 | 872 |             This is only intended for internal use. | 
|---|
 | 873 |         */ | 
|---|
 | 874 |         void _pushCurrentSceneManager(SceneManager* sm); | 
|---|
 | 875 |                 /** Pops the scene manager currently being used to render. | 
|---|
 | 876 |                 @remarks | 
|---|
 | 877 |                 This is only intended for internal use. | 
|---|
 | 878 |                 */ | 
|---|
 | 879 |                 void _popCurrentSceneManager(SceneManager* sm); | 
|---|
 | 880 |  | 
|---|
 | 881 |         /** Internal method used for updating all RenderTarget objects (windows,  | 
|---|
 | 882 |             renderable textures etc) which are set to auto-update. | 
|---|
 | 883 |         @remarks | 
|---|
 | 884 |             You don't need to use this method if you're using Ogre's own internal | 
|---|
 | 885 |             rendering loop (Root::startRendering). If you're running your own loop | 
|---|
 | 886 |             you may wish to call it to update all the render targets which are | 
|---|
 | 887 |             set to auto update (RenderTarget::setAutoUpdated). You can also update | 
|---|
 | 888 |             individual RenderTarget instances using their own update() method. | 
|---|
 | 889 |                 @return false if a FrameListener indicated it wishes to exit the render loop | 
|---|
 | 890 |         */ | 
|---|
 | 891 |         bool _updateAllRenderTargets(void); | 
|---|
 | 892 |  | 
|---|
 | 893 |         /** Internal method used for updating all RenderTarget objects (windows,  | 
|---|
 | 894 |             renderable textures etc) which are set to auto-update, with a custom time | 
|---|
 | 895 |                         passed to the frameRenderingQueued events. | 
|---|
 | 896 |         @remarks | 
|---|
 | 897 |             You don't need to use this method if you're using Ogre's own internal | 
|---|
 | 898 |             rendering loop (Root::startRendering). If you're running your own loop | 
|---|
 | 899 |             you may wish to call it to update all the render targets which are | 
|---|
 | 900 |             set to auto update (RenderTarget::setAutoUpdated). You can also update | 
|---|
 | 901 |             individual RenderTarget instances using their own update() method. | 
|---|
 | 902 |                 @return false if a FrameListener indicated it wishes to exit the render loop | 
|---|
 | 903 |         */ | 
|---|
 | 904 |         bool _updateAllRenderTargets(FrameEvent& evt); | 
|---|
 | 905 |  | 
|---|
 | 906 |                 /** Create a new RenderQueueInvocationSequence, useful for linking to | 
|---|
 | 907 |                         Viewport instances to perform custom rendering. | 
|---|
 | 908 |                 @param name The name to give the new sequence | 
|---|
 | 909 |                 */ | 
|---|
 | 910 |                 RenderQueueInvocationSequence* createRenderQueueInvocationSequence( | 
|---|
 | 911 |                         const String& name); | 
|---|
 | 912 |  | 
|---|
 | 913 |                 /** Get a RenderQueueInvocationSequence.  | 
|---|
 | 914 |                 @param name The name to identify the sequence | 
|---|
 | 915 |                 */ | 
|---|
 | 916 |                 RenderQueueInvocationSequence* getRenderQueueInvocationSequence( | 
|---|
 | 917 |                         const String& name); | 
|---|
 | 918 |  | 
|---|
 | 919 |                 /** Destroy a RenderQueueInvocationSequence.  | 
|---|
 | 920 |                 @remarks | 
|---|
 | 921 |                         You must ensure that no Viewports are using this sequence. | 
|---|
 | 922 |                 @param name The name to identify the sequence | 
|---|
 | 923 |                 */ | 
|---|
 | 924 |                 void destroyRenderQueueInvocationSequence( | 
|---|
 | 925 |                         const String& name); | 
|---|
 | 926 |  | 
|---|
 | 927 |                 /** Destroy all RenderQueueInvocationSequences.  | 
|---|
 | 928 |                 @remarks | 
|---|
 | 929 |                         You must ensure that no Viewports are using custom sequences. | 
|---|
 | 930 |                 */ | 
|---|
 | 931 |                 void destroyAllRenderQueueInvocationSequences(void); | 
|---|
 | 932 |  | 
|---|
 | 933 |         /** Override standard Singleton retrieval. | 
|---|
 | 934 |             @remarks | 
|---|
 | 935 |                 Why do we do this? Well, it's because the Singleton | 
|---|
 | 936 |                 implementation is in a .h file, which means it gets compiled | 
|---|
 | 937 |                 into anybody who includes it. This is needed for the | 
|---|
 | 938 |                 Singleton template to work, but we actually only want it | 
|---|
 | 939 |                 compiled into the implementation of the class based on the | 
|---|
 | 940 |                 Singleton, not all of them. If we don't change this, we get | 
|---|
 | 941 |                 link errors when trying to use the Singleton-based class from | 
|---|
 | 942 |                 an outside dll. | 
|---|
 | 943 |             @par | 
|---|
 | 944 |                 This method just delegates to the template version anyway, | 
|---|
 | 945 |                 but the implementation stays in this single compilation unit, | 
|---|
 | 946 |                 preventing link errors. | 
|---|
 | 947 |         */ | 
|---|
 | 948 |         static Root& getSingleton(void); | 
|---|
 | 949 |         /** Override standard Singleton retrieval. | 
|---|
 | 950 |             @remarks | 
|---|
 | 951 |                 Why do we do this? Well, it's because the Singleton | 
|---|
 | 952 |                 implementation is in a .h file, which means it gets compiled | 
|---|
 | 953 |                 into anybody who includes it. This is needed for the | 
|---|
 | 954 |                 Singleton template to work, but we actually only want it | 
|---|
 | 955 |                 compiled into the implementation of the class based on the | 
|---|
 | 956 |                 Singleton, not all of them. If we don't change this, we get | 
|---|
 | 957 |                 link errors when trying to use the Singleton-based class from | 
|---|
 | 958 |                 an outside dll. | 
|---|
 | 959 |             @par | 
|---|
 | 960 |                 This method just delegates to the template version anyway, | 
|---|
 | 961 |                 but the implementation stays in this single compilation unit, | 
|---|
 | 962 |                 preventing link errors. | 
|---|
 | 963 |         */ | 
|---|
 | 964 |         static Root* getSingletonPtr(void); | 
|---|
 | 965 |  | 
|---|
 | 966 |                 /** Clears the history of all event times.  | 
|---|
 | 967 |                 @remarks | 
|---|
 | 968 |                         OGRE stores a history of the last few event times in order to smooth | 
|---|
 | 969 |                         out any inaccuracies and temporary fluctuations. However, if you  | 
|---|
 | 970 |                         pause or don't render for a little while this can cause a lurch, so | 
|---|
 | 971 |                         if you're resuming rendering after a break, call this method to reset | 
|---|
 | 972 |                         the stored times | 
|---|
 | 973 |                 */ | 
|---|
 | 974 |                 void clearEventTimes(void); | 
|---|
 | 975 |  | 
|---|
 | 976 |                 /** Sets the period over which OGRE smooths out fluctuations in frame times. | 
|---|
 | 977 |                 @remarks | 
|---|
 | 978 |                         OGRE by default gives you the raw frame time, but can optionally | 
|---|
 | 979 |                         smooths it out over several frames, in order to reduce the  | 
|---|
 | 980 |                         noticeable effect of occasional hiccups in framerate. | 
|---|
 | 981 |                         These smoothed values are passed back as parameters to FrameListener | 
|---|
 | 982 |                         calls. | 
|---|
 | 983 |                 @par | 
|---|
 | 984 |                         This method allow you to tweak the smoothing period, and is expressed | 
|---|
 | 985 |                         in seconds. Setting it to 0 will result in completely unsmoothed | 
|---|
 | 986 |                         frame times (the default). | 
|---|
 | 987 |                 */ | 
|---|
 | 988 |                 void setFrameSmoothingPeriod(Real period) { mFrameSmoothingTime = period; } | 
|---|
 | 989 |                 /** Gets the period over which OGRE smooths out fluctuations in frame times. */ | 
|---|
 | 990 |                 Real getFrameSmoothingPeriod(void) const { return mFrameSmoothingTime; } | 
|---|
 | 991 |  | 
|---|
 | 992 |                 /** Register a new MovableObjectFactory which will create new MovableObject | 
|---|
 | 993 |                         instances of a particular type, as identified by the getType() method. | 
|---|
 | 994 |                 @remarks | 
|---|
 | 995 |                         Plugin creators can create subclasses of MovableObjectFactory which  | 
|---|
 | 996 |                         construct custom subclasses of MovableObject for insertion in the  | 
|---|
 | 997 |                         scene. This is the primary way that plugins can make custom objects | 
|---|
 | 998 |                         available. | 
|---|
 | 999 |                 @param fact Pointer to the factory instance | 
|---|
 | 1000 |                 @param overrideExisting Set this to true to override any existing  | 
|---|
 | 1001 |                         factories which are registered for the same type. You should only | 
|---|
 | 1002 |                         change this if you are very sure you know what you're doing.  | 
|---|
 | 1003 |                 */ | 
|---|
 | 1004 |                 void addMovableObjectFactory(MovableObjectFactory* fact,  | 
|---|
 | 1005 |                         bool overrideExisting = false); | 
|---|
 | 1006 |                 /** Removes a previously registered MovableObjectFactory. | 
|---|
 | 1007 |                 @remarks | 
|---|
 | 1008 |                         All instances of objects created by this factory will be destroyed | 
|---|
 | 1009 |                         before removing the factory (by calling back the factories  | 
|---|
 | 1010 |                         'destroyInstance' method). The plugin writer is responsible for actually | 
|---|
 | 1011 |                         destroying the factory. | 
|---|
 | 1012 |                 */ | 
|---|
 | 1013 |                 void removeMovableObjectFactory(MovableObjectFactory* fact); | 
|---|
 | 1014 |                 /// Checks whether a factory is registered for a given MovableObject type | 
|---|
 | 1015 |                 bool hasMovableObjectFactory(const String& typeName) const; | 
|---|
 | 1016 |                 /// Get a MovableObjectFactory for the given type | 
|---|
 | 1017 |                 MovableObjectFactory* getMovableObjectFactory(const String& typeName); | 
|---|
 | 1018 |                 /** Allocate the next MovableObject type flag. | 
|---|
 | 1019 |                 @remarks | 
|---|
 | 1020 |                         This is done automatically if MovableObjectFactory::requestTypeFlags | 
|---|
 | 1021 |                         returns true; don't call this manually unless you're sure you need to. | 
|---|
 | 1022 |                 */ | 
|---|
 | 1023 |                 uint32 _allocateNextMovableObjectTypeFlag(void); | 
|---|
 | 1024 |  | 
|---|
 | 1025 |                 typedef ConstMapIterator<MovableObjectFactoryMap> MovableObjectFactoryIterator; | 
|---|
 | 1026 |                 /** Return an iterator over all the MovableObjectFactory instances currently | 
|---|
 | 1027 |                         registered. | 
|---|
 | 1028 |                 */ | 
|---|
 | 1029 |                 MovableObjectFactoryIterator getMovableObjectFactoryIterator(void) const; | 
|---|
 | 1030 |  | 
|---|
 | 1031 |                 /** | 
|---|
 | 1032 |                 * Gets the number of display monitors. | 
|---|
 | 1033 |                 */ | 
|---|
 | 1034 |                 unsigned int getDisplayMonitorCount() const; | 
|---|
 | 1035 |  | 
|---|
 | 1036 |                 /** Get the WorkQueue for processing background tasks. | 
|---|
 | 1037 |                         You are free to add new requests and handlers to this queue to | 
|---|
 | 1038 |                         process your custom background tasks using the shared thread pool.  | 
|---|
 | 1039 |                         However, you must remember to assign yourself a new channel through  | 
|---|
 | 1040 |                         which to process your tasks. | 
|---|
 | 1041 |                 */ | 
|---|
 | 1042 |                 WorkQueue* getWorkQueue() const { return mWorkQueue; } | 
|---|
 | 1043 |  | 
|---|
 | 1044 |                 /** Replace the current work queue with an alternative.  | 
|---|
 | 1045 |                         You can use this method to replace the internal implementation of | 
|---|
 | 1046 |                         WorkQueue with  your own, e.g. to externalise the processing of  | 
|---|
 | 1047 |                         background events. Doing so will delete the existing queue and | 
|---|
 | 1048 |                         replace it with this one.  | 
|---|
 | 1049 |                 @param queue The new WorkQueue instance. Root will delete this work queue | 
|---|
 | 1050 |                         at shutdown, so do not destroy it yourself. | 
|---|
 | 1051 |                 */ | 
|---|
 | 1052 |                 void setWorkQueue(WorkQueue* queue); | 
|---|
 | 1053 |                          | 
|---|
 | 1054 |                 /** Sets whether blend indices information needs to be passed to the GPU. | 
|---|
 | 1055 |                         When entities use software animation they remove blend information such as | 
|---|
 | 1056 |                         indices and weights from the vertex buffers sent to the graphic card. This function | 
|---|
 | 1057 |                         can be used to limit which information is removed. | 
|---|
 | 1058 |                 @param redundant Set to true to remove blend indices information. | 
|---|
 | 1059 |                 */ | 
|---|
 | 1060 |                 void setBlendIndicesGpuRedundant(bool redundant) {      mIsBlendIndicesGpuRedundant = redundant; } | 
|---|
 | 1061 |                 /** Returns whether blend indices information needs to be passed to the GPU | 
|---|
 | 1062 |                 see setBlendIndicesGpuRedundant() for more information | 
|---|
 | 1063 |                 */ | 
|---|
 | 1064 |                 bool isBlendIndicesGpuRedundant() const { return mIsBlendIndicesGpuRedundant; } | 
|---|
 | 1065 |  | 
|---|
 | 1066 |                 /** Sets whether blend weights information needs to be passed to the GPU. | 
|---|
 | 1067 |                 When entities use software animation they remove blend information such as | 
|---|
 | 1068 |                 indices and weights from the vertex buffers sent to the graphic card. This function | 
|---|
 | 1069 |                 can be used to limit which information is removed. | 
|---|
 | 1070 |                 @param redundant Set to true to remove blend weights information. | 
|---|
 | 1071 |                 */ | 
|---|
 | 1072 |                 void setBlendWeightsGpuRedundant(bool redundant) {      mIsBlendWeightsGpuRedundant = redundant; } | 
|---|
 | 1073 |                 /** Returns whether blend weights information needs to be passed to the GPU | 
|---|
 | 1074 |                 see setBlendWeightsGpuRedundant() for more information | 
|---|
 | 1075 |                 */ | 
|---|
 | 1076 |                 bool isBlendWeightsGpuRedundant() const { return mIsBlendWeightsGpuRedundant; } | 
|---|
 | 1077 |          | 
|---|
 | 1078 |                 /** Set the default minimum pixel size for object to be rendered by | 
|---|
 | 1079 |                 @note | 
|---|
 | 1080 |                         To use this feature see Camera::setUseMinPixelSize() | 
|---|
 | 1081 |                 */ | 
|---|
 | 1082 |                 void setDefaultMinPixelSize(Real pixelSize) { mDefaultMinPixelSize = pixelSize; } | 
|---|
 | 1083 |  | 
|---|
 | 1084 |                 /** Get the default minimum pixel size for object to be rendered by | 
|---|
 | 1085 |                 */ | 
|---|
 | 1086 |                 Real getDefaultMinPixelSize() { return mDefaultMinPixelSize; } | 
|---|
 | 1087 |          | 
|---|
 | 1088 |  | 
|---|
 | 1089 |     }; | 
|---|
 | 1090 |         /** @} */ | 
|---|
 | 1091 |         /** @} */ | 
|---|
 | 1092 | } // Namespace Ogre | 
|---|
 | 1093 | #endif | 
|---|