]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/framebuffer.h
Convert framebuffers and related functionality to new state management
[libs/gl.git] / source / core / framebuffer.h
index ca97ed17e45d021f9b9b779aa7579754640949ef..2e1b367791f7f7065d0634df1845a1854876b050 100644 (file)
@@ -17,6 +17,7 @@ class Renderbuffer;
 class Texture;
 class Texture2D;
 class Texture3D;
+class WindowView;
 
 enum FramebufferAttachment
 {
@@ -69,7 +70,7 @@ least one image must be attached for the framebuffer to be usable.
 Requires the GL_EXT_framebuffer_object extension.  The blit functions require
 the GL_EXT_framebuffer_blit extension.
 */
-class Framebuffer: public Bindable<Framebuffer>
+class Framebuffer
 {
 private:
        struct Attachment
@@ -90,21 +91,11 @@ private:
                void clear();
        };
 
-       struct Viewport
-       {
-               int left;
-               int bottom;
-               unsigned width;
-               unsigned height;
-
-               Viewport();
-       };
-
        unsigned id;
        std::vector<Attachment> attachments;
        unsigned width;
        unsigned height;
-       Viewport view;
+       mutable FramebufferStatus status;
        mutable unsigned dirty;
 
        Framebuffer(unsigned);
@@ -116,7 +107,7 @@ public:
        unsigned get_height() const { return height; }
 
 private:
-       void update_attachment(unsigned) const;
+       void update() const;
        void check_size();
        unsigned get_attachment_index(FramebufferAttachment);
        void set_texture_attachment(FramebufferAttachment, Texture &, unsigned, int);
@@ -129,40 +120,19 @@ public:
        void attach_layered(FramebufferAttachment attch, TextureCube &tex, unsigned level = 0);
        void detach(FramebufferAttachment attch);
 
-       /** Checks the completeness of the framebuffer.  Returns
-       FRAMEBUFFER_COMPLETE if the framebuffer is complete and can be rendered to,
-       or one of the error status codes otherwise. */
-       FramebufferStatus check_status() const;
+       void resize(const WindowView &);
+
+       /** Returns FRAMEBUFFER_COMPLETE if the framebuffer is complete and can be
+       rendered to, or one of the error status codes otherwise. */
+       FramebufferStatus get_status() const { return status; }
 
        /** Ensures that the framebuffer is complete, throwing an exception if it
        isn't. */
        void require_complete() const;
 
-       void viewport(int, int, unsigned, unsigned);
-       void reset_viewport();
-
-       void clear();
-       void clear(BufferBits);
-
-       /** Blits a region from another framebuffer into this one.  If the source
-       and destination regions have different dimensions, the contents will be
-       stretched.  If filter is true, linear interpolation will be used, otherwise
-       no interpolation is done. */
-       void blit_from(const Framebuffer &other, int sx0, int sy0, int sx1, int sy1,
-               int dx0, int dy0, int dx1, int dy1, BufferBits bits, bool filter);
-
-       /** Blits a region from another framebuffer into this one, retaining its
-       dimensions. */
-       void blit_from(const Framebuffer & other, int sx, int sy,
-               unsigned wd, unsigned ht, int dx, int dy, BufferBits bits);
-
-       /** Blits the entire contents of another framebuffer into this one. */
-       void blit_from(const Framebuffer &other, BufferBits bits, bool filter);
-
-       void bind() const;
+       void refresh() const { if(dirty) update(); }
 
-       static const Framebuffer *current();
-       static void unbind();
+       unsigned get_id() const { return id; }
 
        void set_debug_name(const std::string &);