-#include <msp/gl/extensions/arb_direct_state_access.h>
-#include <msp/gl/extensions/ext_framebuffer_blit.h>
-#include <msp/gl/extensions/ext_framebuffer_object.h>
#include "batch.h"
#include "buffer.h"
#include "camera.h"
shdata_stack.reserve(32);
state = &state_stack.back();
add_shader_data(standard_shdata);
+ commands.use_pipeline(pipeline_state);
}
Renderer::~Renderer()
void Renderer::clear(BufferBits buffers)
{
pipeline_state.set_framebuffer(state->framebuffer);
- pipeline_state.apply();
- glClear(buffers);
+ commands.clear(buffers);
}
void Renderer::draw(const Batch &batch)
{
apply_state();
-
- batch.draw();
+ batch.refresh();
+ commands.draw(batch);
}
void Renderer::draw_instanced(const Batch &batch, unsigned count)
{
apply_state();
-
- batch.draw_instanced(count);
+ batch.refresh();
+ commands.draw_instanced(batch, count);
}
void Renderer::resolve_multisample(Framebuffer &target, BufferBits buffers)
if(target.get_width()!=width || target.get_height()!=height)
throw incompatible_data("Renderer::resolve_multisample");
- if(ARB_direct_state_access)
- glBlitNamedFramebuffer(state->framebuffer->get_id(), target.get_id(), 0, 0, width, height, 0, 0, width, height, buffers, GL_NEAREST);
- else
- {
- glBindFramebuffer(GL_READ_FRAMEBUFFER, state->framebuffer->get_id());
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, target.get_id());
-
- target.refresh();
-
- glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, buffers, GL_NEAREST);
-
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- pipeline_state.set_framebuffer(0);
- }
+ apply_state();
+ commands.resolve_multisample(target, buffers);
}
void Renderer::apply_state()
pipeline_state.set_depth_test(state->depth_test);
pipeline_state.set_stencil_test(state->stencil_test);
pipeline_state.set_blend(state->blend);
-
- pipeline_state.apply();
}