]> git.tdb.fi Git - r2c2.git/blobdiff - source/3d/view.cpp
Only use postprocessors that can be supported
[r2c2.git] / source / 3d / view.cpp
index 9fd5684f6ab50851f82c42c8ba10a25da16b3abc..40a168f86fc7e5986dd14db78de668b0680c3900 100644 (file)
@@ -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);