The framebuffer object (FBO) is an extension to OpenGL for flexibly rendering to off-screen buffers, including rendering to a texture buffer. It can be used to implement a large variety of image filters and post-processing effects, by rendering images to the off-screen buffer first, applying the effects, before sending them to the on-screen buffer.
The FBO is used in OpenGL for its efficiency and ease of use. The use of FBOs doesn't suffer from the overhead associated with OpenGL drawing context switching, and has largely superseded the pbuffer and other methods that use context switching.
The FBO is analogous to the render targets model in DirectX.
The FBO has two main uses: The post-processing of rendered images and composition between different scenes. Some examples are:
Methods involving the FBO are considered superior because:
To use an FBO one simply creates an instance of it. Along with the FBO come several attachments. One can then attach these to a chosen receiver: either a texture, or a render buffer. An FBO can expose multiple color attachment points (GL_COLOR_ATTACHMENT0 and up), and applications normally check that the chosen set of attachments is framebuffer-complete before rendering to it.
For example: