X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Frenderer.h;h=9605aa3952057bcb8fe39be00ac1b0045b49f4d7;hb=05d269a194496bcef85da78652b947f5bf1c9bcf;hp=776ad9d72896c47ca088396405ec797030e7f030;hpb=369d75c73bf926a6dbcf4d740c8664bbb401602a;p=demo diff --git a/src/renderer.h b/src/renderer.h index 776ad9d..9605aa3 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -1,36 +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 - */ +#include - -class Camera; +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: + BaseVertUniforms vu; + UniformBuffer *vbuf; + + BaseFragUniforms fu; + UniformBuffer *fbuf; + + SkyVertUniforms svu; + UniformBuffer *svbuf; + 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(); - virtual bool load_shader_program(const char *vfname, const char *ffname) = 0; - virtual void use_shader_program() = 0; + virtual bool create(); + virtual void draw(); - virtual bool create() = 0; - 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_