rag
graphic 2d engine
ResourceMgr.h
1 #ifndef Rag_ResourceMgr_h
2 #define Rag_ResourceMgr_h
3 
4 #include <string>
5 #include <map>
6 #include <assert.h>
7 #include <rag/Platform.h>
8 
9 #define resourcemgr ResourceMgr::instance()
10 
11 namespace rag
12 {
14 
18  class Resource
19  {
20  public:
21 
22  Resource():state(Enqueued), memorySize(0), users(0){};
23  virtual ~Resource(){};
24 
25  virtual void loadInBackground() = 0;
26  virtual void loadSync() = 0;
27 
28  void acquire() { ++users; }
29  void release() {assert(users > 0); users--; if (users < 0) users = 0;}
30 
32  enum State
33  {
34  Enqueued = 0,
35  LoadingInBackground,
36  BackgroundLoaded,
37  Ready
38  };
39 
41  std::string resourceName;
42  int memorySize;
43 
44  private:
45 
46  int users;
47 
48  friend class ResourceMgr;
49  };
50 
53  {
54 
55  public:
56 
59  {
60  static ResourceMgr instance;
61  return instance;
62  }
63 
64  ~ResourceMgr();
65 
67  void update();
68 
70  Resource* getResource(const std::string& name);
71 
73 
76  void loadResource(Resource* resource, bool inBackground = true);
77 
79  void unload(const std::string& resourceName);
80 
82  void reload();
83 
85  void dumpResources(const std::string& extension = "*");
86 
88  int numPendingResources();
89 
91  void clean();
92 
95 
96  private:
97 
98  ResourceMgr();
99 
100  };
101 }
102 
103 #endif
State state
Current state.
Definition: ResourceMgr.h:40
int memoryWarnings
For iOS, the number of memory warnings given by the OS.
Definition: ResourceMgr.h:94
Handles Resource management, including loading and unloading Resource instances.
Definition: ResourceMgr.h:52
void update()
Do the tasks for this frame. Must be called each frame.
Definition: ResourceMgr.cpp:107
int numPendingResources()
Number of Resource instances waiting to be loaded.
Definition: ResourceMgr.cpp:293
void unload(const std::string &resourceName)
Free memory allocated by a given Resource by name.
Definition: ResourceMgr.cpp:198
Resource * getResource(const std::string &name)
Returns a resource by name. Will return a null pointer if the resource doesn't exists.
Definition: ResourceMgr.cpp:96
void dumpResources(const std::string &extension="*")
Display the Resource instances currently loaded in memory.
Definition: ResourceMgr.cpp:276
Definition: Bitmap.h:8
void loadResource(Resource *resource, bool inBackground=true)
Starts loading a Resource.
Definition: ResourceMgr.cpp:165
std::string resourceName
Resource unique name. Usually the file name.
Definition: ResourceMgr.h:41
virtual void loadSync()=0
Load that must be synchronized with the main thread.
virtual void loadInBackground()=0
CPU intensive load goes here.
State
List of possible states for a Resource.
Definition: ResourceMgr.h:32
void clean()
Cleans all Resources with no users.
Definition: ResourceMgr.cpp:302
Abstract class the represent a game Resource, typically something costly to loaded.
Definition: ResourceMgr.h:18
void acquire()
Prevents the Resource to be deleted until it's release()'d.
Definition: ResourceMgr.h:28
void reload()
On context lost.
Definition: ResourceMgr.cpp:265
void release()
Releases the Resource, so it can be deleted.
Definition: ResourceMgr.h:29
static ResourceMgr & instance()
Returns the shared instance of the manager.
Definition: ResourceMgr.h:58
int memorySize
Size of the Resource in memory measured in bytes.
Definition: ResourceMgr.h:42