X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresourcemanager.h;h=244c67ec29cc5acda96ea303bddda0f7583cf1ee;hb=946266e823c07025f115b5e4f5523b496dcb393e;hp=49a4c0bde3a7d33b1a02da359c486257a2e9b735;hpb=20703b6d4dfd0836cdb787bd416d4ae9bf010602;p=libs%2Fgl.git diff --git a/source/resourcemanager.h b/source/resourcemanager.h index 49a4c0bd..244c67ec 100644 --- a/source/resourcemanager.h +++ b/source/resourcemanager.h @@ -1,6 +1,7 @@ #ifndef MSP_GL_RESOURCEMANAGER_H_ #define MSP_GL_RESOURCEMANAGER_H_ +#include #include #include #include @@ -10,6 +11,8 @@ namespace Msp { namespace GL { +class ResourceWatcher; + class ResourceManager { public: @@ -23,13 +26,32 @@ public: private: struct ManagedResource { + enum ResourceState + { + NOT_LOADED, + LOAD_QUEUED, + LOADING, + LOADED + }; + Resource *resource; DataFile::Collection *collection; std::string name; IO::Seekable *io; Resource::AsyncLoader *loader; + ResourceState state; + unsigned last_used; + UInt64 data_size; + std::vector watchers; ManagedResource(Resource &); + + void start_loading(); + void finish_loading(); + void unload(); + + void add_watcher(ResourceWatcher &); + void remove_watcher(ResourceWatcher &); }; class LoadingThread: public Thread @@ -72,6 +94,11 @@ private: 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: @@ -80,13 +107,22 @@ public: 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(const Resource &); + void load_resource(Resource &); + void resource_used(const Resource &); void remove_resource(Resource &); + void watch_resource(const Resource &, ResourceWatcher &); + void unwatch_resource(const Resource &, ResourceWatcher &); + void tick(); + UInt64 get_total_data_size() const; }; } // namespace GL