void Animation::Loader::load_kf_inline(bool c)
{
- unique_ptr<KeyFrame> kf = make_unique<KeyFrame>();
+ unique_ptr<KeyFrame> kf;
if(coll)
- {
- KeyFrame::Loader ldr(*kf, get_collection());
- ldr.set_inline_base_name(format("%s: %d.kframe", FS::basename(get_source()), obj.keyframes.size()));
- load_sub_with(ldr);
- }
+ kf = make_sub<KeyFrame>().name(format("%d.kframe", obj.keyframes.size())).load(get_collection());
else
- load_sub(*kf);
+ kf = make_sub<KeyFrame>().load();
add_kf(kf.get(), c);
obj.owned_keyframes.emplace_back(move(kf));
void Armature::Loader::link(const string &n)
{
Link lnk(n, obj.links.size());
- load_sub(lnk, obj);
+ sub(lnk).load(obj);
obj.links.push_back(lnk);
}
add("scaling", &Loader::scaling);
}
-void KeyFrame::Loader::set_inline_base_name(const string &n)
-{
- inline_base_name = n;
-}
-
void KeyFrame::Loader::pose(const string &n)
{
obj.pose = &get_collection().get<Pose>(n);
void KeyFrame::Loader::pose_inline()
{
- unique_ptr<Pose> p = make_unique<Pose>();
- load_sub(*p, get_collection());
- Pose *ptr = p.get();
- get_collection().add((inline_base_name.empty() ? FS::basename(get_source()) : inline_base_name)+".pose", move(p));
- obj.pose = ptr;
+ obj.pose = make_sub<Pose>().into(get_collection(), "pose").load();
}
void KeyFrame::Loader::position(float x, float y, float z)
void KeyFrame::Loader::transform()
{
- load_sub(obj.transform);
+ sub(obj.transform).load();
}
void KeyFrame::Loader::uniforms()
public:
class MSPGL_API Loader: public DataFile::CollectionObjectLoader<KeyFrame>
{
- private:
- std::string inline_base_name;
-
public:
Loader(KeyFrame &k): Loader(k, nullptr) { }
Loader(KeyFrame &k, Collection &c): Loader(k, &c) { }
private:
Loader(KeyFrame &, Collection *);
- public:
- void set_inline_base_name(const std::string &);
-
- private:
void pose(const std::string &);
void pose_inline();
void position(float, float, float);
{
Glyph gl;
gl.code = c;
- load_sub(gl);
+ sub(gl).load();
obj.glyphs.insert(GlyphMap::value_type(c, gl));
}
void Font::Loader::texture()
{
- unique_ptr<Texture2D> tex = make_unique<Texture2D>();
- load_sub(*tex);
- Texture2D *ptr = tex.get();
- get_collection().add(FS::basename(get_source())+".tex", move(tex));
- obj.texture = ptr;
+ obj.texture = make_sub<Texture2D>().into(get_collection(), "texture").load();
}
void Font::Loader::texture_ref(const string &name)
void SequenceTemplate::Loader::effect(const string &slot)
{
- TemplateLoader<Effect> ldr(get_collection());
- load_sub_with(ldr);
Renderable rend;
rend.slot_name = slot;
- rend.effect_template = ldr.get_object();
+ rend.effect_template = dyn_sub<TemplateLoader<Effect>>().load(get_collection());
obj.renderables.emplace_back(move(rend));
}
void SequenceTemplate::Loader::postprocessor_with_slot(const string &slot)
{
- TemplateLoader<GL::PostProcessor> ldr(get_collection());
- load_sub_with(ldr);
PostProcessor pp;
- pp.postprocessor_template = ldr.get_object();
+ pp.postprocessor_template = dyn_sub<TemplateLoader<GL::PostProcessor>>().load(get_collection());
pp.slot_name = slot;
obj.postprocessors.emplace_back(move(pp));
}
Step stp;
stp.tag = tag;
stp.renderable_name = rend;
- Step::Loader ldr(stp, get_collection());
- ldr.set_inline_base_name(format("%s: step[%d]", get_source(), obj.steps.size()));
- load_sub_with(ldr);
+ sub(stp).name(format("step_%d", obj.steps.size())).load(get_collection());
obj.steps.push_back(stp);
}
void SequenceTemplate::Step::Loader::depth_test()
{
- load_sub(obj.depth_test);
+ sub(obj.depth_test).load();
}
void SequenceTemplate::Step::Loader::depth_compare(Predicate c)
void SequenceTemplate::Step::Loader::lighting_inline()
{
- unique_ptr<Lighting> lightn = make_unique<Lighting>();
- load_sub(*lightn, get_collection());
- Lighting *ptr = lightn.get();
- get_collection().add(inline_base_name+".lightn", move(lightn));
- obj.lighting = ptr;
+ obj.lighting = make_sub<Lighting>().into(get_collection(), "lighting").load();
}
void SequenceTemplate::Step::Loader::lighting(const string &name)
void SequenceTemplate::Step::Loader::stencil_test()
{
- load_sub(obj.stencil_test);
+ sub(obj.stencil_test).load();
}
} // namespace GL
void Mesh::Loader::vertices()
{
- load_sub(obj.vertices);
+ sub(obj.vertices).load();
if(allow_gl_calls)
obj.check_buffers(VERTEX_BUFFER);
}
void Mesh::Loader::batch(PrimitiveType p)
{
Batch btc(p);
- load_sub(btc);
+ sub(btc).load();
obj.add_batch(move(btc));
}
class MSPGL_API Loader: public DataFile::Loader, public VertexArrayBuilder
{
public:
+ using Object = VertexArray;
+
Loader(VertexArray &);
};
{
ShadowedLight light;
light.light = &get_collection().get<Light>(name);
- load_sub(light);
+ sub(light).load();
obj.lights.push_back(light);
}
void Lighting::Loader::light_inline()
{
- Light::GenericLoader ldr(get_collection());
- load_sub_with(ldr);
- Light *lgt = ldr.store_object(get_collection(), format("%s/%d.light", FS::basename(get_source()), obj.lights.size()));
- obj.attach(*lgt);
+ obj.attach(*dyn_sub<Light::GenericLoader>().into(get_collection(), format("%d.light", obj.lights.size())).load());
}
} // namespace GL
add("uniform_slot", &Loader::uniform_slot2);
}
-void RenderMethod::Loader::set_inline_base_name(const string &n)
-{
- inline_base_name = n;
-}
-
void RenderMethod::Loader::finish()
{
if(obj.material)
void RenderMethod::Loader::blend()
{
- load_sub(obj.blend);
+ sub(obj.blend).load();
}
void RenderMethod::Loader::blend_factors(BlendFactor src, BlendFactor dest)
void RenderMethod::Loader::material_inline()
{
- Material::GenericLoader ldr(get_collection());
- load_sub_with(ldr);
- obj.material = ldr.store_object(get_collection(), inline_base_name+".mat");
+ obj.material = dyn_sub<Material::GenericLoader>().into(get_collection(), "material.mat").load();
obj.set_material_textures();
}
obj.textures.emplace_back(n);
i = obj.textures.end()-1;
}
- TextureSlot::Loader ldr(*i, n, coll);
- load_sub_with(ldr);
+ sub(*i).load(n, coll);
}
void RenderMethod::Loader::uniforms()
obj.shdata = make_shared<ProgramData>();
obj.shdata->copy_uniforms(*old_shdata);
}
- load_sub(*obj.shdata);
+ sub(*obj.shdata).load();
}
void RenderMethod::Loader::uniform_slot(const string &name)
class MSPGL_API Loader: public DataFile::CollectionObjectLoader<RenderMethod>
{
private:
- std::string inline_base_name;
-
static ActionMap shared_actions;
public:
private:
void init_actions() override;
- public:
- void set_inline_base_name(const std::string &);
-
- private:
void finish() override;
void blend();
add("normal_storage", &Loader::map_storage, &SplatMaterial::normal_array);
add("occlusion_storage", &Loader::map_storage, &SplatMaterial::occlusion_array);
add("roughness_storage", &Loader::map_storage, &SplatMaterial::roughness_array);
- add("sub", &SplatMaterial::Loader::sub);
+ add("sub", &SplatMaterial::Loader::sub_mat);
}
void SplatMaterial::Loader::finish()
(obj.*array).height = h;
}
-void SplatMaterial::Loader::sub()
+void SplatMaterial::Loader::sub_mat()
{
SubMaterial sm;
- load_sub(sm);
- obj.sub_materials.push_back(sm);
+ sub(sm).load();
+ obj.sub_materials.emplace_back(move(sm));
if(!sm.base_color_map.source_fn.empty())
++obj.base_color_array.max_layers;
void finish() override;
void map_storage(MapArray SplatMaterial::*, PixelFormat, unsigned, unsigned);
- void sub();
+ void sub_mat();
};
private:
add("method", &Loader::method);
}
-void Technique::Loader::set_inline_base_name(const string &n)
-{
- inline_base_name = n;
-}
-
void Technique::Loader::inherit(const string &n)
{
obj.methods = get_collection().get<Technique>(n).get_methods();
void Technique::Loader::method(const string &n)
{
RenderMethod p;
- RenderMethod::Loader ldr(p, get_collection());
- ldr.set_inline_base_name(format("%s: method[%s]",
- (inline_base_name.empty() ? FS::basename(get_source()) : inline_base_name), (n.empty() ? "\"\"" : n.c_str())));
- load_sub_with(ldr);
+ sub(p).name(format("method[%s]", (n.empty() ? "\"\"" : n.c_str()))).load(get_collection());
if(!p.get_shader_program())
throw logic_error("no shader program in method");
void Technique::InheritLoader::uniforms()
{
ProgramData shdata;
- load_sub(shdata);
+ sub(shdata).load();
obj.replace_uniforms(shdata);
}
class MSPGL_API Loader: public Msp::DataFile::CollectionObjectLoader<Technique>
{
private:
- std::string inline_base_name;
-
static ActionMap shared_actions;
public:
private:
void init_actions() override;
- public:
- void set_inline_base_name(const std::string &);
-
- private:
void inherit(const std::string &);
void method(const std::string &);
};
template<typename T>
void InstanceArray<T>::Loader::instance()
{
- T &inst = this->obj.append();
- this->load_sub(inst);
+ this->sub(this->obj.append()).load();
}
} // namespace GL
void Object::LodLoader::mesh_inline()
{
- unique_ptr<Mesh> msh = make_unique<Mesh>();
- load_sub(*msh);
- Mesh *ptr = msh.get();
- get_collection().add(format("%s/lod%d.mesh", FS::basename(get_source()), index), move(msh));
- lod.mesh = ptr;
+ lod.mesh = make_sub<Mesh>().into(get_collection(), format("lod%d.mesh", index)).load();
}
void Object::LodLoader::technique(const string &n)
void Object::LodLoader::technique_inline()
{
- unique_ptr<Technique> tech = make_unique<Technique>();
- Technique::Loader ldr(*tech, get_collection());
- string name = format("%s/lod%d.tech", FS::basename(get_source()), index);
- ldr.set_inline_base_name(name);
- load_sub(*tech, get_collection());
- Technique *ptr = tech.get();
- get_collection().add(name, move(tech));
- lod.technique = ptr;
+ lod.technique = make_sub<Technique>().into(get_collection(), format("lod%d.tech", index)).load();
}
} // namespace GL
void ObjectInstance::Loader::transform()
{
Transform trn;
- load_sub(trn);
+ sub(trn).load();
obj.set_matrix(trn.to_matrix());
}
}
-unsigned Scene::Loader::inline_counter = 0;
-
Scene::Loader::Loader(Scene &s, Collection &c, ContentMap *m):
DataFile::CollectionObjectLoader<Scene>(s, &c),
content(m)
void Scene::Loader::array(const string &n)
{
- unique_ptr<InstanceArray<>> arr = make_unique<InstanceArray<>>(get_collection().get<GL::Object>(n));
- load_sub(*arr);
- InstanceArray<> *ptr = arr.get();
- get_collection().add(format("_scene_array_%d.array", ++inline_counter), move(arr));
- obj.add(*ptr);
+ obj.add(*make_sub<InstanceArray<>>(get_collection().get<GL::Object>(n))
+ .into(get_collection(), format("array %d", ++inline_counter))
+ .load());
}
void Scene::Loader::object(const string &n)
void Scene::Loader::object_tagged(const string &n, const string &t)
{
- unique_ptr<ObjectInstance> inst = make_unique<ObjectInstance>(get_collection().get<GL::Object>(n));
- load_sub(*inst);
- ObjectInstance *ptr = inst.get();
- get_collection().add(format("_scene_object_%d.inst", ++inline_counter), move(inst));
+ ObjectInstance *inst = make_sub<ObjectInstance>(get_collection().get<GL::Object>(n))
+ .into(get_collection(), format("object %d", ++inline_counter))
+ .load();
if(content && !t.empty())
- (*content)[t] = ptr;
- obj.add(*ptr);
+ (*content)[t] = inst;
+ obj.add(*inst);
}
void Scene::Loader::scene(const string &n)
void Scene::Loader::scene_inline()
{
- GenericLoader ldr(get_collection());
- load_sub_with(ldr);
- Scene *scene = ldr.store_object(get_collection(), format("_scene_%d.scene", ++inline_counter));
- obj.add(*scene);
+ obj.add(*dyn_sub<GenericLoader>().into(get_collection(), format("scene %d", ++inline_counter)).load());
}
} // namespace GL
private:
ContentMap *content;
-
- static unsigned inline_counter;
+ unsigned inline_counter = 0;
public:
Loader(Scene &s, Collection &c): Loader(s, c, nullptr) { }
template<typename T, typename L>
void Resources::Loader::generic(const string &name)
{
- L ldr(obj);
- load_sub_with(ldr);
- ldr.store_object(obj, name);
+ dyn_sub<L>().into(obj, name).load();
}