Use displayObject.shader to replace the standard DisplayObjectShader and perform a one-pass custom render of the object – this gives you visibility of the incoming texture and an ability to use this information before creating the final (transformed) fragments.
You’re using displayObject.filters = [ new ShaderFilter(...) ] which (by design) is a post-process shader to take all the cumulative rendering of the display object, flatten into a new texture and allow multiple ping-pong rendering passes on this output.
Does object.mask work for you?
