I'm using XNA 4.0 to create a 2D game and while implementing a layer tinting pixel shader I noticed that when the texture's alpha value is anything between 1 or 0 the end result is different than expected.
The tinting works from selecting a colour and setting the amount of tint. This is achieved via the shader which works out first the starting colour (for each r, g, b and a) :
float red = texCoord.r * vertexColour.r;
and then the final tinted colour :
output.r = red + (tintColour.r - red) * tintAmount;
The alpha value isn't tinted and is left as :
output.a = texCoord.a * vertexColour.a;
The picture in the link below shows different backdrops against an energy ball object where it's outer glow hasn't blended as I would like it to. The middle two are incorrect as the second non tinted one should not show a glow against a white BG and the third should be entirely invisible.
The blending function is NonPremultiplied.
Can anyone please explain why the alpha value is interfering with the final colour.
Thank you for reading my question and I look forward to any reply.