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);
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)));
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);
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; }