X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fframebuffer.h;h=89147b2c250cb265be3a7805cb927062499f1655;hb=656b4577fccfb02bea747871e5ab10148f002443;hp=7c88b4cd105a7def770fc8d0b3ea404c6bac051c;hpb=ceae2a27dfc58310c5bab7e3aa3fedf0fa9a1f49;p=libs%2Fgl.git diff --git a/source/framebuffer.h b/source/framebuffer.h index 7c88b4cd..89147b2c 100644 --- a/source/framebuffer.h +++ b/source/framebuffer.h @@ -9,6 +9,7 @@ Distributed under the LGPL #define MSP_GL_FRAMEBUFFER_H_ #include +#include "bindable.h" #include "gl.h" namespace Msp { @@ -73,7 +74,7 @@ least one image must be attached for the framebuffer to be usable. Requires the GL_EXT_framebuffer_object extension. */ -class Framebuffer +class Framebuffer: public Bindable { private: struct Attachment @@ -85,28 +86,31 @@ 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 const Framebuffer *cur_fbo; - static int sys_viewport[4]; - + Framebuffer(unsigned); public: Framebuffer(); ~Framebuffer(); - void bind() const; - +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); void detach(FramebufferAttachment attch); /** @@ -116,22 +120,21 @@ public: */ FramebufferStatus check_status() const; + void clear(BufferBits); + + 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