X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fopengl%2Fcommands_backend.cpp;h=62d952e091a557c56f8a9d3856fbba65d3277ee2;hb=99ca354f18119f82f1adeca100cd665a8f640317;hp=e9fa8b7c02d011f1ebd4d29f006ef29f8b0f314f;hpb=5a83fca1840207999076343610bf76a6cdd6fdf5;p=libs%2Fgl.git diff --git a/source/backends/opengl/commands_backend.cpp b/source/backends/opengl/commands_backend.cpp index e9fa8b7c..62d952e0 100644 --- a/source/backends/opengl/commands_backend.cpp +++ b/source/backends/opengl/commands_backend.cpp @@ -18,9 +18,10 @@ using namespace std; namespace Msp { namespace GL { -OpenGLCommands::OpenGLCommands(): - pipeline_state(0) -{ } +void OpenGLCommands::submit_frame() +{ + glFlush(); +} void OpenGLCommands::use_pipeline(const PipelineState *ps) { @@ -31,7 +32,7 @@ void OpenGLCommands::use_pipeline(const PipelineState *ps) void OpenGLCommands::clear(const ClearValue *values) { - const Framebuffer *target = pipeline_state->get_framebuffer(); + const Framebuffer *target = (pipeline_state ? pipeline_state->get_framebuffer() : 0); if(!target) throw invalid_operation("OpenGLCommands::clear"); @@ -54,6 +55,9 @@ void OpenGLCommands::clear(const ClearValue *values) void OpenGLCommands::draw(const Batch &batch) { + if(!pipeline_state) + throw invalid_operation("OpenGLCommands::draw"); + pipeline_state->apply(); void *data_ptr = reinterpret_cast(batch.get_offset()); glDrawElements(batch.gl_prim_type, batch.size(), batch.gl_index_type, data_ptr); @@ -61,6 +65,9 @@ void OpenGLCommands::draw(const Batch &batch) void OpenGLCommands::draw_instanced(const Batch &batch, unsigned count) { + if(!pipeline_state) + throw invalid_operation("OpenGLCommands::draw_instanced"); + static Require req(ARB_draw_instanced); pipeline_state->apply(); @@ -70,9 +77,11 @@ void OpenGLCommands::draw_instanced(const Batch &batch, unsigned count) void OpenGLCommands::resolve_multisample(Framebuffer &target) { - static Require _req(EXT_framebuffer_blit); + const Framebuffer *source = (pipeline_state ? pipeline_state->get_framebuffer() : 0); + if(!source) + throw invalid_operation("OpenGLCommands::draw"); - const Framebuffer *source = pipeline_state->get_framebuffer(); + static Require _req(EXT_framebuffer_blit); unsigned width = min(source->get_width(), target.get_width()); unsigned height = min(source->get_height(), target.get_height());