I have a "lighting" texture (black background with white or colours for lights) that I want to draw as a multiplcation operation. SpriteBatch.Begin can specify BlendState.Additive, but there's no BlendState.Multiplicative.

I also tried the solution in this answer, but it didn't work -- even when I (incorrectly?) changed the code to work with XNA 4 style ColorDestinationBlend, I ended up with the final solution being inverted (black area where the light is, everything else is visible).

I initially thought of a shader, but I couldn't get shaders to work with MonoGame, so I'm falling back to SpriteBatch.


1 Answer 1


Create your own BlendState, eg:

BlendState blend = new BlendState();
blend.ColorBlendFunction = BlendFunction.Add;
blend.ColorSourceBlend = Blend.DestinationColor;
blend.ColorDestinationBlend = Blend.Zero;

This will result in out.rgb = source.rgb * destination.rgb + 0;

Edits by questioner: I had to also set the drawing mode to SpriteSortMode.Immediate before this worked.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .