Changed the OpenGL part and the GLSL shaders to use UBO and
[demo] / src / renderer.h
index 23471f5..9605aa3 100644 (file)
@@ -1,23 +1,50 @@
 #ifndef RENDERER_H_
 #define RENDERER_H_
 
+#include <gmath/gmath.h>
+
 class OrbitCamera;
 class Object;
 class Scene;
 class ShaderProgram;
 class Texture;
+class UniformBuffer;
+
+enum {
+       MATRIX_UNIFORMS = 0,
+       SHADING_UNIFORMS = 1,
+       SKY_MATRIX_UNIFORMS = 2,
+       MORPHING_UNIFORMS = 3,
+       MORPHING_SHADING_UNIFORMS = 4,
+};
+
+struct BaseVertUniforms {
+       Mat4 mview;
+       Mat4 mmviewproj;
+       Mat4 mmod;
+};
+
+struct BaseFragUniforms {
+       Vec4 diffuse;
+       Vec4 specular;
+       float shininess;
+       float fog_density;
+};
+
+struct SkyVertUniforms {
+       Mat4 mviewproj;
+};
 
 class Renderer {
 protected:
-       int diff_loc;
-       int spec_loc;
-       int shin_loc;
-       int mmviewproj_loc;
-       int mview_loc;
-       int mmod_loc;
-       int fog_loc;
-       int dstex_loc;
-       int stex_loc;
+       BaseVertUniforms vu;
+       UniformBuffer *vbuf;
+
+       BaseFragUniforms fu;
+       UniformBuffer *fbuf;
+
+       SkyVertUniforms svu;
+       UniformBuffer *svbuf;
 
        ShaderProgram *sprog;
 
@@ -26,8 +53,8 @@ protected:
 
        Texture *skytex, *dskytex;
 
-       virtual void draw_object(Object *object) const;
-       virtual void draw_skybox() const;
+       virtual void draw_object(Object *object);
+       virtual void draw_skybox();
 
 public:
        float fog_density;
@@ -39,10 +66,10 @@ public:
        virtual ~Renderer();
 
        virtual bool create();
-       virtual void draw() const;
+       virtual void draw();
 
        virtual void set_sky_tex(Texture *stex);
        virtual void set_diffuse_sky_tex(Texture *dstex);
 };
 
-#endif // RENDERER_H_
\ No newline at end of file
+#endif // RENDERER_H_