-#include <msp/gl/extensions/arb_direct_state_access.h>
-#include <msp/gl/extensions/ext_framebuffer_multisample.h>
-#include <msp/gl/extensions/ext_framebuffer_object.h>
-#include <msp/gl/extensions/khr_debug.h>
-#include "deviceinfo.h"
-#include "renderbuffer.h"
-
-using namespace std;
-
-namespace Msp {
-namespace GL {
-
-Renderbuffer::Renderbuffer()
-{
- static Require _req(EXT_framebuffer_object);
-
- if(ARB_direct_state_access)
- glCreateRenderbuffers(1, &id);
- else
- glGenRenderbuffers(1, &id);
-}
-
-Renderbuffer::~Renderbuffer()
-{
- glDeleteRenderbuffers(1, &id);
-}
-
-void Renderbuffer::storage(PixelFormat fmt, unsigned wd, unsigned ht)
-{
- require_pixelformat(fmt);
- width = wd;
- height = ht;
- GLenum gl_fmt = get_gl_pixelformat(fmt);
- if(ARB_direct_state_access)
- glNamedRenderbufferStorage(id, gl_fmt, width, height);
- else
- {
- glBindRenderbuffer(GL_RENDERBUFFER, id);
- glRenderbufferStorage(GL_RENDERBUFFER, gl_fmt, width, height);
- glBindRenderbuffer(GL_RENDERBUFFER, 0);
- }
-}
-
-unsigned Renderbuffer::get_max_samples()
-{
- return Limits::get_global().max_samples;
-}
-
-void Renderbuffer::storage_multisample(unsigned samples, PixelFormat fmt, unsigned wd, unsigned ht)
-{
- if(!samples)
- return storage(fmt, wd, ht);
-
- static Require _req(EXT_framebuffer_multisample);
- if(samples>Limits::get_global().max_samples)
- throw out_of_range("Renderbuffer::storage_multisample");
-
- require_pixelformat(fmt);
-
- width = wd;
- height = ht;
- GLenum gl_fmt = get_gl_pixelformat(fmt);
- if(ARB_direct_state_access)
- glNamedRenderbufferStorageMultisample(id, samples, gl_fmt, width, height);
- else
- {
- glBindRenderbuffer(GL_RENDERBUFFER, id);
- glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, gl_fmt, width, height);
- glBindRenderbuffer(GL_RENDERBUFFER, 0);
- }
-}
-
-void Renderbuffer::set_debug_name(const string &name)
-{
-#ifdef DEBUG
- if(KHR_debug)
- glObjectLabel(GL_RENDERBUFFER, id, name.size(), name.c_str());
-#else
- (void)name;
-#endif
-}
-
-} // namespace GL
-} // namespace Msp