]> git.tdb.fi Git - libs/gl.git/commitdiff
Support inline scenes within other scenes
authorMikko Rasa <tdb@tdb.fi>
Thu, 14 Oct 2021 09:02:37 +0000 (12:02 +0300)
committerMikko Rasa <tdb@tdb.fi>
Thu, 14 Oct 2021 09:02:37 +0000 (12:02 +0300)
This is useful for creating scenes where transparent objects are rendered
after opaque ones, without the entire scene being Z-sorted.

source/render/scene.cpp
source/render/scene.h

index 4b7aee1a8574499b59c169b976fd34cf7dc22feb..0f7737227e8da37c4ba69e0260d99f4e893b87c0 100644 (file)
@@ -98,6 +98,7 @@ Scene::Loader::Loader(Scene &s, Collection &c, ContentMap *m):
        add("object", &Loader::object);
        add("object", &Loader::object_tagged);
        add("scene", &Loader::scene);
+       add("scene", &Loader::scene_inline);
 }
 
 void Scene::Loader::object(const string &n)
@@ -120,5 +121,13 @@ void Scene::Loader::scene(const string &n)
        obj.add(get_collection().get<Scene>(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);
+}
+
 } // namespace GL
 } // namespace Msp
index 96ecee97ef559f7f15ff6b4595b7c92046ae25ba..f89f10daf26691412de2f950925b11b524d9c783 100644 (file)
@@ -37,6 +37,7 @@ protected:
                void object(const std::string &);
                void object_tagged(const std::string &, const std::string &);
                void scene(const std::string &);
+               void scene_inline();
        };
 
 public: