Allow renderables to be specified in SequenceTemplate passes
authorMikko Rasa <tdb@tdb.fi>
Wed, 14 Apr 2021 15:26:39 +0000 (18:26 +0300)
committerMikko Rasa <tdb@tdb.fi>
Wed, 14 Apr 2021 15:26:39 +0000 (18:26 +0300)
source/builders/sequencebuilder.cpp
source/builders/sequencetemplate.cpp
source/builders/sequencetemplate.h

index 3abfca81f3d6a3f0b7263c0ca98b18369c91dba6..658ded0bc697a57bc36f8ca8b6548c4083d7ec25 100644 (file)
@@ -16,7 +16,7 @@ SequenceBuilder::SequenceBuilder(const SequenceTemplate &t):
 {
        const vector<SequenceTemplate::Step> &steps = tmpl.get_steps();
        for(vector<SequenceTemplate::Step>::const_iterator i=steps.begin(); i!=steps.end(); ++i)
-               renderables[i->slot_name] = 0;
+               renderables[i->slot_name] = i->default_renderable;
        const vector<SequenceTemplate::PostProcessor> &postprocs = tmpl.get_postprocessors();
        for(SequenceTemplate::PostProcessorArray::const_iterator i=postprocs.begin(); i!=postprocs.end(); ++i)
                if(!i->slot_name.empty())
index 46ffec702c300e5ae5f393abdbdabc8929525c9f..f158c630083b8e82110028c031c4edfe63bb2396 100644 (file)
@@ -5,7 +5,9 @@
 #include "bloom.h"
 #include "colorcurve.h"
 #include "lighting.h"
+#include "object.h"
 #include "resources.h"
+#include "scene.h"
 #include "sequencetemplate.h"
 #include "tests.h"
 
@@ -75,9 +77,10 @@ SequenceTemplate::Loader::Loader(SequenceTemplate &t, Collection &c):
        add("multisample", &Loader::multisample_range);
        add("postprocessor", &Loader::postprocessor);
        add("step", &Loader::step);
+       add("step", &Loader::step_with_slot);
 
        // Deprecated
-       add("pass", &Loader::step);
+       add("pass", &Loader::step_with_slot);
 
        obj.resources = &c;
 }
@@ -109,7 +112,12 @@ void SequenceTemplate::Loader::postprocessor(const string &slot)
        obj.postprocessors.push_back(pp);
 }
 
-void SequenceTemplate::Loader::step(const string &tag, const string &rend)
+void SequenceTemplate::Loader::step(const string &tag)
+{
+       step_with_slot(tag, string());
+}
+
+void SequenceTemplate::Loader::step_with_slot(const string &tag, const string &rend)
 {
        Step stp;
        stp.tag = tag;
@@ -143,6 +151,8 @@ void SequenceTemplate::Step::Loader::init()
        add("depth_test", &Loader::depth_test_predefined);
        add("lighting", &Loader::lighting);
        add("lighting", &Loader::lighting_inline);
+       add("object", &Loader::object);
+       add("scene", &Loader::scene);
 }
 
 void SequenceTemplate::Step::Loader::blend_predefined(const string &name)
@@ -196,10 +206,15 @@ void SequenceTemplate::Step::Loader::lighting(const string &name)
        obj.lighting.keep();
 }
 
-/*void SequenceTemplate::Step::Loader::scene(const string &name)
+void SequenceTemplate::Step::Loader::object(const string &name)
 {
-       obj.default_renderable = get_collection().get<Scene>(name);
-}*/
+       obj.default_renderable = &get_collection().get<GL::Object>(name);
+}
+
+void SequenceTemplate::Step::Loader::scene(const string &name)
+{
+       obj.default_renderable = &get_collection().get<Scene>(name);
+}
 
 } // namespace GL
 } // namespace Msp
index 12ccd91d949cb138bac42171cd604e3a6a0c4c02..596def5064950d9741ff64d8626a11756c3c1c9d 100644 (file)
@@ -14,6 +14,7 @@ namespace GL {
 
 class DepthTest;
 class Lighting;
+class Renderable;
 
 class SequenceTemplate
 {
@@ -55,7 +56,8 @@ public:
                void multisample(unsigned);
                void multisample_range(unsigned, unsigned);
                void postprocessor(const std::string &);
-               void step(const std::string &, const std::string &);
+               void step(const std::string &);
+               void step_with_slot(const std::string &, const std::string &);
        };
 
        struct Step
@@ -74,8 +76,8 @@ public:
                        void depth_test_predefined(const std::string &);
                        void lighting(const std::string &);
                        void lighting_inline();
-                       // TODO requires support for scenes in Resources
-                       //void scene(const std::string &);
+                       void object(const std::string &);
+                       void scene(const std::string &);
                };
 
                std::string tag;
@@ -83,7 +85,7 @@ public:
                RefPtr<const DepthTest> depth_test;
                RefPtr<const Blend> blend;
                std::string slot_name;
-               //Renderable *default_renderable;
+               Renderable *default_renderable;
 
                ~Step();
        };