X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frenderer.cpp;h=d6090d7d2cd57db6fb7318f15df8d8752abcbe30;hb=b13f1bced27e0ad3e4661e645f6bafed38359120;hp=302d943727a2812e66bd6b85f748f398117bd4d9;hpb=a40fc85277dba5c34402a0e703d038efd30cc57b;p=libs%2Fgl.git diff --git a/source/renderer.cpp b/source/renderer.cpp index 302d9437..d6090d7d 100644 --- a/source/renderer.cpp +++ b/source/renderer.cpp @@ -5,7 +5,6 @@ #include "error.h" #include "lighting.h" #include "material.h" -#include "mesh.h" #include "program.h" #include "programdata.h" #include "renderable.h" @@ -22,34 +21,35 @@ using namespace std; namespace Msp { namespace GL { +Renderer::Renderer(): + default_camera(0) +{ + init(); +} + Renderer::Renderer(const Camera *c): - default_camera(c), - changed(0), - state_stack(1) + default_camera(c) { - state_stack.reserve(16); - shdata_stack.reserve(32); - state = &state_stack.back(); + init(); if(c) set_camera(*c); - else - { - standard_shdata.uniform("projection_matrix", Matrix()); - standard_shdata.uniform("eye_world_matrix", Matrix()); - } } -Renderer::~Renderer() +void Renderer::init() { - end(); + state_stack.reserve(16); + state_stack.push_back(State()); + shdata_stack.reserve(32); + state = &state_stack.back(); + + standard_shdata.uniform("projection_matrix", Matrix()); + standard_shdata.uniform("eye_world_matrix", Matrix()); } -void Renderer::begin(const Camera *c) +Renderer::~Renderer() { end(); - if(c) - set_camera(*c); } void Renderer::set_camera(const Camera &c) @@ -144,11 +144,6 @@ void Renderer::flush_shader_data() shdata_stack.erase(shdata_stack.begin()+state->shdata_count, shdata_stack.end()); } -void Renderer::set_mesh(const Mesh *m) -{ - state->mesh = m; -} - void Renderer::set_vertex_setup(const VertexSetup *vs) { state->vertex_setup = vs; @@ -235,7 +230,6 @@ void Renderer::end() shdata_stack.clear(); excluded.clear(); - Mesh::unbind(); Texturing::unbind(); Texture::unbind_from(0); Clipping::unbind(); @@ -336,17 +330,10 @@ void Renderer::apply_state() else Program::unbind(); - if(state->mesh) - state->mesh->bind(); + if(state->vertex_setup) + state->vertex_setup->bind(); else - { - Mesh::unbind(); - - if(state->vertex_setup) - state->vertex_setup->bind(); - else - VertexSetup::unbind(); - } + VertexSetup::unbind(); if(state->winding_test) { @@ -370,7 +357,6 @@ Renderer::State::State(): clipping(0), shprog(0), shdata_count(0), - mesh(0), vertex_setup(0), winding_test(0), reverse_winding(false),