X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpipeline.cpp;h=c6260f0ee73f15d060436ec99edf3d71aa57a3bf;hb=0119ca4f792dc761e5248b76de71f2844c0e3997;hp=59e6bbb843c40bbf470087eb63b7bf9a8fa9f987;hpb=812c37a8aef84f8720a3e1efedebecd993ec75b2;p=libs%2Fgl.git diff --git a/source/pipeline.cpp b/source/pipeline.cpp index 59e6bbb8..c6260f0e 100644 --- a/source/pipeline.cpp +++ b/source/pipeline.cpp @@ -137,10 +137,14 @@ void Pipeline::render(Renderer &renderer, const Tag &tag) const if(!in_frame) setup_frame(); + const Framebuffer *out_fbo = Framebuffer::current(); + /* Binding the current object is a no-op, but this will restore the original + FBO in case an exception is thrown. */ + Bind restore_fbo(out_fbo, true); + if(target[0]) { Framebuffer &fbo = (samples ? target_ms->fbo : target[0]->fbo); - // XXX exception safety fbo.bind(); fbo.clear(COLOR_BUFFER_BIT|DEPTH_BUFFER_BIT); } @@ -167,11 +171,11 @@ void Pipeline::render(Renderer &renderer, const Tag &tag) const if(i+1fbo.bind(); else - Framebuffer::unbind(); + out_fbo->bind(); postproc[i]->render(target[j]->color, target[j]->depth); } - Framebuffer::unbind(); + out_fbo->bind(); } if(!was_in_frame)