Ashley, I know this is not a perfect solution, but I found this worked for 3DObject, when applied to each 3DQuad separately (e.g. not after a possible pre-draw, SetDepth() not enabled.)
This is my Alpha Discard effect, pretty simple, if alpha is below the threshold, discard pixel (so it won't be written to the frame buffer or depth buffer.) It has potential perf implications, so I imagine it would be good to only use it when needed. Since I need to happen before predraw, I added in a separate color and opacity to use if needed.
uniform lowp float threshold;
uniform lowp vec3 colorValue;
uniform lowp float opacity;
/////////////////////////////////////////////////////////
// AlphaDiscard
//The current foreground texture co-ordinate
varying mediump vec2 vTex;
//The foreground texture sampler, to be sampled at vTex
uniform lowp sampler2D samplerFront;
void main(void)
{
lowp vec4 frontSample = texture2D(samplerFront, vTex);
if (frontSample.a < threshold) {
discard;
} else {
gl_FragColor = vec4(colorValue*frontSample.rgb, frontSample.a)*opacity;
}
}