#include <vector>
#include "color.h"
+#include "framebuffer_backend.h"
#include "frameformat.h"
#include "texturecube.h"
Requires the GL_EXT_framebuffer_object extension. The blit functions require
the GL_EXT_framebuffer_blit extension.
*/
-class Framebuffer
+class Framebuffer: public FramebufferBackend
{
- friend class Commands;
- friend class PipelineState;
+ friend FramebufferBackend;
private:
struct Attachment
{
- Texture *tex;
- unsigned level;
- int layer;
+ Texture *tex = 0;
+ unsigned level = 0;
+ int layer = 0;
- Attachment();
void set(Texture &, unsigned, int);
void clear();
};
- unsigned id;
FrameFormat format;
std::vector<Attachment> attachments;
unsigned width;
unsigned height;
- mutable unsigned status;
mutable unsigned dirty;
- Framebuffer(unsigned);
+ Framebuffer(bool);
public:
/** Creates an empty framebuffer. Format must be set before textures can
be attached. */
/** Creates a framebuffer and sets its format. */
Framebuffer(const FrameFormat &);
-private:
- void init();
-public:
- ~Framebuffer();
-
/** Sets the format of the framebuffer. Once the format is set, it can't
be changed. */
void set_format(const FrameFormat &);
void update() const;
void check_size();
void set_attachment(FrameAttachment, Texture &, unsigned, int, unsigned);
-public:
+public:
/** Attaches a texture to the framebuffer. Only the attachment point
portion of attch is considered; pixel format is ignored. The framebuffer
must have a format and the format of the texture must match that defined
void refresh() const { if(dirty) update(); }
- void set_debug_name(const std::string &);
+ using FramebufferBackend::set_debug_name;
static Framebuffer &system();
};