#define MSP_GL_FRAMEBUFFER_H_
#include <vector>
+#include "bindable.h"
#include "gl.h"
namespace Msp {
Requires the GL_EXT_framebuffer_object extension.
*/
-class Framebuffer
+class Framebuffer: public Bindable<Framebuffer>
{
private:
struct Attachment
Renderbuffer *rbuf;
Texture *tex;
};
+ int level;
Attachment(FramebufferAttachment);
- Attachment &operator=(Renderbuffer &);
- Attachment &operator=(Texture &);
+ void set(Renderbuffer &);
+ void set(Texture &, int);
+ void clear();
};
unsigned id;
std::vector<Attachment> 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 detach(FramebufferAttachment attch);
*/
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);
+
+public:
+
};
inline BufferBits operator|(BufferBits a, BufferBits b)
{ return static_cast<BufferBits>(static_cast<int>(a)|static_cast<int>(b)); }
-void viewport(int, int, unsigned, unsigned);
-void clear(BufferBits);
-void draw_buffer(RWBuffer);
-void read_buffer(RWBuffer);
-
} // namespace GL
} // namespace Msp