OgreResourceManager.h
Go to the documentation of this file.
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 _ResourceManager_H__
29 #define _ResourceManager_H__
30 
31 #include "OgrePrerequisites.h"
32 
33 #include "OgreResource.h"
35 #include "OgreIteratorWrappers.h"
36 #include "OgreCommon.h"
37 #include "OgreDataStream.h"
38 #include "OgreStringVector.h"
39 #include "OgreScriptLoader.h"
40 #include "OgreHeaderPrefix.h"
41 
42 namespace Ogre {
43 
46  template <typename T>
47  class Pool
48  {
49  protected:
50  typedef typename list<T>::type ItemList;
53  public:
54  Pool() {}
55  virtual ~Pool() {}
56 
60  virtual std::pair<bool, T> removeItem()
61  {
63  std::pair<bool, T> ret;
64  if (mItems.empty())
65  {
66  ret.first = false;
67  }
68  else
69  {
70  ret.first = true;
71  ret.second = mItems.front();
72  mItems.pop_front();
73  }
74  return ret;
75  }
76 
79  virtual void addItem(const T& i)
80  {
82  mItems.push_front(i);
83  }
85  virtual void clear()
86  {
88  mItems.clear();
89  }
90  };
91 
122  class _OgreExport ResourceManager : public ScriptLoader, public ResourceAlloc
123  {
124  public:
125  OGRE_AUTO_MUTEX; // public to allow external locking
126  ResourceManager();
127  virtual ~ResourceManager();
128 
148  virtual ResourcePtr createResource(const String& name, const String& group,
149  bool isManual = false, ManualResourceLoader* loader = 0,
150  const NameValuePairList* createParams = 0);
151 
152  typedef std::pair<ResourcePtr, bool> ResourceCreateOrRetrieveResult;
166  virtual ResourceCreateOrRetrieveResult createOrRetrieve(const String& name,
167  const String& group, bool isManual = false,
168  ManualResourceLoader* loader = 0,
169  const NameValuePairList* createParams = 0);
170 
178  virtual void setMemoryBudget(size_t bytes);
179 
182  virtual size_t getMemoryBudget(void) const;
183 
185  virtual size_t getMemoryUsage(void) const { return mMemoryUsage.get(); }
186 
193  virtual void unload(const String& name);
194 
201  virtual void unload(ResourceHandle handle);
202 
215  virtual void unloadAll(bool reloadableOnly = true);
216 
228  virtual void reloadAll(bool reloadableOnly = true);
229 
244  virtual void unloadUnreferencedResources(bool reloadableOnly = true);
245 
259  virtual void reloadUnreferencedResources(bool reloadableOnly = true);
260 
278  virtual void remove(ResourcePtr& r);
279 
297  virtual void remove(const String& name);
298 
316  virtual void remove(ResourceHandle handle);
331  virtual void removeAll(void);
332 
347  virtual void removeUnreferencedResources(bool reloadableOnly = true);
348 
351  virtual ResourcePtr getResourceByName(const String& name, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
354  virtual ResourcePtr getByHandle(ResourceHandle handle);
355 
357  virtual bool resourceExists(const String& name)
358  {
359  return !getResourceByName(name).isNull();
360  }
362  virtual bool resourceExists(ResourceHandle handle)
363  {
364  return !getByHandle(handle).isNull();
365  }
366 
370  virtual void _notifyResourceTouched(Resource* res);
371 
375  virtual void _notifyResourceLoaded(Resource* res);
376 
380  virtual void _notifyResourceUnloaded(Resource* res);
381 
397  virtual ResourcePtr prepare(const String& name,
398  const String& group, bool isManual = false,
399  ManualResourceLoader* loader = 0, const NameValuePairList* loadParams = 0,
400  bool backgroundThread = false);
401 
417  virtual ResourcePtr load(const String& name,
418  const String& group, bool isManual = false,
419  ManualResourceLoader* loader = 0, const NameValuePairList* loadParams = 0,
420  bool backgroundThread = false);
421 
437  virtual const StringVector& getScriptPatterns(void) const { return mScriptPatterns; }
438 
452  virtual void parseScript(DataStreamPtr& stream, const String& groupName)
453  { (void)stream; (void)groupName; }
454 
461  virtual Real getLoadingOrder(void) const { return mLoadOrder; }
462 
464  const String& getResourceType(void) const { return mResourceType; }
465 
467  virtual void setVerbose(bool v) { mVerbose = v; }
468 
470  virtual bool getVerbose(void) { return mVerbose; }
471 
478  class _OgreExport ResourcePool : public Pool<ResourcePtr>, public ResourceAlloc
479  {
480  protected:
482  public:
483  ResourcePool(const String& name);
484  ~ResourcePool();
486  const String& getName() const;
487  void clear();
488  };
489 
491  ResourcePool* getResourcePool(const String& name);
493  void destroyResourcePool(ResourcePool* pool);
495  void destroyResourcePool(const String& name);
497  void destroyAllResourcePools();
498 
499 
500 
501 
502  protected:
503 
505  ResourceHandle getNextHandle(void);
506 
528  virtual Resource* createImpl(const String& name, ResourceHandle handle,
529  const String& group, bool isManual, ManualResourceLoader* loader,
530  const NameValuePairList* createParams) = 0;
532  virtual void addImpl( ResourcePtr& res );
534  virtual void removeImpl( ResourcePtr& res );
537  virtual void checkUsage(void);
538 
539 
540  public:
541  typedef HashMap< String, ResourcePtr > ResourceMap;
542  typedef HashMap< String, ResourceMap > ResourceWithGroupMap;
544  protected:
548  size_t mMemoryBudget;
551 
552  bool mVerbose;
553 
554  // IMPORTANT - all subclasses must populate the fields below
555 
562 
563  public:
570  {
571  return ResourceMapIterator(mResourcesByHandle.begin(), mResourcesByHandle.end());
572  }
573 
574  protected:
577  };
578 
582 }
583 
584 #include "OgreHeaderSuffix.h"
585 
586 #endif
OgreHeaderSuffix.h
Ogre::ResourceHandle
unsigned long long int ResourceHandle
Definition: OgreResource.h:41
Ogre::ResourceManager::mLoadOrder
Real mLoadOrder
Loading order relative to other managers, higher is later.
Definition: OgreResourceManager.h:559
Ogre::Pool::addItem
virtual void addItem(const T &i)
Add a new item to the pool.
Definition: OgreResourceManager.h:79
Ogre::AllocatedObject
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
Definition: OgreMemoryAllocatedObject.h:58
Ogre
Definition: OgreAndroidLogListener.h:34
Ogre::ResourceManager::mVerbose
bool mVerbose
In bytes.
Definition: OgreResourceManager.h:552
Ogre::map
Definition: OgrePrerequisites.h:533
Ogre::ResourceManager::mResourcesWithGroup
ResourceWithGroupMap mResourcesWithGroup
Definition: OgreResourceManager.h:547
Ogre::ResourceManager::ResourceHandleMap
map< ResourceHandle, ResourcePtr >::type ResourceHandleMap
Definition: OgreResourceManager.h:543
Ogre::ResourceManager::OGRE_AUTO_MUTEX
OGRE_AUTO_MUTEX
Definition: OgreResourceManager.h:125
Ogre::StringVector
vector< String >::type StringVector
Definition: OgreStringVector.h:45
Ogre::Pool::Pool
Pool()
Definition: OgreResourceManager.h:54
Ogre::AtomicScalar< ResourceHandle >
Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME
static String AUTODETECT_RESOURCE_GROUP_NAME
Special resource group name which causes resource group to be automatically determined based on searc...
Definition: OgreResourceGroupManager.h:270
Ogre::ResourceManager::ResourceMap
HashMap< String, ResourcePtr > ResourceMap
Definition: OgreResourceManager.h:541
Ogre::String
_StringBase String
Definition: OgrePrerequisites.h:439
OgreResourceGroupManager.h
Ogre::NameValuePairList
map< String, String >::type NameValuePairList
Name / value parameter pair (first = name, second = value)
Definition: OgreCommon.h:550
Ogre::ResourceManager::mResources
ResourceMap mResources
Definition: OgreResourceManager.h:546
Ogre::ResourceManager::getResourceIterator
ResourceMapIterator getResourceIterator(void)
Returns an iterator over all resources in this manager.
Definition: OgreResourceManager.h:569
Ogre::ResourceManager::parseScript
virtual void parseScript(DataStreamPtr &stream, const String &groupName)
Parse the definition of a set of resources from a script file.
Definition: OgreResourceManager.h:452
OGRE_LOCK_AUTO_MUTEX
#define OGRE_LOCK_AUTO_MUTEX
Definition: OgreThreadDefinesBoost.h:33
Ogre::Pool::mItems
ItemList mItems
Definition: OgreResourceManager.h:51
Ogre::ResourceManager::ResourceMapIterator
MapIterator< ResourceHandleMap > ResourceMapIterator
Definition: OgreResourceManager.h:564
OgreHeaderPrefix.h
Ogre::list
Definition: OgrePrerequisites.h:505
OgrePrerequisites.h
Ogre::ResourceManager::ResourcePool::mName
String mName
Definition: OgreResourceManager.h:481
OgreResource.h
OgreCommon.h
Ogre::ResourceManager::mMemoryBudget
size_t mMemoryBudget
Definition: OgreResourceManager.h:548
Ogre::ResourceManager
Defines a generic resource handler.
Definition: OgreResourceManager.h:122
Ogre::ResourceManager::mResourcesByHandle
ResourceHandleMap mResourcesByHandle
Definition: OgreResourceManager.h:545
Ogre::ResourceManager::ResourcePoolMap
map< String, ResourcePool * >::type ResourcePoolMap
Definition: OgreResourceManager.h:575
Ogre::ScriptLoader
Abstract class defining the interface used by classes which wish to perform script loading to define ...
Definition: OgreScriptLoader.h:59
OgreScriptLoader.h
Ogre::SharedPtr< Resource >
Ogre::ResourceManager::mNextHandle
AtomicScalar< ResourceHandle > mNextHandle
In bytes.
Definition: OgreResourceManager.h:549
Ogre::MapIterator
Concrete IteratorWrapper for nonconst access to the underlying key-value container.
Definition: OgreIteratorWrapper.h:319
Ogre::Pool::ItemList
list< T >::type ItemList
Definition: OgreResourceManager.h:50
OgreIteratorWrappers.h
Ogre::Resource
Abstract class representing a loadable resource (e.g.
Definition: OgreResource.h:79
Ogre::ResourceManager::ResourcePool
Definition of a pool of resources, which users can use to reuse similar resources many times without ...
Definition: OgreResourceManager.h:478
Ogre::ResourceManager::mScriptPatterns
StringVector mScriptPatterns
Patterns to use to look for scripts if supported (e.g. *.overlay)
Definition: OgreResourceManager.h:557
Ogre::ResourceManager::getVerbose
virtual bool getVerbose(void)
Gets whether this manager and its resources habitually produce log output.
Definition: OgreResourceManager.h:470
Ogre::ResourceManager::ResourceCreateOrRetrieveResult
std::pair< ResourcePtr, bool > ResourceCreateOrRetrieveResult
Definition: OgreResourceManager.h:152
Ogre::Pool::removeItem
virtual std::pair< bool, T > removeItem()
Get the next item from the pool.
Definition: OgreResourceManager.h:60
Ogre::ResourceManager::getMemoryUsage
virtual size_t getMemoryUsage(void) const
Gets the current memory usage, in bytes.
Definition: OgreResourceManager.h:185
Ogre::ResourceManager::mMemoryUsage
AtomicScalar< size_t > mMemoryUsage
Definition: OgreResourceManager.h:550
Ogre::Real
float Real
Software floating point type.
Definition: OgrePrerequisites.h:70
Ogre::ResourceManager::setVerbose
virtual void setVerbose(bool v)
Sets whether this manager and its resources habitually produce log output.
Definition: OgreResourceManager.h:467
Ogre::ResourceManager::mResourceType
String mResourceType
String identifying the resource type this manager handles.
Definition: OgreResourceManager.h:561
Ogre::Pool::clear
virtual void clear()
Clear the pool.
Definition: OgreResourceManager.h:85
Ogre::ResourceManager::getScriptPatterns
virtual const StringVector & getScriptPatterns(void) const
Gets the file patterns which should be used to find scripts for this ResourceManager.
Definition: OgreResourceManager.h:437
Ogre::ResourceManager::getLoadingOrder
virtual Real getLoadingOrder(void) const
Gets the relative loading order of resources of this type.
Definition: OgreResourceManager.h:461
Ogre::Pool
Template class describing a simple pool of items.
Definition: OgreResourceManager.h:47
OgreStringVector.h
Ogre::ManualResourceLoader
Interface describing a manual resource loader.
Definition: OgreResource.h:514
OgreDataStream.h
Ogre::ResourceManager::resourceExists
virtual bool resourceExists(ResourceHandle handle)
Returns whether a resource with the given handle exists in this manager.
Definition: OgreResourceManager.h:362
Ogre::ResourceManager::ResourceWithGroupMap
HashMap< String, ResourceMap > ResourceWithGroupMap
Definition: OgreResourceManager.h:542
Ogre::ResourceManager::getResourceType
const String & getResourceType(void) const
Gets a string identifying the type of resource this manager handles.
Definition: OgreResourceManager.h:464
Ogre::ResourceManager::mResourcePoolMap
ResourcePoolMap mResourcePoolMap
Definition: OgreResourceManager.h:576
Ogre::ResourceManager::resourceExists
virtual bool resourceExists(const String &name)
Returns whether the named resource exists in this manager.
Definition: OgreResourceManager.h:357
Ogre::Pool::OGRE_AUTO_MUTEX
OGRE_AUTO_MUTEX
Definition: OgreResourceManager.h:52
Ogre::Pool::~Pool
virtual ~Pool()
Definition: OgreResourceManager.h:55

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 Tue Apr 13 2021 08:53:15