quick backup of the renderer - things missing
[demo] / src / opengl / renderer-gl.cc
diff --git a/src/opengl/renderer-gl.cc b/src/opengl/renderer-gl.cc
new file mode 100644 (file)
index 0000000..5b81be3
--- /dev/null
@@ -0,0 +1,87 @@
+#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