OgreResourceManager.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 _ResourceManager_H__
00029 #define _ResourceManager_H__
00030 
00031 #include "OgrePrerequisites.h"
00032 
00033 #include "OgreResource.h"
00034 #include "OgreResourceGroupManager.h"
00035 #include "OgreIteratorWrappers.h"
00036 #include "OgreCommon.h"
00037 #include "OgreDataStream.h"
00038 #include "OgreStringVector.h"
00039 #include "OgreScriptLoader.h"
00040 
00041 namespace Ogre {
00042 
00073     class _OgreExport ResourceManager : public ScriptLoader, public ResourceAlloc
00074     {
00075     public:
00076         OGRE_AUTO_MUTEX // public to allow external locking
00077         ResourceManager();
00078         virtual ~ResourceManager();
00079 
00099         virtual ResourcePtr create(const String& name, const String& group, 
00100             bool isManual = false, ManualResourceLoader* loader = 0, 
00101             const NameValuePairList* createParams = 0);
00102 
00103         typedef std::pair<ResourcePtr, bool> ResourceCreateOrRetrieveResult;
00117         virtual ResourceCreateOrRetrieveResult createOrRetrieve(const String& name, 
00118             const String& group, bool isManual = false, 
00119             ManualResourceLoader* loader = 0, 
00120             const NameValuePairList* createParams = 0);
00121         
00129         virtual void setMemoryBudget( size_t bytes);
00130 
00133         virtual size_t getMemoryBudget(void) const;
00134 
00136         virtual size_t getMemoryUsage(void) const { return mMemoryUsage.get(); }
00137 
00144         virtual void unload(const String& name);
00145         
00152         virtual void unload(ResourceHandle handle);
00153 
00166         virtual void unloadAll(bool reloadableOnly = true);
00167 
00179         virtual void reloadAll(bool reloadableOnly = true);
00180 
00195         virtual void unloadUnreferencedResources(bool reloadableOnly = true);
00196 
00210         virtual void reloadUnreferencedResources(bool reloadableOnly = true);
00211 
00229         virtual void remove(ResourcePtr& r);
00230 
00248         virtual void remove(const String& name);
00249         
00267         virtual void remove(ResourceHandle handle);
00282         virtual void removeAll(void);
00283 
00298         virtual void removeUnreferencedResources(bool reloadableOnly = true);
00299 
00302         virtual ResourcePtr getByName(const String& name, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
00305         virtual ResourcePtr getByHandle(ResourceHandle handle);
00306         
00308         virtual bool resourceExists(const String& name)
00309         {
00310             return !getByName(name).isNull();
00311         }
00313         virtual bool resourceExists(ResourceHandle handle)
00314         {
00315             return !getByHandle(handle).isNull();
00316         }
00317 
00321         virtual void _notifyResourceTouched(Resource* res);
00322 
00326         virtual void _notifyResourceLoaded(Resource* res);
00327 
00331         virtual void _notifyResourceUnloaded(Resource* res);
00332 
00348         virtual ResourcePtr prepare(const String& name, 
00349             const String& group, bool isManual = false, 
00350             ManualResourceLoader* loader = 0, const NameValuePairList* loadParams = 0,
00351             bool backgroundThread = false);
00352 
00368         virtual ResourcePtr load(const String& name, 
00369             const String& group, bool isManual = false, 
00370             ManualResourceLoader* loader = 0, const NameValuePairList* loadParams = 0,
00371             bool backgroundThread = false);
00372 
00388         virtual const StringVector& getScriptPatterns(void) const { return mScriptPatterns; }
00389 
00403         virtual void parseScript(DataStreamPtr& stream, const String& groupName)
00404                 { (void)stream; (void)groupName; }
00405 
00412         virtual Real getLoadingOrder(void) const { return mLoadOrder; }
00413 
00415         const String& getResourceType(void) const { return mResourceType; }
00416 
00418         virtual void setVerbose(bool v) { mVerbose = v; }
00419 
00421         virtual bool getVerbose(void) { return mVerbose; }
00422 
00429         class _OgreExport ResourcePool : public Pool<ResourcePtr>, public ResourceAlloc
00430         {
00431         protected:
00432             String mName;
00433         public:
00434             ResourcePool(const String& name);
00435             ~ResourcePool();
00437             const String& getName() const;
00438             void clear();
00439         };
00440         
00442         ResourcePool* getResourcePool(const String& name);
00444         void destroyResourcePool(ResourcePool* pool);
00446         void destroyResourcePool(const String& name);
00448         void destroyAllResourcePools();
00449 
00450 
00451 
00452 
00453     protected:
00454 
00456         ResourceHandle getNextHandle(void);
00457 
00479         virtual Resource* createImpl(const String& name, ResourceHandle handle, 
00480             const String& group, bool isManual, ManualResourceLoader* loader, 
00481             const NameValuePairList* createParams) = 0;
00483         virtual void addImpl( ResourcePtr& res );
00485         virtual void removeImpl( ResourcePtr& res );
00488         virtual void checkUsage(void);
00489 
00490 
00491     public:
00492         typedef HashMap< String, ResourcePtr > ResourceMap;
00493         typedef HashMap< String, ResourceMap > ResourceWithGroupMap;
00494         typedef map<ResourceHandle, ResourcePtr>::type ResourceHandleMap;
00495     protected:
00496         ResourceHandleMap mResourcesByHandle;
00497         ResourceMap mResources;
00498         ResourceWithGroupMap mResourcesWithGroup;
00499         ResourceHandle mNextHandle;
00500         size_t mMemoryBudget; // In bytes
00501         AtomicScalar<size_t> mMemoryUsage; // In bytes
00502 
00503         bool mVerbose;
00504 
00505         // IMPORTANT - all subclasses must populate the fields below
00506 
00508         StringVector mScriptPatterns; 
00510         Real mLoadOrder; 
00512         String mResourceType; 
00513 
00514     public:
00515         typedef MapIterator<ResourceHandleMap> ResourceMapIterator;
00520         ResourceMapIterator getResourceIterator(void) 
00521         {
00522             return ResourceMapIterator(mResourcesByHandle.begin(), mResourcesByHandle.end());
00523         }
00524 
00525     protected:
00526         typedef map<String, ResourcePool*>::type ResourcePoolMap;
00527         ResourcePoolMap mResourcePoolMap;
00528 
00529 
00530     
00531 
00532     };
00536 }
00537 
00538 #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