void Renderer::pop_state()
{
- if(state_stack.size()==1)
+ if(state_stack.size()<=1)
throw stack_underflow("Renderer::pop_state");
uintptr_t old_pipeline = current_state->pipeline_key;
void Renderer::draw(const Batch &batch)
{
apply_state();
- batch.refresh(frame_index);
- PipelineState &ps = get_pipeline_state();
- ps.set_primitive_type(batch.get_type());
- commands.use_pipeline(&ps);
+ apply_batch(batch);
commands.draw(batch);
}
void Renderer::draw_instanced(const Batch &batch, unsigned count)
{
apply_state();
+ apply_batch(batch);
+ commands.draw_instanced(batch, count);
+}
+
+void Renderer::apply_batch(const Batch &batch)
+{
batch.refresh(frame_index);
PipelineState &ps = get_pipeline_state();
ps.set_primitive_type(batch.get_type());
+ if(batch.get_type()==PATCHES)
+ ps.set_patch_size(batch.get_patch_size());
commands.use_pipeline(&ps);
- commands.draw_instanced(batch, count);
}
void Renderer::dispatch(unsigned count_x, unsigned count_y, unsigned count_z)