namespace Msp {
namespace GL {
-Renderer::Renderer()
+Renderer::Renderer():
+ changed(0)
{
state_stack.reserve(16);
state_stack.push_back(State());
shdata_stack.reserve(32);
state = &state_stack.back();
add_shader_data(standard_shdata);
- commands.use_pipeline(pipeline_state);
}
Renderer::~Renderer()
flush_textures();
}
- for(vector<BoundTexture>::iterator i=texture_stack.end(); i!=texture_stack.begin(); )
+ for(auto i=texture_stack.end(); i!=texture_stack.begin(); )
if((--i)->tag==tag)
{
i->replaced = texture_stack.size();
add_shader_data(standard_shdata);
excluded.clear();
- PipelineState::clear();
+ commands.use_pipeline(0);
}
void Renderer::exclude(const Renderable &renderable)
renderable.render(*this, tag);
}
-void Renderer::clear()
-{
- clear(COLOR_BUFFER_BIT|DEPTH_BUFFER_BIT|STENCIL_BUFFER_BIT);
-}
-
-void Renderer::clear(BufferBits buffers)
+void Renderer::clear(const ClearValue *values)
{
pipeline_state.set_framebuffer(state->framebuffer);
- commands.clear(buffers);
+ commands.use_pipeline(&pipeline_state);
+ commands.clear(values);
}
void Renderer::draw(const Batch &batch)
{
apply_state();
batch.refresh();
+ commands.use_pipeline(&pipeline_state);
commands.draw(batch);
}
{
apply_state();
batch.refresh();
+ commands.use_pipeline(&pipeline_state);
commands.draw_instanced(batch, count);
}
throw incompatible_data("Renderer::resolve_multisample");
pipeline_state.set_framebuffer(state->framebuffer);
+ commands.use_pipeline(&pipeline_state);
commands.resolve_multisample(target, buffers);
}
if(state->texture_count<texture_stack.size())
flush_textures();
- for(vector<BoundTexture>::const_iterator i=texture_stack.begin(); i!=texture_stack.end(); ++i)
+ for(const BoundTexture &t: texture_stack)
{
- int unit = (i->tag.id ? state->shprog->get_uniform_binding(i->tag) : i->unit);
+ int unit = (t.tag.id ? state->shprog->get_uniform_binding(t.tag) : t.unit);
if(unit>=0)
- pipeline_state.set_texture(unit, i->texture, i->sampler);
+ pipeline_state.set_texture(unit, t.texture, t.sampler);
}
bool shdata_changed = changed&SHADER_DATA;
- for(vector<BoundProgramData>::const_iterator i=shdata_stack.begin(); (!shdata_changed && i!=shdata_stack.end()); ++i)
+ for(auto i=shdata_stack.begin(); (!shdata_changed && i!=shdata_stack.end()); ++i)
shdata_changed = (i->shdata->get_generation()!=i->generation);
bool extra_shdata = (shdata_stack.size()>state->shdata_count);
{
if(extra_shdata)
shdata_stack.erase(shdata_stack.begin()+state->shdata_count, shdata_stack.end());
- for(vector<BoundProgramData>::const_iterator i=shdata_stack.begin(); i!=shdata_stack.end(); ++i)
+ for(const BoundProgramData &d: shdata_stack)
{
- i->shdata->apply(*state->shprog, pipeline_state);
- i->generation = i->shdata->get_generation();
+ d.shdata->apply(*state->shprog, pipeline_state);
+ d.generation = d.shdata->get_generation();
}
changed &= ~SHADER_DATA;
}