private static System.Func <float, float, float> CreateBlendFunction(GradationMaterial.Blend blend) { switch (blend) { case GradationMaterial.Blend.Multiply: default: return((x, y) => x * y); case GradationMaterial.Blend.Override: return((x, y) => y); case GradationMaterial.Blend.Ignore: return((x, y) => x); case GradationMaterial.Blend.Add: return((x, y) => x + y); case GradationMaterial.Blend.Subtract: return((x, y) => x - y); case GradationMaterial.Blend.Screen: return((x, y) => 1.0f - (1.0f - x) * (1.0f - y)); case GradationMaterial.Blend.HardLight: return((x, y) => ((y < 0.5f)? (x * y): (1.0f - (1.0f - x) * (1.0f - y)))); case GradationMaterial.Blend.HardLightFast: return((x, y) => ((y < 0.5f)? (x * y): (x + y))); case GradationMaterial.Blend.Darken: return((x, y) => Mathf.Min(x, y)); case GradationMaterial.Blend.Lighten: return((x, y) => Mathf.Max(x, y)); } }
private static System.Func <int, int, int> CreateBlendFunction(GradationMaterial.Blend blend) { switch (blend) { case GradationMaterial.Blend.Multiply: default: return((x, y) => x * y / 0xFF); case GradationMaterial.Blend.Override: return((x, y) => y); case GradationMaterial.Blend.Ignore: return((x, y) => x); case GradationMaterial.Blend.Add: return((x, y) => Mathf.Min(x + y, 0xFF)); case GradationMaterial.Blend.Subtract: return((x, y) => Mathf.Max(0, x - y)); case GradationMaterial.Blend.Screen: return((x, y) => 0xFF - ((0xFF - x) * (0xFF - y) / 0xFF)); case GradationMaterial.Blend.HardLight: return((x, y) => (y < 0x80)? (x * y / 0xFF): (0xFF - ((0xFF - x) * (0xFF - y) / 0xFF))); case GradationMaterial.Blend.HardLightFast: return((x, y) => (y < 0x80)? (x * y / 0xFF): Mathf.Min(x + y, 0xFF)); case GradationMaterial.Blend.Darken: return((x, y) => Mathf.Min(x, y)); case GradationMaterial.Blend.Lighten: return((x, y) => Mathf.Max(x, y)); } }