X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Finstancearray.h;h=e6f8690c68cd5b2000d25f9bb7d770f063fcc1f4;hp=f2a9b2c00be5930c281a8341851d838af949ba1f;hb=HEAD;hpb=274b6fb1b02692cc422bad9040d1abe5d545505a 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