]> git.tdb.fi Git - libs/gl.git/blob - source/renderbuffer.cpp
Some fixes to assignment management in UnusedVariableLocator
[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 PixelFormat Renderbuffer::normalize_format(PixelFormat fmt)
25 {
26         if(!get_component_size(fmt) && MSP_sized_internal_formats)
27         {
28                 unsigned size = (fmt==DEPTH_COMPONENT ? get_gl_api()==OPENGL_ES2 ? 2 : 4 : 1);
29                 return get_sized_pixelformat(fmt, size);
30         }
31
32         return fmt;
33 }
34
35 void Renderbuffer::storage(PixelFormat fmt, unsigned wd, unsigned ht)
36 {
37         fmt = normalize_format(fmt);
38         require_pixelformat(fmt);
39         width = wd;
40         height = ht;
41         if(ARB_direct_state_access)
42                 glNamedRenderbufferStorage(id, fmt, width, height);
43         else
44         {
45                 BindRestore _bind(this);
46                 glRenderbufferStorage(GL_RENDERBUFFER, fmt, width, height);
47         }
48 }
49
50 void Renderbuffer::storage_multisample(unsigned samples, PixelFormat fmt, unsigned wd, unsigned ht)
51 {
52         static Require _req(EXT_framebuffer_multisample);
53         fmt = normalize_format(fmt);
54         require_pixelformat(fmt);
55
56         width = wd;
57         height = ht;
58         if(ARB_direct_state_access)
59                 glNamedRenderbufferStorageMultisample(id, samples, fmt, width, height);
60         else
61         {
62                 BindRestore _bind(this);
63                 glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, fmt, width, height);
64         }
65 }
66
67 void Renderbuffer::bind() const
68 {
69         if(set_current(this))
70                 glBindRenderbuffer(GL_RENDERBUFFER, id);
71 }
72
73 void Renderbuffer::unbind()
74 {
75         if(set_current(0))
76                 glBindRenderbuffer(GL_RENDERBUFFER, 0);
77 }
78
79 } // namespace GL
80 } // namespace Msp