+ // Setup OpenGL
+ GL::enable(GL_CULL_FACE);
+
+ 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
+ DataFile::load(ui_res, "marklin.res");
+ root = new GLtk::Root(ui_res, window);
+ 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));
+
+ toolbar = new Toolbar(*this);
+ root->add(*toolbar);
+ toolbar->set_position(0, window.get_height()-toolbar->get_geometry().h);
+ toolbar->set_focusable(false);
+
+ GLtk::Panel *statusbar = new GLtk::Panel(ui_res);
+ root->add(*statusbar);
+ statusbar->set_size(window.get_width(), 20);
+ statusbar->set_focusable(false);
+
+ lbl_status = new GLtk::Label(ui_res);
+ statusbar->add(*lbl_status);
+ lbl_status->set_geometry(GLtk::Geometry(20, 2, 300, 16));
+
+ overlay = new Overlay3D(window, camera, ui_res.get_default_font());
+
+ camera_ctl = new CameraController(*this, *root, camera);
+ camera_ctl->view_all();
+
+ const Layout3D::TrackMap &tracks = layout_3d->get_tracks();
+ for(Layout3D::TrackMap::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
+ update_track_icon(*i->second);