X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fframebuffer.h;h=3bf439f98cc62ca3250369abe61cdaf6c5c9de9c;hb=6cfe786e84d9d9474c7bd5a78d1b5c92e3868e4e;hp=8a97222c5ffac91a9c852119467130c7c8f5caad;hpb=06b79262c9d455669e93213200d959db5b221dc2;p=libs%2Fgl.git diff --git a/source/framebuffer.h b/source/framebuffer.h index 8a97222c..3bf439f9 100644 --- a/source/framebuffer.h +++ b/source/framebuffer.h @@ -5,6 +5,7 @@ #include "bindable.h" #include "gl.h" #include "texturecube.h" +#include 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