I have implemented a simple deferred shading renderer. I have also implemented some post-processing effects (screen space water, depth of field) but they are all in one shader that takes the geometry buffer and renders the final image. I would like to set up a post-processing pipeline where a series of shaders modify the final image while having access to the geometry buffer as well as the current final image.
My question is this: When you write to a render target from a pixel shader (gl_FragData) is the render target modified instantly? In other words can each shader in the post-processing pipeline receive the current final image as input while writing to the final image? Or will I need to have two final image render targets and swap between them for each stage in the post-process? Like-so: