X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frenderer.cpp;h=c5fe3c64a8baca0d39b7966d43edc61c3efa9be4;hb=afb95d09c066b45b7a66b644c04e2d0b2cee2723;hp=53a3f45237463e5fffed3e084805326453e5fd3a;hpb=f50822b9e73a6ecdacbc4af4c4d9aba435a72386;p=libs%2Fgl.git diff --git a/source/renderer.cpp b/source/renderer.cpp index 53a3f452..c5fe3c64 100644 --- a/source/renderer.cpp +++ b/source/renderer.cpp @@ -134,14 +134,19 @@ void Renderer::add_shader_data(const ProgramData &d) ++state->shdata_count; else { - if(shdata_stack.size()>state->shdata_count) - shdata_stack.erase(shdata_stack.begin()+state->shdata_count, shdata_stack.end()); + flush_shader_data(); shdata_stack.push_back(&d); state->shdata_count = shdata_stack.size(); changed |= SHADER_DATA; } } +void Renderer::flush_shader_data() +{ + if(shdata_stack.size()>state->shdata_count) + shdata_stack.erase(shdata_stack.begin()+state->shdata_count, shdata_stack.end()); +} + void Renderer::set_mesh(const Mesh *m) { state->mesh = m; @@ -162,6 +167,11 @@ void Renderer::set_reverse_winding(bool r) state->reverse_winding = r; } +void Renderer::set_object_lod_bias(unsigned b) +{ + state->object_lod_bias = b; +} + void Renderer::push_state() { state_stack.push_back(state_stack.back()); @@ -272,6 +282,13 @@ void Renderer::draw(const Batch &batch) batch.draw(); } +void Renderer::draw_instanced(const Batch &batch, unsigned count) +{ + apply_state(); + + batch.draw_instanced(count); +} + void Renderer::apply_state() { /* We (mostly) let the objects themselves figure out if the binding has @@ -442,7 +459,8 @@ Renderer::State::State(): mesh(0), vertex_setup(0), winding_test(0), - reverse_winding(false) + reverse_winding(false), + object_lod_bias(0) { } } // namespace GL