--- /dev/null
+#include <GL/glew.h>
+
+#include "object.h"
+#include "scene.h"
+
+#include "opengl/mesh-gl.h"
+#include "opengl/renderer-gl.h"
+#include "opengl/shader-gl.h"
+#include "opengl/texture-gl.h"
+
+RendererGL::RendererGL()
+{
+ sprog = 0;
+ scene = 0;
+ camera = 0;
+}
+
+RendererGL::RendererGL(ShaderProgram *sprog, Scene *scene, Camera *camera)
+{
+ this->sprog = sprog;
+ this->scene = scene;
+ this->camera = camera;
+}
+
+RendererGL::~RendererGL()
+{
+ destroy_shaders();
+}
+
+void RendererGL::draw() const
+{
+ /* use shaders */
+ if(!sprog) {
+ fprintf(stderr, "No active shaders found. Using default.\n");
+ glUseProgram(0);
+ }
+ else {
+ sprog->use();
+ }
+
+ /* draw all scene components */
+ for(size_t i=0; i<scene->objects.size(); ++i) {
+ draw_object(scene->objects[i]);
+ }
+}
+
+
+bool RendererGL::init_shaders(const char *vfname, const char *ffname)
+{
+ if(sprog)
+ delete sprog;
+
+ sprog = new ShaderProgramGL;
+ if(!sprog->load(vfname, ffname))
+ goto error;
+
+ if(!sprog->link())
+ goto error;
+
+ sprog->use();
+
+ glEnable(GL_DEPTH_TEST);
+ glEnable(GL_CULL_FACE);
+
+ return true;
+
+error:
+ destroy_shaders();
+ return false;
+}
+
+void RendererGL::destroy_shaders()
+{
+ if(sprog) {
+ delete sprog;
+ sprog = 0;
+ }
+}
+
+void RendererGL::draw_object(Object *object) const
+{
+ object->material->dtex->bind();
+
+
+
+ object->mesh->draw();
+}
\ No newline at end of file