]> git.tdb.fi Git - libs/gl.git/commitdiff
Check for maximum number of samples
authorMikko Rasa <tdb@tdb.fi>
Tue, 5 Dec 2017 11:51:35 +0000 (13:51 +0200)
committerMikko Rasa <tdb@tdb.fi>
Tue, 5 Dec 2017 11:54:51 +0000 (13:54 +0200)
This makes it more apparent what the error is if a too large sample count
is requested.  Otherwise it would result in an "incomplete attachment"
error from the framebuffer object.

source/renderbuffer.cpp
source/renderbuffer.h

index f146a915d64d27c213ef42b192068e4c8d14cd56..5bea07fc81e60a70c26c7744f3e7d5a6434bc621 100644 (file)
@@ -1,8 +1,11 @@
 #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 {
 
@@ -44,12 +47,21 @@ void Renderbuffer::storage(PixelFormat fmt, unsigned wd, unsigned 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);
+       if(samples>get_max_samples())
+               throw out_of_range("Renderbuffer::storage_multisample");
+
        fmt = normalize_format(fmt);
        require_pixelformat(fmt);
 
index 0ccf49675897c6b9864da27adb708eed45c458e8..751374bd4a4258f70ca9afa74d1e16bf543b49a3 100644 (file)
@@ -38,6 +38,10 @@ public:
        /** Allocates storage for the renderbuffer. */
        void storage(PixelFormat fmt, unsigned wd, unsigned ht);
 
+       /** Returns the maximum supported sample count for multisampling.  If
+       multisampling is not supported, returns 0. */
+       static unsigned get_max_samples();
+
        /** Allocates multisample storage for the renderbuffer.  All attachments in
        a framebuffer must have the same number of samples.  To transfer the
        contents to a texture for furter processing, use the framebuffer blit