-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
#ifndef MSP_GL_RENDERBUFFER_H_
#define MSP_GL_RENDERBUFFER_H_
+#include "bindable.h"
#include "pixelformat.h"
-#include "types.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.
+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.
+Requires the GL_EXT_framebuffer_object extension. Multisample renderbuffers
+additionally require the GL_EXT_framebuffer_multisample extension.
*/
-class Renderbuffer
+class Renderbuffer: public Bindable<Renderbuffer>
{
private:
- uint id;
+ unsigned id;
+ unsigned width;
+ unsigned height;
public:
Renderbuffer();
~Renderbuffer();
- uint get_id() const { return id; }
+ unsigned get_id() const { return id; }
+ unsigned get_width() const { return width; }
+ unsigned get_height() const { return height; }
+
+private:
+ static PixelFormat normalize_format(PixelFormat);
+
+public:
+ /** 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;
- void storage(PixelFormat fmt, sizei width, sizei height);
+ static void unbind();
};
} // namespace GL