X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frenderer.h;h=f997171c4403e9dfb8759833c1aea5b1ae80995c;hp=973e1b00263330101aca291ccef3c38a75e5e82c;hb=HEAD;hpb=2341b3575c874b1960814264fa759ad584bf3134 diff --git a/source/renderer.h b/source/renderer.h deleted file mode 100644 index 973e1b00..00000000 --- a/source/renderer.h +++ /dev/null @@ -1,188 +0,0 @@ -#ifndef MSP_GL_RENDERER_H_ -#define MSP_GL_RENDERER_H_ - -#include -#include -#include "matrix.h" -#include "programdata.h" -#include "tag.h" - -namespace Msp { -namespace GL { - -class Batch; -class Buffer; -class Camera; -class Clipping; -class Material; -class Mesh; -class Lighting; -class Program; -class Renderable; -class Texture; -class Texturing; -class VertexSetup; -class WindingTest; - -/** -A class for supervising the rendering process. While many Renderables (in -particular, Objects and Scenes) can by rendered without a Renderer, using one -will often be more efficient. This is especially true for ObjectInstances. - -The Renderer works by deferring GL state changes until something is actually -being drawn. This avoids many unnecessary GL calls if consecutive renderables -use the same resources. - -A state stack is provided to help with state scoping. Typically a Renderable -will push the current state on entry, set whatever state it requires, render -itself, and pop the state when it's done. An RAII helper class is provided for -the push/pop operation. -*/ -class Renderer -{ -public: - class Push - { - private: - Renderer &renderer; - - public: - Push(Renderer &r): renderer(r) { renderer.push_state(); } - ~Push() { renderer.pop_state(); } - }; - - class Exclude - { - private: - Renderer &renderer; - const Renderable &renderable; - - public: - Exclude(Renderer &r, const Renderable &e): renderer(r), renderable(e) { renderer.exclude(renderable); } - ~Exclude() { renderer.include(renderable); } - }; - -private: - struct State - { - const Camera *camera; - Matrix modelview_matrix; - const Texture *texture; - const Texturing *texturing; - unsigned lowest_effect_texunit; - const Material *material; - const Lighting *lighting; - Matrix lighting_matrix; - const Clipping *clipping; - Matrix clipping_matrix; - const Program *shprog; - unsigned shdata_count; - const Mesh *mesh; - const VertexSetup *vertex_setup; - const WindingTest *winding_test; - bool reverse_winding; - unsigned object_lod_bias; - - State(); - }; - - enum ChangeMask - { - LEGACY_MATRIX = 1, - MODERN_MATRIX = 2, - MATRIX = LEGACY_MATRIX|MODERN_MATRIX, - LEGACY_LIGHTING = 4, - LEGACY_CLIPPING = 8, - SHADER_DATA = 16, - MATERIAL_SHDATA = 32, - STANDARD_SHDATA = 64, - LEGACY_PROJECTION = 128 - }; - - const Camera *default_camera; - unsigned char changed; - bool matrices_loaded; - std::vector state_stack; - State *state; - ProgramData standard_shdata; - std::vector shdata_stack; - std::set excluded; - -public: - Renderer(const Camera *); - ~Renderer(); - - /** Resets all internal state and restarts rendering. There must be no - unpopped state in the stack. It is permissible to call begin() multiple - times without an intervening end(). - - Deprecated; use end() and set_camera() instead.*/ - void begin(const Camera *); - - /** Sets the camera to render from. The modelview matrix is reset to the - camera's view matrix. */ - void set_camera(const Camera &); - - const Camera *get_camera() const { return state->camera; } - - /** Replaces the Renderer's modelview matrix. */ - void set_matrix(const Matrix &); - - /** Applies a transform to the Renderer's modelview matrix. */ - void transform(const Matrix &); - - /** Returns the current modelview matrix. */ - const Matrix &get_matrix() const { return state->modelview_matrix; } - - void set_texture(const Texture *); - void set_texturing(const Texturing *); - unsigned allocate_effect_texunit(); - void set_material(const Material *); - - void set_lighting(const Lighting *); - void set_clipping(const Clipping *); - - /** Sets the shader program to use. An initial set of data can be set as - well, with the same semantics as add_shader_data. */ - void set_shader_program(const Program *prog, const ProgramData *data = 0); - - /** Adds another set of data to be use with shader programs. The data is - independent of any shader program changes and remains in effect until the - Renderer state is popped. */ - void add_shader_data(const ProgramData &data); - - void set_mesh(const Mesh *); - void set_vertex_setup(const VertexSetup *); - void set_winding_test(const WindingTest *); - void set_reverse_winding(bool); - - void set_object_lod_bias(unsigned); - unsigned get_object_lod_bias() const { return state->object_lod_bias; } - - /** Saves the current state so it can be restored later. */ - void push_state(); - - /** Restores a previously saved state. Must be matched with an earlier - push_state call. */ - void pop_state(); - - /** Unbinds all objects and resets related state. There must be no unpopped - state in the stack. The Renderer remains valid and may be reused for - further rendering. */ - void end(); - - void exclude(const Renderable &); - void include(const Renderable &); - - void render(const Renderable &, const Tag & = Tag()); - void draw(const Batch &); - void draw_instanced(const Batch &, unsigned); - -private: - void apply_state(); -}; - -} // namespace GL -} // namespace Msp - -#endif