]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/instancearray.h
Add a loader to InstanceArray and make them loadable in scenes
[libs/gl.git] / source / render / instancearray.h
index f2a9b2c00be5930c281a8341851d838af949ba1f..6f4048ece6ea580dfcdf30f78de4d8388c82d3a5 100644 (file)
@@ -17,6 +17,22 @@ class ObjectInstance;
 
 class InstanceArrayBase: public Renderable, public NonCopyable
 {
+protected:
+       class Loader: public DataFile::ObjectLoader<InstanceArrayBase>
+       {
+       private:
+               static ActionMap shared_actions;
+
+       public:
+               Loader(InstanceArrayBase &);
+
+       private:
+               virtual void init_actions();
+
+       protected:
+               virtual void instance() = 0;
+       };
+
 private:
        struct Block
        {
@@ -124,6 +140,16 @@ is removed, its address may later be reused for another instance.
 template<typename T = ObjectInstance>
 class InstanceArray: public InstanceArrayBase
 {
+public:
+       class Loader: public DataFile::DerivedObjectLoader<InstanceArray, InstanceArrayBase::Loader>
+       {
+       public:
+               Loader(InstanceArray &a): DataFile::DerivedObjectLoader<InstanceArray, InstanceArrayBase::Loader>(a) { }
+
+       protected:
+               virtual void instance();
+       };
+
 private:
        class Instance: public T
        {
@@ -153,6 +179,14 @@ inline void InstanceArray<T>::Instance::set_matrix(const Matrix &m)
        array.update_instance_matrix(index, *this->get_matrix());
 }
 
+
+template<typename T>
+void InstanceArray<T>::Loader::instance()
+{
+       T &inst = this->obj.append();
+       this->load_sub(inst);
+}
+
 } // namespace GL
 } // namespace Msp