+++ /dev/null
-#ifndef MSP_GL_RESOURCEMANAGER_H_
-#define MSP_GL_RESOURCEMANAGER_H_
-
-#include <msp/core/inttypes.h>
-#include <msp/core/mutex.h>
-#include <msp/core/semaphore.h>
-#include <msp/core/thread.h>
-#include <msp/datafile/collection.h>
-#include "resource.h"
-
-namespace Msp {
-namespace GL {
-
-class ResourceManager
-{
-public:
- enum LoadingPolicy
- {
- LOAD_IMMEDIATELY,
- LOAD_ON_DEMAND,
- LOAD_MANUALLY
- };
-
-private:
- struct ManagedResource
- {
- Resource *resource;
- DataFile::Collection *collection;
- std::string name;
- IO::Seekable *io;
- Resource::AsyncLoader *loader;
- bool loaded;
- unsigned last_used;
- UInt64 data_size;
-
- ManagedResource(Resource &);
-
- void start_loading();
- void finish_loading();
- void unload();
- };
-
- class LoadingThread: public Thread
- {
- public:
- enum State
- {
- IDLE,
- SYNC_PENDING,
- BUSY,
- LOAD_FINISHED,
- TERMINATING
- };
-
- private:
- ResourceManager &manager;
- Semaphore sem;
- ManagedResource *volatile resource;
- volatile State state;
-
- public:
- LoadingThread(ResourceManager &);
-
- private:
- virtual void main();
-
- public:
- void set_resource(ManagedResource *);
- ManagedResource *get_resource() const { return resource; }
- void sync();
- State get_state() const { return state; }
-
- void terminate();
- };
-
- typedef std::map<const Resource *, ManagedResource> ResourceMap;
- typedef std::list<ManagedResource *> LoadQueue;
-
- LoadingPolicy policy;
- bool async_loads;
- ResourceMap resources;
- LoadQueue queue;
- UInt64 size_limit;
- unsigned frame;
- unsigned min_retain_frames;
- unsigned max_retain_frames;
- unsigned next_unload;
- LoadingThread thread;
-
-public:
- ResourceManager();
- ~ResourceManager();
-
- void set_loading_policy(LoadingPolicy);
- void set_async_loads(bool);
- void set_size_limit(UInt64);
- void set_min_retain_frames(unsigned);
- void set_max_retain_frames(unsigned);
-
- void add_resource(Resource &);
- void *get_data_for_resource(const Resource &);
- void set_resource_location(Resource &, DataFile::Collection &, const std::string &);
- void load_resource(Resource &);
- void resource_used(const Resource &);
- void remove_resource(Resource &);
-
- void tick();
- UInt64 get_total_data_size() const;
-};
-
-} // namespace GL
-} // namespace Msp
-
-#endif