X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=tools%2Fviewer.cpp;h=e7af702418cc871ce5567cc016b1cf2b27166ab1;hb=a8383f1163cd020e2ce2c030e93defd2f9909a1d;hp=e19353c8adbf0c4e52b7fc90c701ddc715caa837;hpb=05b77ce8469134f6dd6fad497f3ab21cdd4129b1;p=libs%2Fgl.git diff --git a/tools/viewer.cpp b/tools/viewer.cpp index e19353c8..e7af7024 100644 --- a/tools/viewer.cpp +++ b/tools/viewer.cpp @@ -16,7 +16,9 @@ #include #include #include -#include +#include +#include +#include #include #include #include @@ -65,7 +67,7 @@ private: Input::Mouse mouse; Resources resources; GL::WindowView view; - GL::Pipeline pipeline; + 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), - pipeline(view), + sequence(0), renderable(0), anim_object(0), anim_player(0), @@ -175,9 +177,22 @@ Viewer::Viewer(int argc, char **argv): renderable = load(opts.renderable_name); else if(ext==".scene") { - GL::SimpleScene *scene = new GL::SimpleScene; - DataFile::load(*scene, opts.renderable_name, resources); - renderable = scene; + if(FS::exists(opts.renderable_name)) + { + GL::Scene::GenericLoader ldr(resources); + IO::BufferedFile in(opts.renderable_name); + DataFile::Parser parser(in, opts.renderable_name); + ldr.load(parser); + renderable = ldr.get_scene(); + } + else + renderable = &resources.get(opts.renderable_name); + } + else if(ext==".seq") + { + GL::SequenceTemplate *tmpl = load(opts.renderable_name); + GL::SequenceBuilder bld(*tmpl); + sequence = bld.build(view); } else throw usage_error("Unknown renderable type"); @@ -200,17 +215,21 @@ Viewer::Viewer(int argc, char **argv): mouse.signal_axis_motion.connect(sigc::bind_return(sigc::mem_fun(this, &Viewer::axis_motion), false)); light.set_position(GL::Vector4(0, 0, 1, 0)); - lighting.attach(0, light); + lighting.attach(light); camera.set_up_direction(GL::Vector3(0, 0, 1)); update_camera(); - GL::Pipeline::Pass &pass = pipeline.add_pass(0, *renderable); - pass.set_lighting(&lighting); - pass.set_depth_test(&GL::DepthTest::lequal()); - pass.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(&pipeline); + view.set_content(sequence); view.set_camera(&camera); } @@ -232,6 +251,7 @@ Viewer::~Viewer() { delete anim_player; delete anim_object; + delete sequence; } int Viewer::main()