nuclear@15: #ifndef RENDERER_H_ nuclear@15: #define RENDERER_H_ nuclear@15: nuclear@72: #include "colgrade.h" nuclear@72: nuclear@23: class Level; nuclear@23: nuclear@41: class Renderer { nuclear@41: protected: nuclear@72: // render target nuclear@72: unsigned int fbo; nuclear@72: unsigned int rend_tex, rend_depth; nuclear@41: int width, height; nuclear@72: int tex_xsz, tex_ysz; nuclear@72: nuclear@72: GradePalette gradepal; nuclear@72: unsigned int post_sdr; nuclear@72: nuclear@72: virtual bool create_rtarg(); nuclear@15: nuclear@41: public: nuclear@41: Renderer(); nuclear@41: virtual ~Renderer(); nuclear@33: nuclear@41: virtual bool init(int xsz, int ysz); nuclear@23: nuclear@41: virtual int get_tangent_location() const; nuclear@41: virtual unsigned int get_current_program() const; nuclear@41: nuclear@41: virtual void resize(int xsz, int ysz); nuclear@41: nuclear@62: virtual void render_pre(const Level *level) const; nuclear@41: virtual void render(const Level *level) const = 0; nuclear@62: virtual void render_post(const Level *level) const; nuclear@74: nuclear@74: virtual GradePalette *get_grade_palette(); nuclear@74: virtual const GradePalette *get_grade_palette() const; nuclear@41: }; nuclear@41: nuclear@41: nuclear@41: class FwdRenderer : public Renderer { nuclear@41: protected: nuclear@41: unsigned int sdrprog; nuclear@41: int tang_attr; nuclear@41: nuclear@41: public: nuclear@41: FwdRenderer(); nuclear@41: ~FwdRenderer(); nuclear@41: nuclear@41: bool init(int xsz, int ysz); nuclear@41: nuclear@41: int get_tangent_location() const; nuclear@41: unsigned int get_current_program() const; nuclear@41: nuclear@41: void render(const Level *level) const; nuclear@41: }; nuclear@41: nuclear@41: nuclear@41: extern Renderer *rend; nuclear@41: nuclear@15: nuclear@15: #endif // RENDERER_H_