Take the 2-minute tour ×

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.

share|improve this question

1 Answer 1

up vote 4 down vote accepted

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.

share|improve this answer
Whoa, you're a genius!! Thanks! (Again lol) –  ashes999 Dec 16 '12 at 16:28

Your Answer


