]> git.tdb.fi Git - libs/gl.git/blob - source/core/renderbuffer.h
Add push_back_nocopy to NodeContainer for clarity
[libs/gl.git] / source / core / renderbuffer.h
1 #ifndef MSP_GL_RENDERBUFFER_H_
2 #define MSP_GL_RENDERBUFFER_H_
3
4 #include "bindable.h"
5 #include "pixelformat.h"
6
7 namespace Msp {
8 namespace GL {
9
10 /**
11 A Renderbuffer contains a single renderable image.  It can be attached to a
12 Framebuffer to provide a logical buffer that is required to render the scene
13 correctly but that is not needed as a texture later.  Renderbuffers also
14 provide a capability for multisampling, which is not available in textures.
15
16 Requires the GL_EXT_framebuffer_object extension.  Multisample renderbuffers
17 additionally require the GL_EXT_framebuffer_multisample extension.
18 */
19 class Renderbuffer: public Bindable<Renderbuffer>
20 {
21 private:
22         unsigned id;
23         unsigned width;
24         unsigned height;
25
26 public:
27         Renderbuffer();
28         ~Renderbuffer();
29
30         unsigned get_id() const { return id; }
31         unsigned get_width() const { return width; }
32         unsigned get_height() const { return height; }
33
34         /** Allocates storage for the renderbuffer. */
35         void storage(PixelFormat fmt, unsigned wd, unsigned ht);
36
37         /** Returns the maximum supported sample count for multisampling.  If
38         multisampling is not supported, returns 0. */
39         static unsigned get_max_samples();
40
41         /** Allocates multisample storage for the renderbuffer.  All attachments in
42         a framebuffer must have the same number of samples.  To transfer the
43         contents to a texture for furter processing, use the framebuffer blit
44         functions.*/
45         void storage_multisample(unsigned samples, PixelFormat fmt, unsigned wd, unsigned ht);
46
47         void bind() const;
48
49         static void unbind();
50 };
51
52 } // namespace GL
53 } // namespace Msp
54
55 #endif