X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresourcemanager.h;h=244c67ec29cc5acda96ea303bddda0f7583cf1ee;hb=946266e823c07025f115b5e4f5523b496dcb393e;hp=60f61a421fe4b2b54685a2366cd339e9bfa9be2d;hpb=4d7f66ea28c788e12f700216b9c53af9e71b8390;p=libs%2Fgl.git diff --git a/source/resourcemanager.h b/source/resourcemanager.h index 60f61a42..244c67ec 100644 --- a/source/resourcemanager.h +++ b/source/resourcemanager.h @@ -11,6 +11,8 @@ namespace Msp { namespace GL { +class ResourceWatcher; + class ResourceManager { public: @@ -24,20 +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; - bool loaded; + 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 @@ -104,6 +118,9 @@ public: 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; };