]> git.tdb.fi Git - libs/gl.git/blobdiff - source/framebuffer.h
Include extension headers in places that need enums from them
[libs/gl.git] / source / framebuffer.h
index 8a97222c5ffac91a9c852119467130c7c8f5caad..3bf439f98cc62ca3250369abe61cdaf6c5c9de9c 100644 (file)
@@ -5,6 +5,7 @@
 #include "bindable.h"
 #include "gl.h"
 #include "texturecube.h"
+#include <msp/gl/extensions/ext_framebuffer_object.h>
 
 namespace Msp {
 namespace GL {
@@ -15,24 +16,24 @@ class Texture2D;
 
 enum FramebufferAttachment
 {
-       COLOR_ATTACHMENT0  = GL_COLOR_ATTACHMENT0_EXT,
-       COLOR_ATTACHMENT1  = GL_COLOR_ATTACHMENT1_EXT,
-       COLOR_ATTACHMENT2  = GL_COLOR_ATTACHMENT2_EXT,
-       COLOR_ATTACHMENT3  = GL_COLOR_ATTACHMENT3_EXT,
-       DEPTH_ATTACHMENT   = GL_DEPTH_ATTACHMENT_EXT,
-       STENCIL_ATTACHMENT = GL_STENCIL_ATTACHMENT_EXT
+       COLOR_ATTACHMENT0  = GL_COLOR_ATTACHMENT0,
+       COLOR_ATTACHMENT1  = GL_COLOR_ATTACHMENT1,
+       COLOR_ATTACHMENT2  = GL_COLOR_ATTACHMENT2,
+       COLOR_ATTACHMENT3  = GL_COLOR_ATTACHMENT3,
+       DEPTH_ATTACHMENT   = GL_DEPTH_ATTACHMENT,
+       STENCIL_ATTACHMENT = GL_STENCIL_ATTACHMENT
 };
 
 enum FramebufferStatus
 {
-       FRAMEBUFFER_INCOMPLETE_ATTACHMENT         = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT,
-       FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT,
+       FRAMEBUFFER_INCOMPLETE_ATTACHMENT         = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT,
+       FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT,
        FRAMEBUFFER_INCOMPLETE_DIMENSIONS         = GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT,
        FRAMEBUFFER_INCOMPLETE_FORMATS            = GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT,
-       FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER        = GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT,
-       FRAMEBUFFER_INCOMPLETE_READ_BUFFER        = GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT,
-       FRAMEBUFFER_UNSUPPORTED                   = GL_FRAMEBUFFER_UNSUPPORTED_EXT,
-       FRAMEBUFFER_COMPLETE                      = GL_FRAMEBUFFER_COMPLETE_EXT
+       FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER        = GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER,
+       FRAMEBUFFER_INCOMPLETE_READ_BUFFER        = GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER,
+       FRAMEBUFFER_UNSUPPORTED                   = GL_FRAMEBUFFER_UNSUPPORTED,
+       FRAMEBUFFER_COMPLETE                      = GL_FRAMEBUFFER_COMPLETE
 };
 
 enum BufferBits
@@ -57,6 +58,13 @@ enum RWBuffer
        FRONT_AND_BACK = GL_FRONT_AND_BACK
 };
 
+class framebuffer_incomplete: public std::runtime_error
+{
+public:
+       framebuffer_incomplete(FramebufferStatus);
+       virtual ~framebuffer_incomplete() throw() { }
+};
+
 /**
 Framebuffer objects can be used to perform offscreen rendering.  The most
 common application is rendering to a texture, which can then be used for
@@ -119,6 +127,10 @@ public:
        or one of the error status codes otherwise. */
        FramebufferStatus check_status() const;
 
+       /** Ensures that the framebuffer is complete, throwing an exception if it
+       isn't. */
+       void require_complete() const;
+
        void clear(BufferBits);
 
        /** Blits a region from another framebuffer into this one.  If the source