+ if(!camera || !scene)
+ return;
+
+ glClearColor(0.5, 0.5, 0.5, 1);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ if(!sprog->link())
+ return;
+
+ sprog->use();
+
+ for(size_t i=0; i<scene->objects.size(); i++) {
+ draw_object(scene->objects[i]);
+ }
+}
+
+void Renderer::draw_object(Object *object) const
+{
+ Material *m = object->material;
+
+ /* setting uniforms for material */
+
+ sprog->set_uniformf(diff_loc, m->diffuse.x, m->diffuse.y, m->diffuse.z, 1);
+ sprog->set_uniformf(spec_loc, m->specular.x, m->specular.y, m->specular.z, 1);
+ sprog->set_uniformf(shin_loc, m->shininess);
+
+ /* texture */
+
+ if (m->dtex)
+ m->dtex->bind();
+
+ /* setting uniforms for matrices */
+
+ Mat4 mmviewproj = object->transform * camera->get_view_matrix() * mprojection;
+ sprog->set_uniform_matrix(mmviewproj_loc, mmviewproj);
+
+ Mat4 mview = object->transform * camera->get_view_matrix();
+ sprog->set_uniform_matrix(mview_loc, mview);
+
+ object->mesh->update_vertex_data();
+ object->mesh->draw();