Pbuffers are useful for computing and storing the results of intermediate rendering steps. The contents of a Pbuffer are transferred to a visible buffer or vice-versa using the glxMakeCurrentRead() command to attach separate and distinct readable and writable buffers to the rendering context. Commands that read data from a buffer such as glCopyPixels() and glReadPixels() take source data from the currently bound read buffer and commands that generate fragments write them to the currently bound write buffer. Since Pbuffers may have ancillary buffers, it is possible for Pbuffers to store copies of the color, depth, and stencil buffers and efficiently transfer them back to the visible buffer and associated ancillary buffers.
Pixel buffers and glxMakeCurrentRead() were originally implemented as the SGI_make_current_read, SGIX_fbconfig, and SGIX_pbuffer GLX extensions and were added to the GLX standard as part of the GLX 1.3 specification. Pbuffers and MakeCurrentRead functionality are available on the Windows platforms on implementations that support the WGL_EXT_make_current_read and WGL_EXT_pbuffer extensions. At the time of writing these extensions are supported by Intergraph and Silicon Graphics.