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
{
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
{
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