X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fframebuffer.h;h=d2029022d94b6fee2d0380d43a18dbff90338a63;hp=0b9af1efd167e47addd3572eff9db4e80b87d3e1;hb=959efbf61663efd7879070ce0447e02c8a447ce0;hpb=f19366d32cc29287a2730cfba90893e407754081 diff --git a/source/core/framebuffer.h b/source/core/framebuffer.h index 0b9af1ef..d2029022 100644 --- a/source/core/framebuffer.h +++ b/source/core/framebuffer.h @@ -23,16 +23,12 @@ public: }; /** -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. +Uses one or more textures as buffers to draw into. Framebuffers can contain +multiple color buffers to match multiple outputs from a fragment shader, but +only one depth and stencil buffer. -A framebuffer consist of a number of logical buffers, such as color and depth -buffers. 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. The blit functions require -the GL_EXT_framebuffer_blit extension. +RenderTarget provides a higher-level interface which manages the textures as +well as the framebuffer itself. */ class Framebuffer: public FramebufferBackend { @@ -41,11 +37,10 @@ class Framebuffer: public FramebufferBackend private: struct Attachment { - Texture *tex; - unsigned level; - int layer; + Texture *tex = 0; + unsigned level = 0; + int layer = 0; - Attachment(); void set(Texture &, unsigned, int); void clear(); }; @@ -81,19 +76,27 @@ private: void update() const; void check_size(); void set_attachment(FrameAttachment, Texture &, unsigned, int, unsigned); -public: +public: /** Attaches a texture to the framebuffer. Only the attachment point portion of attch is considered; pixel format is ignored. The framebuffer must have a format and the format of the texture must match that defined in the framebuffer for this attachment point. */ - void attach(FrameAttachment attch, Texture2D &tex, unsigned level = 0); + void attach(FrameAttachment attch, Texture2D &, unsigned level = 0); + + void attach(FrameAttachment attch, Texture2DMultisample &); + + /** Attaches a single layer from a 3-dimensional texture to the + framebuffer. */ + void attach(FrameAttachment attch, Texture3D &, unsigned layer, unsigned level = 0); + + void attach(FrameAttachment attch, TextureCube &, TextureCubeFace face, unsigned level = 0); + + /** Attaches a layered texture to the framebuffer. Shaders can direct + output to a particular layer. */ + void attach_layered(FrameAttachment attch, Texture3D &, unsigned level = 0); - void attach(FrameAttachment attch, Texture2DMultisample &tex); - void attach(FrameAttachment attch, Texture3D &tex, unsigned layer, unsigned level = 0); - void attach(FrameAttachment attch, TextureCube &tex, TextureCubeFace face, unsigned level = 0); - void attach_layered(FrameAttachment attch, Texture3D &tex, unsigned level = 0); - void attach_layered(FrameAttachment attch, TextureCube &tex, unsigned level = 0); + void attach_layered(FrameAttachment attch, TextureCube &, unsigned level = 0); void detach(FrameAttachment attch); void resize(const WindowView &);