#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 "renderbuffer.h"
+using namespace std;
+
namespace Msp {
namespace GL {
glDeleteRenderbuffers(1, &id);
}
-PixelFormat Renderbuffer::normalize_format(PixelFormat fmt)
-{
- if(!get_component_size(fmt) && MSP_sized_internal_formats)
- {
- unsigned size = (fmt==DEPTH_COMPONENT ? get_gl_api()==OPENGL_ES2 ? 2 : 4 : 1);
- return get_sized_pixelformat(fmt, size);
- }
-
- return fmt;
-}
-
void Renderbuffer::storage(PixelFormat fmt, unsigned wd, unsigned ht)
{
- fmt = normalize_format(fmt);
require_pixelformat(fmt);
width = wd;
height = ht;
}
}
+unsigned Renderbuffer::get_max_samples()
+{
+ static unsigned max_samples = (EXT_framebuffer_multisample ? get_i(GL_MAX_SAMPLES) : 0);
+ return 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);
- fmt = normalize_format(fmt);
+ if(samples>get_max_samples())
+ throw out_of_range("Renderbuffer::storage_multisample");
+
require_pixelformat(fmt);
width = wd;