Can shader read from target framebuffer?

I’m trying to use OpenGL and framebuffer/texturebuffer objects to composite some 2D mask images.

At the moment, I’m creating a new destination texture and binding it to a framebuffer so it will accumulate the final mask. Then I iterate through all my source textures and draw them one at a time on top of my destination texture. (I’m doing this by drawing a singe quad with a simple shader that just samples the source texture).

While this works well for simple alpha blending, I would like to be able to create more complex operations that use the current color of the destination pixel to calculate the color of the current fragment. For example, I would like to do something like:


    vec4 src = texture2D(u_mySrcTex, v_samplingCoord);
    vec4 dst = getCurrentColorAtOutputFragmentPosition();
    vec4 finalColor = vec4(dst.rgb, max(src.a, dst.a));

I’d also like to be able to implement Porter-Duff compositing and things like that.

You could always just copy or blit the current framebuffer to another texture and use that copy as one of the source textures.

http://www.opengl.org/wiki/Framebuffer_Objects#Feedback_Loops

There is GL_NV_texture_barrier which allows to a very limited extent to use a texture even if it is the texture to which one is rendering.