]> git.tdb.fi Git - libs/gl.git/blobdiff - source/resources/resourcemanager.h
Initial implementation of Vulkan backend
[libs/gl.git] / source / resources / resourcemanager.h
index 2b9aef58f6414af9073988898e08e04483861e6a..e2926be41a82a98ba184c7a6b5194a11a24db4bc 100644 (file)
@@ -4,6 +4,7 @@
 #include <deque>
 #include <cstdint>
 #include <msp/core/mutex.h>
+#include <msp/core/noncopyable.h>
 #include <msp/core/semaphore.h>
 #include <msp/core/thread.h>
 #include <msp/datafile/collection.h>
@@ -23,7 +24,7 @@ public:
 };
 
 
-class ResourceManager
+class ResourceManager: public NonCopyable
 {
 public:
        enum LoadingPolicy
@@ -80,7 +81,7 @@ private:
        class LoadingThread: public Thread
        {
        private:
-               Semaphore sem;
+               Msp::Semaphore sem;
                Mutex queue_mutex;
                std::deque<ManagedResource *> async_queue;
                std::deque<ManagedResource *> sync_queue;
@@ -112,21 +113,20 @@ private:
                void terminate();
        };
 
-       LoadingPolicy policy;
-       bool async_loads;
+       LoadingPolicy policy = LOAD_ON_DEMAND;
+       bool async_loads = true;
        mutable Mutex map_mutex;
        std::map<const Resource *, ManagedResource> resources;
        std::deque<ManagedResource *> queue;
-       std::uint64_t total_data_size;
-       std::uint64_t size_limit;
-       unsigned frame;
-       unsigned min_retain_frames;
-       unsigned max_retain_frames;
-       unsigned next_unload;
+       std::uint64_t total_data_size = 0;
+       std::uint64_t size_limit = 0;
+       unsigned frame = 0;
+       unsigned min_retain_frames = 30;
+       unsigned max_retain_frames = 0;
+       unsigned next_unload = 0;
        LoadingThread thread;
 
 public:
-       ResourceManager();
        ~ResourceManager();
 
        void set_loading_policy(LoadingPolicy);
@@ -136,6 +136,7 @@ public:
        void set_max_retain_frames(unsigned);
 
        void add_resource(Resource &);
+       void move_resource(Resource &, Resource &);
 private:
        const ManagedResource &get_managed_resource(const Resource &) const;
        ManagedResource &get_managed_resource(const Resource &);