FBO's aren't a direct replacement for PixelBuffer objects so you can't
just miminc a osg::PixelBufferX11 by using a FBO.
FBO's are GL object objects, while PixelBuffer's are graphics
contexts. To create a FBO you need a graphics context. A PixelBuffer
is a graphics context that has it's own frame buffer that isn't
assigned to the display like a GraphicsWindow graphics context.
In the past OpenGL didn't have the ability to render to anything other
than graphics context's frame buffer so to PixelBuffer were the
standard way to doing multi pass rendering. With the advent of
FrameBufferObject OpenGL now had an ability to render to a frame
buffer other than the one assigned to the graphics context for the
purpose of display on the screen, as the FBO is OpenGL object within a
graphics context it's more efficient than using two graphics context
to do render to texture so is very much the preferred way of doing
multipass techniques like Render to Texture used in shadowing,
These days the need for PixelBuffer is much diminished as FBO's work
really well for most applications, however, there are times with
PixelBuffer's are still useful - if you want to render completely
offscreen with any on screen window then a PixelBuffer is a perfect
tool as is still the appropriate tool for the job.