--- /dev/null
+#ifndef MSP_GL_RENDERBUFFER_H_
+#define MSP_GL_RENDERBUFFER_H_
+
+#include "bindable.h"
+#include "pixelformat.h"
+
+namespace Msp {
+namespace GL {
+
+/**
+A Renderbuffer contains a single renderable image. It can be attached to a
+Framebuffer to provide a logical buffer that is required to render the scene
+correctly but that is not needed as a texture later. Renderbuffers also
+provide a capability for multisampling, which is not available in textures.
+
+Requires the GL_EXT_framebuffer_object extension. Multisample renderbuffers
+additionally require the GL_EXT_framebuffer_multisample extension.
+*/
+class Renderbuffer: public Bindable<Renderbuffer>
+{
+private:
+ unsigned id;
+ unsigned width;
+ unsigned height;
+
+public:
+ Renderbuffer();
+ ~Renderbuffer();
+
+ unsigned get_id() const { return id; }
+ unsigned get_width() const { return width; }
+ unsigned get_height() const { return height; }
+
+ /** Allocates storage for the renderbuffer. */
+ void storage(PixelFormat fmt, unsigned wd, unsigned ht);
+
+ /** Returns the maximum supported sample count for multisampling. If
+ multisampling is not supported, returns 0. */
+ static unsigned get_max_samples();
+
+ /** Allocates multisample storage for the renderbuffer. All attachments in
+ a framebuffer must have the same number of samples. To transfer the
+ contents to a texture for furter processing, use the framebuffer blit
+ functions.*/
+ void storage_multisample(unsigned samples, PixelFormat fmt, unsigned wd, unsigned ht);
+
+ void bind() const;
+
+ static void unbind();
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif