00001 /* 00002 ----------------------------------------------------------------------------- 00003 This source file is part of OGRE 00004 (Object-oriented Graphics Rendering Engine) 00005 For the latest info, see http://www.ogre3d.org/ 00006 00007 Copyright (c) 2000-2006 Torus Knot Software Ltd 00008 Also see acknowledgements in Readme.html 00009 00010 This program is free software; you can redistribute it and/or modify it under 00011 the terms of the GNU Lesser General Public License as published by the Free Software 00012 Foundation; either version 2 of the License, or (at your option) any later 00013 version. 00014 00015 This program is distributed in the hope that it will be useful, but WITHOUT 00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 00018 00019 You should have received a copy of the GNU Lesser General Public License along with 00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple 00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to 00022 http://www.gnu.org/copyleft/lesser.txt. 00023 00024 You may alternatively use this source under the terms of a specific version of 00025 the OGRE Unrestricted License provided you have obtained such a license from 00026 Torus Knot Software Ltd. 00027 ----------------------------------------------------------------------------- 00028 */ 00029 #ifndef __SceneManagerEnumerator_H__ 00030 #define __SceneManagerEnumerator_H__ 00031 00032 #include "OgrePrerequisites.h" 00033 00034 #include "OgreSceneManager.h" 00035 #include "OgreSingleton.h" 00036 #include "OgreIteratorWrappers.h" 00037 00038 namespace Ogre { 00039 00041 class _OgreExport DefaultSceneManagerFactory : public SceneManagerFactory 00042 { 00043 protected: 00044 void initMetaData(void) const; 00045 public: 00046 DefaultSceneManagerFactory() {} 00047 ~DefaultSceneManagerFactory() {} 00049 static const String FACTORY_TYPE_NAME; 00050 SceneManager* createInstance(const String& instanceName); 00051 void destroyInstance(SceneManager* instance); 00052 }; 00054 class _OgreExport DefaultSceneManager : public SceneManager 00055 { 00056 public: 00057 DefaultSceneManager(const String& name); 00058 ~DefaultSceneManager(); 00059 const String& getTypeName(void) const; 00060 }; 00061 00082 class _OgreExport SceneManagerEnumerator : public Singleton<SceneManagerEnumerator>, public SceneMgtAlloc 00083 { 00084 public: 00086 typedef std::map<String, SceneManager*> Instances; 00088 typedef std::vector<const SceneManagerMetaData*> MetaDataList; 00089 private: 00091 typedef std::list<SceneManagerFactory*> Factories; 00092 Factories mFactories; 00093 Instances mInstances; 00095 MetaDataList mMetaDataList; 00097 DefaultSceneManagerFactory mDefaultFactory; 00099 unsigned long mInstanceCreateCount; 00101 RenderSystem* mCurrentRenderSystem; 00102 00103 00104 public: 00105 SceneManagerEnumerator(); 00106 ~SceneManagerEnumerator(); 00107 00112 void addFactory(SceneManagerFactory* fact); 00113 00116 void removeFactory(SceneManagerFactory* fact); 00117 00127 const SceneManagerMetaData* getMetaData(const String& typeName) const; 00128 00129 typedef ConstVectorIterator<MetaDataList> MetaDataIterator; 00133 MetaDataIterator getMetaDataIterator(void) const; 00134 00146 SceneManager* createSceneManager(const String& typeName, 00147 const String& instanceName = StringUtil::BLANK); 00148 00161 SceneManager* createSceneManager(SceneTypeMask typeMask, 00162 const String& instanceName = StringUtil::BLANK); 00163 00165 void destroySceneManager(SceneManager* sm); 00166 00171 SceneManager* getSceneManager(const String& instanceName) const; 00172 00173 typedef MapIterator<Instances> SceneManagerIterator; 00175 SceneManagerIterator getSceneManagerIterator(void); 00176 00179 void setRenderSystem(RenderSystem* rs); 00180 00182 void shutdownAll(void); 00198 static SceneManagerEnumerator& getSingleton(void); 00214 static SceneManagerEnumerator* getSingletonPtr(void); 00215 00216 }; 00217 00218 00219 } 00220 00221 #endif
Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Sep 27 22:02:25 2009