]> git.tdb.fi Git - libs/gl.git/commitdiff
Support loading sequences in the viewer
authorMikko Rasa <tdb@tdb.fi>
Wed, 14 Apr 2021 15:35:38 +0000 (18:35 +0300)
committerMikko Rasa <tdb@tdb.fi>
Wed, 14 Apr 2021 15:35:38 +0000 (18:35 +0300)
tools/viewer.cpp

index ffdc4ec6eb513e4ad2955ddfedc8004f53032692..674fbf16aafed00631b4dc6e42f13a8f42c5c504 100644 (file)
@@ -17,6 +17,8 @@
 #include <msp/gl/mesh.h>
 #include <msp/gl/object.h>
 #include <msp/gl/sequence.h>
+#include <msp/gl/sequencebuilder.h>
+#include <msp/gl/sequencetemplate.h>
 #include <msp/gl/renderer.h>
 #include <msp/gl/resources.h>
 #include <msp/gl/simplescene.h>
@@ -65,7 +67,7 @@ private:
        Input::Mouse mouse;
        Resources resources;
        GL::WindowView view;
-       GL::Sequence sequence;
+       GL::Sequence *sequence;
        GL::Renderable *renderable;
        GL::AnimatedObject *anim_object;
        GL::AnimationPlayer *anim_player;
@@ -121,7 +123,7 @@ Viewer::Viewer(int argc, char **argv):
        gl_ctx(window, opts.gl_opts),
        mouse(window),
        view(window, gl_ctx),
-       sequence(view),
+       sequence(0),
        renderable(0),
        anim_object(0),
        anim_player(0),
@@ -186,6 +188,12 @@ Viewer::Viewer(int argc, char **argv):
                else
                        renderable = &resources.get<GL::Scene>(opts.renderable_name);
        }
+       else if(ext==".seq")
+       {
+               GL::SequenceTemplate *tmpl = load<GL::SequenceTemplate>(opts.renderable_name);
+               GL::SequenceBuilder bld(*tmpl);
+               sequence = bld.build(view);
+       }
        else
                throw usage_error("Unknown renderable type");
 
@@ -212,12 +220,16 @@ Viewer::Viewer(int argc, char **argv):
        camera.set_up_direction(GL::Vector3(0, 0, 1));
        update_camera();
 
-       GL::Sequence::Step &step = sequence.add_step(0, *renderable);
-       step.set_lighting(&lighting);
-       step.set_depth_test(&GL::DepthTest::lequal());
-       step.set_blend(&GL::Blend::alpha());
+       if(!sequence)
+       {
+               sequence = new GL::Sequence(view);
+               GL::Sequence::Step &step = sequence->add_step(0, *renderable);
+               step.set_lighting(&lighting);
+               step.set_depth_test(&GL::DepthTest::lequal());
+               step.set_blend(&GL::Blend::alpha());
+       }
 
-       view.set_content(&sequence);
+       view.set_content(sequence);
        view.set_camera(&camera);
 }
 
@@ -239,6 +251,7 @@ Viewer::~Viewer()
 {
        delete anim_player;
        delete anim_object;
+       delete sequence;
 }
 
 int Viewer::main()