|
@@ -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;
|