X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=tools%2Fviewer.cpp;h=a1853e922f19485097ee644e80900b76c9913b1f;hb=6ba314198dce795408690456fa1f0ef559aa1532;hp=3e12321f014857d0763dd0a7c496b3479de76712;hpb=ecb3b9fafd1b225d436d23341d346a94df1fa282;p=libs%2Fgl.git diff --git a/tools/viewer.cpp b/tools/viewer.cpp index 3e12321f..a1853e92 100644 --- a/tools/viewer.cpp +++ b/tools/viewer.cpp @@ -16,10 +16,13 @@ #include #include #include +#include #include #include +#include #include #include +#include #include #include #include @@ -47,6 +50,8 @@ private: Graphics::SimpleGLWindow window; Input::Mouse mouse; Resources resources; + GL::WindowView view; + GL::Pipeline pipeline; GL::Renderable *renderable; GL::AnimatedObject *anim_object; GL::AnimationPlayer *anim_player; @@ -85,6 +90,8 @@ private: Viewer::Viewer(int argc, char **argv): window(1024, 768, false), mouse(window), + view(window, window.get_gl_context()), + pipeline(view), renderable(0), anim_object(0), anim_player(0), @@ -144,9 +151,12 @@ Viewer::Viewer(int argc, char **argv): resources.add("__.object", object); } else if(ext==".object") + renderable = load(renderable_name); + else if(ext==".scene") { - object = load(renderable_name); - renderable = object; + GL::SimpleScene *scene = new GL::SimpleScene; + DataFile::load(*scene, renderable_name, resources); + renderable = scene; } else throw usage_error("Unknown renderable type"); @@ -173,6 +183,14 @@ Viewer::Viewer(int argc, char **argv): 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()); + + view.set_content(&pipeline); + view.set_camera(&camera); } template @@ -215,16 +233,7 @@ void Viewer::tick() } window.tick(); - - GL::Framebuffer::system().clear(GL::COLOR_BUFFER_BIT|GL::DEPTH_BUFFER_BIT); - - GL::Bind bind_depth(GL::DepthTest::lequal()); - GL::Bind bind_blend(GL::Blend::alpha()); - GL::Renderer renderer(&camera); - renderer.set_lighting(&lighting); - renderable->render(renderer); - - window.swap_buffers(); + view.render(); } void Viewer::button_press(unsigned btn)