Explorar o código

[monogame] Added BlendState support for BlendMode.Multiply.

Harald Csaszar %!s(int64=2) %!d(string=hai) anos
pai
achega
66392e8cba
Modificáronse 1 ficheiros con 19 adicións e 1 borrados
  1. 19 1
      spine-monogame/spine-monogame/src/SkeletonRenderer.cs

+ 19 - 1
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;