#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 "misc.h"
+#include <msp/gl/extensions/khr_debug.h>
+#include "deviceinfo.h"
#include "renderbuffer.h"
using namespace std;
require_pixelformat(fmt);
width = wd;
height = ht;
+ GLenum gl_fmt = get_gl_pixelformat(fmt);
if(ARB_direct_state_access)
- glNamedRenderbufferStorage(id, fmt, width, height);
+ glNamedRenderbufferStorage(id, gl_fmt, width, height);
else
{
- BindRestore _bind(this);
- glRenderbufferStorage(GL_RENDERBUFFER, fmt, width, height);
+ glBindRenderbuffer(GL_RENDERBUFFER, id);
+ glRenderbufferStorage(GL_RENDERBUFFER, gl_fmt, width, height);
+ glBindRenderbuffer(GL_RENDERBUFFER, 0);
}
}
unsigned Renderbuffer::get_max_samples()
{
- static unsigned max_samples = (EXT_framebuffer_multisample ? get_i(GL_MAX_SAMPLES) : 0);
- return max_samples;
+ return Limits::get_global().max_samples;
}
void Renderbuffer::storage_multisample(unsigned samples, PixelFormat fmt, unsigned wd, unsigned ht)
return storage(fmt, wd, ht);
static Require _req(EXT_framebuffer_multisample);
- if(samples>get_max_samples())
+ 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, fmt, width, height);
+ glNamedRenderbufferStorageMultisample(id, samples, gl_fmt, width, height);
else
{
- BindRestore _bind(this);
- glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, fmt, width, height);
- }
-}
-
-void Renderbuffer::bind() const
-{
- if(set_current(this))
glBindRenderbuffer(GL_RENDERBUFFER, id);
+ glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, gl_fmt, width, height);
+ glBindRenderbuffer(GL_RENDERBUFFER, 0);
+ }
}
-void Renderbuffer::unbind()
+void Renderbuffer::set_debug_name(const string &name)
{
- if(set_current(0))
- glBindRenderbuffer(GL_RENDERBUFFER, 0);
+#ifdef DEBUG
+ if(KHR_debug)
+ glObjectLabel(GL_RENDERBUFFER, id, name.size(), name.c_str());
+#else
+ (void)name;
+#endif
}
} // namespace GL