]> git.tdb.fi Git - libs/demoscene.git/commitdiff
Create Stage pipeline when added to a view
authorMikko Rasa <tdb@tdb.fi>
Fri, 24 May 2019 19:29:41 +0000 (22:29 +0300)
committerMikko Rasa <tdb@tdb.fi>
Fri, 24 May 2019 19:29:41 +0000 (22:29 +0300)
Also remove add_postprocessor since it's kinda useless when the pipeline
is create at some random time during playback.

source/stage.cpp
source/stage.h

index e1ce3522753683e38d3941db0c2d2df05ab803f7..0ca5c5eec607e1f7143b54edef0eeaf10cb1ea24 100644 (file)
@@ -6,7 +6,8 @@ using namespace std;
 using namespace Msp;
 
 Stage::Stage():
-       pipeline(0)
+       pipeline(0),
+       last_view(0)
 { }
 
 Stage::~Stage()
@@ -19,11 +20,6 @@ void Stage::add_things(Demo::ThingMap &things, const string &prefix)
        things[prefix+"camera"] = static_cast<GL::Placeable *>(&camera);
 }
 
-void Stage::add_postprocessor(GL::PostProcessor &pp)
-{
-       pipeline->add_postprocessor(pp);
-}
-
 void Stage::set_camera(const GL::Camera &c)
 {
        camera.set_object_matrix(c.get_object_matrix());
@@ -53,6 +49,14 @@ void Stage::UseInView::validate() const
 
 void Stage::UseInView::start(float, float)
 {
+       if(!stage->pipeline || view!=stage->last_view)
+       {
+               stage->create_pipeline(*view);
+               if(!stage->pipeline)
+                       throw logic_error("null pipeline");
+               stage->last_view = view;
+       }
+
        view->set_camera(&stage->camera);
        view->set_content(stage->pipeline);
 }
index c108f6fcd66ddda1f9c5b9ca0cb2324d23227db9..7d4664fb2b4a2a70122abb04a5ba5e4092378c42 100644 (file)
@@ -64,15 +64,19 @@ public:
 protected:
        Msp::GL::Pipeline *pipeline;
        Msp::GL::Camera camera;
+       Msp::GL::View *last_view;
 
 public:
        Stage();
        ~Stage();
 
        virtual void add_things(Demo::ThingMap &, const std::string &);
-       void add_postprocessor(Msp::GL::PostProcessor &);
+
        void set_camera(const Msp::GL::Camera &);
        Msp::GL::Camera &get_camera() { return camera; }
+
+protected:
+       virtual void create_pipeline(Msp::GL::View &) = 0;
 };
 
 #endif