Comparing your solution with mine (that’s not really mine, I took it from an older example and the code is basically the same of the how-to here) the two important points are
the FBO must be allocated with GL_RGBA
the background must be black and the mask (where the image will be seen) white (or gray)
Fixing these two things made the trick. And, of course, there is no need to redraw the fbo every frame so it should be drawn once in setup()
And yes it could be done with shaders but this way is much simpler (once you got it working), pulling a shader would be overkill (unless masking with setAlphaMask were done via CPU pixel manipulation, but I hope this is not the case).
While trying to use an image as mask I also noticed that the experimented behavior is different from what I was expecting.
The background must not be black but transparent, and the mask must be white where you want to see the pixels. And, of course, the size of the mask and the one of the image being drawn must match.
Thanks to both of you for this thread! I have been reading and experimenting on this topic on and off for a few days now, and this is the first place I have found amongst several threads and the How-To that actually show a working example that really clips to the shape, and does the other steps needed to actually draw it. The example on the HowTo should, I think, be edited to include this information. I’ve only been learning OF recently or I’d feel I should go ahead and edit it…