1 #ifndef MSP_GL_RESOURCEMANAGER_H_
2 #define MSP_GL_RESOURCEMANAGER_H_
4 #include <msp/core/mutex.h>
5 #include <msp/core/semaphore.h>
6 #include <msp/core/thread.h>
7 #include <msp/datafile/collection.h>
24 struct ManagedResource
27 DataFile::Collection *collection;
30 Resource::AsyncLoader *loader;
33 ManagedResource(Resource &);
36 void finish_loading();
39 class LoadingThread: public Thread
52 ResourceManager &manager;
54 ManagedResource *volatile resource;
58 LoadingThread(ResourceManager &);
64 void set_resource(ManagedResource *);
65 ManagedResource *get_resource() const { return resource; }
67 State get_state() const { return state; }
72 typedef std::map<const Resource *, ManagedResource> ResourceMap;
73 typedef std::list<ManagedResource *> LoadQueue;
77 ResourceMap resources;
85 void set_loading_policy(LoadingPolicy);
86 void set_async_loads(bool);
88 void add_resource(Resource &);
89 void *get_data_for_resource(const Resource &);
90 void set_resource_location(Resource &, DataFile::Collection &, const std::string &);
91 void load_resource(Resource &);
92 void resource_used(const Resource &);
93 void remove_resource(Resource &);