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"
9 Renderbuffer::Renderbuffer()
11 static Require _req(EXT_framebuffer_object);
13 if(ARB_direct_state_access)
14 glCreateRenderbuffers(1, &id);
16 glGenRenderbuffers(1, &id);
19 Renderbuffer::~Renderbuffer()
21 glDeleteRenderbuffers(1, &id);
24 PixelFormat Renderbuffer::normalize_format(PixelFormat fmt)
26 if(!get_component_size(fmt) && MSP_sized_internal_formats)
28 unsigned size = (fmt==DEPTH_COMPONENT ? get_gl_api()==OPENGL_ES2 ? 2 : 4 : 1);
29 return get_sized_pixelformat(fmt, size);
35 void Renderbuffer::storage(PixelFormat fmt, unsigned wd, unsigned ht)
37 fmt = normalize_format(fmt);
38 require_pixelformat(fmt);
41 if(ARB_direct_state_access)
42 glNamedRenderbufferStorage(id, fmt, width, height);
45 BindRestore _bind(this);
46 glRenderbufferStorage(GL_RENDERBUFFER, fmt, width, height);
50 void Renderbuffer::storage_multisample(unsigned samples, PixelFormat fmt, unsigned wd, unsigned ht)
52 static Require _req(EXT_framebuffer_multisample);
53 fmt = normalize_format(fmt);
54 require_pixelformat(fmt);
58 if(ARB_direct_state_access)
59 glNamedRenderbufferStorageMultisample(id, samples, fmt, width, height);
62 BindRestore _bind(this);
63 glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, fmt, width, height);
67 void Renderbuffer::bind() const
70 glBindRenderbuffer(GL_RENDERBUFFER, id);
73 void Renderbuffer::unbind()
76 glBindRenderbuffer(GL_RENDERBUFFER, 0);