Пример #1
0
    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));
        }
    }
Пример #2
0
        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));
            }
        }