+ // Setup OpenGL
+ pipeline = new GL::Pipeline(window.get_width(), window.get_height(), false);
+ pipeline->set_camera(&camera);
+ pipeline->add_renderable_for_pass(layout_3d->get_scene(), 0);
+ if(base_object)
+ pipeline->add_renderable(*base_object);
+ pipeline->add_renderable_for_pass(track_wrap, "unlit");
+ pipeline->add_renderable_for_pass(layout_3d->get_path_scene(), "unlit");
+ pipeline->add_renderable_for_pass(layout_3d->get_endpoint_scene(), "unlit");
+
+ light.set_position(0, -0.259, 0.966, 0);
+ lighting.attach(0, light);
+
+ GL::PipelinePass *pass = &pipeline->add_pass(0);
+ pass->lighting = &lighting;
+ pass->depth_test = &GL::DepthTest::lequal();
+
+ pass = &pipeline->add_pass("unlit");
+ pass->depth_test = &GL::DepthTest::lequal();
+ pass->blend = &GL::Blend::alpha();
+
+ pass = &pipeline->add_pass("blended");
+ pass->lighting = &lighting;
+ pass->depth_test = &GL::DepthTest::lequal();
+ pass->blend = &GL::Blend::alpha();
+
+ camera.set_up_direction(GL::Vector3(0, 0, 1));
+ camera.set_look_direction(GL::Vector3(0, 0.5, -0.866));
+
+ // Setup UI
+ root.signal_key_press.connect(sigc::mem_fun(this, &Designer::key_press));
+ root.signal_button_press.connect(sigc::mem_fun(this, &Designer::button_press));
+ root.signal_pointer_motion.connect(sigc::mem_fun(this, &Designer::pointer_motion));
+ root.signal_tooltip.connect(sigc::mem_fun(this, &Designer::tooltip));
+
+ toolbars.push_back(new Layoutbar(*this));
+ toolbars.push_back(new Trackbar(*this));
+ toolbars.push_back(new Routebar(*this));
+ toolbars.push_back(new Zonebar(*this));
+ for(vector<Toolbar *>::iterator i=toolbars.begin(); i!=toolbars.end(); ++i)
+ {
+ root.add(**i);
+ if(i!=toolbars.begin())
+ (*i)->expand(false);
+ (*i)->signal_expanded.connect(sigc::hide(sigc::mem_fun(this, &Designer::arrange_toolbars)));
+ }
+ arrange_toolbars();
+
+ GLtk::Panel *statusbar = new GLtk::Panel;
+ root.add(*statusbar);
+ statusbar->set_size(window.get_width(), 20);
+ statusbar->set_focusable(false);