]> git.tdb.fi Git - libs/gl.git/blobdiff - source/resources/resource.h
Rearrange soucre files into subdirectories
[libs/gl.git] / source / resources / resource.h
diff --git a/source/resources/resource.h b/source/resources/resource.h
new file mode 100644 (file)
index 0000000..571d1ea
--- /dev/null
@@ -0,0 +1,52 @@
+#ifndef MSP_GL_RESOURCE_H_
+#define MSP_GL_RESOURCE_H_
+
+#include <msp/core/inttypes.h>
+#include <msp/io/seekable.h>
+
+namespace Msp {
+namespace GL {
+
+class ResourceManager;
+class Resources;
+
+class Resource
+{
+public:
+       class AsyncLoader
+       {
+       protected:
+               AsyncLoader() { }
+       public:
+               virtual ~AsyncLoader() { }
+
+               virtual bool needs_sync() const = 0;
+               virtual bool process() = 0;
+       };
+
+protected:
+       ResourceManager *manager;
+       void *manager_data;
+
+       Resource();
+public:
+       virtual ~Resource();
+
+       void set_manager(ResourceManager *);
+       ResourceManager *get_manager() const { return manager; }
+       void *get_manager_data() const { return manager_data; }
+       virtual int get_load_priority() const { return 0; }
+       virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) = 0;
+       virtual bool is_loaded() const;
+
+       /** Returns the amount of graphics memory used by this resource.  The
+       returned value must not change while the resource is loaded. */
+       virtual UInt64 get_data_size() const = 0;
+
+       virtual void unload() = 0;
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif