From: Mikko Rasa Date: Tue, 7 Apr 2015 12:19:27 +0000 (+0300) Subject: Only use postprocessors that can be supported X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=dfe3dd563981883f3b7c826102fed33c7ff0d12d;p=r2c2.git Only use postprocessors that can be supported --- 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); diff --git a/source/3d/view.h b/source/3d/view.h index 5be2d8c..a191a15 100644 --- a/source/3d/view.h +++ b/source/3d/view.h @@ -22,11 +22,12 @@ protected: Msp::GL::Pipeline pipeline; Sky3D sky; Msp::GL::ShadowMap shadow; - Msp::GL::ColorCurve colorcurve; - Msp::GL::AmbientOcclusion ambient_occlusion; + Msp::GL::ColorCurve *colorcurve; + Msp::GL::AmbientOcclusion *ambient_occlusion; public: View3D(Layout3D &, unsigned, unsigned); + ~View3D(); Layout3D &get_layout() const { return layout; } Msp::GL::Camera &get_camera() { return camera; }