From 66392e8cba3441945461bf639b463d5b67939bf4 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Thu, 26 Jan 2023 19:24:07 +0100 Subject: [PATCH] [monogame] Added BlendState support for BlendMode.Multiply. --- .../spine-monogame/src/SkeletonRenderer.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/spine-monogame/spine-monogame/src/SkeletonRenderer.cs b/spine-monogame/spine-monogame/src/SkeletonRenderer.cs index db5f8e3b3..e4df836e7 100644 --- a/spine-monogame/spine-monogame/src/SkeletonRenderer.cs +++ b/spine-monogame/spine-monogame/src/SkeletonRenderer.cs @@ -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;