no clue :) just to push it
[demo] / src / renderer.h
index 6ea7c02..bfd7622 100644 (file)
@@ -1,37 +1,75 @@
 #ifndef RENDERER_H_
 #define RENDERER_H_
 
-/*
-       this might change:
-       atm we are going to have 1 renderer per scene and 1 shader program
-       for the scene
- */
-class Camera;
+#include <gmath/gmath.h>
+
+class OrbitCamera;
+class Object;
 class Scene;
 class ShaderProgram;
-class Object;
+class Texture;
+class UniformBuffer;
+
+enum {
+       MATRIX_UNIFORMS = 0,
+       SHADING_UNIFORMS = 1,
+       SKY_MATRIX_UNIFORMS = 2,
+       MORPHING_MATRIX_UNIFORMS = 3,
+       MORPHING_SHADING_UNIFORMS = 4,
+};
+
+struct BaseMatrixUniforms {
+       Mat4 mview;
+       Mat4 mmviewproj;
+       Mat4 mmod;
+};
+
+struct BaseShadingUniforms {
+       Vec4 diffuse;
+       Vec4 specular;
+       float shininess;
+       float fog_density;
+};
+
+struct SkyMatrixUniforms {
+       Mat4 mviewproj;
+};
 
 class Renderer {
 protected:
+       BaseMatrixUniforms default_vs_uniforms;
+       UniformBuffer *default_vs_ub;
+
+       BaseShadingUniforms default_fs_uniforms;
+       UniformBuffer *default_fs_ub;
+
+       SkyMatrixUniforms sky_vs_uniforms;
+       UniformBuffer *sky_vs_ub;
+
        ShaderProgram *sprog;
-       virtual void draw_object(Object *object) const = 0;
+
+       /* debug shader to draw normals */
+       ShaderProgram *nprog;
+
+       Texture *skytex, *dskytex;
+
+       virtual void draw_object(Object *object);
+       virtual void draw_skybox();
 
 public:
+       float fog_density;
+
        Scene *scene;
-       Camera *camera;
+       OrbitCamera *camera;
 
        Renderer();
-       Renderer(ShaderProgram *sprog, Scene *scene, Camera *camera);
        virtual ~Renderer();
 
-       /* for the moment each Renderer creates and destroys the ShaderProgram
-       because we are using only a couple of shaders, in the future we might need a shader
-       manager that stores the shaders and replace these functions with something like:
-       void set_shader_program(ShaderProgram *sprog) */
-       virtual bool init_shaders(const char *vfname, const char *ffname) = 0;
-       virtual void destroy_shaders() = 0;
+       virtual bool create();
+       virtual void draw();
 
-       virtual void draw() const = 0;
+       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_