Sharing calculation result between shader programs in OpenGL Question

Is there a way to compute something in a first shader program (eg. screen-space coordinates from word-space ones) and access those results in an another shader program? 

Possible solutions


Give up multiple-shader-programs architecture and create one combined shader program
Save somehow results to a buffer objects (I couldn't find out if this is possible except computation shaders)
Render to texture and read the texture 


Is there a nicer solution?
Yes you can, this is how deferred rendering for example would work. For that you would render to a texture in one pass, in openGL this would be via an FBO, then feed that texture as the input to the next pass/shader.