X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fframebuffer.h;h=f977ad7eb11fdc109740c7a19077ca1e3e7d7ec9;hp=e33deda9218d9bf3afea690b44fc1e9dd6329bc1;hb=HEAD;hpb=70153a4e27eeebc7e0a91de122f45eff6296cb71 diff --git a/source/framebuffer.h b/source/framebuffer.h deleted file mode 100644 index e33deda9..00000000 --- a/source/framebuffer.h +++ /dev/null @@ -1,143 +0,0 @@ -#ifndef MSP_GL_FRAMEBUFFER_H_ -#define MSP_GL_FRAMEBUFFER_H_ - -#include -#include "bindable.h" -#include "gl.h" -#include "texturecube.h" - -namespace Msp { -namespace GL { - -class Renderbuffer; -class Texture; -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 -}; - -enum FramebufferStatus -{ - FRAMEBUFFER_INCOMPLETE_ATTACHMENT = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT, - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT, - 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 -}; - -enum BufferBits -{ - COLOR_BUFFER_BIT = GL_COLOR_BUFFER_BIT, - DEPTH_BUFFER_BIT = GL_DEPTH_BUFFER_BIT, - STENCIL_BUFFER_BIT = GL_STENCIL_BUFFER_BIT, - ACCUM_BUFFER_BIT = GL_ACCUM_BUFFER_BIT -}; - -enum RWBuffer -{ - NO_BUFFER = GL_NONE, - FRONT_LEFT = GL_FRONT_LEFT, - FRONT_RIGHT = GL_FRONT_RIGHT, - BACK_LEFT = GL_BACK_LEFT, - BACK_RIGHT = GL_BACK_RIGHT, - FRONT = GL_FRONT, - BACK = GL_BACK, - LEFT = GL_LEFT, - RIGHT = GL_RIGHT, - FRONT_AND_BACK = GL_FRONT_AND_BACK -}; - -/** -Framebuffer objects can be used to perform offscreen rendering. The most -common application is rendering to a texture, which can then be used for -fullscreen shader effects. - -A framebuffer consist of a number of logical buffers, such as color and depth -buffers. Renderbuffers and Textures can be attached to the logical buffers. At -least one image must be attached for the framebuffer to be usable. - -Requires the GL_EXT_framebuffer_object extension. -*/ -class Framebuffer: public Bindable -{ -private: - struct Attachment - { - FramebufferAttachment attachment; - GLenum type; - union - { - Renderbuffer *rbuf; - Texture *tex; - }; - unsigned level; - GLenum cube_face; - - Attachment(FramebufferAttachment); - void set(Renderbuffer &); - void set(Texture &, GLenum, unsigned); - void clear(); - }; - - unsigned id; - std::vector attachments; - unsigned width; - unsigned height; - mutable unsigned dirty; - - Framebuffer(unsigned); -public: - Framebuffer(); - ~Framebuffer(); - - unsigned get_width() const { return width; } - unsigned get_height() const { return height; } - -private: - void update_attachment(unsigned) const; - void check_size(); -public: - void attach(FramebufferAttachment attch, Renderbuffer &rbuf); - void attach(FramebufferAttachment attch, Texture2D &tex, unsigned level = 0); - void attach(FramebufferAttachment attch, TextureCube &tex, TextureCubeFace face, unsigned level = 0); - void detach(FramebufferAttachment attch); - - /** - Checks the completeness status of the framebuffer. Returns - FRAMEBUFFER_COMPLETE if the framebuffer is complate and can be rendered to, - or one of the error status codes otherwise. - */ - FramebufferStatus check_status() const; - - void clear(BufferBits); - void blit_from(const Framebuffer &, int, int, int, int, int, int, int, int, BufferBits, bool); - void blit_from(const Framebuffer &, int, int, unsigned, unsigned, int, int, BufferBits); - void blit_from(const Framebuffer &, BufferBits, bool); - - void bind() const; - - static const Framebuffer *current(); - static void unbind(); - - static Framebuffer &system(); -private: - unsigned get_attachment_index(FramebufferAttachment); -}; - -inline BufferBits operator|(BufferBits a, BufferBits b) -{ return static_cast(static_cast(a)|static_cast(b)); } - -} // namespace GL -} // namespace Msp - -#endif