]> git.tdb.fi Git - libs/gl.git/commitdiff
Don't store a View's target framebuffer in the base class
authorMikko Rasa <tdb@tdb.fi>
Tue, 9 Nov 2021 12:53:34 +0000 (14:53 +0200)
committerMikko Rasa <tdb@tdb.fi>
Tue, 9 Nov 2021 16:08:37 +0000 (18:08 +0200)
Instead access it through a virtual function.  Vulkan requires a separate
framebuffer per swapchain image.

source/render/offscreenview.cpp
source/render/offscreenview.h
source/render/view.cpp
source/render/view.h
source/render/windowview.cpp
source/render/windowview.h

index 6d0d88b08eb1a2049827253cc739d125b1e4dc51..71851c7266253814973b4866eea715a703011009 100644 (file)
@@ -5,11 +5,11 @@ namespace Msp {
 namespace GL {
 
 OffscreenView::OffscreenView(Framebuffer &t):
-       View(t)
+       target(t)
 { }
 
 OffscreenView::OffscreenView(RenderTarget &t):
-       View(t.get_framebuffer())
+       target(t.get_framebuffer())
 { }
 
 } // namespace GL
index 0801c3bfa9cbd3b6bf2aacb29a71240dc4d44dd1..c72c1dd3c7049fe83952154b7712c4fe2ab16dcd 100644 (file)
@@ -14,9 +14,15 @@ A View targeting an offscreen framebuffer.
 */
 class OffscreenView: public View
 {
+private:
+       Framebuffer &target;
+
 public:
        OffscreenView(Framebuffer &);
        OffscreenView(RenderTarget &);
+
+private:
+       virtual const Framebuffer &get_target() const { return target; }
 };
 
 } // namespace GL
index ac244335943bc5b2398dd8fc23b5705553bf82ef..54828c7b8c75d265385c53309e97eb44651c93ce 100644 (file)
@@ -6,8 +6,7 @@
 namespace Msp {
 namespace GL {
 
-View::View(Framebuffer &t):
-       target(t),
+View::View():
        camera(0),
        content(0),
        internal_renderer(0)
@@ -41,7 +40,7 @@ void View::render()
 void View::render(Renderer &renderer)
 {
        Renderer::Push _push(renderer);
-       renderer.set_framebuffer(&target);
+       renderer.set_framebuffer(&get_target());
        if(content)
        {
                if(camera)
index 23425a86e3dff251322f219c6a337bac27e3bd0d..b7cb2256e937a6ef014415ae635c31d7d4e2b7fd 100644 (file)
@@ -20,17 +20,16 @@ Sequence can be used to specify other tags and add post-processing.
 class View
 {
 protected:
-       Framebuffer &target;
        Camera *camera;
        Renderable *content;
        Renderer *internal_renderer;
 
-       View(Framebuffer &);
+       View();
 public:
        virtual ~View();
 
-       virtual unsigned get_width() const { return target.get_width(); }
-       virtual unsigned get_height() const { return target.get_height(); }
+       virtual unsigned get_width() const { return get_target().get_width(); }
+       virtual unsigned get_height() const { return get_target().get_height(); }
        float get_aspect_ratio() const { return static_cast<float>(get_width())/get_height(); }
 
        /** Sets the camera to render with.  The camera's aspect ratio is set to
@@ -41,6 +40,8 @@ public:
 
        virtual void render();
        virtual void render(Renderer &);
+protected:
+       virtual const Framebuffer &get_target() const = 0;
 };
 
 } // namespace GL
index e139436b4c571ba5e25af37c1243dacb31658751..bbc7bb00512ff549bf34c1b234c97fa815571af5 100644 (file)
@@ -7,7 +7,6 @@ namespace Msp {
 namespace GL {
 
 WindowView::WindowView(Graphics::Window &w):
-       View(Framebuffer::system()),
        window(w),
        device(Device::get_current())
 {
@@ -29,5 +28,10 @@ void WindowView::window_resized(unsigned w, unsigned h)
                camera->set_aspect_ratio(aspect);
 }
 
+const Framebuffer &WindowView::get_target() const
+{
+       return Framebuffer::system();
+}
+
 } // namespace GL
 } // namespace Msp
index 028e9805436797c35adfddf3c75d9ac47b084138..031cd49d142534049e96be8dd137fa27c83730ed 100644 (file)
@@ -35,6 +35,8 @@ public:
 
 private:
        void window_resized(unsigned, unsigned);
+
+       virtual const Framebuffer &get_target() const;
 };
 
 } // namespace GL