]> git.tdb.fi Git - libs/gl.git/blob - source/renderbuffer.cpp
Use ARB_direct_state_access to avoid some bind calls
[libs/gl.git] / source / renderbuffer.cpp
1 #include <msp/gl/extensions/arb_direct_state_access.h>
2 #include <msp/gl/extensions/ext_framebuffer_multisample.h>
3 #include <msp/gl/extensions/ext_framebuffer_object.h>
4 #include "renderbuffer.h"
5
6 namespace Msp {
7 namespace GL {
8
9 Renderbuffer::Renderbuffer()
10 {
11         static Require _req(EXT_framebuffer_object);
12
13         if(ARB_direct_state_access)
14                 glCreateRenderbuffers(1, &id);
15         else
16                 glGenRenderbuffers(1, &id);
17 }
18
19 Renderbuffer::~Renderbuffer()
20 {
21         glDeleteRenderbuffers(1, &id);
22 }
23
24 void Renderbuffer::storage(PixelFormat fmt, unsigned wd, unsigned ht)
25 {
26         require_pixelformat(fmt);
27         width = wd;
28         height = ht;
29         if(ARB_direct_state_access)
30                 glNamedRenderbufferStorage(id, fmt, width, height);
31         else
32         {
33                 BindRestore _bind(this);
34                 glRenderbufferStorage(GL_RENDERBUFFER, fmt, width, height);
35         }
36 }
37
38 void Renderbuffer::storage_multisample(unsigned samples, PixelFormat fmt, unsigned wd, unsigned ht)
39 {
40         static Require _req(EXT_framebuffer_multisample);
41         require_pixelformat(fmt);
42
43         width = wd;
44         height = ht;
45         if(ARB_direct_state_access)
46                 glNamedRenderbufferStorageMultisample(id, samples, fmt, width, height);
47         else
48         {
49                 BindRestore _bind(this);
50                 glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, fmt, width, height);
51         }
52 }
53
54 void Renderbuffer::bind() const
55 {
56         if(set_current(this))
57                 glBindRenderbuffer(GL_RENDERBUFFER, id);
58 }
59
60 void Renderbuffer::unbind()
61 {
62         if(set_current(0))
63                 glBindRenderbuffer(GL_RENDERBUFFER, 0);
64 }
65
66 } // namespace GL
67 } // namespace Msp