+ glDeleteRenderbuffers(1, &id);
+}
+
+PixelFormat Renderbuffer::normalize_format(PixelFormat fmt)
+{
+ if(!get_component_size(fmt) && OES_required_internalformat)
+ return get_default_sized_pixelformat(fmt);
+
+ return fmt;
+}
+
+void Renderbuffer::storage(PixelFormat fmt, unsigned wd, unsigned ht)
+{
+ fmt = normalize_format(fmt);
+ require_pixelformat(fmt);
+ width = wd;
+ height = ht;
+ if(ARB_direct_state_access)
+ glNamedRenderbufferStorage(id, fmt, width, height);
+ else
+ {
+ BindRestore _bind(this);
+ glRenderbufferStorage(GL_RENDERBUFFER, fmt, width, height);
+ }
+}
+
+unsigned Renderbuffer::get_max_samples()
+{
+ static unsigned max_samples = (EXT_framebuffer_multisample ? get_i(GL_MAX_SAMPLES) : 0);
+ return max_samples;