[monogame] Added BlendState support for BlendMode.Multiply.

This commit is contained in:
Harald Csaszar 2023-01-26 19:24:07 +01:00
parent 59d700ac3f
commit 66392e8cba

View File

@ -48,6 +48,7 @@ namespace Spine {
float[] vertices = new float[8];
int[] quadTriangles = { 0, 1, 2, 2, 3, 0 };
BlendState defaultBlendState;
BlendState blendStateMultiply = null;
Effect effect;
public Effect Effect { get { return effect; } set { effect = value; } }
@ -86,6 +87,12 @@ namespace Spine {
public void Begin () {
defaultBlendState = premultipliedAlpha ? BlendState.AlphaBlend : BlendState.NonPremultiplied;
if (blendStateMultiply == null) {
blendStateMultiply = new BlendState();
blendStateMultiply.ColorBlendFunction = BlendFunction.Max;
blendStateMultiply.ColorSourceBlend = Blend.DestinationColor;
blendStateMultiply.ColorDestinationBlend = Blend.Zero;
}
device.RasterizerState = rasterizerState;
device.BlendState = defaultBlendState;
@ -151,7 +158,18 @@ namespace Spine {
}
// set blend state
BlendState blend = slot.Data.BlendMode == BlendMode.Additive ? BlendState.Additive : defaultBlendState;
BlendState blend;
switch (slot.Data.BlendMode) {
case BlendMode.Additive:
blend = BlendState.Additive;
break;
case BlendMode.Multiply:
blend = blendStateMultiply;
break;
default:
blend = defaultBlendState;
break;
}
if (device.BlendState != blend) {
End();
device.BlendState = blend;