+bool Renderer::create()
+{
+ if(!(sprog = sdr_man->create_shader_program("default.v.glsl", "default.f.glsl"))) {
+ return false;
+ }
+
+ return true;
+}
+
+void Renderer::draw() const
+{
+ if(!camera || !scene)
+ return;
+
+ int mview_loc;
+ if((mview_loc = sprog->get_uniform_location("mview")) != -1) {
+ sprog->set_uniform_matrix(mview_loc, camera->get_view_matrix());
+ }
+
+ int mproj_loc;
+ if((mproj_loc = sprog->get_uniform_location("mproj")) != -1) {
+ sprog->set_uniform_matrix(mproj_loc, mprojection);
+ }
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ camera->set_orbit_params(phi, theta, dist);
+
+ for(size_t i=0; i<scene->objects.size(); i++) {
+ draw_object(scene->objects[i]);
+ }
+}
+
+void Renderer::draw_object(Object *object) const