]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/renderbuffer.h
Rearrange soucre files into subdirectories
[libs/gl.git] / source / core / renderbuffer.h
diff --git a/source/core/renderbuffer.h b/source/core/renderbuffer.h
new file mode 100644 (file)
index 0000000..afc6ed2
--- /dev/null
@@ -0,0 +1,55 @@
+#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