]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/sequence.cpp
Remove RenderBuffer and always use textures as framebuffer attachments
[libs/gl.git] / source / render / sequence.cpp
index 2c32db86518b14033c9452a64be2ed0fb0106397..aaa1ef12a2238e209973c708446672b3ba865ed6 100644 (file)
@@ -4,10 +4,8 @@
 #include "framebuffer.h"
 #include "lighting.h"
 #include "postprocessor.h"
-#include "renderbuffer.h"
 #include "renderer.h"
 #include "sequence.h"
-#include "tests.h"
 #include "texture2d.h"
 #include "view.h"
 
@@ -160,20 +158,19 @@ void Sequence::render(Renderer &renderer, Tag tag) const
        if(tag.id)
                return;
 
-       const Framebuffer *out_fbo = Framebuffer::current();
-       // These are no-ops but will ensure the related state gets restored
-       BindRestore restore_fbo(out_fbo);
+       Renderer::Push _push(renderer);
+
+       const Framebuffer *out_fbo = renderer.get_framebuffer();
 
        if(target[0])
        {
-               Framebuffer &fbo = (samples ? target_ms : target[0])->get_framebuffer();
-               fbo.bind();
-               fbo.clear();
+               renderer.set_framebuffer(&(samples ? target_ms : target[0])->get_framebuffer());
+               renderer.clear();
        }
 
        for(vector<Step>::const_iterator i=steps.begin(); i!=steps.end(); ++i)
        {
-               Renderer::Push push(renderer);
+               Renderer::Push _push2(renderer);
 
                renderer.set_depth_test(&i->get_depth_test());
                renderer.set_stencil_test(&i->get_stencil_test());
@@ -189,20 +186,17 @@ void Sequence::render(Renderer &renderer, Tag tag) const
 
        if(target[0])
        {
+               if(samples)
+                       renderer.resolve_multisample(target[0]->get_framebuffer(), COLOR_BUFFER_BIT|DEPTH_BUFFER_BIT);
+
                renderer.set_depth_test(0);
                renderer.set_stencil_test(0);
                renderer.set_blend(0);
 
-               if(samples)
-                       target[0]->blit_from(*target_ms);
-
                for(unsigned i=0; i<postproc.size(); ++i)
                {
                        unsigned j = i%2;
-                       if(i+1<postproc.size())
-                               target[1-j]->get_framebuffer().bind();
-                       else
-                               out_fbo->bind();
+                       renderer.set_framebuffer(i+1<postproc.size() ? &target[1-j]->get_framebuffer() : out_fbo);
                        const Texture2D &color = target[j]->get_target_texture(RENDER_COLOR);
                        const Texture2D &depth = target[j]->get_target_texture(RENDER_DEPTH);
                        postproc[i].postproc->render(renderer, color, depth);
@@ -296,7 +290,7 @@ void Sequence::Step::set_blend(const Blend &b)
 
 void Sequence::Step::set_clipping(const Clipping *c)
 {
-       clipping =c;
+       clipping = c;
 }
 
 } // namespace GL