X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Fview.cpp;h=40a168f86fc7e5986dd14db78de668b0680c3900;hb=dfe3dd563981883f3b7c826102fed33c7ff0d12d;hp=9fd5684f6ab50851f82c42c8ba10a25da16b3abc;hpb=46aa663ef44397ca9e33b8248896d56c58002b35;p=r2c2.git diff --git a/source/3d/view.cpp b/source/3d/view.cpp index 9fd5684..40a168f 100644 --- a/source/3d/view.cpp +++ b/source/3d/view.cpp @@ -15,8 +15,7 @@ View3D::View3D(Layout3D &l, unsigned w, unsigned h): height(h), pipeline(w, h), sky(layout.get_catalogue()), - shadow(4096, layout.get_scene(), layout.get_sun()), - ambient_occlusion(w, h, 100) + shadow(4096, layout.get_scene(), layout.get_sun()) { pipeline.set_hdr(true); pipeline.set_camera(&camera); @@ -36,9 +35,28 @@ View3D::View3D(Layout3D &l, unsigned w, unsigned h): pass->set_depth_test(&GL::DepthTest::lequal()); pass->set_blend(&GL::Blend::alpha()); - pipeline.add_postprocessor(ambient_occlusion); - colorcurve.set_srgb(); - pipeline.add_postprocessor(colorcurve); + try + { + ambient_occlusion = new GL::AmbientOcclusion(w, h, 100); + pipeline.add_postprocessor(*ambient_occlusion); + } + catch(...) + { + delete ambient_occlusion; + ambient_occlusion = 0; + } + + try + { + colorcurve = new GL::ColorCurve; + colorcurve->set_srgb(); + pipeline.add_postprocessor(*colorcurve); + } + catch(...) + { + delete colorcurve; + colorcurve = 0; + } update_shadow_area(); layout.get_layout().signal_object_added.connect(sigc::hide(sigc::mem_fun(this, &View3D::update_shadow_area))); @@ -51,6 +69,12 @@ View3D::View3D(Layout3D &l, unsigned w, unsigned h): view_all(); } +View3D::~View3D() +{ + delete colorcurve; + delete ambient_occlusion; +} + Ray View3D::create_ray(int x, int y) const { return create_ray(x*2.0f/width-1.0f, y*2.0f/height-1.0f);