// Calculates the blended image given a list of layers public static Texture2D CalculateBlendedTex(List <UPALayer> _layers, UPALayer.BlendMode mode = UPALayer.BlendMode.NULL) { if (_layers.Count > 0) { // Calculate blended image Texture2D _result = null; for (int i = 0; i < _layers.Count; i++) { UPALayer.BlendMode tempMode; if (mode == UPALayer.BlendMode.NULL) { tempMode = _layers[i].mode; } else { tempMode = mode; } if (!_layers[i].enabled) { continue; } if (_result == null) { _result = UPABlendModes.Blend(_layers[i].tex, _layers[i].opacity, _layers[i].tex, _layers[i].opacity, tempMode); } else { _result = UPABlendModes.Blend(_result, 1, _layers[i].tex, _layers[i].opacity, tempMode); } } if (_result == null) { Texture2D _empty = new Texture2D(1, 1); _empty.SetPixel(0, 0, Color.clear); _empty.Apply(); return(_empty); } return(_result); } else { Texture2D _empty = new Texture2D(1, 1); _empty.SetPixel(0, 0, Color.clear); _empty.Apply(); return(_empty); } }
public static Texture2D Blend(Texture2D lowerLayer, float lowerOpacity, Texture2D upperLayer, float upperOpacity, UPALayer.BlendMode mode) { switch (mode) { case UPALayer.BlendMode.NORMAL: return(Normal(lowerLayer, lowerOpacity, upperLayer, upperOpacity)); case UPALayer.BlendMode.MULTIPLY: return(Multiply(lowerLayer, lowerOpacity, upperLayer, upperOpacity)); case UPALayer.BlendMode.SCREEN: return(Screen(lowerLayer, lowerOpacity, upperLayer, upperOpacity)); case UPALayer.BlendMode.NOALPHA: return(NoAlpha(lowerLayer, lowerOpacity, upperLayer, upperOpacity)); default: return(Normal(lowerLayer, lowerOpacity, upperLayer, upperOpacity)); } }