]> git.tdb.fi Git - libs/gl.git/blobdiff - source/framebuffer.cpp
Add sanity checks to bind functions
[libs/gl.git] / source / framebuffer.cpp
index c7bfcd5a5808120088bb72cc2c9a589742186b66..f402b64366e98e4d1cc44e56fb446d14a495d4bf 100644 (file)
@@ -3,7 +3,8 @@
 #include <msp/gl/extensions/ext_framebuffer_blit.h>
 #include <msp/gl/extensions/ext_framebuffer_object.h>
 #include <msp/gl/extensions/ext_texture_array.h>
-#include <msp/gl/extensions/msp_draw_buffer.h>
+#include <msp/gl/extensions/ext_texture3d.h>
+#include <msp/gl/extensions/msp_buffer_control.h>
 #include "error.h"
 #include "framebuffer.h"
 #include "misc.h"
@@ -38,6 +39,15 @@ void operator<<(LexicalConverter &conv, FramebufferStatus status)
        case FRAMEBUFFER_INCOMPLETE_READ_BUFFER:
                conv.result("missing read buffer attachment");
                break;
+       case FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:
+               conv.result("mismatched attachment sample counts");
+               break;
+       case FRAMEBUFFER_INCOMPLETE_LAYER_COUNT:
+               conv.result("mismatched attachment layer counts");
+               break;
+       case FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS:
+               conv.result("mismatched attachment layering");
+               break;
        case FRAMEBUFFER_UNSUPPORTED:
                conv.result("unsupported");
                break;
@@ -158,10 +168,10 @@ void Framebuffer::update_attachment(unsigned mask) const
        {
                if(ARB_draw_buffers)
                        glDrawBuffers(color_bufs.size(), &color_bufs[0]);
-               else if(MSP_draw_buffer)
+               else if(MSP_buffer_control)
                        glDrawBuffer(first_buffer);
 
-               if(MSP_draw_buffer)
+               if(MSP_buffer_control)
                        glReadBuffer(first_buffer);
        }
 }
@@ -345,6 +355,9 @@ void Framebuffer::blit_from(const Framebuffer &other, BufferBits bits, bool filt
 
 void Framebuffer::bind() const
 {
+       if(attachments.empty())
+               throw invalid_operation("Framebuffer::bind");
+
        if(set_current(this))
        {
                glBindFramebuffer(GL_FRAMEBUFFER, id);