]> git.tdb.fi Git - libs/gl.git/commitdiff
Convert sub-object loading to use the new API in mspdatafile
authorMikko Rasa <tdb@tdb.fi>
Tue, 12 Dec 2023 11:15:58 +0000 (13:15 +0200)
committerMikko Rasa <tdb@tdb.fi>
Tue, 12 Dec 2023 11:31:35 +0000 (13:31 +0200)
22 files changed:
source/animation/animation.cpp
source/animation/armature.cpp
source/animation/keyframe.cpp
source/animation/keyframe.h
source/builders/font.cpp
source/builders/sequencetemplate.cpp
source/core/mesh.cpp
source/core/vertexarray.h
source/effects/shadowmap.cpp
source/materials/lighting.cpp
source/materials/rendermethod.cpp
source/materials/rendermethod.h
source/materials/splatmaterial.cpp
source/materials/splatmaterial.h
source/materials/technique.cpp
source/materials/technique.h
source/render/instancearray.h
source/render/object.cpp
source/render/objectinstance.cpp
source/render/scene.cpp
source/render/scene.h
source/resources/resources.cpp

index 0a9085834362f5d67b1632f63a9e95bde4f6cabe..02a0c6576a5be8ccc6e03aae559a1049fe199a27 100644 (file)
@@ -532,15 +532,11 @@ void Animation::Loader::load_kf(const string &n, bool c)
 
 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));
index 5fb3403ab8d6b72312f6bef1e283f91fb45a7457..8de888b3f51490df3df03e944d17d44ce565ddff 100644 (file)
@@ -62,7 +62,7 @@ Armature::Loader::Loader(Armature &a):
 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);
 }
 
index d6466505868eb8bc691f15969df8f0783d76e74b..e0d8d0d8a48679bbd0741a9f5461a3e4fc15bbc0 100644 (file)
@@ -55,11 +55,6 @@ KeyFrame::Loader::Loader(KeyFrame &k, Collection *c):
        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);
@@ -67,11 +62,7 @@ void KeyFrame::Loader::pose(const string &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)
@@ -96,7 +87,7 @@ void KeyFrame::Loader::scaling(float x, float y, float z)
 
 void KeyFrame::Loader::transform()
 {
-       load_sub(obj.transform);
+       sub(obj.transform).load();
 }
 
 void KeyFrame::Loader::uniforms()
index 2abe716794310d8d7b7eb27b35a3979fedaa73bb..78b145c188eb22c523aa77ce1d155db09a400dbb 100644 (file)
@@ -19,19 +19,12 @@ class MSPGL_API KeyFrame
 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);
index 89a70cb34b46b174c19600f4d6e3efdf4a5d800a..7f0335d87a77368df17c29690070ba841e3f01fa 100644 (file)
@@ -136,7 +136,7 @@ void Font::Loader::glyph(unsigned c)
 {
        Glyph gl;
        gl.code = c;
-       load_sub(gl);
+       sub(gl).load();
        obj.glyphs.insert(GlyphMap::value_type(c, gl));
 }
 
@@ -152,11 +152,7 @@ void Font::Loader::ligature(unsigned l, unsigned r, unsigned g)
 
 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)
index 80c8039c9760d5add887a4e8e87a57a39b1e372e..ec24ccad48eff1197d69d49f840a43fb4f8753e7 100644 (file)
@@ -82,11 +82,9 @@ void SequenceTemplate::Loader::clear()
 
 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));
 }
 
@@ -109,10 +107,8 @@ void SequenceTemplate::Loader::postprocessor()
 
 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));
 }
@@ -147,9 +143,7 @@ void SequenceTemplate::Loader::step(const string &tag, const string &rend)
        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);
 }
@@ -229,7 +223,7 @@ void SequenceTemplate::Step::Loader::set_inline_base_name(const string &n)
 
 void SequenceTemplate::Step::Loader::depth_test()
 {
-       load_sub(obj.depth_test);
+       sub(obj.depth_test).load();
 }
 
 void SequenceTemplate::Step::Loader::depth_compare(Predicate c)
@@ -239,11 +233,7 @@ 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)
@@ -253,7 +243,7 @@ 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
index 2f1fcd889c53fa5a41b976a22d9dc426f430b8c9..6e3a2b93a922a73e80e41d230a46735bd6872b06 100644 (file)
@@ -260,7 +260,7 @@ void Mesh::Loader::storage(const vector<VertexAttribute> &attrs)
 
 void Mesh::Loader::vertices()
 {
-       load_sub(obj.vertices);
+       sub(obj.vertices).load();
        if(allow_gl_calls)
                obj.check_buffers(VERTEX_BUFFER);
 }
@@ -274,7 +274,7 @@ void Mesh::Loader::vertices_with_format(const vector<VertexAttribute> &a)
 void Mesh::Loader::batch(PrimitiveType p)
 {
        Batch btc(p);
-       load_sub(btc);
+       sub(btc).load();
        obj.add_batch(move(btc));
 }
 
index 1dd312a2a2b2c11dc920ccc081abd5fb333332da..94a74e99e0131a3cf7c158154e7a24eb0573dc4f 100644 (file)
@@ -30,6 +30,8 @@ public:
        class MSPGL_API Loader: public DataFile::Loader, public VertexArrayBuilder
        {
        public:
+               using Object = VertexArray;
+
                Loader(VertexArray &);
        };
 
index e8289f03a5f2be9b7b1d074104517e18734002e4..c0c308c2a4a81ab1e9d7f2dc3aaadf0da50dc1ea 100644 (file)
@@ -330,7 +330,7 @@ void ShadowMap::Template::Loader::light(const string &name)
 {
        ShadowedLight light;
        light.light = &get_collection().get<Light>(name);
-       load_sub(light);
+       sub(light).load();
        obj.lights.push_back(light);
 }
 
index 016ee92efcc2c0d9711f5ea5bd9218f72d5f0b9f..2984f57cc6c90f833c2402890a1b2c526149527b 100644 (file)
@@ -143,10 +143,7 @@ void Lighting::Loader::light(const string &name)
 
 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
index 789fa0d52389bfd0e25adc6fdcfffce55301b323..de3656f83df5147ae52d87ccb2ec8d3aaaa62622 100644 (file)
@@ -180,11 +180,6 @@ void RenderMethod::Loader::init_actions()
        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)
@@ -193,7 +188,7 @@ void RenderMethod::Loader::finish()
 
 void RenderMethod::Loader::blend()
 {
-       load_sub(obj.blend);
+       sub(obj.blend).load();
 }
 
 void RenderMethod::Loader::blend_factors(BlendFactor src, BlendFactor dest)
@@ -203,9 +198,7 @@ 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();
 }
 
@@ -235,8 +228,7 @@ void RenderMethod::Loader::texture(const string &n)
                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()
@@ -251,7 +243,7 @@ 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)
index f41a0b4240f09e41029b832c56f03017bf53f585..340a862031247a32c52d83bf6bd2c830d0f8dd90 100644 (file)
@@ -30,8 +30,6 @@ public:
        class MSPGL_API Loader: public DataFile::CollectionObjectLoader<RenderMethod>
        {
        private:
-               std::string inline_base_name;
-
                static ActionMap shared_actions;
 
        public:
@@ -39,10 +37,6 @@ public:
        private:
                void init_actions() override;
        
-       public:
-               void set_inline_base_name(const std::string &);
-
-       private:
                void finish() override;
 
                void blend();
index a86d30921f4040e1e98171209e1e808ac0dd7313..6a3202846e8f475c56897f138864526c7839c3b5 100644 (file)
@@ -192,7 +192,7 @@ void SplatMaterial::Loader::init_actions()
        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()
@@ -236,11 +236,11 @@ void SplatMaterial::Loader::map_storage(MapArray SplatMaterial::*array, PixelFor
        (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;
index 9928440ba353684587f349081f76897d30208668..8d6eb973d54c4d54f77292bfe4ebb873fc36df8c 100644 (file)
@@ -29,7 +29,7 @@ public:
                void finish() override;
 
                void map_storage(MapArray SplatMaterial::*, PixelFormat, unsigned, unsigned);
-               void sub();
+               void sub_mat();
        };
 
 private:
index 4418b1df2a3fee1aaba1e09b435a53ad3c57372e..ada0e8bb6449f24a6770a99581027640333b9133 100644 (file)
@@ -123,11 +123,6 @@ void Technique::Loader::init_actions()
        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();
@@ -138,10 +133,7 @@ void Technique::Loader::inherit(const string &n)
 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");
@@ -185,7 +177,7 @@ void Technique::InheritLoader::texture(const string &slot, const string &name)
 void Technique::InheritLoader::uniforms()
 {
        ProgramData shdata;
-       load_sub(shdata);
+       sub(shdata).load();
        obj.replace_uniforms(shdata);
 }
 
index 8656770e4df8aab86952791b56d999e5785bcc8b..92ee093565b91531a0b581df75c636d2024d6f28 100644 (file)
@@ -21,8 +21,6 @@ public:
        class MSPGL_API Loader: public Msp::DataFile::CollectionObjectLoader<Technique>
        {
        private:
-               std::string inline_base_name;
-
                static ActionMap shared_actions;
 
        public:
@@ -30,10 +28,6 @@ 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 &);
        };
index c622f6e70b18834f95fbfde1fd36530a393959dd..2afecd046b1cfd5cab3fb0f4711b61ef06ce1ea4 100644 (file)
@@ -185,8 +185,7 @@ inline void InstanceArray<T>::Instance::set_matrix(const Matrix &m)
 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
index 9a75ff55197e93f655ba64582fdd8372cba34460..0888aa9fda27aee12bacef43733002868f500ee8 100644 (file)
@@ -249,11 +249,7 @@ void Object::LodLoader::mesh(const string &n)
 
 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)
@@ -263,14 +259,7 @@ 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
index a41f4e29227670316213d7616572ec4996ce5da0..66f24185ecc8d1a9085733221144ac939dc5297b 100644 (file)
@@ -36,7 +36,7 @@ ObjectInstance::Loader::Loader(ObjectInstance &o):
 void ObjectInstance::Loader::transform()
 {
        Transform trn;
-       load_sub(trn);
+       sub(trn).load();
        obj.set_matrix(trn.to_matrix());
 }
 
index fd3ce9ba922be3f0892a94a01a266eeafc435a9f..4d8732aa96a07582297fc3b6237cde8aaf53ef25 100644 (file)
@@ -32,8 +32,6 @@ Scene::GenericLoader::TypeRegistry &Scene::get_scene_registry()
 }
 
 
-unsigned Scene::Loader::inline_counter = 0;
-
 Scene::Loader::Loader(Scene &s, Collection &c, ContentMap *m):
        DataFile::CollectionObjectLoader<Scene>(s, &c),
        content(m)
@@ -47,11 +45,9 @@ Scene::Loader::Loader(Scene &s, Collection &c, ContentMap *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)
@@ -61,13 +57,12 @@ 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)
@@ -77,10 +72,7 @@ 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
index 353aa048568e3bde53005d2dd83e3a1af99fe629..8dfd50d58e6b6baecbf73bc8c261eb0510db6096 100644 (file)
@@ -32,8 +32,7 @@ protected:
 
        private:
                ContentMap *content;
-
-               static unsigned inline_counter;
+               unsigned inline_counter = 0;
 
        public:
                Loader(Scene &s, Collection &c): Loader(s, c, nullptr) { }
index fd6c306b0fc8fb91f4d00bfc214de2c07a61fbd8..2c38eac62b48de0ea8ae7de5f80d4d93a620b442 100644 (file)
@@ -292,9 +292,7 @@ Resources::Loader::Loader(Resources &r):
 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();
 }