X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Finstancearray.h;h=6f4048ece6ea580dfcdf30f78de4d8388c82d3a5;hp=f2a9b2c00be5930c281a8341851d838af949ba1f;hb=85d86a0d7cddce83578629e5817b6e1b50061540;hpb=f1e296bb2442dfbea12e7b38a97cc152aa34569c diff --git a/source/render/instancearray.h b/source/render/instancearray.h index f2a9b2c0..6f4048ec 100644 --- a/source/render/instancearray.h +++ b/source/render/instancearray.h @@ -17,6 +17,22 @@ class ObjectInstance; class InstanceArrayBase: public Renderable, public NonCopyable { +protected: + class Loader: public DataFile::ObjectLoader + { + 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 class InstanceArray: public InstanceArrayBase { +public: + class Loader: public DataFile::DerivedObjectLoader + { + public: + Loader(InstanceArray &a): DataFile::DerivedObjectLoader(a) { } + + protected: + virtual void instance(); + }; + private: class Instance: public T { @@ -153,6 +179,14 @@ inline void InstanceArray::Instance::set_matrix(const Matrix &m) array.update_instance_matrix(index, *this->get_matrix()); } + +template +void InstanceArray::Loader::instance() +{ + T &inst = this->obj.append(); + this->load_sub(inst); +} + } // namespace GL } // namespace Msp