X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fframebuffer.h;h=3d3ec088138f9d4b50d675ead1d0b73807277212;hp=b4f43f77f47473a12381eb499eb13a3c6d658c13;hb=f14435e58bfa0fa697a06ba9a454bb30cd37d9d8;hpb=42ace9ac1350d3ae009bdd2fb335ac1e57d1b36b diff --git a/source/framebuffer.h b/source/framebuffer.h index b4f43f77..3d3ec088 100644 --- a/source/framebuffer.h +++ b/source/framebuffer.h @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of libmspgl -Copyright © 2007 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #ifndef MSP_GL_FRAMEBUFFER_H_ #define MSP_GL_FRAMEBUFFER_H_ @@ -86,27 +79,34 @@ private: Renderbuffer *rbuf; Texture *tex; }; + unsigned level; Attachment(FramebufferAttachment); - Attachment &operator=(Renderbuffer &); - Attachment &operator=(Texture &); + void set(Renderbuffer &); + void set(Texture &, unsigned); + void clear(); }; unsigned id; std::vector attachments; unsigned width; unsigned height; + mutable unsigned dirty; - static int sys_viewport[4]; - + Framebuffer(unsigned); public: Framebuffer(); ~Framebuffer(); - void bind() const; + unsigned get_width() const { return width; } + unsigned get_height() const { return height; } +private: + void update_attachment(unsigned) const; + void check_size(); +public: void attach(FramebufferAttachment attch, Renderbuffer &rbuf); - void attach(FramebufferAttachment attch, Texture2D &tex, int level); + void attach(FramebufferAttachment attch, Texture2D &tex, unsigned level = 0); void detach(FramebufferAttachment attch); /** @@ -116,21 +116,24 @@ public: */ FramebufferStatus check_status() const; + void clear(BufferBits); + void blit_from(const Framebuffer &, int, int, int, int, int, int, int, int, BufferBits, bool); + void blit_from(const Framebuffer &, int, int, unsigned, unsigned, int, int, BufferBits); + void blit_from(const Framebuffer &, BufferBits, bool); + + void bind() const; + + static const Framebuffer *current(); static void unbind(); + + static Framebuffer &system(); private: - void maybe_bind() const; - Attachment &get_or_create_attachment(FramebufferAttachment); - void check_size(); + unsigned get_attachment_index(FramebufferAttachment); }; inline BufferBits operator|(BufferBits a, BufferBits b) { return static_cast(static_cast(a)|static_cast(b)); } -void viewport(int, int, unsigned, unsigned); -void clear(BufferBits); -void draw_buffer(RWBuffer); -void read_buffer(RWBuffer); - } // namespace GL } // namespace Msp