1 #ifndef MSP_GL_RESOURCEMANAGER_H_
2 #define MSP_GL_RESOURCEMANAGER_H_
4 #include <msp/core/inttypes.h>
5 #include <msp/core/mutex.h>
6 #include <msp/core/semaphore.h>
7 #include <msp/core/thread.h>
8 #include <msp/datafile/collection.h>
25 struct ManagedResource
28 DataFile::Collection *collection;
31 Resource::AsyncLoader *loader;
36 ManagedResource(Resource &);
39 void finish_loading();
43 class LoadingThread: public Thread
56 ResourceManager &manager;
58 ManagedResource *volatile resource;
62 LoadingThread(ResourceManager &);
68 void set_resource(ManagedResource *);
69 ManagedResource *get_resource() const { return resource; }
71 State get_state() const { return state; }
76 typedef std::map<const Resource *, ManagedResource> ResourceMap;
77 typedef std::list<ManagedResource *> LoadQueue;
81 ResourceMap resources;
85 unsigned min_retain_frames;
86 unsigned max_retain_frames;
94 void set_loading_policy(LoadingPolicy);
95 void set_async_loads(bool);
96 void set_size_limit(UInt64);
97 void set_min_retain_frames(unsigned);
98 void set_max_retain_frames(unsigned);
100 void add_resource(Resource &);
101 void *get_data_for_resource(const Resource &);
102 void set_resource_location(Resource &, DataFile::Collection &, const std::string &);
103 void load_resource(Resource &);
104 void resource_used(const Resource &);
105 void remove_resource(Resource &);
108 UInt64 get_total_data_size() const;