From c9af728104216e768faef206c45a0a00a36bdfb7 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 7 Aug 2026 08:10:38 +1000 Subject: [PATCH] Add plus and extended pixel blend modes Introduce the `Plus` alpha composition mode and add support for ColorDodge, ColorBurn, SoftLight, Difference, Exclusion, Hue, Saturation, Color, and Luminosity across straight-alpha and associated-alpha pixel blenders. The generated blender/function tables and selector logic were updated to expose the new combinations, and tests were expanded to cover mode mapping, expected blend results, and parity between straight and premultiplied alpha paths. --- .../PixelFormats/PixelAlphaCompositionMode.cs | 7 +- .../AssociatedAlphaPixelBlenders.Generated.cs | 4348 ++++++++-- .../AssociatedAlphaPixelBlenders.Generated.tt | 10 + .../AssociatedAlphaPixelBlenders.cs | 129 + ...iatedAlphaPorterDuffFunctions.Generated.cs | 7668 +++++++++++++++-- ...iatedAlphaPorterDuffFunctions.Generated.tt | 14 + .../AssociatedAlphaPorterDuffFunctions.cs | 449 + .../DefaultPixelBlenders.Generated.cs | 4348 ++++++++-- .../DefaultPixelBlenders.Generated.tt | 10 + .../PorterDuffFunctions.Generated.cs | 7151 ++++++++++++++- .../PorterDuffFunctions.Generated.tt | 57 +- .../PixelBlenders/PorterDuffFunctions.cs | 404 + .../PixelFormats/PixelColorBlendingMode.cs | 45 + .../PixelOperations{TPixel}.PixelBenders.cs | 132 + .../PixelFormats/PixelBlenderTests.cs | 221 +- .../PixelBlenders/PorterDuffFunctionsTests.cs | 135 +- 16 files changed, 23139 insertions(+), 1989 deletions(-) diff --git a/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs b/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs index f42a264db..b003e62a4 100644 --- a/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs +++ b/src/ImageSharp/PixelFormats/PixelAlphaCompositionMode.cs @@ -66,5 +66,10 @@ public enum PixelAlphaCompositionMode /// /// Clear where they overlap. /// - Xor + Xor, + + /// + /// Adds the source and destination, clamping the result to the supported color and alpha range. + /// + Plus, } diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.Generated.cs b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.Generated.cs index acd9fba9c..b553e3412 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.Generated.cs @@ -202,2121 +202,4767 @@ internal static class AssociatedAlphaPixelBlenderOperators } /// - /// Applies the "NormalSrcAtop" associated-alpha composition equation. + /// Applies the "ColorDodgeSrc" associated-alpha composition equation. /// - public readonly struct NormalSrcAtop : IPixelBlenderOperator + public readonly struct ColorDodgeSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrc(background, source, amount); } /// - /// Applies the "MultiplySrcAtop" associated-alpha composition equation. + /// Applies the "ColorBurnSrc" associated-alpha composition equation. /// - public readonly struct MultiplySrcAtop : IPixelBlenderOperator + public readonly struct ColorBurnSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrc(background, source, amount); } /// - /// Applies the "AddSrcAtop" associated-alpha composition equation. + /// Applies the "SoftLightSrc" associated-alpha composition equation. /// - public readonly struct AddSrcAtop : IPixelBlenderOperator + public readonly struct SoftLightSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrc(background, source, amount); } /// - /// Applies the "SubtractSrcAtop" associated-alpha composition equation. + /// Applies the "DifferenceSrc" associated-alpha composition equation. /// - public readonly struct SubtractSrcAtop : IPixelBlenderOperator + public readonly struct DifferenceSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrc(background, source, amount); } /// - /// Applies the "ScreenSrcAtop" associated-alpha composition equation. + /// Applies the "ExclusionSrc" associated-alpha composition equation. /// - public readonly struct ScreenSrcAtop : IPixelBlenderOperator + public readonly struct ExclusionSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrc(background, source, amount); } /// - /// Applies the "DarkenSrcAtop" associated-alpha composition equation. + /// Applies the "HueSrc" associated-alpha composition equation. /// - public readonly struct DarkenSrcAtop : IPixelBlenderOperator + public readonly struct HueSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrc(background, source, amount); } /// - /// Applies the "LightenSrcAtop" associated-alpha composition equation. + /// Applies the "SaturationSrc" associated-alpha composition equation. /// - public readonly struct LightenSrcAtop : IPixelBlenderOperator + public readonly struct SaturationSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrc(background, source, amount); } /// - /// Applies the "OverlaySrcAtop" associated-alpha composition equation. + /// Applies the "ColorSrc" associated-alpha composition equation. /// - public readonly struct OverlaySrcAtop : IPixelBlenderOperator + public readonly struct ColorSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrc(background, source, amount); } /// - /// Applies the "HardLightSrcAtop" associated-alpha composition equation. + /// Applies the "LuminositySrc" associated-alpha composition equation. /// - public readonly struct HardLightSrcAtop : IPixelBlenderOperator + public readonly struct LuminositySrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrc(background, source, amount); } /// - /// Applies the "NormalSrcOver" associated-alpha composition equation. + /// Applies the "NormalSrcAtop" associated-alpha composition equation. /// - public readonly struct NormalSrcOver : IPixelBlenderOperator + public readonly struct NormalSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcAtop(background, source, amount); } /// - /// Applies the "MultiplySrcOver" associated-alpha composition equation. + /// Applies the "MultiplySrcAtop" associated-alpha composition equation. /// - public readonly struct MultiplySrcOver : IPixelBlenderOperator + public readonly struct MultiplySrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcAtop(background, source, amount); } /// - /// Applies the "AddSrcOver" associated-alpha composition equation. + /// Applies the "AddSrcAtop" associated-alpha composition equation. /// - public readonly struct AddSrcOver : IPixelBlenderOperator + public readonly struct AddSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcAtop(background, source, amount); } /// - /// Applies the "SubtractSrcOver" associated-alpha composition equation. + /// Applies the "SubtractSrcAtop" associated-alpha composition equation. /// - public readonly struct SubtractSrcOver : IPixelBlenderOperator + public readonly struct SubtractSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcAtop(background, source, amount); } /// - /// Applies the "ScreenSrcOver" associated-alpha composition equation. + /// Applies the "ScreenSrcAtop" associated-alpha composition equation. /// - public readonly struct ScreenSrcOver : IPixelBlenderOperator + public readonly struct ScreenSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcAtop(background, source, amount); } /// - /// Applies the "DarkenSrcOver" associated-alpha composition equation. + /// Applies the "DarkenSrcAtop" associated-alpha composition equation. /// - public readonly struct DarkenSrcOver : IPixelBlenderOperator + public readonly struct DarkenSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcAtop(background, source, amount); } /// - /// Applies the "LightenSrcOver" associated-alpha composition equation. + /// Applies the "LightenSrcAtop" associated-alpha composition equation. /// - public readonly struct LightenSrcOver : IPixelBlenderOperator + public readonly struct LightenSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcAtop(background, source, amount); } /// - /// Applies the "OverlaySrcOver" associated-alpha composition equation. + /// Applies the "OverlaySrcAtop" associated-alpha composition equation. /// - public readonly struct OverlaySrcOver : IPixelBlenderOperator + public readonly struct OverlaySrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcAtop(background, source, amount); } /// - /// Applies the "HardLightSrcOver" associated-alpha composition equation. + /// Applies the "HardLightSrcAtop" associated-alpha composition equation. /// - public readonly struct HardLightSrcOver : IPixelBlenderOperator + public readonly struct HardLightSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcAtop(background, source, amount); } /// - /// Applies the "NormalSrcIn" associated-alpha composition equation. + /// Applies the "ColorDodgeSrcAtop" associated-alpha composition equation. /// - public readonly struct NormalSrcIn : IPixelBlenderOperator + public readonly struct ColorDodgeSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcAtop(background, source, amount); } /// - /// Applies the "MultiplySrcIn" associated-alpha composition equation. + /// Applies the "ColorBurnSrcAtop" associated-alpha composition equation. /// - public readonly struct MultiplySrcIn : IPixelBlenderOperator + public readonly struct ColorBurnSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcAtop(background, source, amount); } /// - /// Applies the "AddSrcIn" associated-alpha composition equation. + /// Applies the "SoftLightSrcAtop" associated-alpha composition equation. /// - public readonly struct AddSrcIn : IPixelBlenderOperator + public readonly struct SoftLightSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcAtop(background, source, amount); } /// - /// Applies the "SubtractSrcIn" associated-alpha composition equation. + /// Applies the "DifferenceSrcAtop" associated-alpha composition equation. /// - public readonly struct SubtractSrcIn : IPixelBlenderOperator + public readonly struct DifferenceSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcAtop(background, source, amount); } /// - /// Applies the "ScreenSrcIn" associated-alpha composition equation. + /// Applies the "ExclusionSrcAtop" associated-alpha composition equation. /// - public readonly struct ScreenSrcIn : IPixelBlenderOperator + public readonly struct ExclusionSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcAtop(background, source, amount); } /// - /// Applies the "DarkenSrcIn" associated-alpha composition equation. + /// Applies the "HueSrcAtop" associated-alpha composition equation. /// - public readonly struct DarkenSrcIn : IPixelBlenderOperator + public readonly struct HueSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcAtop(background, source, amount); } /// - /// Applies the "LightenSrcIn" associated-alpha composition equation. + /// Applies the "SaturationSrcAtop" associated-alpha composition equation. /// - public readonly struct LightenSrcIn : IPixelBlenderOperator + public readonly struct SaturationSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcAtop(background, source, amount); } /// - /// Applies the "OverlaySrcIn" associated-alpha composition equation. + /// Applies the "ColorSrcAtop" associated-alpha composition equation. /// - public readonly struct OverlaySrcIn : IPixelBlenderOperator + public readonly struct ColorSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcAtop(background, source, amount); } /// - /// Applies the "HardLightSrcIn" associated-alpha composition equation. + /// Applies the "LuminositySrcAtop" associated-alpha composition equation. /// - public readonly struct HardLightSrcIn : IPixelBlenderOperator + public readonly struct LuminositySrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcAtop(background, source, amount); } /// - /// Applies the "NormalSrcOut" associated-alpha composition equation. + /// Applies the "NormalSrcOver" associated-alpha composition equation. /// - public readonly struct NormalSrcOut : IPixelBlenderOperator + public readonly struct NormalSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcOver(background, source, amount); } /// - /// Applies the "MultiplySrcOut" associated-alpha composition equation. + /// Applies the "MultiplySrcOver" associated-alpha composition equation. /// - public readonly struct MultiplySrcOut : IPixelBlenderOperator + public readonly struct MultiplySrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplySrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcOver(background, source, amount); } /// - /// Applies the "AddSrcOut" associated-alpha composition equation. + /// Applies the "AddSrcOver" associated-alpha composition equation. /// - public readonly struct AddSrcOut : IPixelBlenderOperator + public readonly struct AddSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcOver(background, source, amount); } /// - /// Applies the "SubtractSrcOut" associated-alpha composition equation. + /// Applies the "SubtractSrcOver" associated-alpha composition equation. /// - public readonly struct SubtractSrcOut : IPixelBlenderOperator + public readonly struct SubtractSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcOver(background, source, amount); } /// - /// Applies the "ScreenSrcOut" associated-alpha composition equation. + /// Applies the "ScreenSrcOver" associated-alpha composition equation. /// - public readonly struct ScreenSrcOut : IPixelBlenderOperator + public readonly struct ScreenSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcOver(background, source, amount); } /// - /// Applies the "DarkenSrcOut" associated-alpha composition equation. + /// Applies the "DarkenSrcOver" associated-alpha composition equation. /// - public readonly struct DarkenSrcOut : IPixelBlenderOperator + public readonly struct DarkenSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcOver(background, source, amount); } /// - /// Applies the "LightenSrcOut" associated-alpha composition equation. + /// Applies the "LightenSrcOver" associated-alpha composition equation. /// - public readonly struct LightenSrcOut : IPixelBlenderOperator + public readonly struct LightenSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcOver(background, source, amount); } /// - /// Applies the "OverlaySrcOut" associated-alpha composition equation. + /// Applies the "OverlaySrcOver" associated-alpha composition equation. /// - public readonly struct OverlaySrcOut : IPixelBlenderOperator + public readonly struct OverlaySrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlaySrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcOver(background, source, amount); } /// - /// Applies the "HardLightSrcOut" associated-alpha composition equation. + /// Applies the "HardLightSrcOver" associated-alpha composition equation. /// - public readonly struct HardLightSrcOut : IPixelBlenderOperator + public readonly struct HardLightSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightSrcOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcOver(background, source, amount); } /// - /// Applies the "NormalDest" associated-alpha composition equation. + /// Applies the "ColorDodgeSrcOver" associated-alpha composition equation. /// - public readonly struct NormalDest : IPixelBlenderOperator + public readonly struct ColorDodgeSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcOver(background, source, amount); } /// - /// Applies the "MultiplyDest" associated-alpha composition equation. + /// Applies the "ColorBurnSrcOver" associated-alpha composition equation. /// - public readonly struct MultiplyDest : IPixelBlenderOperator + public readonly struct ColorBurnSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcOver(background, source, amount); } /// - /// Applies the "AddDest" associated-alpha composition equation. + /// Applies the "SoftLightSrcOver" associated-alpha composition equation. /// - public readonly struct AddDest : IPixelBlenderOperator + public readonly struct SoftLightSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcOver(background, source, amount); } /// - /// Applies the "SubtractDest" associated-alpha composition equation. + /// Applies the "DifferenceSrcOver" associated-alpha composition equation. /// - public readonly struct SubtractDest : IPixelBlenderOperator + public readonly struct DifferenceSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcOver(background, source, amount); } /// - /// Applies the "ScreenDest" associated-alpha composition equation. + /// Applies the "ExclusionSrcOver" associated-alpha composition equation. /// - public readonly struct ScreenDest : IPixelBlenderOperator + public readonly struct ExclusionSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcOver(background, source, amount); } /// - /// Applies the "DarkenDest" associated-alpha composition equation. + /// Applies the "HueSrcOver" associated-alpha composition equation. /// - public readonly struct DarkenDest : IPixelBlenderOperator + public readonly struct HueSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcOver(background, source, amount); } /// - /// Applies the "LightenDest" associated-alpha composition equation. + /// Applies the "SaturationSrcOver" associated-alpha composition equation. /// - public readonly struct LightenDest : IPixelBlenderOperator + public readonly struct SaturationSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcOver(background, source, amount); } /// - /// Applies the "OverlayDest" associated-alpha composition equation. + /// Applies the "ColorSrcOver" associated-alpha composition equation. /// - public readonly struct OverlayDest : IPixelBlenderOperator + public readonly struct ColorSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcOver(background, source, amount); } /// - /// Applies the "HardLightDest" associated-alpha composition equation. + /// Applies the "LuminositySrcOver" associated-alpha composition equation. /// - public readonly struct HardLightDest : IPixelBlenderOperator + public readonly struct LuminositySrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDest(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcOver(background, source, amount); } /// - /// Applies the "NormalDestAtop" associated-alpha composition equation. + /// Applies the "NormalSrcIn" associated-alpha composition equation. /// - public readonly struct NormalDestAtop : IPixelBlenderOperator + public readonly struct NormalSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcIn(background, source, amount); } /// - /// Applies the "MultiplyDestAtop" associated-alpha composition equation. + /// Applies the "MultiplySrcIn" associated-alpha composition equation. /// - public readonly struct MultiplyDestAtop : IPixelBlenderOperator + public readonly struct MultiplySrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcIn(background, source, amount); } /// - /// Applies the "AddDestAtop" associated-alpha composition equation. + /// Applies the "AddSrcIn" associated-alpha composition equation. /// - public readonly struct AddDestAtop : IPixelBlenderOperator + public readonly struct AddSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcIn(background, source, amount); } /// - /// Applies the "SubtractDestAtop" associated-alpha composition equation. + /// Applies the "SubtractSrcIn" associated-alpha composition equation. /// - public readonly struct SubtractDestAtop : IPixelBlenderOperator + public readonly struct SubtractSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcIn(background, source, amount); } /// - /// Applies the "ScreenDestAtop" associated-alpha composition equation. + /// Applies the "ScreenSrcIn" associated-alpha composition equation. /// - public readonly struct ScreenDestAtop : IPixelBlenderOperator + public readonly struct ScreenSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcIn(background, source, amount); } /// - /// Applies the "DarkenDestAtop" associated-alpha composition equation. + /// Applies the "DarkenSrcIn" associated-alpha composition equation. /// - public readonly struct DarkenDestAtop : IPixelBlenderOperator + public readonly struct DarkenSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcIn(background, source, amount); } /// - /// Applies the "LightenDestAtop" associated-alpha composition equation. + /// Applies the "LightenSrcIn" associated-alpha composition equation. /// - public readonly struct LightenDestAtop : IPixelBlenderOperator + public readonly struct LightenSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcIn(background, source, amount); } /// - /// Applies the "OverlayDestAtop" associated-alpha composition equation. + /// Applies the "OverlaySrcIn" associated-alpha composition equation. /// - public readonly struct OverlayDestAtop : IPixelBlenderOperator + public readonly struct OverlaySrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcIn(background, source, amount); } /// - /// Applies the "HardLightDestAtop" associated-alpha composition equation. + /// Applies the "HardLightSrcIn" associated-alpha composition equation. /// - public readonly struct HardLightDestAtop : IPixelBlenderOperator + public readonly struct HardLightSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestAtop(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcIn(background, source, amount); } /// - /// Applies the "NormalDestOver" associated-alpha composition equation. + /// Applies the "ColorDodgeSrcIn" associated-alpha composition equation. /// - public readonly struct NormalDestOver : IPixelBlenderOperator + public readonly struct ColorDodgeSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcIn(background, source, amount); } /// - /// Applies the "MultiplyDestOver" associated-alpha composition equation. + /// Applies the "ColorBurnSrcIn" associated-alpha composition equation. /// - public readonly struct MultiplyDestOver : IPixelBlenderOperator + public readonly struct ColorBurnSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcIn(background, source, amount); } /// - /// Applies the "AddDestOver" associated-alpha composition equation. + /// Applies the "SoftLightSrcIn" associated-alpha composition equation. /// - public readonly struct AddDestOver : IPixelBlenderOperator + public readonly struct SoftLightSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcIn(background, source, amount); } /// - /// Applies the "SubtractDestOver" associated-alpha composition equation. + /// Applies the "DifferenceSrcIn" associated-alpha composition equation. /// - public readonly struct SubtractDestOver : IPixelBlenderOperator + public readonly struct DifferenceSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcIn(background, source, amount); } /// - /// Applies the "ScreenDestOver" associated-alpha composition equation. + /// Applies the "ExclusionSrcIn" associated-alpha composition equation. /// - public readonly struct ScreenDestOver : IPixelBlenderOperator + public readonly struct ExclusionSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcIn(background, source, amount); } /// - /// Applies the "DarkenDestOver" associated-alpha composition equation. + /// Applies the "HueSrcIn" associated-alpha composition equation. /// - public readonly struct DarkenDestOver : IPixelBlenderOperator + public readonly struct HueSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcIn(background, source, amount); } /// - /// Applies the "LightenDestOver" associated-alpha composition equation. + /// Applies the "SaturationSrcIn" associated-alpha composition equation. /// - public readonly struct LightenDestOver : IPixelBlenderOperator + public readonly struct SaturationSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcIn(background, source, amount); } /// - /// Applies the "OverlayDestOver" associated-alpha composition equation. + /// Applies the "ColorSrcIn" associated-alpha composition equation. /// - public readonly struct OverlayDestOver : IPixelBlenderOperator + public readonly struct ColorSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcIn(background, source, amount); } /// - /// Applies the "HardLightDestOver" associated-alpha composition equation. + /// Applies the "LuminositySrcIn" associated-alpha composition equation. /// - public readonly struct HardLightDestOver : IPixelBlenderOperator + public readonly struct LuminositySrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestOver(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcIn(background, source, amount); } /// - /// Applies the "NormalDestIn" associated-alpha composition equation. + /// Applies the "NormalSrcOut" associated-alpha composition equation. /// - public readonly struct NormalDestIn : IPixelBlenderOperator + public readonly struct NormalSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalSrcOut(background, source, amount); } /// - /// Applies the "MultiplyDestIn" associated-alpha composition equation. + /// Applies the "MultiplySrcOut" associated-alpha composition equation. /// - public readonly struct MultiplyDestIn : IPixelBlenderOperator + public readonly struct MultiplySrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplySrcOut(background, source, amount); } /// - /// Applies the "AddDestIn" associated-alpha composition equation. + /// Applies the "AddSrcOut" associated-alpha composition equation. /// - public readonly struct AddDestIn : IPixelBlenderOperator + public readonly struct AddSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddSrcOut(background, source, amount); } /// - /// Applies the "SubtractDestIn" associated-alpha composition equation. + /// Applies the "SubtractSrcOut" associated-alpha composition equation. /// - public readonly struct SubtractDestIn : IPixelBlenderOperator + public readonly struct SubtractSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractSrcOut(background, source, amount); } /// - /// Applies the "ScreenDestIn" associated-alpha composition equation. + /// Applies the "ScreenSrcOut" associated-alpha composition equation. /// - public readonly struct ScreenDestIn : IPixelBlenderOperator + public readonly struct ScreenSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenSrcOut(background, source, amount); } /// - /// Applies the "DarkenDestIn" associated-alpha composition equation. + /// Applies the "DarkenSrcOut" associated-alpha composition equation. /// - public readonly struct DarkenDestIn : IPixelBlenderOperator + public readonly struct DarkenSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenSrcOut(background, source, amount); } /// - /// Applies the "LightenDestIn" associated-alpha composition equation. + /// Applies the "LightenSrcOut" associated-alpha composition equation. /// - public readonly struct LightenDestIn : IPixelBlenderOperator + public readonly struct LightenSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenSrcOut(background, source, amount); } /// - /// Applies the "OverlayDestIn" associated-alpha composition equation. + /// Applies the "OverlaySrcOut" associated-alpha composition equation. /// - public readonly struct OverlayDestIn : IPixelBlenderOperator + public readonly struct OverlaySrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlaySrcOut(background, source, amount); } /// - /// Applies the "HardLightDestIn" associated-alpha composition equation. + /// Applies the "HardLightSrcOut" associated-alpha composition equation. /// - public readonly struct HardLightDestIn : IPixelBlenderOperator + public readonly struct HardLightSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestIn(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightSrcOut(background, source, amount); } /// - /// Applies the "NormalDestOut" associated-alpha composition equation. + /// Applies the "ColorDodgeSrcOut" associated-alpha composition equation. /// - public readonly struct NormalDestOut : IPixelBlenderOperator + public readonly struct ColorDodgeSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeSrcOut(background, source, amount); } /// - /// Applies the "MultiplyDestOut" associated-alpha composition equation. + /// Applies the "ColorBurnSrcOut" associated-alpha composition equation. /// - public readonly struct MultiplyDestOut : IPixelBlenderOperator + public readonly struct ColorBurnSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnSrcOut(background, source, amount); } /// - /// Applies the "AddDestOut" associated-alpha composition equation. + /// Applies the "SoftLightSrcOut" associated-alpha composition equation. /// - public readonly struct AddDestOut : IPixelBlenderOperator + public readonly struct SoftLightSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightSrcOut(background, source, amount); } /// - /// Applies the "SubtractDestOut" associated-alpha composition equation. + /// Applies the "DifferenceSrcOut" associated-alpha composition equation. /// - public readonly struct SubtractDestOut : IPixelBlenderOperator + public readonly struct DifferenceSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceSrcOut(background, source, amount); } /// - /// Applies the "ScreenDestOut" associated-alpha composition equation. + /// Applies the "ExclusionSrcOut" associated-alpha composition equation. /// - public readonly struct ScreenDestOut : IPixelBlenderOperator + public readonly struct ExclusionSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionSrcOut(background, source, amount); } /// - /// Applies the "DarkenDestOut" associated-alpha composition equation. + /// Applies the "HueSrcOut" associated-alpha composition equation. /// - public readonly struct DarkenDestOut : IPixelBlenderOperator + public readonly struct HueSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueSrcOut(background, source, amount); } /// - /// Applies the "LightenDestOut" associated-alpha composition equation. + /// Applies the "SaturationSrcOut" associated-alpha composition equation. /// - public readonly struct LightenDestOut : IPixelBlenderOperator + public readonly struct SaturationSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationSrcOut(background, source, amount); } /// - /// Applies the "OverlayDestOut" associated-alpha composition equation. + /// Applies the "ColorSrcOut" associated-alpha composition equation. /// - public readonly struct OverlayDestOut : IPixelBlenderOperator + public readonly struct ColorSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorSrcOut(background, source, amount); } /// - /// Applies the "HardLightDestOut" associated-alpha composition equation. + /// Applies the "LuminositySrcOut" associated-alpha composition equation. /// - public readonly struct HardLightDestOut : IPixelBlenderOperator + public readonly struct LuminositySrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightDestOut(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminositySrcOut(background, source, amount); } /// - /// Applies the "NormalClear" associated-alpha composition equation. + /// Applies the "NormalDest" associated-alpha composition equation. /// - public readonly struct NormalClear : IPixelBlenderOperator + public readonly struct NormalDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.NormalDest(background, source, amount); } /// - /// Applies the "MultiplyClear" associated-alpha composition equation. + /// Applies the "MultiplyDest" associated-alpha composition equation. /// - public readonly struct MultiplyClear : IPixelBlenderOperator + public readonly struct MultiplyDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplyDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplyDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.MultiplyDest(background, source, amount); } /// - /// Applies the "AddClear" associated-alpha composition equation. + /// Applies the "AddDest" associated-alpha composition equation. /// - public readonly struct AddClear : IPixelBlenderOperator + public readonly struct AddDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.AddDest(background, source, amount); } /// - /// Applies the "SubtractClear" associated-alpha composition equation. + /// Applies the "SubtractDest" associated-alpha composition equation. /// - public readonly struct SubtractClear : IPixelBlenderOperator + public readonly struct SubtractDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SubtractDest(background, source, amount); } /// - /// Applies the "ScreenClear" associated-alpha composition equation. + /// Applies the "ScreenDest" associated-alpha composition equation. /// - public readonly struct ScreenClear : IPixelBlenderOperator + public readonly struct ScreenDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ScreenDest(background, source, amount); } /// - /// Applies the "DarkenClear" associated-alpha composition equation. + /// Applies the "DarkenDest" associated-alpha composition equation. /// - public readonly struct DarkenClear : IPixelBlenderOperator + public readonly struct DarkenDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DarkenDest(background, source, amount); } /// - /// Applies the "LightenClear" associated-alpha composition equation. + /// Applies the "LightenDest" associated-alpha composition equation. /// - public readonly struct LightenClear : IPixelBlenderOperator + public readonly struct LightenDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LightenDest(background, source, amount); } /// - /// Applies the "OverlayClear" associated-alpha composition equation. + /// Applies the "OverlayDest" associated-alpha composition equation. /// - public readonly struct OverlayClear : IPixelBlenderOperator + public readonly struct OverlayDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlayClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlayDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlayDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.OverlayDest(background, source, amount); } /// - /// Applies the "HardLightClear" associated-alpha composition equation. + /// Applies the "HardLightDest" associated-alpha composition equation. /// - public readonly struct HardLightClear : IPixelBlenderOperator + public readonly struct HardLightDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightClear(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HardLightDest(background, source, amount); } /// - /// Applies the "NormalXor" associated-alpha composition equation. + /// Applies the "ColorDodgeDest" associated-alpha composition equation. /// - public readonly struct NormalXor : IPixelBlenderOperator + public readonly struct ColorDodgeDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.NormalXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.NormalXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.NormalXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDest(background, source, amount); } /// - /// Applies the "MultiplyXor" associated-alpha composition equation. + /// Applies the "ColorBurnDest" associated-alpha composition equation. /// - public readonly struct MultiplyXor : IPixelBlenderOperator + public readonly struct ColorBurnDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.MultiplyXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorBurnDest(background, source, amount); } /// - /// Applies the "AddXor" associated-alpha composition equation. + /// Applies the "SoftLightDest" associated-alpha composition equation. /// - public readonly struct AddXor : IPixelBlenderOperator + public readonly struct SoftLightDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.AddXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.AddXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.AddXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SoftLightDest(background, source, amount); } /// - /// Applies the "SubtractXor" associated-alpha composition equation. + /// Applies the "DifferenceDest" associated-alpha composition equation. /// - public readonly struct SubtractXor : IPixelBlenderOperator + public readonly struct DifferenceDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.SubtractXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.SubtractXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.DifferenceDest(background, source, amount); } /// - /// Applies the "ScreenXor" associated-alpha composition equation. + /// Applies the "ExclusionDest" associated-alpha composition equation. /// - public readonly struct ScreenXor : IPixelBlenderOperator + public readonly struct ExclusionDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.ScreenXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.ScreenXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ExclusionDest(background, source, amount); } /// - /// Applies the "DarkenXor" associated-alpha composition equation. + /// Applies the "HueDest" associated-alpha composition equation. /// - public readonly struct DarkenXor : IPixelBlenderOperator + public readonly struct HueDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.DarkenXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.DarkenXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.HueDest(background, source, amount); } /// - /// Applies the "LightenXor" associated-alpha composition equation. + /// Applies the "SaturationDest" associated-alpha composition equation. /// - public readonly struct LightenXor : IPixelBlenderOperator + public readonly struct SaturationDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.LightenXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.LightenXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.LightenXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.SaturationDest(background, source, amount); } /// - /// Applies the "OverlayXor" associated-alpha composition equation. + /// Applies the "ColorDest" associated-alpha composition equation. /// - public readonly struct OverlayXor : IPixelBlenderOperator + public readonly struct ColorDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.OverlayXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.OverlayXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.ColorDest(background, source, amount); } /// - /// Applies the "HardLightXor" associated-alpha composition equation. + /// Applies the "LuminosityDest" associated-alpha composition equation. /// - public readonly struct HardLightXor : IPixelBlenderOperator + public readonly struct LuminosityDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => true; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => AssociatedAlphaPorterDuffFunctions.HardLightXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminosityDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminosityDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => AssociatedAlphaPorterDuffFunctions.HardLightXor(background, source, amount); + => AssociatedAlphaPorterDuffFunctions.LuminosityDest(background, source, amount); } -} - -/// -/// Provides associated-alpha pixel blenders for each color and alpha composition pair. -/// -/// The associated-alpha destination pixel format. -internal static partial class AssociatedAlphaPixelBlenders - where TPixel : unmanaged, IPixel -{ /// - /// Gets the shared blender for the "NormalSrc" composition equation. + /// Applies the "NormalDestAtop" associated-alpha composition equation. /// - public static PixelBlender NormalSrc => PixelBlender.Instance; + public readonly struct NormalDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; - /// - /// Gets the shared blender for the "MultiplySrc" composition equation. - /// - public static PixelBlender MultiplySrc => PixelBlender.Instance; + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestAtop(background, source, amount); - /// - /// Gets the shared blender for the "AddSrc" composition equation. - /// - public static PixelBlender AddSrc => PixelBlender.Instance; + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestAtop(background, source, amount); - /// - /// Gets the shared blender for the "SubtractSrc" composition equation. - /// - public static PixelBlender SubtractSrc => PixelBlender.Instance; + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestAtop(background, source, amount); + } /// - /// Gets the shared blender for the "ScreenSrc" composition equation. + /// Applies the "MultiplyDestAtop" associated-alpha composition equation. /// - public static PixelBlender ScreenSrc => PixelBlender.Instance; + public readonly struct MultiplyDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; - /// - /// Gets the shared blender for the "DarkenSrc" composition equation. - /// + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestAtop(background, source, amount); + } + + /// + /// Applies the "AddDestAtop" associated-alpha composition equation. + /// + public readonly struct AddDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.AddDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.AddDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.AddDestAtop(background, source, amount); + } + + /// + /// Applies the "SubtractDestAtop" associated-alpha composition equation. + /// + public readonly struct SubtractDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestAtop(background, source, amount); + } + + /// + /// Applies the "ScreenDestAtop" associated-alpha composition equation. + /// + public readonly struct ScreenDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestAtop(background, source, amount); + } + + /// + /// Applies the "DarkenDestAtop" associated-alpha composition equation. + /// + public readonly struct DarkenDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestAtop(background, source, amount); + } + + /// + /// Applies the "LightenDestAtop" associated-alpha composition equation. + /// + public readonly struct LightenDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestAtop(background, source, amount); + } + + /// + /// Applies the "OverlayDestAtop" associated-alpha composition equation. + /// + public readonly struct OverlayDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestAtop(background, source, amount); + } + + /// + /// Applies the "HardLightDestAtop" associated-alpha composition equation. + /// + public readonly struct HardLightDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestAtop(background, source, amount); + } + + /// + /// Applies the "ColorDodgeDestAtop" associated-alpha composition equation. + /// + public readonly struct ColorDodgeDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestAtop(background, source, amount); + } + + /// + /// Applies the "ColorBurnDestAtop" associated-alpha composition equation. + /// + public readonly struct ColorBurnDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestAtop(background, source, amount); + } + + /// + /// Applies the "SoftLightDestAtop" associated-alpha composition equation. + /// + public readonly struct SoftLightDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestAtop(background, source, amount); + } + + /// + /// Applies the "DifferenceDestAtop" associated-alpha composition equation. + /// + public readonly struct DifferenceDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestAtop(background, source, amount); + } + + /// + /// Applies the "ExclusionDestAtop" associated-alpha composition equation. + /// + public readonly struct ExclusionDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestAtop(background, source, amount); + } + + /// + /// Applies the "HueDestAtop" associated-alpha composition equation. + /// + public readonly struct HueDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HueDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HueDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HueDestAtop(background, source, amount); + } + + /// + /// Applies the "SaturationDestAtop" associated-alpha composition equation. + /// + public readonly struct SaturationDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestAtop(background, source, amount); + } + + /// + /// Applies the "ColorDestAtop" associated-alpha composition equation. + /// + public readonly struct ColorDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestAtop(background, source, amount); + } + + /// + /// Applies the "LuminosityDestAtop" associated-alpha composition equation. + /// + public readonly struct LuminosityDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestAtop(background, source, amount); + } + + /// + /// Applies the "NormalDestOver" associated-alpha composition equation. + /// + public readonly struct NormalDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestOver(background, source, amount); + } + + /// + /// Applies the "MultiplyDestOver" associated-alpha composition equation. + /// + public readonly struct MultiplyDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestOver(background, source, amount); + } + + /// + /// Applies the "AddDestOver" associated-alpha composition equation. + /// + public readonly struct AddDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.AddDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.AddDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.AddDestOver(background, source, amount); + } + + /// + /// Applies the "SubtractDestOver" associated-alpha composition equation. + /// + public readonly struct SubtractDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestOver(background, source, amount); + } + + /// + /// Applies the "ScreenDestOver" associated-alpha composition equation. + /// + public readonly struct ScreenDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestOver(background, source, amount); + } + + /// + /// Applies the "DarkenDestOver" associated-alpha composition equation. + /// + public readonly struct DarkenDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestOver(background, source, amount); + } + + /// + /// Applies the "LightenDestOver" associated-alpha composition equation. + /// + public readonly struct LightenDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestOver(background, source, amount); + } + + /// + /// Applies the "OverlayDestOver" associated-alpha composition equation. + /// + public readonly struct OverlayDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestOver(background, source, amount); + } + + /// + /// Applies the "HardLightDestOver" associated-alpha composition equation. + /// + public readonly struct HardLightDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestOver(background, source, amount); + } + + /// + /// Applies the "ColorDodgeDestOver" associated-alpha composition equation. + /// + public readonly struct ColorDodgeDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestOver(background, source, amount); + } + + /// + /// Applies the "ColorBurnDestOver" associated-alpha composition equation. + /// + public readonly struct ColorBurnDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestOver(background, source, amount); + } + + /// + /// Applies the "SoftLightDestOver" associated-alpha composition equation. + /// + public readonly struct SoftLightDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestOver(background, source, amount); + } + + /// + /// Applies the "DifferenceDestOver" associated-alpha composition equation. + /// + public readonly struct DifferenceDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestOver(background, source, amount); + } + + /// + /// Applies the "ExclusionDestOver" associated-alpha composition equation. + /// + public readonly struct ExclusionDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestOver(background, source, amount); + } + + /// + /// Applies the "HueDestOver" associated-alpha composition equation. + /// + public readonly struct HueDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HueDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HueDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HueDestOver(background, source, amount); + } + + /// + /// Applies the "SaturationDestOver" associated-alpha composition equation. + /// + public readonly struct SaturationDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestOver(background, source, amount); + } + + /// + /// Applies the "ColorDestOver" associated-alpha composition equation. + /// + public readonly struct ColorDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestOver(background, source, amount); + } + + /// + /// Applies the "LuminosityDestOver" associated-alpha composition equation. + /// + public readonly struct LuminosityDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestOver(background, source, amount); + } + + /// + /// Applies the "NormalDestIn" associated-alpha composition equation. + /// + public readonly struct NormalDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestIn(background, source, amount); + } + + /// + /// Applies the "MultiplyDestIn" associated-alpha composition equation. + /// + public readonly struct MultiplyDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestIn(background, source, amount); + } + + /// + /// Applies the "AddDestIn" associated-alpha composition equation. + /// + public readonly struct AddDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.AddDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.AddDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.AddDestIn(background, source, amount); + } + + /// + /// Applies the "SubtractDestIn" associated-alpha composition equation. + /// + public readonly struct SubtractDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestIn(background, source, amount); + } + + /// + /// Applies the "ScreenDestIn" associated-alpha composition equation. + /// + public readonly struct ScreenDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestIn(background, source, amount); + } + + /// + /// Applies the "DarkenDestIn" associated-alpha composition equation. + /// + public readonly struct DarkenDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestIn(background, source, amount); + } + + /// + /// Applies the "LightenDestIn" associated-alpha composition equation. + /// + public readonly struct LightenDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestIn(background, source, amount); + } + + /// + /// Applies the "OverlayDestIn" associated-alpha composition equation. + /// + public readonly struct OverlayDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestIn(background, source, amount); + } + + /// + /// Applies the "HardLightDestIn" associated-alpha composition equation. + /// + public readonly struct HardLightDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestIn(background, source, amount); + } + + /// + /// Applies the "ColorDodgeDestIn" associated-alpha composition equation. + /// + public readonly struct ColorDodgeDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestIn(background, source, amount); + } + + /// + /// Applies the "ColorBurnDestIn" associated-alpha composition equation. + /// + public readonly struct ColorBurnDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestIn(background, source, amount); + } + + /// + /// Applies the "SoftLightDestIn" associated-alpha composition equation. + /// + public readonly struct SoftLightDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestIn(background, source, amount); + } + + /// + /// Applies the "DifferenceDestIn" associated-alpha composition equation. + /// + public readonly struct DifferenceDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestIn(background, source, amount); + } + + /// + /// Applies the "ExclusionDestIn" associated-alpha composition equation. + /// + public readonly struct ExclusionDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestIn(background, source, amount); + } + + /// + /// Applies the "HueDestIn" associated-alpha composition equation. + /// + public readonly struct HueDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HueDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HueDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HueDestIn(background, source, amount); + } + + /// + /// Applies the "SaturationDestIn" associated-alpha composition equation. + /// + public readonly struct SaturationDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestIn(background, source, amount); + } + + /// + /// Applies the "ColorDestIn" associated-alpha composition equation. + /// + public readonly struct ColorDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestIn(background, source, amount); + } + + /// + /// Applies the "LuminosityDestIn" associated-alpha composition equation. + /// + public readonly struct LuminosityDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestIn(background, source, amount); + } + + /// + /// Applies the "NormalDestOut" associated-alpha composition equation. + /// + public readonly struct NormalDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.NormalDestOut(background, source, amount); + } + + /// + /// Applies the "MultiplyDestOut" associated-alpha composition equation. + /// + public readonly struct MultiplyDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyDestOut(background, source, amount); + } + + /// + /// Applies the "AddDestOut" associated-alpha composition equation. + /// + public readonly struct AddDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.AddDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.AddDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.AddDestOut(background, source, amount); + } + + /// + /// Applies the "SubtractDestOut" associated-alpha composition equation. + /// + public readonly struct SubtractDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractDestOut(background, source, amount); + } + + /// + /// Applies the "ScreenDestOut" associated-alpha composition equation. + /// + public readonly struct ScreenDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenDestOut(background, source, amount); + } + + /// + /// Applies the "DarkenDestOut" associated-alpha composition equation. + /// + public readonly struct DarkenDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenDestOut(background, source, amount); + } + + /// + /// Applies the "LightenDestOut" associated-alpha composition equation. + /// + public readonly struct LightenDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LightenDestOut(background, source, amount); + } + + /// + /// Applies the "OverlayDestOut" associated-alpha composition equation. + /// + public readonly struct OverlayDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayDestOut(background, source, amount); + } + + /// + /// Applies the "HardLightDestOut" associated-alpha composition equation. + /// + public readonly struct HardLightDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightDestOut(background, source, amount); + } + + /// + /// Applies the "ColorDodgeDestOut" associated-alpha composition equation. + /// + public readonly struct ColorDodgeDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeDestOut(background, source, amount); + } + + /// + /// Applies the "ColorBurnDestOut" associated-alpha composition equation. + /// + public readonly struct ColorBurnDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnDestOut(background, source, amount); + } + + /// + /// Applies the "SoftLightDestOut" associated-alpha composition equation. + /// + public readonly struct SoftLightDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightDestOut(background, source, amount); + } + + /// + /// Applies the "DifferenceDestOut" associated-alpha composition equation. + /// + public readonly struct DifferenceDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceDestOut(background, source, amount); + } + + /// + /// Applies the "ExclusionDestOut" associated-alpha composition equation. + /// + public readonly struct ExclusionDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionDestOut(background, source, amount); + } + + /// + /// Applies the "HueDestOut" associated-alpha composition equation. + /// + public readonly struct HueDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HueDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HueDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HueDestOut(background, source, amount); + } + + /// + /// Applies the "SaturationDestOut" associated-alpha composition equation. + /// + public readonly struct SaturationDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationDestOut(background, source, amount); + } + + /// + /// Applies the "ColorDestOut" associated-alpha composition equation. + /// + public readonly struct ColorDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDestOut(background, source, amount); + } + + /// + /// Applies the "LuminosityDestOut" associated-alpha composition equation. + /// + public readonly struct LuminosityDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityDestOut(background, source, amount); + } + + /// + /// Applies the "NormalClear" associated-alpha composition equation. + /// + public readonly struct NormalClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.NormalClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.NormalClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.NormalClear(background, source, amount); + } + + /// + /// Applies the "MultiplyClear" associated-alpha composition equation. + /// + public readonly struct MultiplyClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyClear(background, source, amount); + } + + /// + /// Applies the "AddClear" associated-alpha composition equation. + /// + public readonly struct AddClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.AddClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.AddClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.AddClear(background, source, amount); + } + + /// + /// Applies the "SubtractClear" associated-alpha composition equation. + /// + public readonly struct SubtractClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SubtractClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractClear(background, source, amount); + } + + /// + /// Applies the "ScreenClear" associated-alpha composition equation. + /// + public readonly struct ScreenClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ScreenClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenClear(background, source, amount); + } + + /// + /// Applies the "DarkenClear" associated-alpha composition equation. + /// + public readonly struct DarkenClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DarkenClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenClear(background, source, amount); + } + + /// + /// Applies the "LightenClear" associated-alpha composition equation. + /// + public readonly struct LightenClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LightenClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LightenClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LightenClear(background, source, amount); + } + + /// + /// Applies the "OverlayClear" associated-alpha composition equation. + /// + public readonly struct OverlayClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.OverlayClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayClear(background, source, amount); + } + + /// + /// Applies the "HardLightClear" associated-alpha composition equation. + /// + public readonly struct HardLightClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HardLightClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightClear(background, source, amount); + } + + /// + /// Applies the "ColorDodgeClear" associated-alpha composition equation. + /// + public readonly struct ColorDodgeClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeClear(background, source, amount); + } + + /// + /// Applies the "ColorBurnClear" associated-alpha composition equation. + /// + public readonly struct ColorBurnClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnClear(background, source, amount); + } + + /// + /// Applies the "SoftLightClear" associated-alpha composition equation. + /// + public readonly struct SoftLightClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightClear(background, source, amount); + } + + /// + /// Applies the "DifferenceClear" associated-alpha composition equation. + /// + public readonly struct DifferenceClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceClear(background, source, amount); + } + + /// + /// Applies the "ExclusionClear" associated-alpha composition equation. + /// + public readonly struct ExclusionClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionClear(background, source, amount); + } + + /// + /// Applies the "HueClear" associated-alpha composition equation. + /// + public readonly struct HueClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HueClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HueClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HueClear(background, source, amount); + } + + /// + /// Applies the "SaturationClear" associated-alpha composition equation. + /// + public readonly struct SaturationClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SaturationClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationClear(background, source, amount); + } + + /// + /// Applies the "ColorClear" associated-alpha composition equation. + /// + public readonly struct ColorClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorClear(background, source, amount); + } + + /// + /// Applies the "LuminosityClear" associated-alpha composition equation. + /// + public readonly struct LuminosityClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityClear(background, source, amount); + } + + /// + /// Applies the "NormalXor" associated-alpha composition equation. + /// + public readonly struct NormalXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.NormalXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.NormalXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.NormalXor(background, source, amount); + } + + /// + /// Applies the "MultiplyXor" associated-alpha composition equation. + /// + public readonly struct MultiplyXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyXor(background, source, amount); + } + + /// + /// Applies the "AddXor" associated-alpha composition equation. + /// + public readonly struct AddXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.AddXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.AddXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.AddXor(background, source, amount); + } + + /// + /// Applies the "SubtractXor" associated-alpha composition equation. + /// + public readonly struct SubtractXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SubtractXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractXor(background, source, amount); + } + + /// + /// Applies the "ScreenXor" associated-alpha composition equation. + /// + public readonly struct ScreenXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ScreenXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenXor(background, source, amount); + } + + /// + /// Applies the "DarkenXor" associated-alpha composition equation. + /// + public readonly struct DarkenXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DarkenXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenXor(background, source, amount); + } + + /// + /// Applies the "LightenXor" associated-alpha composition equation. + /// + public readonly struct LightenXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LightenXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LightenXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LightenXor(background, source, amount); + } + + /// + /// Applies the "OverlayXor" associated-alpha composition equation. + /// + public readonly struct OverlayXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.OverlayXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayXor(background, source, amount); + } + + /// + /// Applies the "HardLightXor" associated-alpha composition equation. + /// + public readonly struct HardLightXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HardLightXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightXor(background, source, amount); + } + + /// + /// Applies the "ColorDodgeXor" associated-alpha composition equation. + /// + public readonly struct ColorDodgeXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgeXor(background, source, amount); + } + + /// + /// Applies the "ColorBurnXor" associated-alpha composition equation. + /// + public readonly struct ColorBurnXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnXor(background, source, amount); + } + + /// + /// Applies the "SoftLightXor" associated-alpha composition equation. + /// + public readonly struct SoftLightXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightXor(background, source, amount); + } + + /// + /// Applies the "DifferenceXor" associated-alpha composition equation. + /// + public readonly struct DifferenceXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DifferenceXor(background, source, amount); + } + + /// + /// Applies the "ExclusionXor" associated-alpha composition equation. + /// + public readonly struct ExclusionXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionXor(background, source, amount); + } + + /// + /// Applies the "HueXor" associated-alpha composition equation. + /// + public readonly struct HueXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HueXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HueXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HueXor(background, source, amount); + } + + /// + /// Applies the "SaturationXor" associated-alpha composition equation. + /// + public readonly struct SaturationXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SaturationXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationXor(background, source, amount); + } + + /// + /// Applies the "ColorXor" associated-alpha composition equation. + /// + public readonly struct ColorXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorXor(background, source, amount); + } + + /// + /// Applies the "LuminosityXor" associated-alpha composition equation. + /// + public readonly struct LuminosityXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityXor(background, source, amount); + } + + /// + /// Applies the "NormalPlus" associated-alpha composition equation. + /// + public readonly struct NormalPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.NormalPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.NormalPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.NormalPlus(background, source, amount); + } + + /// + /// Applies the "MultiplyPlus" associated-alpha composition equation. + /// + public readonly struct MultiplyPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.MultiplyPlus(background, source, amount); + } + + /// + /// Applies the "AddPlus" associated-alpha composition equation. + /// + public readonly struct AddPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.AddPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.AddPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.AddPlus(background, source, amount); + } + + /// + /// Applies the "SubtractPlus" associated-alpha composition equation. + /// + public readonly struct SubtractPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SubtractPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SubtractPlus(background, source, amount); + } + + /// + /// Applies the "ScreenPlus" associated-alpha composition equation. + /// + public readonly struct ScreenPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ScreenPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ScreenPlus(background, source, amount); + } + + /// + /// Applies the "DarkenPlus" associated-alpha composition equation. + /// + public readonly struct DarkenPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DarkenPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DarkenPlus(background, source, amount); + } + + /// + /// Applies the "LightenPlus" associated-alpha composition equation. + /// + public readonly struct LightenPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LightenPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LightenPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LightenPlus(background, source, amount); + } + + /// + /// Applies the "OverlayPlus" associated-alpha composition equation. + /// + public readonly struct OverlayPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.OverlayPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.OverlayPlus(background, source, amount); + } + + /// + /// Applies the "HardLightPlus" associated-alpha composition equation. + /// + public readonly struct HardLightPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HardLightPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HardLightPlus(background, source, amount); + } + + /// + /// Applies the "ColorDodgePlus" associated-alpha composition equation. + /// + public readonly struct ColorDodgePlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgePlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgePlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorDodgePlus(background, source, amount); + } + + /// + /// Applies the "ColorBurnPlus" associated-alpha composition equation. + /// + public readonly struct ColorBurnPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorBurnPlus(background, source, amount); + } + + /// + /// Applies the "SoftLightPlus" associated-alpha composition equation. + /// + public readonly struct SoftLightPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SoftLightPlus(background, source, amount); + } + + /// + /// Applies the "DifferencePlus" associated-alpha composition equation. + /// + public readonly struct DifferencePlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.DifferencePlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.DifferencePlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.DifferencePlus(background, source, amount); + } + + /// + /// Applies the "ExclusionPlus" associated-alpha composition equation. + /// + public readonly struct ExclusionPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ExclusionPlus(background, source, amount); + } + + /// + /// Applies the "HuePlus" associated-alpha composition equation. + /// + public readonly struct HuePlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.HuePlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.HuePlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.HuePlus(background, source, amount); + } + + /// + /// Applies the "SaturationPlus" associated-alpha composition equation. + /// + public readonly struct SaturationPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.SaturationPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.SaturationPlus(background, source, amount); + } + + /// + /// Applies the "ColorPlus" associated-alpha composition equation. + /// + public readonly struct ColorPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.ColorPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.ColorPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.ColorPlus(background, source, amount); + } + + /// + /// Applies the "LuminosityPlus" associated-alpha composition equation. + /// + public readonly struct LuminosityPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => true; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => AssociatedAlphaPorterDuffFunctions.LuminosityPlus(background, source, amount); + } + +} + +/// +/// Provides associated-alpha pixel blenders for each color and alpha composition pair. +/// +/// The associated-alpha destination pixel format. +internal static partial class AssociatedAlphaPixelBlenders + where TPixel : unmanaged, IPixel +{ + /// + /// Gets the shared blender for the "NormalSrc" composition equation. + /// + public static PixelBlender NormalSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "MultiplySrc" composition equation. + /// + public static PixelBlender MultiplySrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "AddSrc" composition equation. + /// + public static PixelBlender AddSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SubtractSrc" composition equation. + /// + public static PixelBlender SubtractSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ScreenSrc" composition equation. + /// + public static PixelBlender ScreenSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DarkenSrc" composition equation. + /// public static PixelBlender DarkenSrc => PixelBlender.Instance; /// @@ -2334,6 +4980,51 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightSrc => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeSrc" composition equation. + /// + public static PixelBlender ColorDodgeSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnSrc" composition equation. + /// + public static PixelBlender ColorBurnSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightSrc" composition equation. + /// + public static PixelBlender SoftLightSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceSrc" composition equation. + /// + public static PixelBlender DifferenceSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionSrc" composition equation. + /// + public static PixelBlender ExclusionSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueSrc" composition equation. + /// + public static PixelBlender HueSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationSrc" composition equation. + /// + public static PixelBlender SaturationSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorSrc" composition equation. + /// + public static PixelBlender ColorSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminositySrc" composition equation. + /// + public static PixelBlender LuminositySrc => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalSrcAtop" composition equation. /// @@ -2379,6 +5070,51 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightSrcAtop => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeSrcAtop" composition equation. + /// + public static PixelBlender ColorDodgeSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnSrcAtop" composition equation. + /// + public static PixelBlender ColorBurnSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightSrcAtop" composition equation. + /// + public static PixelBlender SoftLightSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceSrcAtop" composition equation. + /// + public static PixelBlender DifferenceSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionSrcAtop" composition equation. + /// + public static PixelBlender ExclusionSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueSrcAtop" composition equation. + /// + public static PixelBlender HueSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationSrcAtop" composition equation. + /// + public static PixelBlender SaturationSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorSrcAtop" composition equation. + /// + public static PixelBlender ColorSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminositySrcAtop" composition equation. + /// + public static PixelBlender LuminositySrcAtop => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalSrcOver" composition equation. /// @@ -2424,6 +5160,51 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightSrcOver => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeSrcOver" composition equation. + /// + public static PixelBlender ColorDodgeSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnSrcOver" composition equation. + /// + public static PixelBlender ColorBurnSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightSrcOver" composition equation. + /// + public static PixelBlender SoftLightSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceSrcOver" composition equation. + /// + public static PixelBlender DifferenceSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionSrcOver" composition equation. + /// + public static PixelBlender ExclusionSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueSrcOver" composition equation. + /// + public static PixelBlender HueSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationSrcOver" composition equation. + /// + public static PixelBlender SaturationSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorSrcOver" composition equation. + /// + public static PixelBlender ColorSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminositySrcOver" composition equation. + /// + public static PixelBlender LuminositySrcOver => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalSrcIn" composition equation. /// @@ -2469,6 +5250,51 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightSrcIn => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeSrcIn" composition equation. + /// + public static PixelBlender ColorDodgeSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnSrcIn" composition equation. + /// + public static PixelBlender ColorBurnSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightSrcIn" composition equation. + /// + public static PixelBlender SoftLightSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceSrcIn" composition equation. + /// + public static PixelBlender DifferenceSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionSrcIn" composition equation. + /// + public static PixelBlender ExclusionSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueSrcIn" composition equation. + /// + public static PixelBlender HueSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationSrcIn" composition equation. + /// + public static PixelBlender SaturationSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorSrcIn" composition equation. + /// + public static PixelBlender ColorSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminositySrcIn" composition equation. + /// + public static PixelBlender LuminositySrcIn => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalSrcOut" composition equation. /// @@ -2482,37 +5308,82 @@ internal static partial class AssociatedAlphaPixelBlenders /// /// Gets the shared blender for the "AddSrcOut" composition equation. /// - public static PixelBlender AddSrcOut => PixelBlender.Instance; + public static PixelBlender AddSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SubtractSrcOut" composition equation. + /// + public static PixelBlender SubtractSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ScreenSrcOut" composition equation. + /// + public static PixelBlender ScreenSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DarkenSrcOut" composition equation. + /// + public static PixelBlender DarkenSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LightenSrcOut" composition equation. + /// + public static PixelBlender LightenSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "OverlaySrcOut" composition equation. + /// + public static PixelBlender OverlaySrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HardLightSrcOut" composition equation. + /// + public static PixelBlender HardLightSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDodgeSrcOut" composition equation. + /// + public static PixelBlender ColorDodgeSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnSrcOut" composition equation. + /// + public static PixelBlender ColorBurnSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightSrcOut" composition equation. + /// + public static PixelBlender SoftLightSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "SubtractSrcOut" composition equation. + /// Gets the shared blender for the "DifferenceSrcOut" composition equation. /// - public static PixelBlender SubtractSrcOut => PixelBlender.Instance; + public static PixelBlender DifferenceSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "ScreenSrcOut" composition equation. + /// Gets the shared blender for the "ExclusionSrcOut" composition equation. /// - public static PixelBlender ScreenSrcOut => PixelBlender.Instance; + public static PixelBlender ExclusionSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "DarkenSrcOut" composition equation. + /// Gets the shared blender for the "HueSrcOut" composition equation. /// - public static PixelBlender DarkenSrcOut => PixelBlender.Instance; + public static PixelBlender HueSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "LightenSrcOut" composition equation. + /// Gets the shared blender for the "SaturationSrcOut" composition equation. /// - public static PixelBlender LightenSrcOut => PixelBlender.Instance; + public static PixelBlender SaturationSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "OverlaySrcOut" composition equation. + /// Gets the shared blender for the "ColorSrcOut" composition equation. /// - public static PixelBlender OverlaySrcOut => PixelBlender.Instance; + public static PixelBlender ColorSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "HardLightSrcOut" composition equation. + /// Gets the shared blender for the "LuminositySrcOut" composition equation. /// - public static PixelBlender HardLightSrcOut => PixelBlender.Instance; + public static PixelBlender LuminositySrcOut => PixelBlender.Instance; /// /// Gets the shared blender for the "NormalDest" composition equation. @@ -2559,6 +5430,51 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightDest => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeDest" composition equation. + /// + public static PixelBlender ColorDodgeDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnDest" composition equation. + /// + public static PixelBlender ColorBurnDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightDest" composition equation. + /// + public static PixelBlender SoftLightDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceDest" composition equation. + /// + public static PixelBlender DifferenceDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionDest" composition equation. + /// + public static PixelBlender ExclusionDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueDest" composition equation. + /// + public static PixelBlender HueDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationDest" composition equation. + /// + public static PixelBlender SaturationDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDest" composition equation. + /// + public static PixelBlender ColorDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityDest" composition equation. + /// + public static PixelBlender LuminosityDest => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalDestAtop" composition equation. /// @@ -2604,6 +5520,51 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightDestAtop => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeDestAtop" composition equation. + /// + public static PixelBlender ColorDodgeDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnDestAtop" composition equation. + /// + public static PixelBlender ColorBurnDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightDestAtop" composition equation. + /// + public static PixelBlender SoftLightDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceDestAtop" composition equation. + /// + public static PixelBlender DifferenceDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionDestAtop" composition equation. + /// + public static PixelBlender ExclusionDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueDestAtop" composition equation. + /// + public static PixelBlender HueDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationDestAtop" composition equation. + /// + public static PixelBlender SaturationDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDestAtop" composition equation. + /// + public static PixelBlender ColorDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityDestAtop" composition equation. + /// + public static PixelBlender LuminosityDestAtop => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalDestOver" composition equation. /// @@ -2649,6 +5610,51 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightDestOver => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeDestOver" composition equation. + /// + public static PixelBlender ColorDodgeDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnDestOver" composition equation. + /// + public static PixelBlender ColorBurnDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightDestOver" composition equation. + /// + public static PixelBlender SoftLightDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceDestOver" composition equation. + /// + public static PixelBlender DifferenceDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionDestOver" composition equation. + /// + public static PixelBlender ExclusionDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueDestOver" composition equation. + /// + public static PixelBlender HueDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationDestOver" composition equation. + /// + public static PixelBlender SaturationDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDestOver" composition equation. + /// + public static PixelBlender ColorDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityDestOver" composition equation. + /// + public static PixelBlender LuminosityDestOver => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalDestIn" composition equation. /// @@ -2694,6 +5700,51 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightDestIn => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeDestIn" composition equation. + /// + public static PixelBlender ColorDodgeDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnDestIn" composition equation. + /// + public static PixelBlender ColorBurnDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightDestIn" composition equation. + /// + public static PixelBlender SoftLightDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceDestIn" composition equation. + /// + public static PixelBlender DifferenceDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionDestIn" composition equation. + /// + public static PixelBlender ExclusionDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueDestIn" composition equation. + /// + public static PixelBlender HueDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationDestIn" composition equation. + /// + public static PixelBlender SaturationDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDestIn" composition equation. + /// + public static PixelBlender ColorDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityDestIn" composition equation. + /// + public static PixelBlender LuminosityDestIn => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalDestOut" composition equation. /// @@ -2739,6 +5790,51 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightDestOut => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeDestOut" composition equation. + /// + public static PixelBlender ColorDodgeDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnDestOut" composition equation. + /// + public static PixelBlender ColorBurnDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightDestOut" composition equation. + /// + public static PixelBlender SoftLightDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceDestOut" composition equation. + /// + public static PixelBlender DifferenceDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionDestOut" composition equation. + /// + public static PixelBlender ExclusionDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueDestOut" composition equation. + /// + public static PixelBlender HueDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationDestOut" composition equation. + /// + public static PixelBlender SaturationDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDestOut" composition equation. + /// + public static PixelBlender ColorDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityDestOut" composition equation. + /// + public static PixelBlender LuminosityDestOut => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalClear" composition equation. /// @@ -2784,6 +5880,51 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightClear => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeClear" composition equation. + /// + public static PixelBlender ColorDodgeClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnClear" composition equation. + /// + public static PixelBlender ColorBurnClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightClear" composition equation. + /// + public static PixelBlender SoftLightClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceClear" composition equation. + /// + public static PixelBlender DifferenceClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionClear" composition equation. + /// + public static PixelBlender ExclusionClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueClear" composition equation. + /// + public static PixelBlender HueClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationClear" composition equation. + /// + public static PixelBlender SaturationClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorClear" composition equation. + /// + public static PixelBlender ColorClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityClear" composition equation. + /// + public static PixelBlender LuminosityClear => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalXor" composition equation. /// @@ -2829,4 +5970,139 @@ internal static partial class AssociatedAlphaPixelBlenders /// public static PixelBlender HardLightXor => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeXor" composition equation. + /// + public static PixelBlender ColorDodgeXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnXor" composition equation. + /// + public static PixelBlender ColorBurnXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightXor" composition equation. + /// + public static PixelBlender SoftLightXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceXor" composition equation. + /// + public static PixelBlender DifferenceXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionXor" composition equation. + /// + public static PixelBlender ExclusionXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueXor" composition equation. + /// + public static PixelBlender HueXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationXor" composition equation. + /// + public static PixelBlender SaturationXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorXor" composition equation. + /// + public static PixelBlender ColorXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityXor" composition equation. + /// + public static PixelBlender LuminosityXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "NormalPlus" composition equation. + /// + public static PixelBlender NormalPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "MultiplyPlus" composition equation. + /// + public static PixelBlender MultiplyPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "AddPlus" composition equation. + /// + public static PixelBlender AddPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SubtractPlus" composition equation. + /// + public static PixelBlender SubtractPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ScreenPlus" composition equation. + /// + public static PixelBlender ScreenPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DarkenPlus" composition equation. + /// + public static PixelBlender DarkenPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LightenPlus" composition equation. + /// + public static PixelBlender LightenPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "OverlayPlus" composition equation. + /// + public static PixelBlender OverlayPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HardLightPlus" composition equation. + /// + public static PixelBlender HardLightPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDodgePlus" composition equation. + /// + public static PixelBlender ColorDodgePlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnPlus" composition equation. + /// + public static PixelBlender ColorBurnPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightPlus" composition equation. + /// + public static PixelBlender SoftLightPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferencePlus" composition equation. + /// + public static PixelBlender DifferencePlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionPlus" composition equation. + /// + public static PixelBlender ExclusionPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HuePlus" composition equation. + /// + public static PixelBlender HuePlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationPlus" composition equation. + /// + public static PixelBlender SaturationPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorPlus" composition equation. + /// + public static PixelBlender ColorPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityPlus" composition equation. + /// + public static PixelBlender LuminosityPlus => PixelBlender.Instance; + } diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.Generated.tt b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.Generated.tt index 5fc7f91c4..127f45df3 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.Generated.tt +++ b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.Generated.tt @@ -29,6 +29,7 @@ var composers = new [] "DestOut", "Clear", "Xor", + "Plus", }; var blenders = new [] @@ -42,6 +43,15 @@ var blenders = new [] "Lighten", "Overlay", "HardLight", + "ColorDodge", + "ColorBurn", + "SoftLight", + "Difference", + "Exclusion", + "Hue", + "Saturation", + "Color", + "Luminosity", }; #> /// diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.cs b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.cs index 0664e3fa0..8650cc9f9 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPixelBlenders.cs @@ -29,6 +29,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenSrc, PixelColorBlendingMode.Overlay => OverlaySrc, PixelColorBlendingMode.HardLight => HardLightSrc, + PixelColorBlendingMode.ColorDodge => ColorDodgeSrc, + PixelColorBlendingMode.ColorBurn => ColorBurnSrc, + PixelColorBlendingMode.SoftLight => SoftLightSrc, + PixelColorBlendingMode.Difference => DifferenceSrc, + PixelColorBlendingMode.Exclusion => ExclusionSrc, + PixelColorBlendingMode.Hue => HueSrc, + PixelColorBlendingMode.Saturation => SaturationSrc, + PixelColorBlendingMode.Color => ColorSrc, + PixelColorBlendingMode.Luminosity => LuminositySrc, _ => NormalSrc, }, PixelAlphaCompositionMode.SrcAtop => colorMode switch @@ -41,6 +50,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenSrcAtop, PixelColorBlendingMode.Overlay => OverlaySrcAtop, PixelColorBlendingMode.HardLight => HardLightSrcAtop, + PixelColorBlendingMode.ColorDodge => ColorDodgeSrcAtop, + PixelColorBlendingMode.ColorBurn => ColorBurnSrcAtop, + PixelColorBlendingMode.SoftLight => SoftLightSrcAtop, + PixelColorBlendingMode.Difference => DifferenceSrcAtop, + PixelColorBlendingMode.Exclusion => ExclusionSrcAtop, + PixelColorBlendingMode.Hue => HueSrcAtop, + PixelColorBlendingMode.Saturation => SaturationSrcAtop, + PixelColorBlendingMode.Color => ColorSrcAtop, + PixelColorBlendingMode.Luminosity => LuminositySrcAtop, _ => NormalSrcAtop, }, PixelAlphaCompositionMode.SrcIn => colorMode switch @@ -53,6 +71,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenSrcIn, PixelColorBlendingMode.Overlay => OverlaySrcIn, PixelColorBlendingMode.HardLight => HardLightSrcIn, + PixelColorBlendingMode.ColorDodge => ColorDodgeSrcIn, + PixelColorBlendingMode.ColorBurn => ColorBurnSrcIn, + PixelColorBlendingMode.SoftLight => SoftLightSrcIn, + PixelColorBlendingMode.Difference => DifferenceSrcIn, + PixelColorBlendingMode.Exclusion => ExclusionSrcIn, + PixelColorBlendingMode.Hue => HueSrcIn, + PixelColorBlendingMode.Saturation => SaturationSrcIn, + PixelColorBlendingMode.Color => ColorSrcIn, + PixelColorBlendingMode.Luminosity => LuminositySrcIn, _ => NormalSrcIn, }, PixelAlphaCompositionMode.SrcOut => colorMode switch @@ -65,6 +92,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenSrcOut, PixelColorBlendingMode.Overlay => OverlaySrcOut, PixelColorBlendingMode.HardLight => HardLightSrcOut, + PixelColorBlendingMode.ColorDodge => ColorDodgeSrcOut, + PixelColorBlendingMode.ColorBurn => ColorBurnSrcOut, + PixelColorBlendingMode.SoftLight => SoftLightSrcOut, + PixelColorBlendingMode.Difference => DifferenceSrcOut, + PixelColorBlendingMode.Exclusion => ExclusionSrcOut, + PixelColorBlendingMode.Hue => HueSrcOut, + PixelColorBlendingMode.Saturation => SaturationSrcOut, + PixelColorBlendingMode.Color => ColorSrcOut, + PixelColorBlendingMode.Luminosity => LuminositySrcOut, _ => NormalSrcOut, }, PixelAlphaCompositionMode.Dest => colorMode switch @@ -77,6 +113,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenDest, PixelColorBlendingMode.Overlay => OverlayDest, PixelColorBlendingMode.HardLight => HardLightDest, + PixelColorBlendingMode.ColorDodge => ColorDodgeDest, + PixelColorBlendingMode.ColorBurn => ColorBurnDest, + PixelColorBlendingMode.SoftLight => SoftLightDest, + PixelColorBlendingMode.Difference => DifferenceDest, + PixelColorBlendingMode.Exclusion => ExclusionDest, + PixelColorBlendingMode.Hue => HueDest, + PixelColorBlendingMode.Saturation => SaturationDest, + PixelColorBlendingMode.Color => ColorDest, + PixelColorBlendingMode.Luminosity => LuminosityDest, _ => NormalDest, }, PixelAlphaCompositionMode.DestAtop => colorMode switch @@ -89,6 +134,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenDestAtop, PixelColorBlendingMode.Overlay => OverlayDestAtop, PixelColorBlendingMode.HardLight => HardLightDestAtop, + PixelColorBlendingMode.ColorDodge => ColorDodgeDestAtop, + PixelColorBlendingMode.ColorBurn => ColorBurnDestAtop, + PixelColorBlendingMode.SoftLight => SoftLightDestAtop, + PixelColorBlendingMode.Difference => DifferenceDestAtop, + PixelColorBlendingMode.Exclusion => ExclusionDestAtop, + PixelColorBlendingMode.Hue => HueDestAtop, + PixelColorBlendingMode.Saturation => SaturationDestAtop, + PixelColorBlendingMode.Color => ColorDestAtop, + PixelColorBlendingMode.Luminosity => LuminosityDestAtop, _ => NormalDestAtop, }, PixelAlphaCompositionMode.DestOver => colorMode switch @@ -101,6 +155,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenDestOver, PixelColorBlendingMode.Overlay => OverlayDestOver, PixelColorBlendingMode.HardLight => HardLightDestOver, + PixelColorBlendingMode.ColorDodge => ColorDodgeDestOver, + PixelColorBlendingMode.ColorBurn => ColorBurnDestOver, + PixelColorBlendingMode.SoftLight => SoftLightDestOver, + PixelColorBlendingMode.Difference => DifferenceDestOver, + PixelColorBlendingMode.Exclusion => ExclusionDestOver, + PixelColorBlendingMode.Hue => HueDestOver, + PixelColorBlendingMode.Saturation => SaturationDestOver, + PixelColorBlendingMode.Color => ColorDestOver, + PixelColorBlendingMode.Luminosity => LuminosityDestOver, _ => NormalDestOver, }, PixelAlphaCompositionMode.DestIn => colorMode switch @@ -113,6 +176,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenDestIn, PixelColorBlendingMode.Overlay => OverlayDestIn, PixelColorBlendingMode.HardLight => HardLightDestIn, + PixelColorBlendingMode.ColorDodge => ColorDodgeDestIn, + PixelColorBlendingMode.ColorBurn => ColorBurnDestIn, + PixelColorBlendingMode.SoftLight => SoftLightDestIn, + PixelColorBlendingMode.Difference => DifferenceDestIn, + PixelColorBlendingMode.Exclusion => ExclusionDestIn, + PixelColorBlendingMode.Hue => HueDestIn, + PixelColorBlendingMode.Saturation => SaturationDestIn, + PixelColorBlendingMode.Color => ColorDestIn, + PixelColorBlendingMode.Luminosity => LuminosityDestIn, _ => NormalDestIn, }, PixelAlphaCompositionMode.DestOut => colorMode switch @@ -125,6 +197,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenDestOut, PixelColorBlendingMode.Overlay => OverlayDestOut, PixelColorBlendingMode.HardLight => HardLightDestOut, + PixelColorBlendingMode.ColorDodge => ColorDodgeDestOut, + PixelColorBlendingMode.ColorBurn => ColorBurnDestOut, + PixelColorBlendingMode.SoftLight => SoftLightDestOut, + PixelColorBlendingMode.Difference => DifferenceDestOut, + PixelColorBlendingMode.Exclusion => ExclusionDestOut, + PixelColorBlendingMode.Hue => HueDestOut, + PixelColorBlendingMode.Saturation => SaturationDestOut, + PixelColorBlendingMode.Color => ColorDestOut, + PixelColorBlendingMode.Luminosity => LuminosityDestOut, _ => NormalDestOut, }, PixelAlphaCompositionMode.Clear => colorMode switch @@ -137,6 +218,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenClear, PixelColorBlendingMode.Overlay => OverlayClear, PixelColorBlendingMode.HardLight => HardLightClear, + PixelColorBlendingMode.ColorDodge => ColorDodgeClear, + PixelColorBlendingMode.ColorBurn => ColorBurnClear, + PixelColorBlendingMode.SoftLight => SoftLightClear, + PixelColorBlendingMode.Difference => DifferenceClear, + PixelColorBlendingMode.Exclusion => ExclusionClear, + PixelColorBlendingMode.Hue => HueClear, + PixelColorBlendingMode.Saturation => SaturationClear, + PixelColorBlendingMode.Color => ColorClear, + PixelColorBlendingMode.Luminosity => LuminosityClear, _ => NormalClear, }, PixelAlphaCompositionMode.Xor => colorMode switch @@ -149,8 +239,38 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenXor, PixelColorBlendingMode.Overlay => OverlayXor, PixelColorBlendingMode.HardLight => HardLightXor, + PixelColorBlendingMode.ColorDodge => ColorDodgeXor, + PixelColorBlendingMode.ColorBurn => ColorBurnXor, + PixelColorBlendingMode.SoftLight => SoftLightXor, + PixelColorBlendingMode.Difference => DifferenceXor, + PixelColorBlendingMode.Exclusion => ExclusionXor, + PixelColorBlendingMode.Hue => HueXor, + PixelColorBlendingMode.Saturation => SaturationXor, + PixelColorBlendingMode.Color => ColorXor, + PixelColorBlendingMode.Luminosity => LuminosityXor, _ => NormalXor, }, + PixelAlphaCompositionMode.Plus => colorMode switch + { + PixelColorBlendingMode.Multiply => MultiplyPlus, + PixelColorBlendingMode.Add => AddPlus, + PixelColorBlendingMode.Subtract => SubtractPlus, + PixelColorBlendingMode.Screen => ScreenPlus, + PixelColorBlendingMode.Darken => DarkenPlus, + PixelColorBlendingMode.Lighten => LightenPlus, + PixelColorBlendingMode.Overlay => OverlayPlus, + PixelColorBlendingMode.HardLight => HardLightPlus, + PixelColorBlendingMode.ColorDodge => ColorDodgePlus, + PixelColorBlendingMode.ColorBurn => ColorBurnPlus, + PixelColorBlendingMode.SoftLight => SoftLightPlus, + PixelColorBlendingMode.Difference => DifferencePlus, + PixelColorBlendingMode.Exclusion => ExclusionPlus, + PixelColorBlendingMode.Hue => HuePlus, + PixelColorBlendingMode.Saturation => SaturationPlus, + PixelColorBlendingMode.Color => ColorPlus, + PixelColorBlendingMode.Luminosity => LuminosityPlus, + _ => NormalPlus, + }, _ => colorMode switch { PixelColorBlendingMode.Multiply => MultiplySrcOver, @@ -161,6 +281,15 @@ internal static partial class AssociatedAlphaPixelBlenders PixelColorBlendingMode.Lighten => LightenSrcOver, PixelColorBlendingMode.Overlay => OverlaySrcOver, PixelColorBlendingMode.HardLight => HardLightSrcOver, + PixelColorBlendingMode.ColorDodge => ColorDodgeSrcOver, + PixelColorBlendingMode.ColorBurn => ColorBurnSrcOver, + PixelColorBlendingMode.SoftLight => SoftLightSrcOver, + PixelColorBlendingMode.Difference => DifferenceSrcOver, + PixelColorBlendingMode.Exclusion => ExclusionSrcOver, + PixelColorBlendingMode.Hue => HueSrcOver, + PixelColorBlendingMode.Saturation => SaturationSrcOver, + PixelColorBlendingMode.Color => ColorSrcOver, + PixelColorBlendingMode.Luminosity => LuminositySrcOver, _ => NormalSrcOver, }, }; diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.Generated.cs b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.Generated.cs index cd5a37a11..5057a25bd 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.Generated.cs @@ -443,4593 +443,10479 @@ internal static partial class AssociatedAlphaPorterDuffFunctions } /// - /// Returns the associated-alpha result of the "NormalSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorDodgeSrc(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return AtopNormal(backdrop, source); + return source; } /// - /// Returns the associated-alpha result of the "NormalSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorDodgeSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return AtopNormal(backdrop, source); + return source; } /// - /// Returns the associated-alpha result of the "NormalSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorDodgeSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return AtopNormal(backdrop, source); + return source; } /// - /// Returns the associated-alpha result of the "MultiplySrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplySrcAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorBurnSrc(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Multiply(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "MultiplySrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplySrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorBurnSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Multiply(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "MultiplySrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplySrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorBurnSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Multiply(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "AddSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SoftLightSrc(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Add(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "AddSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SoftLightSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Add(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "AddSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SoftLightSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Add(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "SubtractSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DifferenceSrc(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Subtract(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "SubtractSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DifferenceSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Subtract(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "SubtractSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DifferenceSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Subtract(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "ScreenSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ExclusionSrc(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Screen(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "ScreenSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ExclusionSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Screen(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "ScreenSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ExclusionSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Screen(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "DarkenSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "HueSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HueSrc(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Darken(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "DarkenSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "HueSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HueSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Darken(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "DarkenSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "HueSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HueSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Darken(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "LightenSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SaturationSrc(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Lighten(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "LightenSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SaturationSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Lighten(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "LightenSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SaturationSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Lighten(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "OverlaySrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ColorSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlaySrcAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorSrc(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Overlay(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "OverlaySrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ColorSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlaySrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Overlay(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "OverlaySrcAtop" compositing equation. + /// Returns the associated-alpha result of the "ColorSrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlaySrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, Overlay(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "HardLightSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LuminositySrc(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, HardLight(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "HardLightSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LuminositySrc(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, HardLight(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "HardLightSrcAtop" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrc" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LuminositySrc(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(backdrop, source, HardLight(backdrop, source)); + return source; } /// - /// Returns the associated-alpha result of the "NormalSrcOver" compositing equation. + /// Returns the associated-alpha result of the "NormalSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalSrcOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 NormalSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return OverNormal(backdrop, source); + return AtopNormal(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalSrcOver" compositing equation. + /// Returns the associated-alpha result of the "NormalSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 NormalSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return OverNormal(backdrop, source); + return AtopNormal(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalSrcOver" compositing equation. + /// Returns the associated-alpha result of the "NormalSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 NormalSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return OverNormal(backdrop, source); + return AtopNormal(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplySrcOver" compositing equation. + /// Returns the associated-alpha result of the "MultiplySrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplySrcOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 MultiplySrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Multiply(backdrop, source)); + return Atop(backdrop, source, Multiply(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplySrcOver" compositing equation. + /// Returns the associated-alpha result of the "MultiplySrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplySrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 MultiplySrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Multiply(backdrop, source)); + return Atop(backdrop, source, Multiply(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplySrcOver" compositing equation. + /// Returns the associated-alpha result of the "MultiplySrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplySrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 MultiplySrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Multiply(backdrop, source)); + return Atop(backdrop, source, Multiply(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddSrcOver" compositing equation. + /// Returns the associated-alpha result of the "AddSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddSrcOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 AddSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Add(backdrop, source)); + return Atop(backdrop, source, Add(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddSrcOver" compositing equation. + /// Returns the associated-alpha result of the "AddSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 AddSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Add(backdrop, source)); + return Atop(backdrop, source, Add(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddSrcOver" compositing equation. + /// Returns the associated-alpha result of the "AddSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 AddSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Add(backdrop, source)); + return Atop(backdrop, source, Add(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractSrcOver" compositing equation. + /// Returns the associated-alpha result of the "SubtractSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractSrcOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SubtractSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Subtract(backdrop, source)); + return Atop(backdrop, source, Subtract(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractSrcOver" compositing equation. + /// Returns the associated-alpha result of the "SubtractSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SubtractSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Subtract(backdrop, source)); + return Atop(backdrop, source, Subtract(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractSrcOver" compositing equation. + /// Returns the associated-alpha result of the "SubtractSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SubtractSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Subtract(backdrop, source)); + return Atop(backdrop, source, Subtract(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenSrcOver" compositing equation. + /// Returns the associated-alpha result of the "ScreenSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenSrcOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ScreenSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Screen(backdrop, source)); + return Atop(backdrop, source, Screen(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenSrcOver" compositing equation. + /// Returns the associated-alpha result of the "ScreenSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ScreenSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Screen(backdrop, source)); + return Atop(backdrop, source, Screen(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenSrcOver" compositing equation. + /// Returns the associated-alpha result of the "ScreenSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ScreenSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Screen(backdrop, source)); + return Atop(backdrop, source, Screen(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenSrcOver" compositing equation. + /// Returns the associated-alpha result of the "DarkenSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenSrcOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DarkenSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Darken(backdrop, source)); + return Atop(backdrop, source, Darken(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenSrcOver" compositing equation. + /// Returns the associated-alpha result of the "DarkenSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DarkenSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Darken(backdrop, source)); + return Atop(backdrop, source, Darken(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenSrcOver" compositing equation. + /// Returns the associated-alpha result of the "DarkenSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DarkenSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Darken(backdrop, source)); + return Atop(backdrop, source, Darken(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenSrcOver" compositing equation. + /// Returns the associated-alpha result of the "LightenSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenSrcOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LightenSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Lighten(backdrop, source)); + return Atop(backdrop, source, Lighten(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenSrcOver" compositing equation. + /// Returns the associated-alpha result of the "LightenSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LightenSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Lighten(backdrop, source)); + return Atop(backdrop, source, Lighten(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenSrcOver" compositing equation. + /// Returns the associated-alpha result of the "LightenSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LightenSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Lighten(backdrop, source)); + return Atop(backdrop, source, Lighten(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlaySrcOver" compositing equation. + /// Returns the associated-alpha result of the "OverlaySrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlaySrcOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 OverlaySrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Overlay(backdrop, source)); + return Atop(backdrop, source, Overlay(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlaySrcOver" compositing equation. + /// Returns the associated-alpha result of the "OverlaySrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlaySrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 OverlaySrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Overlay(backdrop, source)); + return Atop(backdrop, source, Overlay(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlaySrcOver" compositing equation. + /// Returns the associated-alpha result of the "OverlaySrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlaySrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 OverlaySrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, Overlay(backdrop, source)); + return Atop(backdrop, source, Overlay(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightSrcOver" compositing equation. + /// Returns the associated-alpha result of the "HardLightSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightSrcOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HardLightSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, HardLight(backdrop, source)); + return Atop(backdrop, source, HardLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightSrcOver" compositing equation. + /// Returns the associated-alpha result of the "HardLightSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HardLightSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, HardLight(backdrop, source)); + return Atop(backdrop, source, HardLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightSrcOver" compositing equation. + /// Returns the associated-alpha result of the "HardLightSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HardLightSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(backdrop, source, HardLight(backdrop, source)); + return Atop(backdrop, source, HardLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalSrcIn" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalSrcIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorDodgeSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, ColorDodge(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalSrcIn" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorDodgeSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, ColorDodge(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalSrcIn" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorDodgeSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, ColorDodge(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplySrcIn" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplySrcIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorBurnSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, ColorBurn(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplySrcIn" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplySrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorBurnSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, ColorBurn(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplySrcIn" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplySrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorBurnSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, ColorBurn(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddSrcIn" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddSrcIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SoftLightSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, SoftLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddSrcIn" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SoftLightSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, SoftLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddSrcIn" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SoftLightSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, SoftLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractSrcIn" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractSrcIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DifferenceSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Difference(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractSrcIn" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DifferenceSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Difference(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractSrcIn" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DifferenceSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Difference(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenSrcIn" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenSrcIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ExclusionSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Exclusion(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenSrcIn" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ExclusionSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Exclusion(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenSrcIn" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ExclusionSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Exclusion(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenSrcIn" compositing equation. + /// Returns the associated-alpha result of the "HueSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenSrcIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HueSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Hue(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenSrcIn" compositing equation. + /// Returns the associated-alpha result of the "HueSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HueSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Hue(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenSrcIn" compositing equation. + /// Returns the associated-alpha result of the "HueSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HueSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Hue(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenSrcIn" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenSrcIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SaturationSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Saturation(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenSrcIn" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SaturationSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Saturation(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenSrcIn" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SaturationSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Saturation(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlaySrcIn" compositing equation. + /// Returns the associated-alpha result of the "ColorSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlaySrcIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorSrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Color(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlaySrcIn" compositing equation. + /// Returns the associated-alpha result of the "ColorSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlaySrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Color(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlaySrcIn" compositing equation. + /// Returns the associated-alpha result of the "ColorSrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlaySrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Color(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightSrcIn" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightSrcIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LuminositySrcAtop(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Luminosity(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightSrcIn" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LuminositySrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Luminosity(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightSrcIn" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrcAtop" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LuminositySrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(backdrop, source); + return Atop(backdrop, source, Luminosity(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalSrcOut" compositing equation. + /// Returns the associated-alpha result of the "NormalSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalSrcOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 NormalSrcOver(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return OverNormal(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalSrcOut" compositing equation. + /// Returns the associated-alpha result of the "NormalSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 NormalSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return OverNormal(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalSrcOut" compositing equation. + /// Returns the associated-alpha result of the "NormalSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 NormalSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return OverNormal(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplySrcOut" compositing equation. + /// Returns the associated-alpha result of the "MultiplySrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplySrcOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 MultiplySrcOver(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Multiply(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplySrcOut" compositing equation. + /// Returns the associated-alpha result of the "MultiplySrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplySrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 MultiplySrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Multiply(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplySrcOut" compositing equation. + /// Returns the associated-alpha result of the "MultiplySrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplySrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 MultiplySrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Multiply(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddSrcOut" compositing equation. + /// Returns the associated-alpha result of the "AddSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddSrcOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 AddSrcOver(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Add(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddSrcOut" compositing equation. + /// Returns the associated-alpha result of the "AddSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 AddSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Add(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddSrcOut" compositing equation. + /// Returns the associated-alpha result of the "AddSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 AddSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Add(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractSrcOut" compositing equation. + /// Returns the associated-alpha result of the "SubtractSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractSrcOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SubtractSrcOver(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Subtract(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractSrcOut" compositing equation. + /// Returns the associated-alpha result of the "SubtractSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SubtractSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Subtract(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractSrcOut" compositing equation. + /// Returns the associated-alpha result of the "SubtractSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SubtractSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Subtract(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenSrcOut" compositing equation. + /// Returns the associated-alpha result of the "ScreenSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenSrcOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ScreenSrcOver(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Screen(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenSrcOut" compositing equation. + /// Returns the associated-alpha result of the "ScreenSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ScreenSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Screen(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenSrcOut" compositing equation. + /// Returns the associated-alpha result of the "ScreenSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ScreenSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Screen(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenSrcOut" compositing equation. + /// Returns the associated-alpha result of the "DarkenSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenSrcOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DarkenSrcOver(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Darken(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenSrcOut" compositing equation. + /// Returns the associated-alpha result of the "DarkenSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DarkenSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Darken(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenSrcOut" compositing equation. + /// Returns the associated-alpha result of the "DarkenSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DarkenSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Darken(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenSrcOut" compositing equation. + /// Returns the associated-alpha result of the "LightenSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenSrcOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LightenSrcOver(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Lighten(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenSrcOut" compositing equation. + /// Returns the associated-alpha result of the "LightenSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LightenSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Lighten(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenSrcOut" compositing equation. + /// Returns the associated-alpha result of the "LightenSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LightenSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Lighten(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlaySrcOut" compositing equation. + /// Returns the associated-alpha result of the "OverlaySrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlaySrcOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 OverlaySrcOver(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Overlay(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlaySrcOut" compositing equation. + /// Returns the associated-alpha result of the "OverlaySrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlaySrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 OverlaySrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Overlay(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlaySrcOut" compositing equation. + /// Returns the associated-alpha result of the "OverlaySrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlaySrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 OverlaySrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, Overlay(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightSrcOut" compositing equation. + /// Returns the associated-alpha result of the "HardLightSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightSrcOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HardLightSrcOver(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, HardLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightSrcOut" compositing equation. + /// Returns the associated-alpha result of the "HardLightSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HardLightSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, HardLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightSrcOut" compositing equation. + /// Returns the associated-alpha result of the "HardLightSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HardLightSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(backdrop, source); + return Over(backdrop, source, HardLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalDest" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalDest(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorDodgeSrcOver(Vector4 backdrop, Vector4 source, float opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, ColorDodge(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalDest" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorDodgeSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, ColorDodge(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalDest" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorDodgeSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, ColorDodge(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplyDest" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplyDest(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorBurnSrcOver(Vector4 backdrop, Vector4 source, float opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, ColorBurn(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplyDest" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplyDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorBurnSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, ColorBurn(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplyDest" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplyDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorBurnSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, ColorBurn(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddDest" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddDest(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SoftLightSrcOver(Vector4 backdrop, Vector4 source, float opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, SoftLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddDest" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SoftLightSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, SoftLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddDest" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SoftLightSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, SoftLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractDest" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractDest(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DifferenceSrcOver(Vector4 backdrop, Vector4 source, float opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Difference(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractDest" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DifferenceSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Difference(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractDest" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DifferenceSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Difference(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenDest" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenDest(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ExclusionSrcOver(Vector4 backdrop, Vector4 source, float opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Exclusion(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenDest" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ExclusionSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Exclusion(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenDest" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ExclusionSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Exclusion(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenDest" compositing equation. + /// Returns the associated-alpha result of the "HueSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenDest(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HueSrcOver(Vector4 backdrop, Vector4 source, float opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Hue(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenDest" compositing equation. + /// Returns the associated-alpha result of the "HueSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HueSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Hue(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenDest" compositing equation. + /// Returns the associated-alpha result of the "HueSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HueSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Hue(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenDest" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenDest(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SaturationSrcOver(Vector4 backdrop, Vector4 source, float opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Saturation(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenDest" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SaturationSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Saturation(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenDest" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SaturationSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Saturation(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlayDest" compositing equation. + /// Returns the associated-alpha result of the "ColorSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlayDest(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorSrcOver(Vector4 backdrop, Vector4 source, float opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Color(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlayDest" compositing equation. + /// Returns the associated-alpha result of the "ColorSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlayDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Color(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlayDest" compositing equation. + /// Returns the associated-alpha result of the "ColorSrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlayDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Color(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightDest" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightDest(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LuminositySrcOver(Vector4 backdrop, Vector4 source, float opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Luminosity(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightDest" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LuminositySrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Luminosity(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightDest" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrcOver" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LuminositySrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return backdrop; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(backdrop, source, Luminosity(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalDestAtop" compositing equation. + /// Returns the associated-alpha result of the "NormalSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalDestAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 NormalSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return AtopNormal(source, backdrop); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestAtop" compositing equation. + /// Returns the associated-alpha result of the "NormalSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 NormalSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return AtopNormal(source, backdrop); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestAtop" compositing equation. + /// Returns the associated-alpha result of the "NormalSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 NormalSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return AtopNormal(source, backdrop); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestAtop" compositing equation. + /// Returns the associated-alpha result of the "MultiplySrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplyDestAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 MultiplySrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Multiply(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestAtop" compositing equation. + /// Returns the associated-alpha result of the "MultiplySrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplyDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 MultiplySrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Multiply(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestAtop" compositing equation. + /// Returns the associated-alpha result of the "MultiplySrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplyDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 MultiplySrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Multiply(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestAtop" compositing equation. + /// Returns the associated-alpha result of the "AddSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddDestAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 AddSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Add(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestAtop" compositing equation. + /// Returns the associated-alpha result of the "AddSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 AddSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Add(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestAtop" compositing equation. + /// Returns the associated-alpha result of the "AddSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 AddSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Add(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestAtop" compositing equation. + /// Returns the associated-alpha result of the "SubtractSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractDestAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SubtractSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Subtract(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestAtop" compositing equation. + /// Returns the associated-alpha result of the "SubtractSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SubtractSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Subtract(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestAtop" compositing equation. + /// Returns the associated-alpha result of the "SubtractSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SubtractSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Subtract(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestAtop" compositing equation. + /// Returns the associated-alpha result of the "ScreenSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenDestAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ScreenSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Screen(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestAtop" compositing equation. + /// Returns the associated-alpha result of the "ScreenSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ScreenSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Screen(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestAtop" compositing equation. + /// Returns the associated-alpha result of the "ScreenSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ScreenSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Screen(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestAtop" compositing equation. + /// Returns the associated-alpha result of the "DarkenSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenDestAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DarkenSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Darken(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestAtop" compositing equation. + /// Returns the associated-alpha result of the "DarkenSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DarkenSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Darken(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestAtop" compositing equation. + /// Returns the associated-alpha result of the "DarkenSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DarkenSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Darken(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestAtop" compositing equation. + /// Returns the associated-alpha result of the "LightenSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenDestAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LightenSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Lighten(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestAtop" compositing equation. + /// Returns the associated-alpha result of the "LightenSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LightenSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Lighten(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestAtop" compositing equation. + /// Returns the associated-alpha result of the "LightenSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LightenSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Lighten(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestAtop" compositing equation. + /// Returns the associated-alpha result of the "OverlaySrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlayDestAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 OverlaySrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Overlay(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestAtop" compositing equation. + /// Returns the associated-alpha result of the "OverlaySrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlayDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 OverlaySrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Overlay(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestAtop" compositing equation. + /// Returns the associated-alpha result of the "OverlaySrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlayDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 OverlaySrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, Overlay(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestAtop" compositing equation. + /// Returns the associated-alpha result of the "HardLightSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightDestAtop(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HardLightSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, HardLight(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestAtop" compositing equation. + /// Returns the associated-alpha result of the "HardLightSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HardLightSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, HardLight(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestAtop" compositing equation. + /// Returns the associated-alpha result of the "HardLightSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HardLightSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Atop(source, backdrop, HardLight(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestOver" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalDestOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorDodgeSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return OverNormal(source, backdrop); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestOver" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorDodgeSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return OverNormal(source, backdrop); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestOver" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorDodgeSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return OverNormal(source, backdrop); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestOver" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplyDestOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorBurnSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Multiply(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestOver" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplyDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorBurnSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Multiply(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestOver" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplyDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorBurnSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Multiply(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestOver" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddDestOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SoftLightSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Add(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestOver" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SoftLightSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Add(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestOver" compositing equation. + /// Returns the associated-alpha result of the "SoftLightSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SoftLightSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Add(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestOver" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractDestOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DifferenceSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Subtract(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestOver" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DifferenceSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Subtract(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestOver" compositing equation. + /// Returns the associated-alpha result of the "DifferenceSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DifferenceSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Subtract(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestOver" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenDestOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ExclusionSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Screen(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestOver" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ExclusionSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Screen(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestOver" compositing equation. + /// Returns the associated-alpha result of the "ExclusionSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ExclusionSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Screen(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestOver" compositing equation. + /// Returns the associated-alpha result of the "HueSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenDestOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HueSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Darken(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestOver" compositing equation. + /// Returns the associated-alpha result of the "HueSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HueSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Darken(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestOver" compositing equation. + /// Returns the associated-alpha result of the "HueSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HueSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Darken(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestOver" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenDestOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SaturationSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Lighten(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestOver" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SaturationSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Lighten(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestOver" compositing equation. + /// Returns the associated-alpha result of the "SaturationSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SaturationSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Lighten(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestOver" compositing equation. + /// Returns the associated-alpha result of the "ColorSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlayDestOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorSrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Overlay(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestOver" compositing equation. + /// Returns the associated-alpha result of the "ColorSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlayDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Overlay(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestOver" compositing equation. + /// Returns the associated-alpha result of the "ColorSrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlayDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, Overlay(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestOver" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightDestOver(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LuminositySrcIn(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, HardLight(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestOver" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LuminositySrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, HardLight(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestOver" compositing equation. + /// Returns the associated-alpha result of the "LuminositySrcIn" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LuminositySrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Over(source, backdrop, HardLight(source, backdrop)); + return In(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestIn" compositing equation. + /// Returns the associated-alpha result of the "NormalSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 NormalSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "NormalSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 NormalSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "NormalSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 NormalSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "MultiplySrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 MultiplySrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "MultiplySrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 MultiplySrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "MultiplySrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 MultiplySrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "AddSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 AddSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "AddSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 AddSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "AddSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 AddSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "SubtractSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SubtractSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "SubtractSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SubtractSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "SubtractSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SubtractSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ScreenSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ScreenSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ScreenSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ScreenSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ScreenSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ScreenSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "DarkenSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DarkenSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "DarkenSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DarkenSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "DarkenSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DarkenSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "LightenSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LightenSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "LightenSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LightenSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "LightenSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LightenSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "OverlaySrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 OverlaySrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "OverlaySrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 OverlaySrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "OverlaySrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 OverlaySrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "HardLightSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HardLightSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "HardLightSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HardLightSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "HardLightSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HardLightSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "SoftLightSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "SoftLightSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "SoftLightSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "DifferenceSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "DifferenceSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "DifferenceSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ExclusionSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ExclusionSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ExclusionSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "HueSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "HueSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "HueSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "SaturationSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "SaturationSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "SaturationSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ColorSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ColorSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "ColorSrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "LuminositySrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminositySrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "LuminositySrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminositySrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "LuminositySrcOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminositySrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(backdrop, source); + } + + /// + /// Returns the associated-alpha result of the "NormalDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 NormalDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "NormalDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 NormalDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "NormalDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 NormalDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "MultiplyDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 MultiplyDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "MultiplyDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 MultiplyDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "MultiplyDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 MultiplyDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "AddDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 AddDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "AddDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 AddDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "AddDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 AddDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "SubtractDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SubtractDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "SubtractDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SubtractDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "SubtractDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SubtractDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ScreenDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ScreenDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ScreenDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ScreenDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ScreenDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ScreenDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "DarkenDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DarkenDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "DarkenDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DarkenDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "DarkenDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DarkenDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "LightenDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LightenDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "LightenDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LightenDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "LightenDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LightenDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "OverlayDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 OverlayDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "OverlayDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 OverlayDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "OverlayDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 OverlayDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "HardLightDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HardLightDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "HardLightDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HardLightDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "HardLightDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HardLightDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "SoftLightDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "SoftLightDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "SoftLightDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "DifferenceDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "DifferenceDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "DifferenceDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ExclusionDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ExclusionDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ExclusionDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "HueDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "HueDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "HueDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "SaturationDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "SaturationDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "SaturationDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ColorDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ColorDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "ColorDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "LuminosityDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "LuminosityDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "LuminosityDest" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the associated-alpha result of the "NormalDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 NormalDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return AtopNormal(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "NormalDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 NormalDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return AtopNormal(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "NormalDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 NormalDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return AtopNormal(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 MultiplyDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Multiply(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 MultiplyDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Multiply(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 MultiplyDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Multiply(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "AddDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 AddDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Add(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "AddDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 AddDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Add(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "AddDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 AddDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Add(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SubtractDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Subtract(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SubtractDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Subtract(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SubtractDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Subtract(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ScreenDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Screen(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ScreenDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Screen(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ScreenDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Screen(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DarkenDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Darken(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DarkenDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Darken(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DarkenDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Darken(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LightenDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LightenDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Lighten(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LightenDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LightenDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Lighten(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LightenDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LightenDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Lighten(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 OverlayDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Overlay(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 OverlayDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Overlay(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 OverlayDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Overlay(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HardLightDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, HardLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HardLightDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, HardLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HardLightDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, HardLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HueDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HueDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HueDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestAtop" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Atop(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "NormalDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 NormalDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return OverNormal(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "NormalDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 NormalDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return OverNormal(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "NormalDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 NormalDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return OverNormal(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 MultiplyDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Multiply(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 MultiplyDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Multiply(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 MultiplyDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Multiply(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "AddDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 AddDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Add(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "AddDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 AddDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Add(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "AddDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 AddDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Add(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SubtractDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Subtract(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SubtractDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Subtract(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SubtractDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Subtract(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ScreenDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Screen(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ScreenDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Screen(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ScreenDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Screen(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DarkenDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Darken(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DarkenDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Darken(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DarkenDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Darken(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LightenDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LightenDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Lighten(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LightenDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LightenDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Lighten(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LightenDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LightenDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Lighten(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 OverlayDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Overlay(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 OverlayDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Overlay(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 OverlayDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Overlay(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HardLightDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, HardLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HardLightDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, HardLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HardLightDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, HardLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HueDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HueDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "HueDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "ColorDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestOver" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Over(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the associated-alpha result of the "NormalDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 NormalDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "NormalDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 NormalDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "NormalDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 NormalDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 MultiplyDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 MultiplyDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 MultiplyDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "AddDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 AddDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "AddDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 AddDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "AddDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 AddDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SubtractDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SubtractDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SubtractDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ScreenDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ScreenDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ScreenDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DarkenDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DarkenDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DarkenDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LightenDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LightenDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LightenDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LightenDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LightenDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LightenDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 OverlayDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 OverlayDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 OverlayDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HardLightDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HardLightDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HardLightDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HueDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HueDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HueDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestIn" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return In(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "NormalDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 NormalDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "NormalDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 NormalDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "NormalDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 NormalDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 MultiplyDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 MultiplyDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "MultiplyDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 MultiplyDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "AddDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 AddDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "AddDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 AddDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "AddDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 AddDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SubtractDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SubtractDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SubtractDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SubtractDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ScreenDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ScreenDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ScreenDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ScreenDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DarkenDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DarkenDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DarkenDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DarkenDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LightenDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LightenDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LightenDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LightenDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LightenDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LightenDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 OverlayDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 OverlayDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "OverlayDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 OverlayDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HardLightDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HardLightDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HardLightDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HardLightDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorBurnDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SoftLightDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "DifferenceDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ExclusionDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HueDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HueDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "HueDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "SaturationDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "ColorDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "LuminosityDestOut" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Out(source, backdrop); + } + + /// + /// Returns the associated-alpha result of the "NormalClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 NormalClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "NormalClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 NormalClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "NormalClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 NormalClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "MultiplyClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 MultiplyClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "MultiplyClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 MultiplyClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "MultiplyClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 MultiplyClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "AddClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 AddClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "AddClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 AddClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "AddClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 AddClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "SubtractClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SubtractClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "SubtractClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SubtractClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "SubtractClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SubtractClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "ScreenClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ScreenClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "ScreenClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ScreenClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "ScreenClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ScreenClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "DarkenClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DarkenClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "DarkenClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DarkenClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "DarkenClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DarkenClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "LightenClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LightenClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "LightenClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LightenClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "LightenClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LightenClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "OverlayClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 OverlayClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "OverlayClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 OverlayClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "OverlayClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 OverlayClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "HardLightClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HardLightClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "HardLightClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HardLightClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "HardLightClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HardLightClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "ColorDodgeClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "ColorBurnClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "ColorBurnClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "ColorBurnClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "SoftLightClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "SoftLightClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "SoftLightClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "DifferenceClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "DifferenceClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "DifferenceClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "ExclusionClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "ExclusionClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "ExclusionClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "HueClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "HueClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "HueClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "SaturationClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "SaturationClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "SaturationClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "ColorClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "ColorClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "ColorClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "LuminosityClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityClear(Vector4 backdrop, Vector4 source, float opacity) + { + return Vector4.Zero; + } + + /// + /// Returns the associated-alpha result of the "LuminosityClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return Vector256.Zero; + } + + /// + /// Returns the associated-alpha result of the "LuminosityClear" compositing equation. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The source opacity in the range 0 through 1. + /// The associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return Vector512.Zero; + } + + /// + /// Returns the associated-alpha result of the "NormalXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalDestIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 NormalXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestIn" compositing equation. + /// Returns the associated-alpha result of the "NormalXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 NormalXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestIn" compositing equation. + /// Returns the associated-alpha result of the "NormalXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 NormalXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestIn" compositing equation. + /// Returns the associated-alpha result of the "MultiplyXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplyDestIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 MultiplyXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestIn" compositing equation. + /// Returns the associated-alpha result of the "MultiplyXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplyDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 MultiplyXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestIn" compositing equation. + /// Returns the associated-alpha result of the "MultiplyXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplyDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 MultiplyXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestIn" compositing equation. + /// Returns the associated-alpha result of the "AddXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddDestIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 AddXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestIn" compositing equation. + /// Returns the associated-alpha result of the "AddXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 AddXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestIn" compositing equation. + /// Returns the associated-alpha result of the "AddXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 AddXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestIn" compositing equation. + /// Returns the associated-alpha result of the "SubtractXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractDestIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SubtractXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestIn" compositing equation. + /// Returns the associated-alpha result of the "SubtractXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SubtractXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestIn" compositing equation. + /// Returns the associated-alpha result of the "SubtractXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SubtractXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestIn" compositing equation. + /// Returns the associated-alpha result of the "ScreenXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenDestIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ScreenXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestIn" compositing equation. + /// Returns the associated-alpha result of the "ScreenXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ScreenXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestIn" compositing equation. + /// Returns the associated-alpha result of the "ScreenXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ScreenXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestIn" compositing equation. + /// Returns the associated-alpha result of the "DarkenXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenDestIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DarkenXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestIn" compositing equation. + /// Returns the associated-alpha result of the "DarkenXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DarkenXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestIn" compositing equation. + /// Returns the associated-alpha result of the "DarkenXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DarkenXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestIn" compositing equation. + /// Returns the associated-alpha result of the "LightenXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenDestIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LightenXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestIn" compositing equation. + /// Returns the associated-alpha result of the "LightenXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LightenXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestIn" compositing equation. + /// Returns the associated-alpha result of the "LightenXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LightenXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestIn" compositing equation. + /// Returns the associated-alpha result of the "OverlayXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlayDestIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 OverlayXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestIn" compositing equation. + /// Returns the associated-alpha result of the "OverlayXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlayDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 OverlayXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestIn" compositing equation. + /// Returns the associated-alpha result of the "OverlayXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlayDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 OverlayXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestIn" compositing equation. + /// Returns the associated-alpha result of the "HardLightXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightDestIn(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HardLightXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestIn" compositing equation. + /// Returns the associated-alpha result of the "HardLightXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HardLightXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestIn" compositing equation. + /// Returns the associated-alpha result of the "HardLightXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HardLightXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return In(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestOut" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalDestOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorDodgeXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestOut" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorDodgeXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalDestOut" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgeXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorDodgeXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestOut" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplyDestOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorBurnXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestOut" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplyDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorBurnXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyDestOut" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplyDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorBurnXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestOut" compositing equation. + /// Returns the associated-alpha result of the "SoftLightXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddDestOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SoftLightXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestOut" compositing equation. + /// Returns the associated-alpha result of the "SoftLightXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SoftLightXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "AddDestOut" compositing equation. + /// Returns the associated-alpha result of the "SoftLightXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SoftLightXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestOut" compositing equation. + /// Returns the associated-alpha result of the "DifferenceXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractDestOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DifferenceXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestOut" compositing equation. + /// Returns the associated-alpha result of the "DifferenceXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DifferenceXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "SubtractDestOut" compositing equation. + /// Returns the associated-alpha result of the "DifferenceXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DifferenceXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestOut" compositing equation. + /// Returns the associated-alpha result of the "ExclusionXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenDestOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ExclusionXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestOut" compositing equation. + /// Returns the associated-alpha result of the "ExclusionXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ExclusionXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "ScreenDestOut" compositing equation. + /// Returns the associated-alpha result of the "ExclusionXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ExclusionXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestOut" compositing equation. + /// Returns the associated-alpha result of the "HueXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenDestOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HueXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestOut" compositing equation. + /// Returns the associated-alpha result of the "HueXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HueXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "DarkenDestOut" compositing equation. + /// Returns the associated-alpha result of the "HueXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HueXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestOut" compositing equation. + /// Returns the associated-alpha result of the "SaturationXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenDestOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SaturationXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestOut" compositing equation. + /// Returns the associated-alpha result of the "SaturationXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SaturationXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "LightenDestOut" compositing equation. + /// Returns the associated-alpha result of the "SaturationXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SaturationXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestOut" compositing equation. + /// Returns the associated-alpha result of the "ColorXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlayDestOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestOut" compositing equation. + /// Returns the associated-alpha result of the "ColorXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlayDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "OverlayDestOut" compositing equation. + /// Returns the associated-alpha result of the "ColorXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlayDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestOut" compositing equation. + /// Returns the associated-alpha result of the "LuminosityXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightDestOut(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LuminosityXor(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestOut" compositing equation. + /// Returns the associated-alpha result of the "LuminosityXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LuminosityXor(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "HardLightDestOut" compositing equation. + /// Returns the associated-alpha result of the "LuminosityXor" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LuminosityXor(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Out(source, backdrop); + return Xor(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalClear" compositing equation. + /// Returns the associated-alpha result of the "NormalPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalClear(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 NormalPlus(Vector4 backdrop, Vector4 source, float opacity) { - return Vector4.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return PlusNormal(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalClear" compositing equation. + /// Returns the associated-alpha result of the "NormalPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 NormalPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return Vector256.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return PlusNormal(backdrop, source); } /// - /// Returns the associated-alpha result of the "NormalClear" compositing equation. + /// Returns the associated-alpha result of the "NormalPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 NormalPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return Vector512.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return PlusNormal(backdrop, source); } /// - /// Returns the associated-alpha result of the "MultiplyClear" compositing equation. + /// Returns the associated-alpha result of the "MultiplyPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplyClear(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 MultiplyPlus(Vector4 backdrop, Vector4 source, float opacity) { - return Vector4.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Multiply(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplyClear" compositing equation. + /// Returns the associated-alpha result of the "MultiplyPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplyClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 MultiplyPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return Vector256.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Multiply(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplyClear" compositing equation. + /// Returns the associated-alpha result of the "MultiplyPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplyClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 MultiplyPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return Vector512.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Multiply(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddClear" compositing equation. + /// Returns the associated-alpha result of the "AddPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddClear(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 AddPlus(Vector4 backdrop, Vector4 source, float opacity) { - return Vector4.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Add(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddClear" compositing equation. + /// Returns the associated-alpha result of the "AddPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 AddPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return Vector256.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Add(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddClear" compositing equation. + /// Returns the associated-alpha result of the "AddPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 AddPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return Vector512.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Add(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractClear" compositing equation. + /// Returns the associated-alpha result of the "SubtractPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractClear(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SubtractPlus(Vector4 backdrop, Vector4 source, float opacity) { - return Vector4.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Subtract(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractClear" compositing equation. + /// Returns the associated-alpha result of the "SubtractPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SubtractPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return Vector256.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Subtract(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractClear" compositing equation. + /// Returns the associated-alpha result of the "SubtractPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SubtractPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return Vector512.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Subtract(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenClear" compositing equation. + /// Returns the associated-alpha result of the "ScreenPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenClear(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ScreenPlus(Vector4 backdrop, Vector4 source, float opacity) { - return Vector4.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Screen(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenClear" compositing equation. + /// Returns the associated-alpha result of the "ScreenPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ScreenPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return Vector256.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Screen(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenClear" compositing equation. + /// Returns the associated-alpha result of the "ScreenPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ScreenPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return Vector512.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Screen(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenClear" compositing equation. + /// Returns the associated-alpha result of the "DarkenPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenClear(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DarkenPlus(Vector4 backdrop, Vector4 source, float opacity) { - return Vector4.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Darken(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenClear" compositing equation. + /// Returns the associated-alpha result of the "DarkenPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DarkenPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return Vector256.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Darken(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenClear" compositing equation. + /// Returns the associated-alpha result of the "DarkenPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DarkenPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return Vector512.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Darken(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenClear" compositing equation. + /// Returns the associated-alpha result of the "LightenPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenClear(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LightenPlus(Vector4 backdrop, Vector4 source, float opacity) { - return Vector4.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Lighten(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenClear" compositing equation. + /// Returns the associated-alpha result of the "LightenPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LightenPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return Vector256.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Lighten(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenClear" compositing equation. + /// Returns the associated-alpha result of the "LightenPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LightenPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return Vector512.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Lighten(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlayClear" compositing equation. + /// Returns the associated-alpha result of the "OverlayPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlayClear(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 OverlayPlus(Vector4 backdrop, Vector4 source, float opacity) { - return Vector4.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Overlay(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlayClear" compositing equation. + /// Returns the associated-alpha result of the "OverlayPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlayClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 OverlayPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return Vector256.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Overlay(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlayClear" compositing equation. + /// Returns the associated-alpha result of the "OverlayPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlayClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 OverlayPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return Vector512.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, Overlay(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightClear" compositing equation. + /// Returns the associated-alpha result of the "HardLightPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightClear(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HardLightPlus(Vector4 backdrop, Vector4 source, float opacity) { - return Vector4.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, HardLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightClear" compositing equation. + /// Returns the associated-alpha result of the "HardLightPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HardLightPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { - return Vector256.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, HardLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightClear" compositing equation. + /// Returns the associated-alpha result of the "HardLightPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HardLightPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { - return Vector512.Zero; + // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. + source *= opacity; + + return Plus(backdrop, source, HardLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalXor" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgePlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 NormalXor(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorDodgePlus(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, ColorDodge(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalXor" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgePlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 NormalXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorDodgePlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, ColorDodge(backdrop, source)); } /// - /// Returns the associated-alpha result of the "NormalXor" compositing equation. + /// Returns the associated-alpha result of the "ColorDodgePlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 NormalXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorDodgePlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, ColorDodge(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplyXor" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 MultiplyXor(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorBurnPlus(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, ColorBurn(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplyXor" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 MultiplyXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorBurnPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, ColorBurn(backdrop, source)); } /// - /// Returns the associated-alpha result of the "MultiplyXor" compositing equation. + /// Returns the associated-alpha result of the "ColorBurnPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 MultiplyXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorBurnPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, ColorBurn(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddXor" compositing equation. + /// Returns the associated-alpha result of the "SoftLightPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 AddXor(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SoftLightPlus(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, SoftLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddXor" compositing equation. + /// Returns the associated-alpha result of the "SoftLightPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 AddXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SoftLightPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, SoftLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "AddXor" compositing equation. + /// Returns the associated-alpha result of the "SoftLightPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 AddXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SoftLightPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, SoftLight(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractXor" compositing equation. + /// Returns the associated-alpha result of the "DifferencePlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 SubtractXor(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DifferencePlus(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Difference(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractXor" compositing equation. + /// Returns the associated-alpha result of the "DifferencePlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 SubtractXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 DifferencePlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Difference(backdrop, source)); } /// - /// Returns the associated-alpha result of the "SubtractXor" compositing equation. + /// Returns the associated-alpha result of the "DifferencePlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 SubtractXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 DifferencePlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Difference(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenXor" compositing equation. + /// Returns the associated-alpha result of the "ExclusionPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 ScreenXor(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ExclusionPlus(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Exclusion(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenXor" compositing equation. + /// Returns the associated-alpha result of the "ExclusionPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 ScreenXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ExclusionPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Exclusion(backdrop, source)); } /// - /// Returns the associated-alpha result of the "ScreenXor" compositing equation. + /// Returns the associated-alpha result of the "ExclusionPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 ScreenXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ExclusionPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Exclusion(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenXor" compositing equation. + /// Returns the associated-alpha result of the "HuePlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenXor(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 HuePlus(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Hue(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenXor" compositing equation. + /// Returns the associated-alpha result of the "HuePlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 HuePlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Hue(backdrop, source)); } /// - /// Returns the associated-alpha result of the "DarkenXor" compositing equation. + /// Returns the associated-alpha result of the "HuePlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 DarkenXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 HuePlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Hue(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenXor" compositing equation. + /// Returns the associated-alpha result of the "SaturationPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 LightenXor(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 SaturationPlus(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Saturation(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenXor" compositing equation. + /// Returns the associated-alpha result of the "SaturationPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 LightenXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 SaturationPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Saturation(backdrop, source)); } /// - /// Returns the associated-alpha result of the "LightenXor" compositing equation. + /// Returns the associated-alpha result of the "SaturationPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 LightenXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 SaturationPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Saturation(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlayXor" compositing equation. + /// Returns the associated-alpha result of the "ColorPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 OverlayXor(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 ColorPlus(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Color(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlayXor" compositing equation. + /// Returns the associated-alpha result of the "ColorPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 OverlayXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 ColorPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Color(backdrop, source)); } /// - /// Returns the associated-alpha result of the "OverlayXor" compositing equation. + /// Returns the associated-alpha result of the "ColorPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 OverlayXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 ColorPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Color(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightXor" compositing equation. + /// Returns the associated-alpha result of the "LuminosityPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 HardLightXor(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 LuminosityPlus(Vector4 backdrop, Vector4 source, float opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Luminosity(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightXor" compositing equation. + /// Returns the associated-alpha result of the "LuminosityPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 HardLightXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + public static Vector256 LuminosityPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Luminosity(backdrop, source)); } /// - /// Returns the associated-alpha result of the "HardLightXor" compositing equation. + /// Returns the associated-alpha result of the "LuminosityPlus" compositing equation. /// /// The associated backdrop vector. /// The associated source vector. /// The source opacity in the range 0 through 1. /// The associated composition result. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector512 HardLightXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + public static Vector512 LuminosityPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) { // Associated RGB and alpha are scaled together so opacity cannot change the represented straight colour. source *= opacity; - return Xor(backdrop, source); + return Plus(backdrop, source, Luminosity(backdrop, source)); } } diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.Generated.tt b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.Generated.tt index e0652d679..8cc89620b 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.Generated.tt +++ b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.Generated.tt @@ -73,6 +73,7 @@ internal static partial class AssociatedAlphaPorterDuffFunctions "DestOut", "Clear", "Xor", + "Plus", }; private static readonly string[] Blenders = @@ -86,6 +87,15 @@ internal static partial class AssociatedAlphaPorterDuffFunctions "Lighten", "Overlay", "HardLight", + "ColorDodge", + "ColorBurn", + "SoftLight", + "Difference", + "Exclusion", + "Hue", + "Saturation", + "Color", + "Luminosity", }; private static readonly string[] VectorTypes = @@ -131,6 +141,10 @@ internal static partial class AssociatedAlphaPorterDuffFunctions return "Out(source, backdrop)"; case "Clear": return zero; + case "Plus": + return normal + ? "PlusNormal(backdrop, source)" + : $"Plus(backdrop, source, {blender}(backdrop, source))"; default: return "Xor(backdrop, source)"; } diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.cs b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.cs index d7b5260d3..893e8e41a 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/AssociatedAlphaPorterDuffFunctions.cs @@ -280,6 +280,384 @@ internal static partial class AssociatedAlphaPorterDuffFunctions return Vector512.ConditionalSelect(useRight, right, left); } + /// + /// Calculates the associated overlap term for ColorDodge blending. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The associated overlap term. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodge(Vector4 backdrop, Vector4 source) + { + Vector4 backdropAlpha = Numerics.PermuteW(backdrop); + Vector4 sourceAlpha = Numerics.PermuteW(source); + Vector4 unassociatedBackdrop = backdrop; + Vector4 unassociatedSource = source; + + // This blend equation is defined in straight RGB, so recover each color before scaling the result by the overlap alpha. + Numerics.UnPremultiply(ref unassociatedBackdrop); + Numerics.UnPremultiply(ref unassociatedSource); + return PorterDuffFunctions.ColorDodge(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodge(Vector256 backdrop, Vector256 source) + { + Vector256 backdropAlpha = Avx.Permute(backdrop, ShuffleAlphaControl); + Vector256 sourceAlpha = Avx.Permute(source, ShuffleAlphaControl); + Vector256 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector256 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.ColorDodge(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodge(Vector512 backdrop, Vector512 source) + { + Vector512 backdropAlpha = Vector512_.ShuffleNative(backdrop, ShuffleAlphaControl); + Vector512 sourceAlpha = Vector512_.ShuffleNative(source, ShuffleAlphaControl); + Vector512 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector512 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.ColorDodge(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + /// Calculates the associated overlap term for ColorBurn blending. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The associated overlap term. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurn(Vector4 backdrop, Vector4 source) + { + Vector4 backdropAlpha = Numerics.PermuteW(backdrop); + Vector4 sourceAlpha = Numerics.PermuteW(source); + Vector4 unassociatedBackdrop = backdrop; + Vector4 unassociatedSource = source; + + // This blend equation is defined in straight RGB, so recover each color before scaling the result by the overlap alpha. + Numerics.UnPremultiply(ref unassociatedBackdrop); + Numerics.UnPremultiply(ref unassociatedSource); + return PorterDuffFunctions.ColorBurn(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurn(Vector256 backdrop, Vector256 source) + { + Vector256 backdropAlpha = Avx.Permute(backdrop, ShuffleAlphaControl); + Vector256 sourceAlpha = Avx.Permute(source, ShuffleAlphaControl); + Vector256 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector256 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.ColorBurn(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurn(Vector512 backdrop, Vector512 source) + { + Vector512 backdropAlpha = Vector512_.ShuffleNative(backdrop, ShuffleAlphaControl); + Vector512 sourceAlpha = Vector512_.ShuffleNative(source, ShuffleAlphaControl); + Vector512 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector512 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.ColorBurn(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + /// Calculates the associated overlap term for SoftLight blending. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The associated overlap term. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLight(Vector4 backdrop, Vector4 source) + { + Vector4 backdropAlpha = Numerics.PermuteW(backdrop); + Vector4 sourceAlpha = Numerics.PermuteW(source); + Vector4 unassociatedBackdrop = backdrop; + Vector4 unassociatedSource = source; + + // This blend equation is defined in straight RGB, so recover each color before scaling the result by the overlap alpha. + Numerics.UnPremultiply(ref unassociatedBackdrop); + Numerics.UnPremultiply(ref unassociatedSource); + return PorterDuffFunctions.SoftLight(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLight(Vector256 backdrop, Vector256 source) + { + Vector256 backdropAlpha = Avx.Permute(backdrop, ShuffleAlphaControl); + Vector256 sourceAlpha = Avx.Permute(source, ShuffleAlphaControl); + Vector256 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector256 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.SoftLight(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLight(Vector512 backdrop, Vector512 source) + { + Vector512 backdropAlpha = Vector512_.ShuffleNative(backdrop, ShuffleAlphaControl); + Vector512 sourceAlpha = Vector512_.ShuffleNative(source, ShuffleAlphaControl); + Vector512 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector512 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.SoftLight(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + /// Calculates the associated overlap term for Difference blending. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The associated overlap term. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Difference(Vector4 backdrop, Vector4 source) + { + Vector4 backdropAlpha = Numerics.PermuteW(backdrop); + Vector4 sourceAlpha = Numerics.PermuteW(source); + Vector4 unassociatedBackdrop = backdrop; + Vector4 unassociatedSource = source; + + // This blend equation is defined in straight RGB, so recover each color before scaling the result by the overlap alpha. + Numerics.UnPremultiply(ref unassociatedBackdrop); + Numerics.UnPremultiply(ref unassociatedSource); + return PorterDuffFunctions.Difference(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Difference(Vector256 backdrop, Vector256 source) + { + Vector256 backdropAlpha = Avx.Permute(backdrop, ShuffleAlphaControl); + Vector256 sourceAlpha = Avx.Permute(source, ShuffleAlphaControl); + Vector256 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector256 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Difference(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Difference(Vector512 backdrop, Vector512 source) + { + Vector512 backdropAlpha = Vector512_.ShuffleNative(backdrop, ShuffleAlphaControl); + Vector512 sourceAlpha = Vector512_.ShuffleNative(source, ShuffleAlphaControl); + Vector512 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector512 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Difference(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + /// Calculates the associated overlap term for Exclusion blending. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The associated overlap term. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Exclusion(Vector4 backdrop, Vector4 source) + { + Vector4 backdropAlpha = Numerics.PermuteW(backdrop); + Vector4 sourceAlpha = Numerics.PermuteW(source); + Vector4 unassociatedBackdrop = backdrop; + Vector4 unassociatedSource = source; + + // This blend equation is defined in straight RGB, so recover each color before scaling the result by the overlap alpha. + Numerics.UnPremultiply(ref unassociatedBackdrop); + Numerics.UnPremultiply(ref unassociatedSource); + return PorterDuffFunctions.Exclusion(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Exclusion(Vector256 backdrop, Vector256 source) + { + Vector256 backdropAlpha = Avx.Permute(backdrop, ShuffleAlphaControl); + Vector256 sourceAlpha = Avx.Permute(source, ShuffleAlphaControl); + Vector256 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector256 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Exclusion(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Exclusion(Vector512 backdrop, Vector512 source) + { + Vector512 backdropAlpha = Vector512_.ShuffleNative(backdrop, ShuffleAlphaControl); + Vector512 sourceAlpha = Vector512_.ShuffleNative(source, ShuffleAlphaControl); + Vector512 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector512 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Exclusion(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + /// Calculates the associated overlap term for Hue blending. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The associated overlap term. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Hue(Vector4 backdrop, Vector4 source) + { + Vector4 backdropAlpha = Numerics.PermuteW(backdrop); + Vector4 sourceAlpha = Numerics.PermuteW(source); + Vector4 unassociatedBackdrop = backdrop; + Vector4 unassociatedSource = source; + + // This blend equation is defined in straight RGB, so recover each color before scaling the result by the overlap alpha. + Numerics.UnPremultiply(ref unassociatedBackdrop); + Numerics.UnPremultiply(ref unassociatedSource); + return PorterDuffFunctions.Hue(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Hue(Vector256 backdrop, Vector256 source) + { + Vector256 backdropAlpha = Avx.Permute(backdrop, ShuffleAlphaControl); + Vector256 sourceAlpha = Avx.Permute(source, ShuffleAlphaControl); + Vector256 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector256 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Hue(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Hue(Vector512 backdrop, Vector512 source) + { + Vector512 backdropAlpha = Vector512_.ShuffleNative(backdrop, ShuffleAlphaControl); + Vector512 sourceAlpha = Vector512_.ShuffleNative(source, ShuffleAlphaControl); + Vector512 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector512 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Hue(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + /// Calculates the associated overlap term for Saturation blending. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The associated overlap term. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Saturation(Vector4 backdrop, Vector4 source) + { + Vector4 backdropAlpha = Numerics.PermuteW(backdrop); + Vector4 sourceAlpha = Numerics.PermuteW(source); + Vector4 unassociatedBackdrop = backdrop; + Vector4 unassociatedSource = source; + + // This blend equation is defined in straight RGB, so recover each color before scaling the result by the overlap alpha. + Numerics.UnPremultiply(ref unassociatedBackdrop); + Numerics.UnPremultiply(ref unassociatedSource); + return PorterDuffFunctions.Saturation(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Saturation(Vector256 backdrop, Vector256 source) + { + Vector256 backdropAlpha = Avx.Permute(backdrop, ShuffleAlphaControl); + Vector256 sourceAlpha = Avx.Permute(source, ShuffleAlphaControl); + Vector256 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector256 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Saturation(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Saturation(Vector512 backdrop, Vector512 source) + { + Vector512 backdropAlpha = Vector512_.ShuffleNative(backdrop, ShuffleAlphaControl); + Vector512 sourceAlpha = Vector512_.ShuffleNative(source, ShuffleAlphaControl); + Vector512 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector512 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Saturation(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + /// Calculates the associated overlap term for Color blending. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The associated overlap term. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Color(Vector4 backdrop, Vector4 source) + { + Vector4 backdropAlpha = Numerics.PermuteW(backdrop); + Vector4 sourceAlpha = Numerics.PermuteW(source); + Vector4 unassociatedBackdrop = backdrop; + Vector4 unassociatedSource = source; + + // This blend equation is defined in straight RGB, so recover each color before scaling the result by the overlap alpha. + Numerics.UnPremultiply(ref unassociatedBackdrop); + Numerics.UnPremultiply(ref unassociatedSource); + return PorterDuffFunctions.Color(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Color(Vector256 backdrop, Vector256 source) + { + Vector256 backdropAlpha = Avx.Permute(backdrop, ShuffleAlphaControl); + Vector256 sourceAlpha = Avx.Permute(source, ShuffleAlphaControl); + Vector256 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector256 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Color(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Color(Vector512 backdrop, Vector512 source) + { + Vector512 backdropAlpha = Vector512_.ShuffleNative(backdrop, ShuffleAlphaControl); + Vector512 sourceAlpha = Vector512_.ShuffleNative(source, ShuffleAlphaControl); + Vector512 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector512 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Color(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + /// Calculates the associated overlap term for Luminosity blending. + /// + /// The associated backdrop vector. + /// The associated source vector. + /// The associated overlap term. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Luminosity(Vector4 backdrop, Vector4 source) + { + Vector4 backdropAlpha = Numerics.PermuteW(backdrop); + Vector4 sourceAlpha = Numerics.PermuteW(source); + Vector4 unassociatedBackdrop = backdrop; + Vector4 unassociatedSource = source; + + // This blend equation is defined in straight RGB, so recover each color before scaling the result by the overlap alpha. + Numerics.UnPremultiply(ref unassociatedBackdrop); + Numerics.UnPremultiply(ref unassociatedSource); + return PorterDuffFunctions.Luminosity(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Luminosity(Vector256 backdrop, Vector256 source) + { + Vector256 backdropAlpha = Avx.Permute(backdrop, ShuffleAlphaControl); + Vector256 sourceAlpha = Avx.Permute(source, ShuffleAlphaControl); + Vector256 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector256 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Luminosity(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Luminosity(Vector512 backdrop, Vector512 source) + { + Vector512 backdropAlpha = Vector512_.ShuffleNative(backdrop, ShuffleAlphaControl); + Vector512 sourceAlpha = Vector512_.ShuffleNative(source, ShuffleAlphaControl); + Vector512 unassociatedBackdrop = Numerics.UnPremultiply(backdrop, backdropAlpha); + Vector512 unassociatedSource = Numerics.UnPremultiply(source, sourceAlpha); + return PorterDuffFunctions.Luminosity(unassociatedBackdrop, unassociatedSource) * backdropAlpha * sourceAlpha; + } + /// /// Composites an associated source over an associated destination without a color-blending function. /// @@ -310,6 +688,77 @@ internal static partial class AssociatedAlphaPorterDuffFunctions return source + (destination * (Vector512.Create(1F) - sourceAlpha)); } + /// + /// Adds associated source and destination vectors without a color-blending function. + /// + /// The associated destination vector. + /// The associated source vector. + /// The clamped associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 PlusNormal(Vector4 destination, Vector4 source) + { + Vector4 alpha = Vector4.Min(Vector4.One, Numerics.PermuteW(source) + Numerics.PermuteW(destination)); + return Numerics.WithW(Vector4.Min(Vector4.One, destination + source), alpha); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 PlusNormal(Vector256 destination, Vector256 source) + { + Vector256 one = Vector256.Create(1F); + Vector256 alpha = Vector256.Min(one, Avx.Permute(source, ShuffleAlphaControl) + Avx.Permute(destination, ShuffleAlphaControl)); + return Avx.Blend(Vector256.Min(one, destination + source), alpha, BlendAlphaControl); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 PlusNormal(Vector512 destination, Vector512 source) + { + Vector512 one = Vector512.Create(1F); + Vector512 alpha = Vector512.Min(one, Vector512_.ShuffleNative(source, ShuffleAlphaControl) + Vector512_.ShuffleNative(destination, ShuffleAlphaControl)); + return Vector512.ConditionalSelect(AlphaMask512(), alpha, Vector512.Min(one, destination + source)); + } + + /// + /// Adds associated source and destination vectors using a color-blended overlap term. + /// + /// The associated destination vector. + /// The associated source vector. + /// The associated overlap term produced by the color-blending function. + /// The clamped associated composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Plus(Vector4 destination, Vector4 source, Vector4 overlap) + { + Vector4 destinationAlpha = Numerics.PermuteW(destination); + Vector4 alpha = Vector4.Min(Vector4.One, Numerics.PermuteW(source) + destinationAlpha); + + // The blended source contributes straight source color outside the destination and the blend result in the overlap. + Vector4 result = destination + (source * (Vector4.One - destinationAlpha)) + overlap; + return Numerics.WithW(Vector4.Min(Vector4.One, result), alpha); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Plus(Vector256 destination, Vector256 source, Vector256 overlap) + { + Vector256 one = Vector256.Create(1F); + Vector256 destinationAlpha = Avx.Permute(destination, ShuffleAlphaControl); + Vector256 alpha = Vector256.Min(one, Avx.Permute(source, ShuffleAlphaControl) + destinationAlpha); + Vector256 result = destination + (source * (one - destinationAlpha)) + overlap; + return Avx.Blend(Vector256.Min(one, result), alpha, BlendAlphaControl); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Plus(Vector512 destination, Vector512 source, Vector512 overlap) + { + Vector512 one = Vector512.Create(1F); + Vector512 destinationAlpha = Vector512_.ShuffleNative(destination, ShuffleAlphaControl); + Vector512 alpha = Vector512.Min(one, Vector512_.ShuffleNative(source, ShuffleAlphaControl) + destinationAlpha); + Vector512 result = destination + (source * (one - destinationAlpha)) + overlap; + return Vector512.ConditionalSelect(AlphaMask512(), alpha, Vector512.Min(one, result)); + } + /// /// Composites an associated source atop an associated destination without a color-blending function. /// diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs index 298c35999..de2ccf3a9 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.cs @@ -202,2121 +202,4767 @@ internal static class DefaultPixelBlenderOperators } /// - /// Applies the "NormalSrcAtop" straight-alpha composition equation. + /// Applies the "ColorDodgeSrc" straight-alpha composition equation. /// - public readonly struct NormalSrcAtop : IPixelBlenderOperator + public readonly struct ColorDodgeSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalSrcAtop(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalSrcAtop(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalSrcAtop(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrc(background, source, amount); } /// - /// Applies the "MultiplySrcAtop" straight-alpha composition equation. + /// Applies the "ColorBurnSrc" straight-alpha composition equation. /// - public readonly struct MultiplySrcAtop : IPixelBlenderOperator + public readonly struct ColorBurnSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplySrcAtop(background, source, amount); + => PorterDuffFunctions.ColorBurnSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplySrcAtop(background, source, amount); + => PorterDuffFunctions.ColorBurnSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplySrcAtop(background, source, amount); + => PorterDuffFunctions.ColorBurnSrc(background, source, amount); } /// - /// Applies the "AddSrcAtop" straight-alpha composition equation. + /// Applies the "SoftLightSrc" straight-alpha composition equation. /// - public readonly struct AddSrcAtop : IPixelBlenderOperator + public readonly struct SoftLightSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddSrcAtop(background, source, amount); + => PorterDuffFunctions.SoftLightSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddSrcAtop(background, source, amount); + => PorterDuffFunctions.SoftLightSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddSrcAtop(background, source, amount); + => PorterDuffFunctions.SoftLightSrc(background, source, amount); } /// - /// Applies the "SubtractSrcAtop" straight-alpha composition equation. + /// Applies the "DifferenceSrc" straight-alpha composition equation. /// - public readonly struct SubtractSrcAtop : IPixelBlenderOperator + public readonly struct DifferenceSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractSrcAtop(background, source, amount); + => PorterDuffFunctions.DifferenceSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractSrcAtop(background, source, amount); + => PorterDuffFunctions.DifferenceSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractSrcAtop(background, source, amount); + => PorterDuffFunctions.DifferenceSrc(background, source, amount); } /// - /// Applies the "ScreenSrcAtop" straight-alpha composition equation. + /// Applies the "ExclusionSrc" straight-alpha composition equation. /// - public readonly struct ScreenSrcAtop : IPixelBlenderOperator + public readonly struct ExclusionSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenSrcAtop(background, source, amount); + => PorterDuffFunctions.ExclusionSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenSrcAtop(background, source, amount); + => PorterDuffFunctions.ExclusionSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenSrcAtop(background, source, amount); + => PorterDuffFunctions.ExclusionSrc(background, source, amount); } /// - /// Applies the "DarkenSrcAtop" straight-alpha composition equation. + /// Applies the "HueSrc" straight-alpha composition equation. /// - public readonly struct DarkenSrcAtop : IPixelBlenderOperator + public readonly struct HueSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenSrcAtop(background, source, amount); + => PorterDuffFunctions.HueSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenSrcAtop(background, source, amount); + => PorterDuffFunctions.HueSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenSrcAtop(background, source, amount); + => PorterDuffFunctions.HueSrc(background, source, amount); } /// - /// Applies the "LightenSrcAtop" straight-alpha composition equation. + /// Applies the "SaturationSrc" straight-alpha composition equation. /// - public readonly struct LightenSrcAtop : IPixelBlenderOperator + public readonly struct SaturationSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenSrcAtop(background, source, amount); + => PorterDuffFunctions.SaturationSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenSrcAtop(background, source, amount); + => PorterDuffFunctions.SaturationSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenSrcAtop(background, source, amount); + => PorterDuffFunctions.SaturationSrc(background, source, amount); } /// - /// Applies the "OverlaySrcAtop" straight-alpha composition equation. + /// Applies the "ColorSrc" straight-alpha composition equation. /// - public readonly struct OverlaySrcAtop : IPixelBlenderOperator + public readonly struct ColorSrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlaySrcAtop(background, source, amount); + => PorterDuffFunctions.ColorSrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlaySrcAtop(background, source, amount); + => PorterDuffFunctions.ColorSrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlaySrcAtop(background, source, amount); + => PorterDuffFunctions.ColorSrc(background, source, amount); } /// - /// Applies the "HardLightSrcAtop" straight-alpha composition equation. + /// Applies the "LuminositySrc" straight-alpha composition equation. /// - public readonly struct HardLightSrcAtop : IPixelBlenderOperator + public readonly struct LuminositySrc : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightSrcAtop(background, source, amount); + => PorterDuffFunctions.LuminositySrc(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightSrcAtop(background, source, amount); + => PorterDuffFunctions.LuminositySrc(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightSrcAtop(background, source, amount); + => PorterDuffFunctions.LuminositySrc(background, source, amount); } /// - /// Applies the "NormalSrcOver" straight-alpha composition equation. + /// Applies the "NormalSrcAtop" straight-alpha composition equation. /// - public readonly struct NormalSrcOver : IPixelBlenderOperator + public readonly struct NormalSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalSrcOver(background, source, amount); + => PorterDuffFunctions.NormalSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalSrcOver(background, source, amount); + => PorterDuffFunctions.NormalSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalSrcOver(background, source, amount); + => PorterDuffFunctions.NormalSrcAtop(background, source, amount); } /// - /// Applies the "MultiplySrcOver" straight-alpha composition equation. + /// Applies the "MultiplySrcAtop" straight-alpha composition equation. /// - public readonly struct MultiplySrcOver : IPixelBlenderOperator + public readonly struct MultiplySrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplySrcOver(background, source, amount); + => PorterDuffFunctions.MultiplySrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplySrcOver(background, source, amount); + => PorterDuffFunctions.MultiplySrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplySrcOver(background, source, amount); + => PorterDuffFunctions.MultiplySrcAtop(background, source, amount); } /// - /// Applies the "AddSrcOver" straight-alpha composition equation. + /// Applies the "AddSrcAtop" straight-alpha composition equation. /// - public readonly struct AddSrcOver : IPixelBlenderOperator + public readonly struct AddSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddSrcOver(background, source, amount); + => PorterDuffFunctions.AddSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddSrcOver(background, source, amount); + => PorterDuffFunctions.AddSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddSrcOver(background, source, amount); + => PorterDuffFunctions.AddSrcAtop(background, source, amount); } /// - /// Applies the "SubtractSrcOver" straight-alpha composition equation. + /// Applies the "SubtractSrcAtop" straight-alpha composition equation. /// - public readonly struct SubtractSrcOver : IPixelBlenderOperator + public readonly struct SubtractSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractSrcOver(background, source, amount); + => PorterDuffFunctions.SubtractSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractSrcOver(background, source, amount); + => PorterDuffFunctions.SubtractSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractSrcOver(background, source, amount); + => PorterDuffFunctions.SubtractSrcAtop(background, source, amount); } /// - /// Applies the "ScreenSrcOver" straight-alpha composition equation. + /// Applies the "ScreenSrcAtop" straight-alpha composition equation. /// - public readonly struct ScreenSrcOver : IPixelBlenderOperator + public readonly struct ScreenSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenSrcOver(background, source, amount); + => PorterDuffFunctions.ScreenSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenSrcOver(background, source, amount); + => PorterDuffFunctions.ScreenSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenSrcOver(background, source, amount); + => PorterDuffFunctions.ScreenSrcAtop(background, source, amount); } /// - /// Applies the "DarkenSrcOver" straight-alpha composition equation. + /// Applies the "DarkenSrcAtop" straight-alpha composition equation. /// - public readonly struct DarkenSrcOver : IPixelBlenderOperator + public readonly struct DarkenSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenSrcOver(background, source, amount); + => PorterDuffFunctions.DarkenSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenSrcOver(background, source, amount); + => PorterDuffFunctions.DarkenSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenSrcOver(background, source, amount); + => PorterDuffFunctions.DarkenSrcAtop(background, source, amount); } /// - /// Applies the "LightenSrcOver" straight-alpha composition equation. + /// Applies the "LightenSrcAtop" straight-alpha composition equation. /// - public readonly struct LightenSrcOver : IPixelBlenderOperator + public readonly struct LightenSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenSrcOver(background, source, amount); + => PorterDuffFunctions.LightenSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenSrcOver(background, source, amount); + => PorterDuffFunctions.LightenSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenSrcOver(background, source, amount); + => PorterDuffFunctions.LightenSrcAtop(background, source, amount); } /// - /// Applies the "OverlaySrcOver" straight-alpha composition equation. + /// Applies the "OverlaySrcAtop" straight-alpha composition equation. /// - public readonly struct OverlaySrcOver : IPixelBlenderOperator + public readonly struct OverlaySrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlaySrcOver(background, source, amount); + => PorterDuffFunctions.OverlaySrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlaySrcOver(background, source, amount); + => PorterDuffFunctions.OverlaySrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlaySrcOver(background, source, amount); + => PorterDuffFunctions.OverlaySrcAtop(background, source, amount); } /// - /// Applies the "HardLightSrcOver" straight-alpha composition equation. + /// Applies the "HardLightSrcAtop" straight-alpha composition equation. /// - public readonly struct HardLightSrcOver : IPixelBlenderOperator + public readonly struct HardLightSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightSrcOver(background, source, amount); + => PorterDuffFunctions.HardLightSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightSrcOver(background, source, amount); + => PorterDuffFunctions.HardLightSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightSrcOver(background, source, amount); + => PorterDuffFunctions.HardLightSrcAtop(background, source, amount); } /// - /// Applies the "NormalSrcIn" straight-alpha composition equation. + /// Applies the "ColorDodgeSrcAtop" straight-alpha composition equation. /// - public readonly struct NormalSrcIn : IPixelBlenderOperator + public readonly struct ColorDodgeSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalSrcIn(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalSrcIn(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalSrcIn(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcAtop(background, source, amount); } /// - /// Applies the "MultiplySrcIn" straight-alpha composition equation. + /// Applies the "ColorBurnSrcAtop" straight-alpha composition equation. /// - public readonly struct MultiplySrcIn : IPixelBlenderOperator + public readonly struct ColorBurnSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplySrcIn(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplySrcIn(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplySrcIn(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcAtop(background, source, amount); } /// - /// Applies the "AddSrcIn" straight-alpha composition equation. + /// Applies the "SoftLightSrcAtop" straight-alpha composition equation. /// - public readonly struct AddSrcIn : IPixelBlenderOperator + public readonly struct SoftLightSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddSrcIn(background, source, amount); + => PorterDuffFunctions.SoftLightSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddSrcIn(background, source, amount); + => PorterDuffFunctions.SoftLightSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddSrcIn(background, source, amount); + => PorterDuffFunctions.SoftLightSrcAtop(background, source, amount); } /// - /// Applies the "SubtractSrcIn" straight-alpha composition equation. + /// Applies the "DifferenceSrcAtop" straight-alpha composition equation. /// - public readonly struct SubtractSrcIn : IPixelBlenderOperator + public readonly struct DifferenceSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractSrcIn(background, source, amount); + => PorterDuffFunctions.DifferenceSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractSrcIn(background, source, amount); + => PorterDuffFunctions.DifferenceSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractSrcIn(background, source, amount); + => PorterDuffFunctions.DifferenceSrcAtop(background, source, amount); } /// - /// Applies the "ScreenSrcIn" straight-alpha composition equation. + /// Applies the "ExclusionSrcAtop" straight-alpha composition equation. /// - public readonly struct ScreenSrcIn : IPixelBlenderOperator + public readonly struct ExclusionSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenSrcIn(background, source, amount); + => PorterDuffFunctions.ExclusionSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenSrcIn(background, source, amount); + => PorterDuffFunctions.ExclusionSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenSrcIn(background, source, amount); + => PorterDuffFunctions.ExclusionSrcAtop(background, source, amount); } /// - /// Applies the "DarkenSrcIn" straight-alpha composition equation. + /// Applies the "HueSrcAtop" straight-alpha composition equation. /// - public readonly struct DarkenSrcIn : IPixelBlenderOperator + public readonly struct HueSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenSrcIn(background, source, amount); + => PorterDuffFunctions.HueSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenSrcIn(background, source, amount); + => PorterDuffFunctions.HueSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenSrcIn(background, source, amount); + => PorterDuffFunctions.HueSrcAtop(background, source, amount); } /// - /// Applies the "LightenSrcIn" straight-alpha composition equation. + /// Applies the "SaturationSrcAtop" straight-alpha composition equation. /// - public readonly struct LightenSrcIn : IPixelBlenderOperator + public readonly struct SaturationSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenSrcIn(background, source, amount); + => PorterDuffFunctions.SaturationSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenSrcIn(background, source, amount); + => PorterDuffFunctions.SaturationSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenSrcIn(background, source, amount); + => PorterDuffFunctions.SaturationSrcAtop(background, source, amount); } /// - /// Applies the "OverlaySrcIn" straight-alpha composition equation. + /// Applies the "ColorSrcAtop" straight-alpha composition equation. /// - public readonly struct OverlaySrcIn : IPixelBlenderOperator + public readonly struct ColorSrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlaySrcIn(background, source, amount); + => PorterDuffFunctions.ColorSrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlaySrcIn(background, source, amount); + => PorterDuffFunctions.ColorSrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlaySrcIn(background, source, amount); + => PorterDuffFunctions.ColorSrcAtop(background, source, amount); } /// - /// Applies the "HardLightSrcIn" straight-alpha composition equation. + /// Applies the "LuminositySrcAtop" straight-alpha composition equation. /// - public readonly struct HardLightSrcIn : IPixelBlenderOperator + public readonly struct LuminositySrcAtop : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightSrcIn(background, source, amount); + => PorterDuffFunctions.LuminositySrcAtop(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightSrcIn(background, source, amount); + => PorterDuffFunctions.LuminositySrcAtop(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightSrcIn(background, source, amount); + => PorterDuffFunctions.LuminositySrcAtop(background, source, amount); } /// - /// Applies the "NormalSrcOut" straight-alpha composition equation. + /// Applies the "NormalSrcOver" straight-alpha composition equation. /// - public readonly struct NormalSrcOut : IPixelBlenderOperator + public readonly struct NormalSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalSrcOut(background, source, amount); + => PorterDuffFunctions.NormalSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalSrcOut(background, source, amount); + => PorterDuffFunctions.NormalSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalSrcOut(background, source, amount); + => PorterDuffFunctions.NormalSrcOver(background, source, amount); } /// - /// Applies the "MultiplySrcOut" straight-alpha composition equation. + /// Applies the "MultiplySrcOver" straight-alpha composition equation. /// - public readonly struct MultiplySrcOut : IPixelBlenderOperator + public readonly struct MultiplySrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplySrcOut(background, source, amount); + => PorterDuffFunctions.MultiplySrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplySrcOut(background, source, amount); + => PorterDuffFunctions.MultiplySrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplySrcOut(background, source, amount); + => PorterDuffFunctions.MultiplySrcOver(background, source, amount); } /// - /// Applies the "AddSrcOut" straight-alpha composition equation. + /// Applies the "AddSrcOver" straight-alpha composition equation. /// - public readonly struct AddSrcOut : IPixelBlenderOperator + public readonly struct AddSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddSrcOut(background, source, amount); + => PorterDuffFunctions.AddSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddSrcOut(background, source, amount); + => PorterDuffFunctions.AddSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddSrcOut(background, source, amount); + => PorterDuffFunctions.AddSrcOver(background, source, amount); } /// - /// Applies the "SubtractSrcOut" straight-alpha composition equation. + /// Applies the "SubtractSrcOver" straight-alpha composition equation. /// - public readonly struct SubtractSrcOut : IPixelBlenderOperator + public readonly struct SubtractSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractSrcOut(background, source, amount); + => PorterDuffFunctions.SubtractSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractSrcOut(background, source, amount); + => PorterDuffFunctions.SubtractSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractSrcOut(background, source, amount); + => PorterDuffFunctions.SubtractSrcOver(background, source, amount); } /// - /// Applies the "ScreenSrcOut" straight-alpha composition equation. + /// Applies the "ScreenSrcOver" straight-alpha composition equation. /// - public readonly struct ScreenSrcOut : IPixelBlenderOperator + public readonly struct ScreenSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenSrcOut(background, source, amount); + => PorterDuffFunctions.ScreenSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenSrcOut(background, source, amount); + => PorterDuffFunctions.ScreenSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenSrcOut(background, source, amount); + => PorterDuffFunctions.ScreenSrcOver(background, source, amount); } /// - /// Applies the "DarkenSrcOut" straight-alpha composition equation. + /// Applies the "DarkenSrcOver" straight-alpha composition equation. /// - public readonly struct DarkenSrcOut : IPixelBlenderOperator + public readonly struct DarkenSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenSrcOut(background, source, amount); + => PorterDuffFunctions.DarkenSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenSrcOut(background, source, amount); + => PorterDuffFunctions.DarkenSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenSrcOut(background, source, amount); + => PorterDuffFunctions.DarkenSrcOver(background, source, amount); } /// - /// Applies the "LightenSrcOut" straight-alpha composition equation. + /// Applies the "LightenSrcOver" straight-alpha composition equation. /// - public readonly struct LightenSrcOut : IPixelBlenderOperator + public readonly struct LightenSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenSrcOut(background, source, amount); + => PorterDuffFunctions.LightenSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenSrcOut(background, source, amount); + => PorterDuffFunctions.LightenSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenSrcOut(background, source, amount); + => PorterDuffFunctions.LightenSrcOver(background, source, amount); } /// - /// Applies the "OverlaySrcOut" straight-alpha composition equation. + /// Applies the "OverlaySrcOver" straight-alpha composition equation. /// - public readonly struct OverlaySrcOut : IPixelBlenderOperator + public readonly struct OverlaySrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlaySrcOut(background, source, amount); + => PorterDuffFunctions.OverlaySrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlaySrcOut(background, source, amount); + => PorterDuffFunctions.OverlaySrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlaySrcOut(background, source, amount); + => PorterDuffFunctions.OverlaySrcOver(background, source, amount); } /// - /// Applies the "HardLightSrcOut" straight-alpha composition equation. + /// Applies the "HardLightSrcOver" straight-alpha composition equation. /// - public readonly struct HardLightSrcOut : IPixelBlenderOperator + public readonly struct HardLightSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightSrcOut(background, source, amount); + => PorterDuffFunctions.HardLightSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightSrcOut(background, source, amount); + => PorterDuffFunctions.HardLightSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightSrcOut(background, source, amount); + => PorterDuffFunctions.HardLightSrcOver(background, source, amount); } /// - /// Applies the "NormalDest" straight-alpha composition equation. + /// Applies the "ColorDodgeSrcOver" straight-alpha composition equation. /// - public readonly struct NormalDest : IPixelBlenderOperator + public readonly struct ColorDodgeSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalDest(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalDest(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalDest(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcOver(background, source, amount); } /// - /// Applies the "MultiplyDest" straight-alpha composition equation. + /// Applies the "ColorBurnSrcOver" straight-alpha composition equation. /// - public readonly struct MultiplyDest : IPixelBlenderOperator + public readonly struct ColorBurnSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplyDest(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplyDest(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplyDest(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcOver(background, source, amount); } /// - /// Applies the "AddDest" straight-alpha composition equation. + /// Applies the "SoftLightSrcOver" straight-alpha composition equation. /// - public readonly struct AddDest : IPixelBlenderOperator + public readonly struct SoftLightSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddDest(background, source, amount); + => PorterDuffFunctions.SoftLightSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddDest(background, source, amount); + => PorterDuffFunctions.SoftLightSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddDest(background, source, amount); + => PorterDuffFunctions.SoftLightSrcOver(background, source, amount); } /// - /// Applies the "SubtractDest" straight-alpha composition equation. + /// Applies the "DifferenceSrcOver" straight-alpha composition equation. /// - public readonly struct SubtractDest : IPixelBlenderOperator + public readonly struct DifferenceSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractDest(background, source, amount); + => PorterDuffFunctions.DifferenceSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractDest(background, source, amount); + => PorterDuffFunctions.DifferenceSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractDest(background, source, amount); + => PorterDuffFunctions.DifferenceSrcOver(background, source, amount); } /// - /// Applies the "ScreenDest" straight-alpha composition equation. + /// Applies the "ExclusionSrcOver" straight-alpha composition equation. /// - public readonly struct ScreenDest : IPixelBlenderOperator + public readonly struct ExclusionSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenDest(background, source, amount); + => PorterDuffFunctions.ExclusionSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenDest(background, source, amount); + => PorterDuffFunctions.ExclusionSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenDest(background, source, amount); + => PorterDuffFunctions.ExclusionSrcOver(background, source, amount); } /// - /// Applies the "DarkenDest" straight-alpha composition equation. + /// Applies the "HueSrcOver" straight-alpha composition equation. /// - public readonly struct DarkenDest : IPixelBlenderOperator + public readonly struct HueSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenDest(background, source, amount); + => PorterDuffFunctions.HueSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenDest(background, source, amount); + => PorterDuffFunctions.HueSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenDest(background, source, amount); + => PorterDuffFunctions.HueSrcOver(background, source, amount); } /// - /// Applies the "LightenDest" straight-alpha composition equation. + /// Applies the "SaturationSrcOver" straight-alpha composition equation. /// - public readonly struct LightenDest : IPixelBlenderOperator + public readonly struct SaturationSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenDest(background, source, amount); + => PorterDuffFunctions.SaturationSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenDest(background, source, amount); + => PorterDuffFunctions.SaturationSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenDest(background, source, amount); + => PorterDuffFunctions.SaturationSrcOver(background, source, amount); } /// - /// Applies the "OverlayDest" straight-alpha composition equation. + /// Applies the "ColorSrcOver" straight-alpha composition equation. /// - public readonly struct OverlayDest : IPixelBlenderOperator + public readonly struct ColorSrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlayDest(background, source, amount); + => PorterDuffFunctions.ColorSrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlayDest(background, source, amount); + => PorterDuffFunctions.ColorSrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlayDest(background, source, amount); + => PorterDuffFunctions.ColorSrcOver(background, source, amount); } /// - /// Applies the "HardLightDest" straight-alpha composition equation. + /// Applies the "LuminositySrcOver" straight-alpha composition equation. /// - public readonly struct HardLightDest : IPixelBlenderOperator + public readonly struct LuminositySrcOver : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightDest(background, source, amount); + => PorterDuffFunctions.LuminositySrcOver(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightDest(background, source, amount); + => PorterDuffFunctions.LuminositySrcOver(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightDest(background, source, amount); + => PorterDuffFunctions.LuminositySrcOver(background, source, amount); } /// - /// Applies the "NormalDestAtop" straight-alpha composition equation. + /// Applies the "NormalSrcIn" straight-alpha composition equation. /// - public readonly struct NormalDestAtop : IPixelBlenderOperator + public readonly struct NormalSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalDestAtop(background, source, amount); + => PorterDuffFunctions.NormalSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalDestAtop(background, source, amount); + => PorterDuffFunctions.NormalSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalDestAtop(background, source, amount); + => PorterDuffFunctions.NormalSrcIn(background, source, amount); } /// - /// Applies the "MultiplyDestAtop" straight-alpha composition equation. + /// Applies the "MultiplySrcIn" straight-alpha composition equation. /// - public readonly struct MultiplyDestAtop : IPixelBlenderOperator + public readonly struct MultiplySrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplyDestAtop(background, source, amount); + => PorterDuffFunctions.MultiplySrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplyDestAtop(background, source, amount); + => PorterDuffFunctions.MultiplySrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplyDestAtop(background, source, amount); + => PorterDuffFunctions.MultiplySrcIn(background, source, amount); } /// - /// Applies the "AddDestAtop" straight-alpha composition equation. + /// Applies the "AddSrcIn" straight-alpha composition equation. /// - public readonly struct AddDestAtop : IPixelBlenderOperator + public readonly struct AddSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddDestAtop(background, source, amount); + => PorterDuffFunctions.AddSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddDestAtop(background, source, amount); + => PorterDuffFunctions.AddSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddDestAtop(background, source, amount); + => PorterDuffFunctions.AddSrcIn(background, source, amount); } /// - /// Applies the "SubtractDestAtop" straight-alpha composition equation. + /// Applies the "SubtractSrcIn" straight-alpha composition equation. /// - public readonly struct SubtractDestAtop : IPixelBlenderOperator + public readonly struct SubtractSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractDestAtop(background, source, amount); + => PorterDuffFunctions.SubtractSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractDestAtop(background, source, amount); + => PorterDuffFunctions.SubtractSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractDestAtop(background, source, amount); + => PorterDuffFunctions.SubtractSrcIn(background, source, amount); } /// - /// Applies the "ScreenDestAtop" straight-alpha composition equation. + /// Applies the "ScreenSrcIn" straight-alpha composition equation. /// - public readonly struct ScreenDestAtop : IPixelBlenderOperator + public readonly struct ScreenSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenDestAtop(background, source, amount); + => PorterDuffFunctions.ScreenSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenDestAtop(background, source, amount); + => PorterDuffFunctions.ScreenSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenDestAtop(background, source, amount); + => PorterDuffFunctions.ScreenSrcIn(background, source, amount); } /// - /// Applies the "DarkenDestAtop" straight-alpha composition equation. + /// Applies the "DarkenSrcIn" straight-alpha composition equation. /// - public readonly struct DarkenDestAtop : IPixelBlenderOperator + public readonly struct DarkenSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenDestAtop(background, source, amount); + => PorterDuffFunctions.DarkenSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenDestAtop(background, source, amount); + => PorterDuffFunctions.DarkenSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenDestAtop(background, source, amount); + => PorterDuffFunctions.DarkenSrcIn(background, source, amount); } /// - /// Applies the "LightenDestAtop" straight-alpha composition equation. + /// Applies the "LightenSrcIn" straight-alpha composition equation. /// - public readonly struct LightenDestAtop : IPixelBlenderOperator + public readonly struct LightenSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenDestAtop(background, source, amount); + => PorterDuffFunctions.LightenSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenDestAtop(background, source, amount); + => PorterDuffFunctions.LightenSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenDestAtop(background, source, amount); + => PorterDuffFunctions.LightenSrcIn(background, source, amount); } /// - /// Applies the "OverlayDestAtop" straight-alpha composition equation. + /// Applies the "OverlaySrcIn" straight-alpha composition equation. /// - public readonly struct OverlayDestAtop : IPixelBlenderOperator + public readonly struct OverlaySrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlayDestAtop(background, source, amount); + => PorterDuffFunctions.OverlaySrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlayDestAtop(background, source, amount); + => PorterDuffFunctions.OverlaySrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlayDestAtop(background, source, amount); + => PorterDuffFunctions.OverlaySrcIn(background, source, amount); } /// - /// Applies the "HardLightDestAtop" straight-alpha composition equation. + /// Applies the "HardLightSrcIn" straight-alpha composition equation. /// - public readonly struct HardLightDestAtop : IPixelBlenderOperator + public readonly struct HardLightSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightDestAtop(background, source, amount); + => PorterDuffFunctions.HardLightSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightDestAtop(background, source, amount); + => PorterDuffFunctions.HardLightSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightDestAtop(background, source, amount); + => PorterDuffFunctions.HardLightSrcIn(background, source, amount); } /// - /// Applies the "NormalDestOver" straight-alpha composition equation. + /// Applies the "ColorDodgeSrcIn" straight-alpha composition equation. /// - public readonly struct NormalDestOver : IPixelBlenderOperator + public readonly struct ColorDodgeSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalDestOver(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalDestOver(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalDestOver(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcIn(background, source, amount); } /// - /// Applies the "MultiplyDestOver" straight-alpha composition equation. + /// Applies the "ColorBurnSrcIn" straight-alpha composition equation. /// - public readonly struct MultiplyDestOver : IPixelBlenderOperator + public readonly struct ColorBurnSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplyDestOver(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplyDestOver(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplyDestOver(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcIn(background, source, amount); } /// - /// Applies the "AddDestOver" straight-alpha composition equation. + /// Applies the "SoftLightSrcIn" straight-alpha composition equation. /// - public readonly struct AddDestOver : IPixelBlenderOperator + public readonly struct SoftLightSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddDestOver(background, source, amount); + => PorterDuffFunctions.SoftLightSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddDestOver(background, source, amount); + => PorterDuffFunctions.SoftLightSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddDestOver(background, source, amount); + => PorterDuffFunctions.SoftLightSrcIn(background, source, amount); } /// - /// Applies the "SubtractDestOver" straight-alpha composition equation. + /// Applies the "DifferenceSrcIn" straight-alpha composition equation. /// - public readonly struct SubtractDestOver : IPixelBlenderOperator + public readonly struct DifferenceSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractDestOver(background, source, amount); + => PorterDuffFunctions.DifferenceSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractDestOver(background, source, amount); + => PorterDuffFunctions.DifferenceSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractDestOver(background, source, amount); + => PorterDuffFunctions.DifferenceSrcIn(background, source, amount); } /// - /// Applies the "ScreenDestOver" straight-alpha composition equation. + /// Applies the "ExclusionSrcIn" straight-alpha composition equation. /// - public readonly struct ScreenDestOver : IPixelBlenderOperator + public readonly struct ExclusionSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenDestOver(background, source, amount); + => PorterDuffFunctions.ExclusionSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenDestOver(background, source, amount); + => PorterDuffFunctions.ExclusionSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenDestOver(background, source, amount); + => PorterDuffFunctions.ExclusionSrcIn(background, source, amount); } /// - /// Applies the "DarkenDestOver" straight-alpha composition equation. + /// Applies the "HueSrcIn" straight-alpha composition equation. /// - public readonly struct DarkenDestOver : IPixelBlenderOperator + public readonly struct HueSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenDestOver(background, source, amount); + => PorterDuffFunctions.HueSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenDestOver(background, source, amount); + => PorterDuffFunctions.HueSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenDestOver(background, source, amount); + => PorterDuffFunctions.HueSrcIn(background, source, amount); } /// - /// Applies the "LightenDestOver" straight-alpha composition equation. + /// Applies the "SaturationSrcIn" straight-alpha composition equation. /// - public readonly struct LightenDestOver : IPixelBlenderOperator + public readonly struct SaturationSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenDestOver(background, source, amount); + => PorterDuffFunctions.SaturationSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenDestOver(background, source, amount); + => PorterDuffFunctions.SaturationSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenDestOver(background, source, amount); + => PorterDuffFunctions.SaturationSrcIn(background, source, amount); } /// - /// Applies the "OverlayDestOver" straight-alpha composition equation. + /// Applies the "ColorSrcIn" straight-alpha composition equation. /// - public readonly struct OverlayDestOver : IPixelBlenderOperator + public readonly struct ColorSrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlayDestOver(background, source, amount); + => PorterDuffFunctions.ColorSrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlayDestOver(background, source, amount); + => PorterDuffFunctions.ColorSrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlayDestOver(background, source, amount); + => PorterDuffFunctions.ColorSrcIn(background, source, amount); } /// - /// Applies the "HardLightDestOver" straight-alpha composition equation. + /// Applies the "LuminositySrcIn" straight-alpha composition equation. /// - public readonly struct HardLightDestOver : IPixelBlenderOperator + public readonly struct LuminositySrcIn : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightDestOver(background, source, amount); + => PorterDuffFunctions.LuminositySrcIn(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightDestOver(background, source, amount); + => PorterDuffFunctions.LuminositySrcIn(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightDestOver(background, source, amount); + => PorterDuffFunctions.LuminositySrcIn(background, source, amount); } /// - /// Applies the "NormalDestIn" straight-alpha composition equation. + /// Applies the "NormalSrcOut" straight-alpha composition equation. /// - public readonly struct NormalDestIn : IPixelBlenderOperator + public readonly struct NormalSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalDestIn(background, source, amount); + => PorterDuffFunctions.NormalSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalDestIn(background, source, amount); + => PorterDuffFunctions.NormalSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalDestIn(background, source, amount); + => PorterDuffFunctions.NormalSrcOut(background, source, amount); } /// - /// Applies the "MultiplyDestIn" straight-alpha composition equation. + /// Applies the "MultiplySrcOut" straight-alpha composition equation. /// - public readonly struct MultiplyDestIn : IPixelBlenderOperator + public readonly struct MultiplySrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplyDestIn(background, source, amount); + => PorterDuffFunctions.MultiplySrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplyDestIn(background, source, amount); + => PorterDuffFunctions.MultiplySrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplyDestIn(background, source, amount); + => PorterDuffFunctions.MultiplySrcOut(background, source, amount); } /// - /// Applies the "AddDestIn" straight-alpha composition equation. + /// Applies the "AddSrcOut" straight-alpha composition equation. /// - public readonly struct AddDestIn : IPixelBlenderOperator + public readonly struct AddSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddDestIn(background, source, amount); + => PorterDuffFunctions.AddSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddDestIn(background, source, amount); + => PorterDuffFunctions.AddSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddDestIn(background, source, amount); + => PorterDuffFunctions.AddSrcOut(background, source, amount); } /// - /// Applies the "SubtractDestIn" straight-alpha composition equation. + /// Applies the "SubtractSrcOut" straight-alpha composition equation. /// - public readonly struct SubtractDestIn : IPixelBlenderOperator + public readonly struct SubtractSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractDestIn(background, source, amount); + => PorterDuffFunctions.SubtractSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractDestIn(background, source, amount); + => PorterDuffFunctions.SubtractSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractDestIn(background, source, amount); + => PorterDuffFunctions.SubtractSrcOut(background, source, amount); } /// - /// Applies the "ScreenDestIn" straight-alpha composition equation. + /// Applies the "ScreenSrcOut" straight-alpha composition equation. /// - public readonly struct ScreenDestIn : IPixelBlenderOperator + public readonly struct ScreenSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenDestIn(background, source, amount); + => PorterDuffFunctions.ScreenSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenDestIn(background, source, amount); + => PorterDuffFunctions.ScreenSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenDestIn(background, source, amount); + => PorterDuffFunctions.ScreenSrcOut(background, source, amount); } /// - /// Applies the "DarkenDestIn" straight-alpha composition equation. + /// Applies the "DarkenSrcOut" straight-alpha composition equation. /// - public readonly struct DarkenDestIn : IPixelBlenderOperator + public readonly struct DarkenSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenDestIn(background, source, amount); + => PorterDuffFunctions.DarkenSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenDestIn(background, source, amount); + => PorterDuffFunctions.DarkenSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenDestIn(background, source, amount); + => PorterDuffFunctions.DarkenSrcOut(background, source, amount); } /// - /// Applies the "LightenDestIn" straight-alpha composition equation. + /// Applies the "LightenSrcOut" straight-alpha composition equation. /// - public readonly struct LightenDestIn : IPixelBlenderOperator + public readonly struct LightenSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenDestIn(background, source, amount); + => PorterDuffFunctions.LightenSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenDestIn(background, source, amount); + => PorterDuffFunctions.LightenSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenDestIn(background, source, amount); + => PorterDuffFunctions.LightenSrcOut(background, source, amount); } /// - /// Applies the "OverlayDestIn" straight-alpha composition equation. + /// Applies the "OverlaySrcOut" straight-alpha composition equation. /// - public readonly struct OverlayDestIn : IPixelBlenderOperator + public readonly struct OverlaySrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlayDestIn(background, source, amount); + => PorterDuffFunctions.OverlaySrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlayDestIn(background, source, amount); + => PorterDuffFunctions.OverlaySrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlayDestIn(background, source, amount); + => PorterDuffFunctions.OverlaySrcOut(background, source, amount); } /// - /// Applies the "HardLightDestIn" straight-alpha composition equation. + /// Applies the "HardLightSrcOut" straight-alpha composition equation. /// - public readonly struct HardLightDestIn : IPixelBlenderOperator + public readonly struct HardLightSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightDestIn(background, source, amount); + => PorterDuffFunctions.HardLightSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightDestIn(background, source, amount); + => PorterDuffFunctions.HardLightSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightDestIn(background, source, amount); + => PorterDuffFunctions.HardLightSrcOut(background, source, amount); } /// - /// Applies the "NormalDestOut" straight-alpha composition equation. + /// Applies the "ColorDodgeSrcOut" straight-alpha composition equation. /// - public readonly struct NormalDestOut : IPixelBlenderOperator + public readonly struct ColorDodgeSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalDestOut(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalDestOut(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalDestOut(background, source, amount); + => PorterDuffFunctions.ColorDodgeSrcOut(background, source, amount); } /// - /// Applies the "MultiplyDestOut" straight-alpha composition equation. + /// Applies the "ColorBurnSrcOut" straight-alpha composition equation. /// - public readonly struct MultiplyDestOut : IPixelBlenderOperator + public readonly struct ColorBurnSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplyDestOut(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplyDestOut(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplyDestOut(background, source, amount); + => PorterDuffFunctions.ColorBurnSrcOut(background, source, amount); } /// - /// Applies the "AddDestOut" straight-alpha composition equation. + /// Applies the "SoftLightSrcOut" straight-alpha composition equation. /// - public readonly struct AddDestOut : IPixelBlenderOperator + public readonly struct SoftLightSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddDestOut(background, source, amount); + => PorterDuffFunctions.SoftLightSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddDestOut(background, source, amount); + => PorterDuffFunctions.SoftLightSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddDestOut(background, source, amount); + => PorterDuffFunctions.SoftLightSrcOut(background, source, amount); } /// - /// Applies the "SubtractDestOut" straight-alpha composition equation. + /// Applies the "DifferenceSrcOut" straight-alpha composition equation. /// - public readonly struct SubtractDestOut : IPixelBlenderOperator + public readonly struct DifferenceSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractDestOut(background, source, amount); + => PorterDuffFunctions.DifferenceSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractDestOut(background, source, amount); + => PorterDuffFunctions.DifferenceSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractDestOut(background, source, amount); + => PorterDuffFunctions.DifferenceSrcOut(background, source, amount); } /// - /// Applies the "ScreenDestOut" straight-alpha composition equation. + /// Applies the "ExclusionSrcOut" straight-alpha composition equation. /// - public readonly struct ScreenDestOut : IPixelBlenderOperator + public readonly struct ExclusionSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenDestOut(background, source, amount); + => PorterDuffFunctions.ExclusionSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenDestOut(background, source, amount); + => PorterDuffFunctions.ExclusionSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenDestOut(background, source, amount); + => PorterDuffFunctions.ExclusionSrcOut(background, source, amount); } /// - /// Applies the "DarkenDestOut" straight-alpha composition equation. + /// Applies the "HueSrcOut" straight-alpha composition equation. /// - public readonly struct DarkenDestOut : IPixelBlenderOperator + public readonly struct HueSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenDestOut(background, source, amount); + => PorterDuffFunctions.HueSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenDestOut(background, source, amount); + => PorterDuffFunctions.HueSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenDestOut(background, source, amount); + => PorterDuffFunctions.HueSrcOut(background, source, amount); } /// - /// Applies the "LightenDestOut" straight-alpha composition equation. + /// Applies the "SaturationSrcOut" straight-alpha composition equation. /// - public readonly struct LightenDestOut : IPixelBlenderOperator + public readonly struct SaturationSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenDestOut(background, source, amount); + => PorterDuffFunctions.SaturationSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenDestOut(background, source, amount); + => PorterDuffFunctions.SaturationSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenDestOut(background, source, amount); + => PorterDuffFunctions.SaturationSrcOut(background, source, amount); } /// - /// Applies the "OverlayDestOut" straight-alpha composition equation. + /// Applies the "ColorSrcOut" straight-alpha composition equation. /// - public readonly struct OverlayDestOut : IPixelBlenderOperator + public readonly struct ColorSrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlayDestOut(background, source, amount); + => PorterDuffFunctions.ColorSrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlayDestOut(background, source, amount); + => PorterDuffFunctions.ColorSrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlayDestOut(background, source, amount); + => PorterDuffFunctions.ColorSrcOut(background, source, amount); } /// - /// Applies the "HardLightDestOut" straight-alpha composition equation. + /// Applies the "LuminositySrcOut" straight-alpha composition equation. /// - public readonly struct HardLightDestOut : IPixelBlenderOperator + public readonly struct LuminositySrcOut : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightDestOut(background, source, amount); + => PorterDuffFunctions.LuminositySrcOut(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightDestOut(background, source, amount); + => PorterDuffFunctions.LuminositySrcOut(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightDestOut(background, source, amount); + => PorterDuffFunctions.LuminositySrcOut(background, source, amount); } /// - /// Applies the "NormalClear" straight-alpha composition equation. + /// Applies the "NormalDest" straight-alpha composition equation. /// - public readonly struct NormalClear : IPixelBlenderOperator + public readonly struct NormalDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalClear(background, source, amount); + => PorterDuffFunctions.NormalDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalClear(background, source, amount); + => PorterDuffFunctions.NormalDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalClear(background, source, amount); + => PorterDuffFunctions.NormalDest(background, source, amount); } /// - /// Applies the "MultiplyClear" straight-alpha composition equation. + /// Applies the "MultiplyDest" straight-alpha composition equation. /// - public readonly struct MultiplyClear : IPixelBlenderOperator + public readonly struct MultiplyDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplyClear(background, source, amount); + => PorterDuffFunctions.MultiplyDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplyClear(background, source, amount); + => PorterDuffFunctions.MultiplyDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplyClear(background, source, amount); + => PorterDuffFunctions.MultiplyDest(background, source, amount); } /// - /// Applies the "AddClear" straight-alpha composition equation. + /// Applies the "AddDest" straight-alpha composition equation. /// - public readonly struct AddClear : IPixelBlenderOperator + public readonly struct AddDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddClear(background, source, amount); + => PorterDuffFunctions.AddDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddClear(background, source, amount); + => PorterDuffFunctions.AddDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddClear(background, source, amount); + => PorterDuffFunctions.AddDest(background, source, amount); } /// - /// Applies the "SubtractClear" straight-alpha composition equation. + /// Applies the "SubtractDest" straight-alpha composition equation. /// - public readonly struct SubtractClear : IPixelBlenderOperator + public readonly struct SubtractDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractClear(background, source, amount); + => PorterDuffFunctions.SubtractDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractClear(background, source, amount); + => PorterDuffFunctions.SubtractDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractClear(background, source, amount); + => PorterDuffFunctions.SubtractDest(background, source, amount); } /// - /// Applies the "ScreenClear" straight-alpha composition equation. + /// Applies the "ScreenDest" straight-alpha composition equation. /// - public readonly struct ScreenClear : IPixelBlenderOperator + public readonly struct ScreenDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenClear(background, source, amount); + => PorterDuffFunctions.ScreenDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenClear(background, source, amount); + => PorterDuffFunctions.ScreenDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenClear(background, source, amount); + => PorterDuffFunctions.ScreenDest(background, source, amount); } /// - /// Applies the "DarkenClear" straight-alpha composition equation. + /// Applies the "DarkenDest" straight-alpha composition equation. /// - public readonly struct DarkenClear : IPixelBlenderOperator + public readonly struct DarkenDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenClear(background, source, amount); + => PorterDuffFunctions.DarkenDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenClear(background, source, amount); + => PorterDuffFunctions.DarkenDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenClear(background, source, amount); + => PorterDuffFunctions.DarkenDest(background, source, amount); } /// - /// Applies the "LightenClear" straight-alpha composition equation. + /// Applies the "LightenDest" straight-alpha composition equation. /// - public readonly struct LightenClear : IPixelBlenderOperator + public readonly struct LightenDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenClear(background, source, amount); + => PorterDuffFunctions.LightenDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenClear(background, source, amount); + => PorterDuffFunctions.LightenDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenClear(background, source, amount); + => PorterDuffFunctions.LightenDest(background, source, amount); } /// - /// Applies the "OverlayClear" straight-alpha composition equation. + /// Applies the "OverlayDest" straight-alpha composition equation. /// - public readonly struct OverlayClear : IPixelBlenderOperator + public readonly struct OverlayDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlayClear(background, source, amount); + => PorterDuffFunctions.OverlayDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlayClear(background, source, amount); + => PorterDuffFunctions.OverlayDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlayClear(background, source, amount); + => PorterDuffFunctions.OverlayDest(background, source, amount); } /// - /// Applies the "HardLightClear" straight-alpha composition equation. + /// Applies the "HardLightDest" straight-alpha composition equation. /// - public readonly struct HardLightClear : IPixelBlenderOperator + public readonly struct HardLightDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightClear(background, source, amount); + => PorterDuffFunctions.HardLightDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightClear(background, source, amount); + => PorterDuffFunctions.HardLightDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightClear(background, source, amount); + => PorterDuffFunctions.HardLightDest(background, source, amount); } /// - /// Applies the "NormalXor" straight-alpha composition equation. + /// Applies the "ColorDodgeDest" straight-alpha composition equation. /// - public readonly struct NormalXor : IPixelBlenderOperator + public readonly struct ColorDodgeDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.NormalXor(background, source, amount); + => PorterDuffFunctions.ColorDodgeDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.NormalXor(background, source, amount); + => PorterDuffFunctions.ColorDodgeDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.NormalXor(background, source, amount); + => PorterDuffFunctions.ColorDodgeDest(background, source, amount); } /// - /// Applies the "MultiplyXor" straight-alpha composition equation. + /// Applies the "ColorBurnDest" straight-alpha composition equation. /// - public readonly struct MultiplyXor : IPixelBlenderOperator + public readonly struct ColorBurnDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.MultiplyXor(background, source, amount); + => PorterDuffFunctions.ColorBurnDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.MultiplyXor(background, source, amount); + => PorterDuffFunctions.ColorBurnDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.MultiplyXor(background, source, amount); + => PorterDuffFunctions.ColorBurnDest(background, source, amount); } /// - /// Applies the "AddXor" straight-alpha composition equation. + /// Applies the "SoftLightDest" straight-alpha composition equation. /// - public readonly struct AddXor : IPixelBlenderOperator + public readonly struct SoftLightDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.AddXor(background, source, amount); + => PorterDuffFunctions.SoftLightDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.AddXor(background, source, amount); + => PorterDuffFunctions.SoftLightDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.AddXor(background, source, amount); + => PorterDuffFunctions.SoftLightDest(background, source, amount); } /// - /// Applies the "SubtractXor" straight-alpha composition equation. + /// Applies the "DifferenceDest" straight-alpha composition equation. /// - public readonly struct SubtractXor : IPixelBlenderOperator + public readonly struct DifferenceDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.SubtractXor(background, source, amount); + => PorterDuffFunctions.DifferenceDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.SubtractXor(background, source, amount); + => PorterDuffFunctions.DifferenceDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.SubtractXor(background, source, amount); + => PorterDuffFunctions.DifferenceDest(background, source, amount); } /// - /// Applies the "ScreenXor" straight-alpha composition equation. + /// Applies the "ExclusionDest" straight-alpha composition equation. /// - public readonly struct ScreenXor : IPixelBlenderOperator + public readonly struct ExclusionDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.ScreenXor(background, source, amount); + => PorterDuffFunctions.ExclusionDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.ScreenXor(background, source, amount); + => PorterDuffFunctions.ExclusionDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.ScreenXor(background, source, amount); + => PorterDuffFunctions.ExclusionDest(background, source, amount); } /// - /// Applies the "DarkenXor" straight-alpha composition equation. + /// Applies the "HueDest" straight-alpha composition equation. /// - public readonly struct DarkenXor : IPixelBlenderOperator + public readonly struct HueDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.DarkenXor(background, source, amount); + => PorterDuffFunctions.HueDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.DarkenXor(background, source, amount); + => PorterDuffFunctions.HueDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.DarkenXor(background, source, amount); + => PorterDuffFunctions.HueDest(background, source, amount); } /// - /// Applies the "LightenXor" straight-alpha composition equation. + /// Applies the "SaturationDest" straight-alpha composition equation. /// - public readonly struct LightenXor : IPixelBlenderOperator + public readonly struct SaturationDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.LightenXor(background, source, amount); + => PorterDuffFunctions.SaturationDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.LightenXor(background, source, amount); + => PorterDuffFunctions.SaturationDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.LightenXor(background, source, amount); + => PorterDuffFunctions.SaturationDest(background, source, amount); } /// - /// Applies the "OverlayXor" straight-alpha composition equation. + /// Applies the "ColorDest" straight-alpha composition equation. /// - public readonly struct OverlayXor : IPixelBlenderOperator + public readonly struct ColorDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.OverlayXor(background, source, amount); + => PorterDuffFunctions.ColorDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.OverlayXor(background, source, amount); + => PorterDuffFunctions.ColorDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.OverlayXor(background, source, amount); + => PorterDuffFunctions.ColorDest(background, source, amount); } /// - /// Applies the "HardLightXor" straight-alpha composition equation. + /// Applies the "LuminosityDest" straight-alpha composition equation. /// - public readonly struct HardLightXor : IPixelBlenderOperator + public readonly struct LuminosityDest : IPixelBlenderOperator { /// public static bool IsAssociatedAlpha => false; /// public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) - => PorterDuffFunctions.HardLightXor(background, source, amount); + => PorterDuffFunctions.LuminosityDest(background, source, amount); /// public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) - => PorterDuffFunctions.HardLightXor(background, source, amount); + => PorterDuffFunctions.LuminosityDest(background, source, amount); /// public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) - => PorterDuffFunctions.HardLightXor(background, source, amount); + => PorterDuffFunctions.LuminosityDest(background, source, amount); } -} - -/// -/// Provides straight-alpha pixel blenders for each color and alpha composition pair. -/// -/// The destination pixel format. -internal static class DefaultPixelBlenders - where TPixel : unmanaged, IPixel -{ /// - /// Gets the shared blender for the "NormalSrc" composition equation. + /// Applies the "NormalDestAtop" straight-alpha composition equation. /// - public static PixelBlender NormalSrc => PixelBlender.Instance; + public readonly struct NormalDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; - /// - /// Gets the shared blender for the "MultiplySrc" composition equation. - /// - public static PixelBlender MultiplySrc => PixelBlender.Instance; + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.NormalDestAtop(background, source, amount); - /// - /// Gets the shared blender for the "AddSrc" composition equation. - /// - public static PixelBlender AddSrc => PixelBlender.Instance; + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.NormalDestAtop(background, source, amount); - /// - /// Gets the shared blender for the "SubtractSrc" composition equation. - /// - public static PixelBlender SubtractSrc => PixelBlender.Instance; + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.NormalDestAtop(background, source, amount); + } /// - /// Gets the shared blender for the "ScreenSrc" composition equation. + /// Applies the "MultiplyDestAtop" straight-alpha composition equation. /// - public static PixelBlender ScreenSrc => PixelBlender.Instance; + public readonly struct MultiplyDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; - /// - /// Gets the shared blender for the "DarkenSrc" composition equation. - /// + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.MultiplyDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.MultiplyDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.MultiplyDestAtop(background, source, amount); + } + + /// + /// Applies the "AddDestAtop" straight-alpha composition equation. + /// + public readonly struct AddDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.AddDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.AddDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.AddDestAtop(background, source, amount); + } + + /// + /// Applies the "SubtractDestAtop" straight-alpha composition equation. + /// + public readonly struct SubtractDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SubtractDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SubtractDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SubtractDestAtop(background, source, amount); + } + + /// + /// Applies the "ScreenDestAtop" straight-alpha composition equation. + /// + public readonly struct ScreenDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ScreenDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ScreenDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ScreenDestAtop(background, source, amount); + } + + /// + /// Applies the "DarkenDestAtop" straight-alpha composition equation. + /// + public readonly struct DarkenDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DarkenDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DarkenDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DarkenDestAtop(background, source, amount); + } + + /// + /// Applies the "LightenDestAtop" straight-alpha composition equation. + /// + public readonly struct LightenDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LightenDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LightenDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LightenDestAtop(background, source, amount); + } + + /// + /// Applies the "OverlayDestAtop" straight-alpha composition equation. + /// + public readonly struct OverlayDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.OverlayDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.OverlayDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.OverlayDestAtop(background, source, amount); + } + + /// + /// Applies the "HardLightDestAtop" straight-alpha composition equation. + /// + public readonly struct HardLightDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HardLightDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HardLightDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HardLightDestAtop(background, source, amount); + } + + /// + /// Applies the "ColorDodgeDestAtop" straight-alpha composition equation. + /// + public readonly struct ColorDodgeDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDodgeDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDodgeDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDodgeDestAtop(background, source, amount); + } + + /// + /// Applies the "ColorBurnDestAtop" straight-alpha composition equation. + /// + public readonly struct ColorBurnDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorBurnDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorBurnDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorBurnDestAtop(background, source, amount); + } + + /// + /// Applies the "SoftLightDestAtop" straight-alpha composition equation. + /// + public readonly struct SoftLightDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SoftLightDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SoftLightDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SoftLightDestAtop(background, source, amount); + } + + /// + /// Applies the "DifferenceDestAtop" straight-alpha composition equation. + /// + public readonly struct DifferenceDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DifferenceDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DifferenceDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DifferenceDestAtop(background, source, amount); + } + + /// + /// Applies the "ExclusionDestAtop" straight-alpha composition equation. + /// + public readonly struct ExclusionDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ExclusionDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ExclusionDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ExclusionDestAtop(background, source, amount); + } + + /// + /// Applies the "HueDestAtop" straight-alpha composition equation. + /// + public readonly struct HueDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HueDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HueDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HueDestAtop(background, source, amount); + } + + /// + /// Applies the "SaturationDestAtop" straight-alpha composition equation. + /// + public readonly struct SaturationDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SaturationDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SaturationDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SaturationDestAtop(background, source, amount); + } + + /// + /// Applies the "ColorDestAtop" straight-alpha composition equation. + /// + public readonly struct ColorDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDestAtop(background, source, amount); + } + + /// + /// Applies the "LuminosityDestAtop" straight-alpha composition equation. + /// + public readonly struct LuminosityDestAtop : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LuminosityDestAtop(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LuminosityDestAtop(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LuminosityDestAtop(background, source, amount); + } + + /// + /// Applies the "NormalDestOver" straight-alpha composition equation. + /// + public readonly struct NormalDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.NormalDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.NormalDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.NormalDestOver(background, source, amount); + } + + /// + /// Applies the "MultiplyDestOver" straight-alpha composition equation. + /// + public readonly struct MultiplyDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.MultiplyDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.MultiplyDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.MultiplyDestOver(background, source, amount); + } + + /// + /// Applies the "AddDestOver" straight-alpha composition equation. + /// + public readonly struct AddDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.AddDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.AddDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.AddDestOver(background, source, amount); + } + + /// + /// Applies the "SubtractDestOver" straight-alpha composition equation. + /// + public readonly struct SubtractDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SubtractDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SubtractDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SubtractDestOver(background, source, amount); + } + + /// + /// Applies the "ScreenDestOver" straight-alpha composition equation. + /// + public readonly struct ScreenDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ScreenDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ScreenDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ScreenDestOver(background, source, amount); + } + + /// + /// Applies the "DarkenDestOver" straight-alpha composition equation. + /// + public readonly struct DarkenDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DarkenDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DarkenDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DarkenDestOver(background, source, amount); + } + + /// + /// Applies the "LightenDestOver" straight-alpha composition equation. + /// + public readonly struct LightenDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LightenDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LightenDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LightenDestOver(background, source, amount); + } + + /// + /// Applies the "OverlayDestOver" straight-alpha composition equation. + /// + public readonly struct OverlayDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.OverlayDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.OverlayDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.OverlayDestOver(background, source, amount); + } + + /// + /// Applies the "HardLightDestOver" straight-alpha composition equation. + /// + public readonly struct HardLightDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HardLightDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HardLightDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HardLightDestOver(background, source, amount); + } + + /// + /// Applies the "ColorDodgeDestOver" straight-alpha composition equation. + /// + public readonly struct ColorDodgeDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDodgeDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDodgeDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDodgeDestOver(background, source, amount); + } + + /// + /// Applies the "ColorBurnDestOver" straight-alpha composition equation. + /// + public readonly struct ColorBurnDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorBurnDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorBurnDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorBurnDestOver(background, source, amount); + } + + /// + /// Applies the "SoftLightDestOver" straight-alpha composition equation. + /// + public readonly struct SoftLightDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SoftLightDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SoftLightDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SoftLightDestOver(background, source, amount); + } + + /// + /// Applies the "DifferenceDestOver" straight-alpha composition equation. + /// + public readonly struct DifferenceDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DifferenceDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DifferenceDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DifferenceDestOver(background, source, amount); + } + + /// + /// Applies the "ExclusionDestOver" straight-alpha composition equation. + /// + public readonly struct ExclusionDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ExclusionDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ExclusionDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ExclusionDestOver(background, source, amount); + } + + /// + /// Applies the "HueDestOver" straight-alpha composition equation. + /// + public readonly struct HueDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HueDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HueDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HueDestOver(background, source, amount); + } + + /// + /// Applies the "SaturationDestOver" straight-alpha composition equation. + /// + public readonly struct SaturationDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SaturationDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SaturationDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SaturationDestOver(background, source, amount); + } + + /// + /// Applies the "ColorDestOver" straight-alpha composition equation. + /// + public readonly struct ColorDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDestOver(background, source, amount); + } + + /// + /// Applies the "LuminosityDestOver" straight-alpha composition equation. + /// + public readonly struct LuminosityDestOver : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LuminosityDestOver(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LuminosityDestOver(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LuminosityDestOver(background, source, amount); + } + + /// + /// Applies the "NormalDestIn" straight-alpha composition equation. + /// + public readonly struct NormalDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.NormalDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.NormalDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.NormalDestIn(background, source, amount); + } + + /// + /// Applies the "MultiplyDestIn" straight-alpha composition equation. + /// + public readonly struct MultiplyDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.MultiplyDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.MultiplyDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.MultiplyDestIn(background, source, amount); + } + + /// + /// Applies the "AddDestIn" straight-alpha composition equation. + /// + public readonly struct AddDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.AddDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.AddDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.AddDestIn(background, source, amount); + } + + /// + /// Applies the "SubtractDestIn" straight-alpha composition equation. + /// + public readonly struct SubtractDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SubtractDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SubtractDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SubtractDestIn(background, source, amount); + } + + /// + /// Applies the "ScreenDestIn" straight-alpha composition equation. + /// + public readonly struct ScreenDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ScreenDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ScreenDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ScreenDestIn(background, source, amount); + } + + /// + /// Applies the "DarkenDestIn" straight-alpha composition equation. + /// + public readonly struct DarkenDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DarkenDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DarkenDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DarkenDestIn(background, source, amount); + } + + /// + /// Applies the "LightenDestIn" straight-alpha composition equation. + /// + public readonly struct LightenDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LightenDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LightenDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LightenDestIn(background, source, amount); + } + + /// + /// Applies the "OverlayDestIn" straight-alpha composition equation. + /// + public readonly struct OverlayDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.OverlayDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.OverlayDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.OverlayDestIn(background, source, amount); + } + + /// + /// Applies the "HardLightDestIn" straight-alpha composition equation. + /// + public readonly struct HardLightDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HardLightDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HardLightDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HardLightDestIn(background, source, amount); + } + + /// + /// Applies the "ColorDodgeDestIn" straight-alpha composition equation. + /// + public readonly struct ColorDodgeDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDodgeDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDodgeDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDodgeDestIn(background, source, amount); + } + + /// + /// Applies the "ColorBurnDestIn" straight-alpha composition equation. + /// + public readonly struct ColorBurnDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorBurnDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorBurnDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorBurnDestIn(background, source, amount); + } + + /// + /// Applies the "SoftLightDestIn" straight-alpha composition equation. + /// + public readonly struct SoftLightDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SoftLightDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SoftLightDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SoftLightDestIn(background, source, amount); + } + + /// + /// Applies the "DifferenceDestIn" straight-alpha composition equation. + /// + public readonly struct DifferenceDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DifferenceDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DifferenceDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DifferenceDestIn(background, source, amount); + } + + /// + /// Applies the "ExclusionDestIn" straight-alpha composition equation. + /// + public readonly struct ExclusionDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ExclusionDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ExclusionDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ExclusionDestIn(background, source, amount); + } + + /// + /// Applies the "HueDestIn" straight-alpha composition equation. + /// + public readonly struct HueDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HueDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HueDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HueDestIn(background, source, amount); + } + + /// + /// Applies the "SaturationDestIn" straight-alpha composition equation. + /// + public readonly struct SaturationDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SaturationDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SaturationDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SaturationDestIn(background, source, amount); + } + + /// + /// Applies the "ColorDestIn" straight-alpha composition equation. + /// + public readonly struct ColorDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDestIn(background, source, amount); + } + + /// + /// Applies the "LuminosityDestIn" straight-alpha composition equation. + /// + public readonly struct LuminosityDestIn : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LuminosityDestIn(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LuminosityDestIn(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LuminosityDestIn(background, source, amount); + } + + /// + /// Applies the "NormalDestOut" straight-alpha composition equation. + /// + public readonly struct NormalDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.NormalDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.NormalDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.NormalDestOut(background, source, amount); + } + + /// + /// Applies the "MultiplyDestOut" straight-alpha composition equation. + /// + public readonly struct MultiplyDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.MultiplyDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.MultiplyDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.MultiplyDestOut(background, source, amount); + } + + /// + /// Applies the "AddDestOut" straight-alpha composition equation. + /// + public readonly struct AddDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.AddDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.AddDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.AddDestOut(background, source, amount); + } + + /// + /// Applies the "SubtractDestOut" straight-alpha composition equation. + /// + public readonly struct SubtractDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SubtractDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SubtractDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SubtractDestOut(background, source, amount); + } + + /// + /// Applies the "ScreenDestOut" straight-alpha composition equation. + /// + public readonly struct ScreenDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ScreenDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ScreenDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ScreenDestOut(background, source, amount); + } + + /// + /// Applies the "DarkenDestOut" straight-alpha composition equation. + /// + public readonly struct DarkenDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DarkenDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DarkenDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DarkenDestOut(background, source, amount); + } + + /// + /// Applies the "LightenDestOut" straight-alpha composition equation. + /// + public readonly struct LightenDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LightenDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LightenDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LightenDestOut(background, source, amount); + } + + /// + /// Applies the "OverlayDestOut" straight-alpha composition equation. + /// + public readonly struct OverlayDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.OverlayDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.OverlayDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.OverlayDestOut(background, source, amount); + } + + /// + /// Applies the "HardLightDestOut" straight-alpha composition equation. + /// + public readonly struct HardLightDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HardLightDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HardLightDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HardLightDestOut(background, source, amount); + } + + /// + /// Applies the "ColorDodgeDestOut" straight-alpha composition equation. + /// + public readonly struct ColorDodgeDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDodgeDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDodgeDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDodgeDestOut(background, source, amount); + } + + /// + /// Applies the "ColorBurnDestOut" straight-alpha composition equation. + /// + public readonly struct ColorBurnDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorBurnDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorBurnDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorBurnDestOut(background, source, amount); + } + + /// + /// Applies the "SoftLightDestOut" straight-alpha composition equation. + /// + public readonly struct SoftLightDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SoftLightDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SoftLightDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SoftLightDestOut(background, source, amount); + } + + /// + /// Applies the "DifferenceDestOut" straight-alpha composition equation. + /// + public readonly struct DifferenceDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DifferenceDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DifferenceDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DifferenceDestOut(background, source, amount); + } + + /// + /// Applies the "ExclusionDestOut" straight-alpha composition equation. + /// + public readonly struct ExclusionDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ExclusionDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ExclusionDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ExclusionDestOut(background, source, amount); + } + + /// + /// Applies the "HueDestOut" straight-alpha composition equation. + /// + public readonly struct HueDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HueDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HueDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HueDestOut(background, source, amount); + } + + /// + /// Applies the "SaturationDestOut" straight-alpha composition equation. + /// + public readonly struct SaturationDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SaturationDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SaturationDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SaturationDestOut(background, source, amount); + } + + /// + /// Applies the "ColorDestOut" straight-alpha composition equation. + /// + public readonly struct ColorDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDestOut(background, source, amount); + } + + /// + /// Applies the "LuminosityDestOut" straight-alpha composition equation. + /// + public readonly struct LuminosityDestOut : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LuminosityDestOut(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LuminosityDestOut(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LuminosityDestOut(background, source, amount); + } + + /// + /// Applies the "NormalClear" straight-alpha composition equation. + /// + public readonly struct NormalClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.NormalClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.NormalClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.NormalClear(background, source, amount); + } + + /// + /// Applies the "MultiplyClear" straight-alpha composition equation. + /// + public readonly struct MultiplyClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.MultiplyClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.MultiplyClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.MultiplyClear(background, source, amount); + } + + /// + /// Applies the "AddClear" straight-alpha composition equation. + /// + public readonly struct AddClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.AddClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.AddClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.AddClear(background, source, amount); + } + + /// + /// Applies the "SubtractClear" straight-alpha composition equation. + /// + public readonly struct SubtractClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SubtractClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SubtractClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SubtractClear(background, source, amount); + } + + /// + /// Applies the "ScreenClear" straight-alpha composition equation. + /// + public readonly struct ScreenClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ScreenClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ScreenClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ScreenClear(background, source, amount); + } + + /// + /// Applies the "DarkenClear" straight-alpha composition equation. + /// + public readonly struct DarkenClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DarkenClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DarkenClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DarkenClear(background, source, amount); + } + + /// + /// Applies the "LightenClear" straight-alpha composition equation. + /// + public readonly struct LightenClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LightenClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LightenClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LightenClear(background, source, amount); + } + + /// + /// Applies the "OverlayClear" straight-alpha composition equation. + /// + public readonly struct OverlayClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.OverlayClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.OverlayClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.OverlayClear(background, source, amount); + } + + /// + /// Applies the "HardLightClear" straight-alpha composition equation. + /// + public readonly struct HardLightClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HardLightClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HardLightClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HardLightClear(background, source, amount); + } + + /// + /// Applies the "ColorDodgeClear" straight-alpha composition equation. + /// + public readonly struct ColorDodgeClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDodgeClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDodgeClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDodgeClear(background, source, amount); + } + + /// + /// Applies the "ColorBurnClear" straight-alpha composition equation. + /// + public readonly struct ColorBurnClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorBurnClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorBurnClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorBurnClear(background, source, amount); + } + + /// + /// Applies the "SoftLightClear" straight-alpha composition equation. + /// + public readonly struct SoftLightClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SoftLightClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SoftLightClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SoftLightClear(background, source, amount); + } + + /// + /// Applies the "DifferenceClear" straight-alpha composition equation. + /// + public readonly struct DifferenceClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DifferenceClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DifferenceClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DifferenceClear(background, source, amount); + } + + /// + /// Applies the "ExclusionClear" straight-alpha composition equation. + /// + public readonly struct ExclusionClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ExclusionClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ExclusionClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ExclusionClear(background, source, amount); + } + + /// + /// Applies the "HueClear" straight-alpha composition equation. + /// + public readonly struct HueClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HueClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HueClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HueClear(background, source, amount); + } + + /// + /// Applies the "SaturationClear" straight-alpha composition equation. + /// + public readonly struct SaturationClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SaturationClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SaturationClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SaturationClear(background, source, amount); + } + + /// + /// Applies the "ColorClear" straight-alpha composition equation. + /// + public readonly struct ColorClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorClear(background, source, amount); + } + + /// + /// Applies the "LuminosityClear" straight-alpha composition equation. + /// + public readonly struct LuminosityClear : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LuminosityClear(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LuminosityClear(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LuminosityClear(background, source, amount); + } + + /// + /// Applies the "NormalXor" straight-alpha composition equation. + /// + public readonly struct NormalXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.NormalXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.NormalXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.NormalXor(background, source, amount); + } + + /// + /// Applies the "MultiplyXor" straight-alpha composition equation. + /// + public readonly struct MultiplyXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.MultiplyXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.MultiplyXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.MultiplyXor(background, source, amount); + } + + /// + /// Applies the "AddXor" straight-alpha composition equation. + /// + public readonly struct AddXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.AddXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.AddXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.AddXor(background, source, amount); + } + + /// + /// Applies the "SubtractXor" straight-alpha composition equation. + /// + public readonly struct SubtractXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SubtractXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SubtractXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SubtractXor(background, source, amount); + } + + /// + /// Applies the "ScreenXor" straight-alpha composition equation. + /// + public readonly struct ScreenXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ScreenXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ScreenXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ScreenXor(background, source, amount); + } + + /// + /// Applies the "DarkenXor" straight-alpha composition equation. + /// + public readonly struct DarkenXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DarkenXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DarkenXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DarkenXor(background, source, amount); + } + + /// + /// Applies the "LightenXor" straight-alpha composition equation. + /// + public readonly struct LightenXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LightenXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LightenXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LightenXor(background, source, amount); + } + + /// + /// Applies the "OverlayXor" straight-alpha composition equation. + /// + public readonly struct OverlayXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.OverlayXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.OverlayXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.OverlayXor(background, source, amount); + } + + /// + /// Applies the "HardLightXor" straight-alpha composition equation. + /// + public readonly struct HardLightXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HardLightXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HardLightXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HardLightXor(background, source, amount); + } + + /// + /// Applies the "ColorDodgeXor" straight-alpha composition equation. + /// + public readonly struct ColorDodgeXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDodgeXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDodgeXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDodgeXor(background, source, amount); + } + + /// + /// Applies the "ColorBurnXor" straight-alpha composition equation. + /// + public readonly struct ColorBurnXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorBurnXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorBurnXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorBurnXor(background, source, amount); + } + + /// + /// Applies the "SoftLightXor" straight-alpha composition equation. + /// + public readonly struct SoftLightXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SoftLightXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SoftLightXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SoftLightXor(background, source, amount); + } + + /// + /// Applies the "DifferenceXor" straight-alpha composition equation. + /// + public readonly struct DifferenceXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DifferenceXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DifferenceXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DifferenceXor(background, source, amount); + } + + /// + /// Applies the "ExclusionXor" straight-alpha composition equation. + /// + public readonly struct ExclusionXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ExclusionXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ExclusionXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ExclusionXor(background, source, amount); + } + + /// + /// Applies the "HueXor" straight-alpha composition equation. + /// + public readonly struct HueXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HueXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HueXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HueXor(background, source, amount); + } + + /// + /// Applies the "SaturationXor" straight-alpha composition equation. + /// + public readonly struct SaturationXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SaturationXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SaturationXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SaturationXor(background, source, amount); + } + + /// + /// Applies the "ColorXor" straight-alpha composition equation. + /// + public readonly struct ColorXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorXor(background, source, amount); + } + + /// + /// Applies the "LuminosityXor" straight-alpha composition equation. + /// + public readonly struct LuminosityXor : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LuminosityXor(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LuminosityXor(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LuminosityXor(background, source, amount); + } + + /// + /// Applies the "NormalPlus" straight-alpha composition equation. + /// + public readonly struct NormalPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.NormalPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.NormalPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.NormalPlus(background, source, amount); + } + + /// + /// Applies the "MultiplyPlus" straight-alpha composition equation. + /// + public readonly struct MultiplyPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.MultiplyPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.MultiplyPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.MultiplyPlus(background, source, amount); + } + + /// + /// Applies the "AddPlus" straight-alpha composition equation. + /// + public readonly struct AddPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.AddPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.AddPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.AddPlus(background, source, amount); + } + + /// + /// Applies the "SubtractPlus" straight-alpha composition equation. + /// + public readonly struct SubtractPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SubtractPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SubtractPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SubtractPlus(background, source, amount); + } + + /// + /// Applies the "ScreenPlus" straight-alpha composition equation. + /// + public readonly struct ScreenPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ScreenPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ScreenPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ScreenPlus(background, source, amount); + } + + /// + /// Applies the "DarkenPlus" straight-alpha composition equation. + /// + public readonly struct DarkenPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DarkenPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DarkenPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DarkenPlus(background, source, amount); + } + + /// + /// Applies the "LightenPlus" straight-alpha composition equation. + /// + public readonly struct LightenPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LightenPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LightenPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LightenPlus(background, source, amount); + } + + /// + /// Applies the "OverlayPlus" straight-alpha composition equation. + /// + public readonly struct OverlayPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.OverlayPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.OverlayPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.OverlayPlus(background, source, amount); + } + + /// + /// Applies the "HardLightPlus" straight-alpha composition equation. + /// + public readonly struct HardLightPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HardLightPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HardLightPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HardLightPlus(background, source, amount); + } + + /// + /// Applies the "ColorDodgePlus" straight-alpha composition equation. + /// + public readonly struct ColorDodgePlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorDodgePlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorDodgePlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorDodgePlus(background, source, amount); + } + + /// + /// Applies the "ColorBurnPlus" straight-alpha composition equation. + /// + public readonly struct ColorBurnPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorBurnPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorBurnPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorBurnPlus(background, source, amount); + } + + /// + /// Applies the "SoftLightPlus" straight-alpha composition equation. + /// + public readonly struct SoftLightPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SoftLightPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SoftLightPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SoftLightPlus(background, source, amount); + } + + /// + /// Applies the "DifferencePlus" straight-alpha composition equation. + /// + public readonly struct DifferencePlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.DifferencePlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.DifferencePlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.DifferencePlus(background, source, amount); + } + + /// + /// Applies the "ExclusionPlus" straight-alpha composition equation. + /// + public readonly struct ExclusionPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ExclusionPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ExclusionPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ExclusionPlus(background, source, amount); + } + + /// + /// Applies the "HuePlus" straight-alpha composition equation. + /// + public readonly struct HuePlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.HuePlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.HuePlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.HuePlus(background, source, amount); + } + + /// + /// Applies the "SaturationPlus" straight-alpha composition equation. + /// + public readonly struct SaturationPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.SaturationPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.SaturationPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.SaturationPlus(background, source, amount); + } + + /// + /// Applies the "ColorPlus" straight-alpha composition equation. + /// + public readonly struct ColorPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.ColorPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.ColorPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.ColorPlus(background, source, amount); + } + + /// + /// Applies the "LuminosityPlus" straight-alpha composition equation. + /// + public readonly struct LuminosityPlus : IPixelBlenderOperator + { + /// + public static bool IsAssociatedAlpha => false; + + /// + public static Vector4 Invoke(Vector4 background, Vector4 source, float amount) + => PorterDuffFunctions.LuminosityPlus(background, source, amount); + + /// + public static Vector256 Invoke(Vector256 background, Vector256 source, Vector256 amount) + => PorterDuffFunctions.LuminosityPlus(background, source, amount); + + /// + public static Vector512 Invoke(Vector512 background, Vector512 source, Vector512 amount) + => PorterDuffFunctions.LuminosityPlus(background, source, amount); + } + +} + +/// +/// Provides straight-alpha pixel blenders for each color and alpha composition pair. +/// +/// The destination pixel format. +internal static class DefaultPixelBlenders + where TPixel : unmanaged, IPixel +{ + /// + /// Gets the shared blender for the "NormalSrc" composition equation. + /// + public static PixelBlender NormalSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "MultiplySrc" composition equation. + /// + public static PixelBlender MultiplySrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "AddSrc" composition equation. + /// + public static PixelBlender AddSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SubtractSrc" composition equation. + /// + public static PixelBlender SubtractSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ScreenSrc" composition equation. + /// + public static PixelBlender ScreenSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DarkenSrc" composition equation. + /// public static PixelBlender DarkenSrc => PixelBlender.Instance; /// @@ -2334,6 +4980,51 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightSrc => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeSrc" composition equation. + /// + public static PixelBlender ColorDodgeSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnSrc" composition equation. + /// + public static PixelBlender ColorBurnSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightSrc" composition equation. + /// + public static PixelBlender SoftLightSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceSrc" composition equation. + /// + public static PixelBlender DifferenceSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionSrc" composition equation. + /// + public static PixelBlender ExclusionSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueSrc" composition equation. + /// + public static PixelBlender HueSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationSrc" composition equation. + /// + public static PixelBlender SaturationSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorSrc" composition equation. + /// + public static PixelBlender ColorSrc => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminositySrc" composition equation. + /// + public static PixelBlender LuminositySrc => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalSrcAtop" composition equation. /// @@ -2379,6 +5070,51 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightSrcAtop => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeSrcAtop" composition equation. + /// + public static PixelBlender ColorDodgeSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnSrcAtop" composition equation. + /// + public static PixelBlender ColorBurnSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightSrcAtop" composition equation. + /// + public static PixelBlender SoftLightSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceSrcAtop" composition equation. + /// + public static PixelBlender DifferenceSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionSrcAtop" composition equation. + /// + public static PixelBlender ExclusionSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueSrcAtop" composition equation. + /// + public static PixelBlender HueSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationSrcAtop" composition equation. + /// + public static PixelBlender SaturationSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorSrcAtop" composition equation. + /// + public static PixelBlender ColorSrcAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminositySrcAtop" composition equation. + /// + public static PixelBlender LuminositySrcAtop => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalSrcOver" composition equation. /// @@ -2424,6 +5160,51 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightSrcOver => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeSrcOver" composition equation. + /// + public static PixelBlender ColorDodgeSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnSrcOver" composition equation. + /// + public static PixelBlender ColorBurnSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightSrcOver" composition equation. + /// + public static PixelBlender SoftLightSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceSrcOver" composition equation. + /// + public static PixelBlender DifferenceSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionSrcOver" composition equation. + /// + public static PixelBlender ExclusionSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueSrcOver" composition equation. + /// + public static PixelBlender HueSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationSrcOver" composition equation. + /// + public static PixelBlender SaturationSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorSrcOver" composition equation. + /// + public static PixelBlender ColorSrcOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminositySrcOver" composition equation. + /// + public static PixelBlender LuminositySrcOver => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalSrcIn" composition equation. /// @@ -2469,6 +5250,51 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightSrcIn => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeSrcIn" composition equation. + /// + public static PixelBlender ColorDodgeSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnSrcIn" composition equation. + /// + public static PixelBlender ColorBurnSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightSrcIn" composition equation. + /// + public static PixelBlender SoftLightSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceSrcIn" composition equation. + /// + public static PixelBlender DifferenceSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionSrcIn" composition equation. + /// + public static PixelBlender ExclusionSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueSrcIn" composition equation. + /// + public static PixelBlender HueSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationSrcIn" composition equation. + /// + public static PixelBlender SaturationSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorSrcIn" composition equation. + /// + public static PixelBlender ColorSrcIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminositySrcIn" composition equation. + /// + public static PixelBlender LuminositySrcIn => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalSrcOut" composition equation. /// @@ -2482,37 +5308,82 @@ internal static class DefaultPixelBlenders /// /// Gets the shared blender for the "AddSrcOut" composition equation. /// - public static PixelBlender AddSrcOut => PixelBlender.Instance; + public static PixelBlender AddSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SubtractSrcOut" composition equation. + /// + public static PixelBlender SubtractSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ScreenSrcOut" composition equation. + /// + public static PixelBlender ScreenSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DarkenSrcOut" composition equation. + /// + public static PixelBlender DarkenSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LightenSrcOut" composition equation. + /// + public static PixelBlender LightenSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "OverlaySrcOut" composition equation. + /// + public static PixelBlender OverlaySrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HardLightSrcOut" composition equation. + /// + public static PixelBlender HardLightSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDodgeSrcOut" composition equation. + /// + public static PixelBlender ColorDodgeSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnSrcOut" composition equation. + /// + public static PixelBlender ColorBurnSrcOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightSrcOut" composition equation. + /// + public static PixelBlender SoftLightSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "SubtractSrcOut" composition equation. + /// Gets the shared blender for the "DifferenceSrcOut" composition equation. /// - public static PixelBlender SubtractSrcOut => PixelBlender.Instance; + public static PixelBlender DifferenceSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "ScreenSrcOut" composition equation. + /// Gets the shared blender for the "ExclusionSrcOut" composition equation. /// - public static PixelBlender ScreenSrcOut => PixelBlender.Instance; + public static PixelBlender ExclusionSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "DarkenSrcOut" composition equation. + /// Gets the shared blender for the "HueSrcOut" composition equation. /// - public static PixelBlender DarkenSrcOut => PixelBlender.Instance; + public static PixelBlender HueSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "LightenSrcOut" composition equation. + /// Gets the shared blender for the "SaturationSrcOut" composition equation. /// - public static PixelBlender LightenSrcOut => PixelBlender.Instance; + public static PixelBlender SaturationSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "OverlaySrcOut" composition equation. + /// Gets the shared blender for the "ColorSrcOut" composition equation. /// - public static PixelBlender OverlaySrcOut => PixelBlender.Instance; + public static PixelBlender ColorSrcOut => PixelBlender.Instance; /// - /// Gets the shared blender for the "HardLightSrcOut" composition equation. + /// Gets the shared blender for the "LuminositySrcOut" composition equation. /// - public static PixelBlender HardLightSrcOut => PixelBlender.Instance; + public static PixelBlender LuminositySrcOut => PixelBlender.Instance; /// /// Gets the shared blender for the "NormalDest" composition equation. @@ -2559,6 +5430,51 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightDest => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeDest" composition equation. + /// + public static PixelBlender ColorDodgeDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnDest" composition equation. + /// + public static PixelBlender ColorBurnDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightDest" composition equation. + /// + public static PixelBlender SoftLightDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceDest" composition equation. + /// + public static PixelBlender DifferenceDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionDest" composition equation. + /// + public static PixelBlender ExclusionDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueDest" composition equation. + /// + public static PixelBlender HueDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationDest" composition equation. + /// + public static PixelBlender SaturationDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDest" composition equation. + /// + public static PixelBlender ColorDest => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityDest" composition equation. + /// + public static PixelBlender LuminosityDest => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalDestAtop" composition equation. /// @@ -2604,6 +5520,51 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightDestAtop => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeDestAtop" composition equation. + /// + public static PixelBlender ColorDodgeDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnDestAtop" composition equation. + /// + public static PixelBlender ColorBurnDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightDestAtop" composition equation. + /// + public static PixelBlender SoftLightDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceDestAtop" composition equation. + /// + public static PixelBlender DifferenceDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionDestAtop" composition equation. + /// + public static PixelBlender ExclusionDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueDestAtop" composition equation. + /// + public static PixelBlender HueDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationDestAtop" composition equation. + /// + public static PixelBlender SaturationDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDestAtop" composition equation. + /// + public static PixelBlender ColorDestAtop => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityDestAtop" composition equation. + /// + public static PixelBlender LuminosityDestAtop => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalDestOver" composition equation. /// @@ -2649,6 +5610,51 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightDestOver => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeDestOver" composition equation. + /// + public static PixelBlender ColorDodgeDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnDestOver" composition equation. + /// + public static PixelBlender ColorBurnDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightDestOver" composition equation. + /// + public static PixelBlender SoftLightDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceDestOver" composition equation. + /// + public static PixelBlender DifferenceDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionDestOver" composition equation. + /// + public static PixelBlender ExclusionDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueDestOver" composition equation. + /// + public static PixelBlender HueDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationDestOver" composition equation. + /// + public static PixelBlender SaturationDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDestOver" composition equation. + /// + public static PixelBlender ColorDestOver => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityDestOver" composition equation. + /// + public static PixelBlender LuminosityDestOver => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalDestIn" composition equation. /// @@ -2694,6 +5700,51 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightDestIn => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeDestIn" composition equation. + /// + public static PixelBlender ColorDodgeDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnDestIn" composition equation. + /// + public static PixelBlender ColorBurnDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightDestIn" composition equation. + /// + public static PixelBlender SoftLightDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceDestIn" composition equation. + /// + public static PixelBlender DifferenceDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionDestIn" composition equation. + /// + public static PixelBlender ExclusionDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueDestIn" composition equation. + /// + public static PixelBlender HueDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationDestIn" composition equation. + /// + public static PixelBlender SaturationDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDestIn" composition equation. + /// + public static PixelBlender ColorDestIn => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityDestIn" composition equation. + /// + public static PixelBlender LuminosityDestIn => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalDestOut" composition equation. /// @@ -2739,6 +5790,51 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightDestOut => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeDestOut" composition equation. + /// + public static PixelBlender ColorDodgeDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnDestOut" composition equation. + /// + public static PixelBlender ColorBurnDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightDestOut" composition equation. + /// + public static PixelBlender SoftLightDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceDestOut" composition equation. + /// + public static PixelBlender DifferenceDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionDestOut" composition equation. + /// + public static PixelBlender ExclusionDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueDestOut" composition equation. + /// + public static PixelBlender HueDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationDestOut" composition equation. + /// + public static PixelBlender SaturationDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDestOut" composition equation. + /// + public static PixelBlender ColorDestOut => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityDestOut" composition equation. + /// + public static PixelBlender LuminosityDestOut => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalClear" composition equation. /// @@ -2784,6 +5880,51 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightClear => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeClear" composition equation. + /// + public static PixelBlender ColorDodgeClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnClear" composition equation. + /// + public static PixelBlender ColorBurnClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightClear" composition equation. + /// + public static PixelBlender SoftLightClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceClear" composition equation. + /// + public static PixelBlender DifferenceClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionClear" composition equation. + /// + public static PixelBlender ExclusionClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueClear" composition equation. + /// + public static PixelBlender HueClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationClear" composition equation. + /// + public static PixelBlender SaturationClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorClear" composition equation. + /// + public static PixelBlender ColorClear => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityClear" composition equation. + /// + public static PixelBlender LuminosityClear => PixelBlender.Instance; + /// /// Gets the shared blender for the "NormalXor" composition equation. /// @@ -2829,4 +5970,139 @@ internal static class DefaultPixelBlenders /// public static PixelBlender HardLightXor => PixelBlender.Instance; + /// + /// Gets the shared blender for the "ColorDodgeXor" composition equation. + /// + public static PixelBlender ColorDodgeXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnXor" composition equation. + /// + public static PixelBlender ColorBurnXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightXor" composition equation. + /// + public static PixelBlender SoftLightXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferenceXor" composition equation. + /// + public static PixelBlender DifferenceXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionXor" composition equation. + /// + public static PixelBlender ExclusionXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HueXor" composition equation. + /// + public static PixelBlender HueXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationXor" composition equation. + /// + public static PixelBlender SaturationXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorXor" composition equation. + /// + public static PixelBlender ColorXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityXor" composition equation. + /// + public static PixelBlender LuminosityXor => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "NormalPlus" composition equation. + /// + public static PixelBlender NormalPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "MultiplyPlus" composition equation. + /// + public static PixelBlender MultiplyPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "AddPlus" composition equation. + /// + public static PixelBlender AddPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SubtractPlus" composition equation. + /// + public static PixelBlender SubtractPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ScreenPlus" composition equation. + /// + public static PixelBlender ScreenPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DarkenPlus" composition equation. + /// + public static PixelBlender DarkenPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LightenPlus" composition equation. + /// + public static PixelBlender LightenPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "OverlayPlus" composition equation. + /// + public static PixelBlender OverlayPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HardLightPlus" composition equation. + /// + public static PixelBlender HardLightPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorDodgePlus" composition equation. + /// + public static PixelBlender ColorDodgePlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorBurnPlus" composition equation. + /// + public static PixelBlender ColorBurnPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SoftLightPlus" composition equation. + /// + public static PixelBlender SoftLightPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "DifferencePlus" composition equation. + /// + public static PixelBlender DifferencePlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ExclusionPlus" composition equation. + /// + public static PixelBlender ExclusionPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "HuePlus" composition equation. + /// + public static PixelBlender HuePlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "SaturationPlus" composition equation. + /// + public static PixelBlender SaturationPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "ColorPlus" composition equation. + /// + public static PixelBlender ColorPlus => PixelBlender.Instance; + + /// + /// Gets the shared blender for the "LuminosityPlus" composition equation. + /// + public static PixelBlender LuminosityPlus => PixelBlender.Instance; + } diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt index e9bdbaf3c..8dc9fe564 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt +++ b/src/ImageSharp/PixelFormats/PixelBlenders/DefaultPixelBlenders.Generated.tt @@ -29,6 +29,7 @@ var composers = new [] "DestOut", "Clear", "Xor", + "Plus", }; var blenders = new [] @@ -42,6 +43,15 @@ var blenders = new [] "Lighten", "Overlay", "HardLight", + "ColorDodge", + "ColorBurn", + "SoftLight", + "Difference", + "Exclusion", + "Hue", + "Saturation", + "Color", + "Luminosity", }; #> /// diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs index 262370cd5..138249fbd 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.cs @@ -454,6 +454,51 @@ internal static partial class PorterDuffFunctions public static Vector512 NormalXor(Vector512 backdrop, Vector512 source, Vector512 opacity) => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + /// + /// Returns the result of the "NormalPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 NormalPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Normal(backdrop, source)); + } + + /// + /// Returns the result of the "NormalPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 NormalPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Normal(backdrop, source)); + } + + /// + /// Returns the result of the "NormalPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 NormalPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Normal(backdrop, source)); + } + /// /// Returns the result of the "NormalClear" compositing equation. /// @@ -684,6 +729,22 @@ internal static partial class PorterDuffFunctions return TPixel.FromUnassociatedScaledVector4(NormalXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); } + /// + /// Returns the result of the "NormalPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel NormalPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(NormalPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + /// /// Returns the result of the "MultiplySrc" compositing equation. /// @@ -1125,6 +1186,51 @@ internal static partial class PorterDuffFunctions public static Vector512 MultiplyXor(Vector512 backdrop, Vector512 source, Vector512 opacity) => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + /// + /// Returns the result of the "MultiplyPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 MultiplyPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Multiply(backdrop, source)); + } + + /// + /// Returns the result of the "MultiplyPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 MultiplyPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Multiply(backdrop, source)); + } + + /// + /// Returns the result of the "MultiplyPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 MultiplyPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Multiply(backdrop, source)); + } + /// /// Returns the result of the "MultiplyClear" compositing equation. /// @@ -1355,6 +1461,22 @@ internal static partial class PorterDuffFunctions return TPixel.FromUnassociatedScaledVector4(MultiplyXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); } + /// + /// Returns the result of the "MultiplyPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel MultiplyPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(MultiplyPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + /// /// Returns the result of the "AddSrc" compositing equation. /// @@ -1796,6 +1918,51 @@ internal static partial class PorterDuffFunctions public static Vector512 AddXor(Vector512 backdrop, Vector512 source, Vector512 opacity) => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + /// + /// Returns the result of the "AddPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 AddPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Add(backdrop, source)); + } + + /// + /// Returns the result of the "AddPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 AddPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Add(backdrop, source)); + } + + /// + /// Returns the result of the "AddPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 AddPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Add(backdrop, source)); + } + /// /// Returns the result of the "AddClear" compositing equation. /// @@ -2026,6 +2193,22 @@ internal static partial class PorterDuffFunctions return TPixel.FromUnassociatedScaledVector4(AddXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); } + /// + /// Returns the result of the "AddPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel AddPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(AddPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + /// /// Returns the result of the "SubtractSrc" compositing equation. /// @@ -2467,6 +2650,51 @@ internal static partial class PorterDuffFunctions public static Vector512 SubtractXor(Vector512 backdrop, Vector512 source, Vector512 opacity) => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + /// + /// Returns the result of the "SubtractPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SubtractPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Subtract(backdrop, source)); + } + + /// + /// Returns the result of the "SubtractPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SubtractPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Subtract(backdrop, source)); + } + + /// + /// Returns the result of the "SubtractPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SubtractPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Subtract(backdrop, source)); + } + /// /// Returns the result of the "SubtractClear" compositing equation. /// @@ -2697,6 +2925,22 @@ internal static partial class PorterDuffFunctions return TPixel.FromUnassociatedScaledVector4(SubtractXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); } + /// + /// Returns the result of the "SubtractPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SubtractPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SubtractPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + /// /// Returns the result of the "ScreenSrc" compositing equation. /// @@ -3138,6 +3382,51 @@ internal static partial class PorterDuffFunctions public static Vector512 ScreenXor(Vector512 backdrop, Vector512 source, Vector512 opacity) => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + /// + /// Returns the result of the "ScreenPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ScreenPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Screen(backdrop, source)); + } + + /// + /// Returns the result of the "ScreenPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ScreenPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Screen(backdrop, source)); + } + + /// + /// Returns the result of the "ScreenPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ScreenPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Screen(backdrop, source)); + } + /// /// Returns the result of the "ScreenClear" compositing equation. /// @@ -3368,6 +3657,22 @@ internal static partial class PorterDuffFunctions return TPixel.FromUnassociatedScaledVector4(ScreenXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); } + /// + /// Returns the result of the "ScreenPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ScreenPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ScreenPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + /// /// Returns the result of the "DarkenSrc" compositing equation. /// @@ -3810,33 +4115,78 @@ internal static partial class PorterDuffFunctions => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); /// - /// Returns the result of the "DarkenClear" compositing equation. + /// Returns the result of the "DarkenPlus" compositing equation. /// /// The backdrop vector. /// The source vector. /// The source opacity. Range 0..1 /// The . [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DarkenClear(Vector4 backdrop, Vector4 source, float opacity) + public static Vector4 DarkenPlus(Vector4 backdrop, Vector4 source, float opacity) { source = Numerics.WithW(source, source * opacity); - return Clear(backdrop, source); + return Plus(backdrop, source, Darken(backdrop, source)); } /// - /// Returns the result of the "DarkenClear" compositing equation. + /// Returns the result of the "DarkenPlus" compositing equation. /// /// The backdrop vector. /// The source vector. /// The source opacity. Range 0..1 /// The . [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector256 DarkenClear(Vector256 backdrop, Vector256 source, Vector256 opacity) - => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + public static Vector256 DarkenPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Darken(backdrop, source)); + } /// - /// Returns the result of the "DarkenClear" compositing equation. + /// Returns the result of the "DarkenPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DarkenPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Darken(backdrop, source)); + } + + /// + /// Returns the result of the "DarkenClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DarkenClear(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Clear(backdrop, source); + } + + /// + /// Returns the result of the "DarkenClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DarkenClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "DarkenClear" compositing equation. /// /// The backdrop vector. /// The source vector. @@ -4039,6 +4389,22 @@ internal static partial class PorterDuffFunctions return TPixel.FromUnassociatedScaledVector4(DarkenXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); } + /// + /// Returns the result of the "DarkenPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DarkenPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DarkenPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + /// /// Returns the result of the "LightenSrc" compositing equation. /// @@ -4480,6 +4846,51 @@ internal static partial class PorterDuffFunctions public static Vector512 LightenXor(Vector512 backdrop, Vector512 source, Vector512 opacity) => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + /// + /// Returns the result of the "LightenPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LightenPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Lighten(backdrop, source)); + } + + /// + /// Returns the result of the "LightenPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LightenPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Lighten(backdrop, source)); + } + + /// + /// Returns the result of the "LightenPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LightenPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Lighten(backdrop, source)); + } + /// /// Returns the result of the "LightenClear" compositing equation. /// @@ -4710,6 +5121,22 @@ internal static partial class PorterDuffFunctions return TPixel.FromUnassociatedScaledVector4(LightenXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); } + /// + /// Returns the result of the "LightenPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LightenPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LightenPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + /// /// Returns the result of the "OverlaySrc" compositing equation. /// @@ -5151,6 +5578,51 @@ internal static partial class PorterDuffFunctions public static Vector512 OverlayXor(Vector512 backdrop, Vector512 source, Vector512 opacity) => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + /// + /// Returns the result of the "OverlayPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 OverlayPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Overlay(backdrop, source)); + } + + /// + /// Returns the result of the "OverlayPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 OverlayPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Overlay(backdrop, source)); + } + + /// + /// Returns the result of the "OverlayPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 OverlayPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Overlay(backdrop, source)); + } + /// /// Returns the result of the "OverlayClear" compositing equation. /// @@ -5381,6 +5853,22 @@ internal static partial class PorterDuffFunctions return TPixel.FromUnassociatedScaledVector4(OverlayXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); } + /// + /// Returns the result of the "OverlayPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel OverlayPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(OverlayPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + /// /// Returns the result of the "HardLightSrc" compositing equation. /// @@ -5822,6 +6310,51 @@ internal static partial class PorterDuffFunctions public static Vector512 HardLightXor(Vector512 backdrop, Vector512 source, Vector512 opacity) => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + /// + /// Returns the result of the "HardLightPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HardLightPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, HardLight(backdrop, source)); + } + + /// + /// Returns the result of the "HardLightPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HardLightPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, HardLight(backdrop, source)); + } + + /// + /// Returns the result of the "HardLightPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HardLightPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, HardLight(backdrop, source)); + } + /// /// Returns the result of the "HardLightClear" compositing equation. /// @@ -6051,4 +6584,6608 @@ internal static partial class PorterDuffFunctions opacity = Numerics.Clamp(opacity, 0, 1); return TPixel.FromUnassociatedScaledVector4(HardLightXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); } + + /// + /// Returns the result of the "HardLightPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HardLightPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HardLightPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeSrc" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeSrc(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return source; + } + + /// + /// Returns the result of the "ColorDodgeSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Avx.Blend(source, source * opacity, BlendAlphaControl); + + /// + /// Returns the result of the "ColorDodgeSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + /// + /// Returns the result of the "ColorDodgeSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(backdrop, source, ColorDodge(backdrop, source)); + } + + /// + /// Returns the result of the "ColorDodgeSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(backdrop, source, ColorDodge(backdrop, source)); + } + + /// + /// Returns the result of the "ColorDodgeSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(backdrop, source, ColorDodge(backdrop, source)); + } + + /// + /// Returns the result of the "ColorDodgeSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeSrcOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(backdrop, source, ColorDodge(backdrop, source)); + } + + /// + /// Returns the result of the "ColorDodgeSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(backdrop, source, ColorDodge(backdrop, source)); + } + + /// + /// Returns the result of the "ColorDodgeSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(backdrop, source, ColorDodge(backdrop, source)); + } + + /// + /// Returns the result of the "ColorDodgeSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeSrcIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(backdrop, source); + } + + /// + /// Returns the result of the "ColorDodgeSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorDodgeSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ColorDodgeSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(backdrop, source); + } + + /// + /// Returns the result of the "ColorDodgeSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorDodgeSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ColorDodgeDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ColorDodgeDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ColorDodgeDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ColorDodgeDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDodgeDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDodgeDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDodgeDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDodgeDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDodgeDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(source, backdrop, ColorDodge(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDodgeDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(source, backdrop); + } + + /// + /// Returns the result of the "ColorDodgeDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "ColorDodgeDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "ColorDodgeDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(source, backdrop); + } + + /// + /// Returns the result of the "ColorDodgeDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "ColorDodgeDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "ColorDodgeXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeXor(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Xor(backdrop, source); + } + + /// + /// Returns the result of the "ColorDodgeXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Xor(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorDodgeXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ColorDodgePlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgePlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, ColorDodge(backdrop, source)); + } + + /// + /// Returns the result of the "ColorDodgePlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgePlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, ColorDodge(backdrop, source)); + } + + /// + /// Returns the result of the "ColorDodgePlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgePlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, ColorDodge(backdrop, source)); + } + + /// + /// Returns the result of the "ColorDodgeClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodgeClear(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Clear(backdrop, source); + } + + /// + /// Returns the result of the "ColorDodgeClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodgeClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorDodgeClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodgeClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Clear(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + + /// + /// Returns the result of the "ColorDodgeSrc" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeSrc(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeSrc(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeSrcAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeSrcAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeSrcAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeSrcOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeSrcOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeSrcOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeSrcIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeSrcIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeSrcIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeSrcOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeSrcOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeSrcOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeDest" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeDest(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeDest(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeDestAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeDestAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeDestAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeDestOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeDestOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeDestOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeDestIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeDestIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeDestIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeDestOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeDestOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeDestOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeClear" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeClear(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeClear(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgeXor" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgeXor(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgeXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDodgePlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDodgePlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDodgePlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnSrc" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnSrc(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return source; + } + + /// + /// Returns the result of the "ColorBurnSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Avx.Blend(source, source * opacity, BlendAlphaControl); + + /// + /// Returns the result of the "ColorBurnSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + /// + /// Returns the result of the "ColorBurnSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(backdrop, source, ColorBurn(backdrop, source)); + } + + /// + /// Returns the result of the "ColorBurnSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(backdrop, source, ColorBurn(backdrop, source)); + } + + /// + /// Returns the result of the "ColorBurnSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(backdrop, source, ColorBurn(backdrop, source)); + } + + /// + /// Returns the result of the "ColorBurnSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnSrcOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(backdrop, source, ColorBurn(backdrop, source)); + } + + /// + /// Returns the result of the "ColorBurnSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(backdrop, source, ColorBurn(backdrop, source)); + } + + /// + /// Returns the result of the "ColorBurnSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(backdrop, source, ColorBurn(backdrop, source)); + } + + /// + /// Returns the result of the "ColorBurnSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnSrcIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(backdrop, source); + } + + /// + /// Returns the result of the "ColorBurnSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorBurnSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ColorBurnSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(backdrop, source); + } + + /// + /// Returns the result of the "ColorBurnSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorBurnSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ColorBurnDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ColorBurnDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ColorBurnDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ColorBurnDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the result of the "ColorBurnDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the result of the "ColorBurnDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the result of the "ColorBurnDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the result of the "ColorBurnDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the result of the "ColorBurnDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(source, backdrop, ColorBurn(source, backdrop)); + } + + /// + /// Returns the result of the "ColorBurnDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(source, backdrop); + } + + /// + /// Returns the result of the "ColorBurnDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "ColorBurnDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "ColorBurnDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(source, backdrop); + } + + /// + /// Returns the result of the "ColorBurnDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "ColorBurnDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "ColorBurnXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnXor(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Xor(backdrop, source); + } + + /// + /// Returns the result of the "ColorBurnXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Xor(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorBurnXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ColorBurnPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, ColorBurn(backdrop, source)); + } + + /// + /// Returns the result of the "ColorBurnPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, ColorBurn(backdrop, source)); + } + + /// + /// Returns the result of the "ColorBurnPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, ColorBurn(backdrop, source)); + } + + /// + /// Returns the result of the "ColorBurnClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurnClear(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Clear(backdrop, source); + } + + /// + /// Returns the result of the "ColorBurnClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurnClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorBurnClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurnClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Clear(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + + /// + /// Returns the result of the "ColorBurnSrc" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnSrc(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnSrc(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnSrcAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnSrcAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnSrcAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnSrcOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnSrcOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnSrcOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnSrcIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnSrcIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnSrcIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnSrcOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnSrcOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnSrcOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnDest" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnDest(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnDest(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnDestAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnDestAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnDestAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnDestOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnDestOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnDestOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnDestIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnDestIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnDestIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnDestOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnDestOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnDestOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnClear" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnClear(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnClear(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnXor" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnXor(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorBurnPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorBurnPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorBurnPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightSrc" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightSrc(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return source; + } + + /// + /// Returns the result of the "SoftLightSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Avx.Blend(source, source * opacity, BlendAlphaControl); + + /// + /// Returns the result of the "SoftLightSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + /// + /// Returns the result of the "SoftLightSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(backdrop, source, SoftLight(backdrop, source)); + } + + /// + /// Returns the result of the "SoftLightSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(backdrop, source, SoftLight(backdrop, source)); + } + + /// + /// Returns the result of the "SoftLightSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(backdrop, source, SoftLight(backdrop, source)); + } + + /// + /// Returns the result of the "SoftLightSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightSrcOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(backdrop, source, SoftLight(backdrop, source)); + } + + /// + /// Returns the result of the "SoftLightSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(backdrop, source, SoftLight(backdrop, source)); + } + + /// + /// Returns the result of the "SoftLightSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(backdrop, source, SoftLight(backdrop, source)); + } + + /// + /// Returns the result of the "SoftLightSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightSrcIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(backdrop, source); + } + + /// + /// Returns the result of the "SoftLightSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "SoftLightSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "SoftLightSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(backdrop, source); + } + + /// + /// Returns the result of the "SoftLightSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "SoftLightSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "SoftLightDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "SoftLightDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "SoftLightDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "SoftLightDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the result of the "SoftLightDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the result of the "SoftLightDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the result of the "SoftLightDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the result of the "SoftLightDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the result of the "SoftLightDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(source, backdrop, SoftLight(source, backdrop)); + } + + /// + /// Returns the result of the "SoftLightDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(source, backdrop); + } + + /// + /// Returns the result of the "SoftLightDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "SoftLightDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "SoftLightDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(source, backdrop); + } + + /// + /// Returns the result of the "SoftLightDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "SoftLightDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "SoftLightXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightXor(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Xor(backdrop, source); + } + + /// + /// Returns the result of the "SoftLightXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Xor(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "SoftLightXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "SoftLightPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, SoftLight(backdrop, source)); + } + + /// + /// Returns the result of the "SoftLightPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, SoftLight(backdrop, source)); + } + + /// + /// Returns the result of the "SoftLightPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, SoftLight(backdrop, source)); + } + + /// + /// Returns the result of the "SoftLightClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLightClear(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Clear(backdrop, source); + } + + /// + /// Returns the result of the "SoftLightClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLightClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "SoftLightClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLightClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Clear(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + + /// + /// Returns the result of the "SoftLightSrc" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightSrc(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightSrc(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightSrcAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightSrcAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightSrcAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightSrcOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightSrcOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightSrcOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightSrcIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightSrcIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightSrcIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightSrcOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightSrcOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightSrcOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightDest" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightDest(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightDest(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightDestAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightDestAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightDestAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightDestOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightDestOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightDestOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightDestIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightDestIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightDestIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightDestOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightDestOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightDestOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightClear" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightClear(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightClear(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightXor" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightXor(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SoftLightPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SoftLightPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SoftLightPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceSrc" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceSrc(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return source; + } + + /// + /// Returns the result of the "DifferenceSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Avx.Blend(source, source * opacity, BlendAlphaControl); + + /// + /// Returns the result of the "DifferenceSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + /// + /// Returns the result of the "DifferenceSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(backdrop, source, Difference(backdrop, source)); + } + + /// + /// Returns the result of the "DifferenceSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(backdrop, source, Difference(backdrop, source)); + } + + /// + /// Returns the result of the "DifferenceSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(backdrop, source, Difference(backdrop, source)); + } + + /// + /// Returns the result of the "DifferenceSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceSrcOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(backdrop, source, Difference(backdrop, source)); + } + + /// + /// Returns the result of the "DifferenceSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(backdrop, source, Difference(backdrop, source)); + } + + /// + /// Returns the result of the "DifferenceSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(backdrop, source, Difference(backdrop, source)); + } + + /// + /// Returns the result of the "DifferenceSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceSrcIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(backdrop, source); + } + + /// + /// Returns the result of the "DifferenceSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "DifferenceSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "DifferenceSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(backdrop, source); + } + + /// + /// Returns the result of the "DifferenceSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "DifferenceSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "DifferenceDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "DifferenceDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "DifferenceDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "DifferenceDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the result of the "DifferenceDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the result of the "DifferenceDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the result of the "DifferenceDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the result of the "DifferenceDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the result of the "DifferenceDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(source, backdrop, Difference(source, backdrop)); + } + + /// + /// Returns the result of the "DifferenceDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(source, backdrop); + } + + /// + /// Returns the result of the "DifferenceDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "DifferenceDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "DifferenceDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(source, backdrop); + } + + /// + /// Returns the result of the "DifferenceDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "DifferenceDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "DifferenceXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceXor(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Xor(backdrop, source); + } + + /// + /// Returns the result of the "DifferenceXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Xor(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "DifferenceXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "DifferencePlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferencePlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Difference(backdrop, source)); + } + + /// + /// Returns the result of the "DifferencePlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferencePlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Difference(backdrop, source)); + } + + /// + /// Returns the result of the "DifferencePlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferencePlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Difference(backdrop, source)); + } + + /// + /// Returns the result of the "DifferenceClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferenceClear(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Clear(backdrop, source); + } + + /// + /// Returns the result of the "DifferenceClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 DifferenceClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "DifferenceClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 DifferenceClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Clear(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + + /// + /// Returns the result of the "DifferenceSrc" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceSrc(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceSrc(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceSrcAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceSrcAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceSrcAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceSrcOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceSrcOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceSrcOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceSrcIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceSrcIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceSrcIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceSrcOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceSrcOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceSrcOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceDest" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceDest(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceDest(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceDestAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceDestAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceDestAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceDestOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceDestOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceDestOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceDestIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceDestIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceDestIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceDestOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceDestOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceDestOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceClear" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceClear(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceClear(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferenceXor" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferenceXor(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferenceXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "DifferencePlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel DifferencePlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(DifferencePlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionSrc" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionSrc(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return source; + } + + /// + /// Returns the result of the "ExclusionSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Avx.Blend(source, source * opacity, BlendAlphaControl); + + /// + /// Returns the result of the "ExclusionSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + /// + /// Returns the result of the "ExclusionSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(backdrop, source, Exclusion(backdrop, source)); + } + + /// + /// Returns the result of the "ExclusionSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(backdrop, source, Exclusion(backdrop, source)); + } + + /// + /// Returns the result of the "ExclusionSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(backdrop, source, Exclusion(backdrop, source)); + } + + /// + /// Returns the result of the "ExclusionSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionSrcOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(backdrop, source, Exclusion(backdrop, source)); + } + + /// + /// Returns the result of the "ExclusionSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(backdrop, source, Exclusion(backdrop, source)); + } + + /// + /// Returns the result of the "ExclusionSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(backdrop, source, Exclusion(backdrop, source)); + } + + /// + /// Returns the result of the "ExclusionSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionSrcIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(backdrop, source); + } + + /// + /// Returns the result of the "ExclusionSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ExclusionSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ExclusionSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(backdrop, source); + } + + /// + /// Returns the result of the "ExclusionSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ExclusionSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ExclusionDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ExclusionDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ExclusionDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ExclusionDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the result of the "ExclusionDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the result of the "ExclusionDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the result of the "ExclusionDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the result of the "ExclusionDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the result of the "ExclusionDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(source, backdrop, Exclusion(source, backdrop)); + } + + /// + /// Returns the result of the "ExclusionDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(source, backdrop); + } + + /// + /// Returns the result of the "ExclusionDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "ExclusionDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "ExclusionDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(source, backdrop); + } + + /// + /// Returns the result of the "ExclusionDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "ExclusionDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "ExclusionXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionXor(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Xor(backdrop, source); + } + + /// + /// Returns the result of the "ExclusionXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Xor(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ExclusionXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ExclusionPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Exclusion(backdrop, source)); + } + + /// + /// Returns the result of the "ExclusionPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Exclusion(backdrop, source)); + } + + /// + /// Returns the result of the "ExclusionPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Exclusion(backdrop, source)); + } + + /// + /// Returns the result of the "ExclusionClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ExclusionClear(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Clear(backdrop, source); + } + + /// + /// Returns the result of the "ExclusionClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ExclusionClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ExclusionClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ExclusionClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Clear(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + + /// + /// Returns the result of the "ExclusionSrc" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionSrc(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionSrc(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionSrcAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionSrcAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionSrcAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionSrcOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionSrcOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionSrcOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionSrcIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionSrcIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionSrcIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionSrcOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionSrcOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionSrcOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionDest" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionDest(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionDest(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionDestAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionDestAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionDestAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionDestOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionDestOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionDestOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionDestIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionDestIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionDestIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionDestOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionDestOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionDestOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionClear" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionClear(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionClear(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionXor" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionXor(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ExclusionPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ExclusionPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ExclusionPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueSrc" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueSrc(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return source; + } + + /// + /// Returns the result of the "HueSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Avx.Blend(source, source * opacity, BlendAlphaControl); + + /// + /// Returns the result of the "HueSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + /// + /// Returns the result of the "HueSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(backdrop, source, Hue(backdrop, source)); + } + + /// + /// Returns the result of the "HueSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(backdrop, source, Hue(backdrop, source)); + } + + /// + /// Returns the result of the "HueSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(backdrop, source, Hue(backdrop, source)); + } + + /// + /// Returns the result of the "HueSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueSrcOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(backdrop, source, Hue(backdrop, source)); + } + + /// + /// Returns the result of the "HueSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(backdrop, source, Hue(backdrop, source)); + } + + /// + /// Returns the result of the "HueSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(backdrop, source, Hue(backdrop, source)); + } + + /// + /// Returns the result of the "HueSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueSrcIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(backdrop, source); + } + + /// + /// Returns the result of the "HueSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "HueSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "HueSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(backdrop, source); + } + + /// + /// Returns the result of the "HueSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "HueSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "HueDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "HueDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "HueDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "HueDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the result of the "HueDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the result of the "HueDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the result of the "HueDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the result of the "HueDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the result of the "HueDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(source, backdrop, Hue(source, backdrop)); + } + + /// + /// Returns the result of the "HueDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(source, backdrop); + } + + /// + /// Returns the result of the "HueDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "HueDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "HueDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(source, backdrop); + } + + /// + /// Returns the result of the "HueDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "HueDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "HueXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueXor(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Xor(backdrop, source); + } + + /// + /// Returns the result of the "HueXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Xor(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "HueXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "HuePlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HuePlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Hue(backdrop, source)); + } + + /// + /// Returns the result of the "HuePlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HuePlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Hue(backdrop, source)); + } + + /// + /// Returns the result of the "HuePlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HuePlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Hue(backdrop, source)); + } + + /// + /// Returns the result of the "HueClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 HueClear(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Clear(backdrop, source); + } + + /// + /// Returns the result of the "HueClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 HueClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "HueClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 HueClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Clear(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + + /// + /// Returns the result of the "HueSrc" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueSrc(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueSrc(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueSrcAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueSrcAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueSrcAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueSrcOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueSrcOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueSrcOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueSrcIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueSrcIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueSrcIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueSrcOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueSrcOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueSrcOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueDest" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueDest(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueDest(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueDestAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueDestAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueDestAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueDestOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueDestOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueDestOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueDestIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueDestIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueDestIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueDestOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueDestOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueDestOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueClear" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueClear(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueClear(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HueXor" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HueXor(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HueXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "HuePlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel HuePlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(HuePlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationSrc" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationSrc(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return source; + } + + /// + /// Returns the result of the "SaturationSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Avx.Blend(source, source * opacity, BlendAlphaControl); + + /// + /// Returns the result of the "SaturationSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + /// + /// Returns the result of the "SaturationSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(backdrop, source, Saturation(backdrop, source)); + } + + /// + /// Returns the result of the "SaturationSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(backdrop, source, Saturation(backdrop, source)); + } + + /// + /// Returns the result of the "SaturationSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(backdrop, source, Saturation(backdrop, source)); + } + + /// + /// Returns the result of the "SaturationSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationSrcOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(backdrop, source, Saturation(backdrop, source)); + } + + /// + /// Returns the result of the "SaturationSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(backdrop, source, Saturation(backdrop, source)); + } + + /// + /// Returns the result of the "SaturationSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(backdrop, source, Saturation(backdrop, source)); + } + + /// + /// Returns the result of the "SaturationSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationSrcIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(backdrop, source); + } + + /// + /// Returns the result of the "SaturationSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "SaturationSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "SaturationSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(backdrop, source); + } + + /// + /// Returns the result of the "SaturationSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "SaturationSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "SaturationDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "SaturationDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "SaturationDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "SaturationDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the result of the "SaturationDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the result of the "SaturationDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the result of the "SaturationDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the result of the "SaturationDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the result of the "SaturationDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(source, backdrop, Saturation(source, backdrop)); + } + + /// + /// Returns the result of the "SaturationDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(source, backdrop); + } + + /// + /// Returns the result of the "SaturationDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "SaturationDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "SaturationDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(source, backdrop); + } + + /// + /// Returns the result of the "SaturationDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "SaturationDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "SaturationXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationXor(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Xor(backdrop, source); + } + + /// + /// Returns the result of the "SaturationXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Xor(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "SaturationXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "SaturationPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Saturation(backdrop, source)); + } + + /// + /// Returns the result of the "SaturationPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Saturation(backdrop, source)); + } + + /// + /// Returns the result of the "SaturationPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Saturation(backdrop, source)); + } + + /// + /// Returns the result of the "SaturationClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SaturationClear(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Clear(backdrop, source); + } + + /// + /// Returns the result of the "SaturationClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SaturationClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "SaturationClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SaturationClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Clear(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + + /// + /// Returns the result of the "SaturationSrc" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationSrc(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationSrc(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationSrcAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationSrcAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationSrcAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationSrcOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationSrcOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationSrcOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationSrcIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationSrcIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationSrcIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationSrcOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationSrcOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationSrcOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationDest" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationDest(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationDest(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationDestAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationDestAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationDestAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationDestOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationDestOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationDestOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationDestIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationDestIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationDestIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationDestOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationDestOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationDestOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationClear" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationClear(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationClear(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationXor" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationXor(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "SaturationPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel SaturationPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(SaturationPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorSrc" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorSrc(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return source; + } + + /// + /// Returns the result of the "ColorSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorSrc(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Avx.Blend(source, source * opacity, BlendAlphaControl); + + /// + /// Returns the result of the "ColorSrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorSrc(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + /// + /// Returns the result of the "ColorSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorSrcAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(backdrop, source, Color(backdrop, source)); + } + + /// + /// Returns the result of the "ColorSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorSrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(backdrop, source, Color(backdrop, source)); + } + + /// + /// Returns the result of the "ColorSrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorSrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(backdrop, source, Color(backdrop, source)); + } + + /// + /// Returns the result of the "ColorSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorSrcOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(backdrop, source, Color(backdrop, source)); + } + + /// + /// Returns the result of the "ColorSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorSrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(backdrop, source, Color(backdrop, source)); + } + + /// + /// Returns the result of the "ColorSrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorSrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(backdrop, source, Color(backdrop, source)); + } + + /// + /// Returns the result of the "ColorSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorSrcIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(backdrop, source); + } + + /// + /// Returns the result of the "ColorSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorSrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorSrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorSrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ColorSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorSrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(backdrop, source); + } + + /// + /// Returns the result of the "ColorSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorSrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorSrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorSrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ColorDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ColorDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ColorDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "ColorDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(source, backdrop, Color(source, backdrop)); + } + + /// + /// Returns the result of the "ColorDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(source, backdrop); + } + + /// + /// Returns the result of the "ColorDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "ColorDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "ColorDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(source, backdrop); + } + + /// + /// Returns the result of the "ColorDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "ColorDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "ColorXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorXor(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Xor(backdrop, source); + } + + /// + /// Returns the result of the "ColorXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Xor(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "ColorPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Color(backdrop, source)); + } + + /// + /// Returns the result of the "ColorPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Color(backdrop, source)); + } + + /// + /// Returns the result of the "ColorPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Color(backdrop, source)); + } + + /// + /// Returns the result of the "ColorClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorClear(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Clear(backdrop, source); + } + + /// + /// Returns the result of the "ColorClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "ColorClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Clear(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + + /// + /// Returns the result of the "ColorSrc" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorSrc(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorSrc(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorSrcAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorSrcAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorSrcAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorSrcOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorSrcOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorSrcOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorSrcIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorSrcIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorSrcIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorSrcOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorSrcOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorSrcOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDest" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDest(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDest(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDestAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDestAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDestAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDestOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDestOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDestOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDestIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDestIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDestIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorDestOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorDestOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorDestOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorClear" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorClear(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorClear(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorXor" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorXor(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "ColorPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel ColorPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(ColorPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminositySrc" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminositySrc(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return source; + } + + /// + /// Returns the result of the "LuminositySrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminositySrc(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Avx.Blend(source, source * opacity, BlendAlphaControl); + + /// + /// Returns the result of the "LuminositySrc compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminositySrc(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + /// + /// Returns the result of the "LuminositySrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminositySrcAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(backdrop, source, Luminosity(backdrop, source)); + } + + /// + /// Returns the result of the "LuminositySrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminositySrcAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(backdrop, source, Luminosity(backdrop, source)); + } + + /// + /// Returns the result of the "LuminositySrcAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminositySrcAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(backdrop, source, Luminosity(backdrop, source)); + } + + /// + /// Returns the result of the "LuminositySrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminositySrcOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(backdrop, source, Luminosity(backdrop, source)); + } + + /// + /// Returns the result of the "LuminositySrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminositySrcOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(backdrop, source, Luminosity(backdrop, source)); + } + + /// + /// Returns the result of the "LuminositySrcOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminositySrcOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(backdrop, source, Luminosity(backdrop, source)); + } + + /// + /// Returns the result of the "LuminositySrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminositySrcIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(backdrop, source); + } + + /// + /// Returns the result of the "LuminositySrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminositySrcIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "LuminositySrcIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminositySrcIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "LuminositySrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminositySrcOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(backdrop, source); + } + + /// + /// Returns the result of the "LuminositySrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminositySrcOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "LuminositySrcOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminositySrcOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "LuminosityDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityDest(Vector4 backdrop, Vector4 source, float opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "LuminosityDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityDest(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "LuminosityDest" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityDest(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + return backdrop; + } + + /// + /// Returns the result of the "LuminosityDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityDestAtop(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Atop(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the result of the "LuminosityDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityDestAtop(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Atop(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the result of the "LuminosityDestAtop" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityDestAtop(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Atop(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the result of the "LuminosityDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityDestOver(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Over(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the result of the "LuminosityDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityDestOver(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Over(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the result of the "LuminosityDestOver" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityDestOver(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Over(source, backdrop, Luminosity(source, backdrop)); + } + + /// + /// Returns the result of the "LuminosityDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityDestIn(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return In(source, backdrop); + } + + /// + /// Returns the result of the "LuminosityDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityDestIn(Vector256 backdrop, Vector256 source, Vector256 opacity) + => In(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "LuminosityDestIn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityDestIn(Vector512 backdrop, Vector512 source, Vector512 opacity) + => In(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "LuminosityDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityDestOut(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Out(source, backdrop); + } + + /// + /// Returns the result of the "LuminosityDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityDestOut(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Out(Avx.Blend(source, source * opacity, BlendAlphaControl), backdrop); + + /// + /// Returns the result of the "LuminosityDestOut" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityDestOut(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Out(Avx512F.BlendVariable(source, source * opacity, AlphaMask512()), backdrop); + + /// + /// Returns the result of the "LuminosityXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityXor(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Xor(backdrop, source); + } + + /// + /// Returns the result of the "LuminosityXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityXor(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Xor(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "LuminosityXor" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityXor(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + /// + /// Returns the result of the "LuminosityPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityPlus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, Luminosity(backdrop, source)); + } + + /// + /// Returns the result of the "LuminosityPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityPlus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, Luminosity(backdrop, source)); + } + + /// + /// Returns the result of the "LuminosityPlus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityPlus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, Luminosity(backdrop, source)); + } + + /// + /// Returns the result of the "LuminosityClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 LuminosityClear(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Clear(backdrop, source); + } + + /// + /// Returns the result of the "LuminosityClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 LuminosityClear(Vector256 backdrop, Vector256 source, Vector256 opacity) + => Clear(backdrop, Avx.Blend(source, source * opacity, BlendAlphaControl)); + + /// + /// Returns the result of the "LuminosityClear" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 LuminosityClear(Vector512 backdrop, Vector512 source, Vector512 opacity) + => Clear(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + + + /// + /// Returns the result of the "LuminositySrc" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminositySrc(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminositySrc(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminositySrcAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminositySrcAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminositySrcAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminositySrcOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminositySrcOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminositySrcOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminositySrcIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminositySrcIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminositySrcIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminositySrcOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminositySrcOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminositySrcOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminosityDest" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminosityDest(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminosityDest(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminosityDestAtop" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminosityDestAtop(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminosityDestAtop(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminosityDestOver" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminosityDestOver(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminosityDestOver(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminosityDestIn" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminosityDestIn(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminosityDestIn(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminosityDestOut" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminosityDestOut(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminosityDestOut(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminosityClear" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminosityClear(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminosityClear(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminosityXor" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminosityXor(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminosityXor(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } + + /// + /// Returns the result of the "LuminosityPlus" compositing equation. + /// + /// The pixel format. + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TPixel LuminosityPlus(TPixel backdrop, TPixel source, float opacity) + where TPixel : unmanaged, IPixel + { + opacity = Numerics.Clamp(opacity, 0, 1); + return TPixel.FromUnassociatedScaledVector4(LuminosityPlus(backdrop.ToUnassociatedScaledVector4(), source.ToUnassociatedScaledVector4(), opacity)); + } } diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt index 8837a90a3..3ee0e133c 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt +++ b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.Generated.tt @@ -464,6 +464,51 @@ internal static partial class PorterDuffFunctions public static Vector512 <#=blender#>Xor(Vector512 backdrop, Vector512 source, Vector512 opacity) => Xor(backdrop, Avx512F.BlendVariable(source, source * opacity, AlphaMask512())); + /// + /// Returns the result of the "<#=blender#>Plus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 <#=blender#>Plus(Vector4 backdrop, Vector4 source, float opacity) + { + source = Numerics.WithW(source, source * opacity); + + return Plus(backdrop, source, <#=blender#>(backdrop, source)); + } + + /// + /// Returns the result of the "<#=blender#>Plus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 <#=blender#>Plus(Vector256 backdrop, Vector256 source, Vector256 opacity) + { + source = Avx.Blend(source, source * opacity, BlendAlphaControl); + + return Plus(backdrop, source, <#=blender#>(backdrop, source)); + } + + /// + /// Returns the result of the "<#=blender#>Plus" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The source opacity. Range 0..1 + /// The . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 <#=blender#>Plus(Vector512 backdrop, Vector512 source, Vector512 opacity) + { + source = Avx512F.BlendVariable(source, source * opacity, AlphaMask512()); + + return Plus(backdrop, source, <#=blender#>(backdrop, source)); + } + /// /// Returns the result of the "<#=blender#>Clear" compositing equation. /// @@ -535,6 +580,7 @@ var composers = new []{ "DestOut", "Clear", "Xor", + "Plus", }; var blenders = new []{ @@ -546,7 +592,16 @@ var blenders = new []{ "Darken", "Lighten", "Overlay", - "HardLight" + "HardLight", + "ColorDodge", + "ColorBurn", + "SoftLight", + "Difference", + "Exclusion", + "Hue", + "Saturation", + "Color", + "Luminosity", }; foreach(var blender in blenders) diff --git a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs index 46d97ad3d..4b048a6f4 100644 --- a/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs +++ b/src/ImageSharp/PixelFormats/PixelBlenders/PorterDuffFunctions.cs @@ -324,6 +324,252 @@ internal static partial class PorterDuffFunctions return Vector512.Min(Vector512.Create(1F), Vector512.ConditionalSelect(AlphaMask512(), Vector512.Zero, color)); } + /// + /// Returns the result of the "ColorDodge" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The blended color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorDodge(Vector4 backdrop, Vector4 source) + => new( + ColorDodgeValue(backdrop.X, source.X), + ColorDodgeValue(backdrop.Y, source.Y), + ColorDodgeValue(backdrop.Z, source.Z), + 0F); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorDodge(Vector256 backdrop, Vector256 source) + { + Vector256 one = Vector256.Create(1F); + Vector256 result = Vector256.Min(one, backdrop / (one - source)); + + // The explicit singular cases avoid the undefined 0 / 0 result while preserving the order required by the specification. + result = Avx.BlendVariable(result, one, Avx.CompareEqual(source, one)); + result = Avx.BlendVariable(result, Vector256.Zero, Avx.CompareEqual(backdrop, Vector256.Zero)); + return Avx.Blend(result, Vector256.Zero, BlendAlphaControl); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorDodge(Vector512 backdrop, Vector512 source) + { + Vector512 one = Vector512.Create(1F); + Vector512 result = Vector512.Min(one, backdrop / (one - source)); + result = Vector512.ConditionalSelect(Vector512.Equals(source, one), one, result); + result = Vector512.ConditionalSelect(Vector512.Equals(backdrop, Vector512.Zero), Vector512.Zero, result); + return Vector512.ConditionalSelect(AlphaMask512(), Vector512.Zero, result); + } + + /// + /// Returns the result of the "ColorBurn" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The blended color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 ColorBurn(Vector4 backdrop, Vector4 source) + => new( + ColorBurnValue(backdrop.X, source.X), + ColorBurnValue(backdrop.Y, source.Y), + ColorBurnValue(backdrop.Z, source.Z), + 0F); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 ColorBurn(Vector256 backdrop, Vector256 source) + { + Vector256 one = Vector256.Create(1F); + Vector256 result = one - Vector256.Min(one, (one - backdrop) / source); + + // As with ColorDodge, resolve the branch singularities explicitly so transparent lanes never produce NaN. + result = Avx.BlendVariable(result, Vector256.Zero, Avx.CompareEqual(source, Vector256.Zero)); + result = Avx.BlendVariable(result, one, Avx.CompareEqual(backdrop, one)); + return Avx.Blend(result, Vector256.Zero, BlendAlphaControl); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 ColorBurn(Vector512 backdrop, Vector512 source) + { + Vector512 one = Vector512.Create(1F); + Vector512 result = one - Vector512.Min(one, (one - backdrop) / source); + result = Vector512.ConditionalSelect(Vector512.Equals(source, Vector512.Zero), Vector512.Zero, result); + result = Vector512.ConditionalSelect(Vector512.Equals(backdrop, one), one, result); + return Vector512.ConditionalSelect(AlphaMask512(), Vector512.Zero, result); + } + + /// + /// Returns the result of the "SoftLight" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The blended color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SoftLight(Vector4 backdrop, Vector4 source) + => new( + SoftLightValue(backdrop.X, source.X), + SoftLightValue(backdrop.Y, source.Y), + SoftLightValue(backdrop.Z, source.Z), + 0F); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 SoftLight(Vector256 backdrop, Vector256 source) + { + Vector256 one = Vector256.Create(1F); + Vector256 two = Vector256.Create(2F); + Vector256 dark = backdrop - ((one - (two * source)) * backdrop * (one - backdrop)); + Vector256 polynomial = ((((Vector256.Create(16F) * backdrop) - Vector256.Create(12F)) * backdrop) + Vector256.Create(4F)) * backdrop; + Vector256 d = Avx.BlendVariable(polynomial, Avx.Sqrt(backdrop), Avx.CompareGreaterThan(backdrop, Vector256.Create(.25F))); + Vector256 light = backdrop + (((two * source) - one) * (d - backdrop)); + Vector256 result = Avx.BlendVariable(dark, light, Avx.CompareGreaterThan(source, Vector256.Create(.5F))); + return Avx.Blend(result, Vector256.Zero, BlendAlphaControl); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 SoftLight(Vector512 backdrop, Vector512 source) + { + Vector512 one = Vector512.Create(1F); + Vector512 two = Vector512.Create(2F); + Vector512 dark = backdrop - ((one - (two * source)) * backdrop * (one - backdrop)); + Vector512 polynomial = ((((Vector512.Create(16F) * backdrop) - Vector512.Create(12F)) * backdrop) + Vector512.Create(4F)) * backdrop; + Vector512 d = Vector512.ConditionalSelect(Avx512F.CompareGreaterThan(backdrop, Vector512.Create(.25F)), Vector512.Sqrt(backdrop), polynomial); + Vector512 light = backdrop + (((two * source) - one) * (d - backdrop)); + Vector512 result = Vector512.ConditionalSelect(Avx512F.CompareGreaterThan(source, Vector512.Create(.5F)), light, dark); + return Vector512.ConditionalSelect(AlphaMask512(), Vector512.Zero, result); + } + + /// + /// Returns the result of the "Difference" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The blended color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Difference(Vector4 backdrop, Vector4 source) + => Vector4.Abs(backdrop - source); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Difference(Vector256 backdrop, Vector256 source) + => Vector256.Abs(backdrop - source); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Difference(Vector512 backdrop, Vector512 source) + => Vector512.Abs(backdrop - source); + + /// + /// Returns the result of the "Exclusion" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The blended color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Exclusion(Vector4 backdrop, Vector4 source) + => backdrop + source - (2F * backdrop * source); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Exclusion(Vector256 backdrop, Vector256 source) + => backdrop + source - (Vector256.Create(2F) * backdrop * source); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Exclusion(Vector512 backdrop, Vector512 source) + => backdrop + source - (Vector512.Create(2F) * backdrop * source); + + /// + /// Returns the result of the "Hue" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The blended color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Hue(Vector4 backdrop, Vector4 source) + => SetLuminosity(SetSaturation(source, Saturation(backdrop)), Luminosity(backdrop)); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Hue(Vector256 backdrop, Vector256 source) + => Vector256.Create( + Hue(backdrop.GetLower().AsVector4(), source.GetLower().AsVector4()).AsVector128(), + Hue(backdrop.GetUpper().AsVector4(), source.GetUpper().AsVector4()).AsVector128()); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Hue(Vector512 backdrop, Vector512 source) + => Vector512.Create(Hue(backdrop.GetLower(), source.GetLower()), Hue(backdrop.GetUpper(), source.GetUpper())); + + /// + /// Returns the result of the "Saturation" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The blended color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Saturation(Vector4 backdrop, Vector4 source) + => SetLuminosity(SetSaturation(backdrop, Saturation(source)), Luminosity(backdrop)); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Saturation(Vector256 backdrop, Vector256 source) + => Vector256.Create( + Saturation(backdrop.GetLower().AsVector4(), source.GetLower().AsVector4()).AsVector128(), + Saturation(backdrop.GetUpper().AsVector4(), source.GetUpper().AsVector4()).AsVector128()); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Saturation(Vector512 backdrop, Vector512 source) + => Vector512.Create(Saturation(backdrop.GetLower(), source.GetLower()), Saturation(backdrop.GetUpper(), source.GetUpper())); + + /// + /// Returns the result of the "Color" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The blended color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Color(Vector4 backdrop, Vector4 source) + => SetLuminosity(source, Luminosity(backdrop)); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Color(Vector256 backdrop, Vector256 source) + => Vector256.Create( + Color(backdrop.GetLower().AsVector4(), source.GetLower().AsVector4()).AsVector128(), + Color(backdrop.GetUpper().AsVector4(), source.GetUpper().AsVector4()).AsVector128()); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Color(Vector512 backdrop, Vector512 source) + => Vector512.Create(Color(backdrop.GetLower(), source.GetLower()), Color(backdrop.GetUpper(), source.GetUpper())); + + /// + /// Returns the result of the "Luminosity" compositing equation. + /// + /// The backdrop vector. + /// The source vector. + /// The blended color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Luminosity(Vector4 backdrop, Vector4 source) + => SetLuminosity(backdrop, Luminosity(source)); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Luminosity(Vector256 backdrop, Vector256 source) + => Vector256.Create( + Luminosity(backdrop.GetLower().AsVector4(), source.GetLower().AsVector4()).AsVector128(), + Luminosity(backdrop.GetUpper().AsVector4(), source.GetUpper().AsVector4()).AsVector128()); + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Luminosity(Vector512 backdrop, Vector512 source) + => Vector512.Create(Luminosity(backdrop.GetLower(), source.GetLower()), Luminosity(backdrop.GetUpper(), source.GetUpper())); + /// /// Applies raster coverage to a Porter-Duff composition result. /// @@ -385,6 +631,113 @@ internal static partial class PorterDuffFunctions return Numerics.UnPremultiply(result, Vector512_.ShuffleNative(result, ShuffleAlphaControl)); } + /// + /// Calculates one ColorDodge component, including the singular cases defined by the blending model. + /// + /// The backdrop component. + /// The source component. + /// The blended component. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static float ColorDodgeValue(float backdrop, float source) + => backdrop == 0F ? 0F : source == 1F ? 1F : MathF.Min(1F, backdrop / (1F - source)); + + /// + /// Calculates one ColorBurn component, including the singular cases defined by the blending model. + /// + /// The backdrop component. + /// The source component. + /// The blended component. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static float ColorBurnValue(float backdrop, float source) + => backdrop == 1F ? 1F : source == 0F ? 0F : 1F - MathF.Min(1F, (1F - backdrop) / source); + + /// + /// Calculates one SoftLight component. + /// + /// The backdrop component. + /// The source component. + /// The blended component. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static float SoftLightValue(float backdrop, float source) + { + if (source <= .5F) + { + return backdrop - ((1F - (2F * source)) * backdrop * (1F - backdrop)); + } + + // The cubic segment joins the square-root segment smoothly while avoiding its steep slope near zero. + float d = backdrop <= .25F + ? (((((16F * backdrop) - 12F) * backdrop) + 4F) * backdrop) + : MathF.Sqrt(backdrop); + + return backdrop + (((2F * source) - 1F) * (d - backdrop)); + } + + /// + /// Calculates the saturation of an RGB color. + /// + /// The color. + /// The difference between the maximum and minimum RGB components. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static float Saturation(Vector4 color) + => MathF.Max(color.X, MathF.Max(color.Y, color.Z)) - MathF.Min(color.X, MathF.Min(color.Y, color.Z)); + + /// + /// Calculates the luminosity of an RGB color. + /// + /// The color. + /// The weighted RGB luminosity. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static float Luminosity(Vector4 color) + => (.3F * color.X) + (.59F * color.Y) + (.11F * color.Z); + + /// + /// Replaces the saturation of an RGB color while retaining its channel ordering. + /// + /// The color. + /// The required saturation. + /// The adjusted color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector4 SetSaturation(Vector4 color, float saturation) + { + float minimum = MathF.Min(color.X, MathF.Min(color.Y, color.Z)); + float range = MathF.Max(color.X, MathF.Max(color.Y, color.Z)) - minimum; + if (range == 0F) + { + return Vector4.Zero; + } + + // Translating the minimum to zero and scaling the range is equivalent to the specification's ordered-channel construction. + return (color - new Vector4(minimum)) * (saturation / range); + } + + /// + /// Replaces the luminosity of an RGB color and clips the result to the representable gamut. + /// + /// The color. + /// The required luminosity. + /// The adjusted color. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Vector4 SetLuminosity(Vector4 color, float luminosity) + { + color += new Vector4(luminosity - Luminosity(color)); + + float minimum = MathF.Min(color.X, MathF.Min(color.Y, color.Z)); + if (minimum < 0F) + { + // Pull every component toward the requested luminosity by the same ratio so hue is preserved. + color = new Vector4(luminosity) + ((color - new Vector4(luminosity)) * (luminosity / (luminosity - minimum))); + } + + float maximum = MathF.Max(color.X, MathF.Max(color.Y, color.Z)); + if (maximum > 1F) + { + color = new Vector4(luminosity) + ((color - new Vector4(luminosity)) * ((1F - luminosity) / (maximum - luminosity))); + } + + return Numerics.WithW(color, Vector4.Zero); + } + /// /// Helper function for Overlay and HardLight modes /// @@ -783,6 +1136,57 @@ internal static partial class PorterDuffFunctions return Numerics.UnPremultiply(color, alpha); } + /// + /// Returns the result of the "Plus" compositing equation. + /// + /// The destination vector. + /// The source vector. + /// The blended source and destination color. + /// The composition result. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Plus(Vector4 destination, Vector4 source, Vector4 blend) + { + Vector4 sourceAlpha = Numerics.PermuteW(source); + Vector4 destinationAlpha = Numerics.PermuteW(destination); + Vector4 overlap = sourceAlpha * destinationAlpha; + + // Plus retains both non-overlapping regions and uses the selected blend mode in their overlap. + Vector4 color = (destination * destinationAlpha) + (source * (sourceAlpha - overlap)) + (blend * overlap); + Vector4 alpha = Vector4.Min(Vector4.One, sourceAlpha + destinationAlpha); + color = Vector4.Min(Vector4.One, color); + + Numerics.UnPremultiply(ref color, alpha); + return color; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector256 Plus(Vector256 destination, Vector256 source, Vector256 blend) + { + Vector256 one = Vector256.Create(1F); + Vector256 sourceAlpha = Avx.Permute(source, ShuffleAlphaControl); + Vector256 destinationAlpha = Avx.Permute(destination, ShuffleAlphaControl); + Vector256 overlap = sourceAlpha * destinationAlpha; + Vector256 color = (destination * destinationAlpha) + (source * (sourceAlpha - overlap)) + (blend * overlap); + Vector256 alpha = Vector256.Min(one, sourceAlpha + destinationAlpha); + + return Numerics.UnPremultiply(Vector256.Min(one, color), alpha); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector512 Plus(Vector512 destination, Vector512 source, Vector512 blend) + { + Vector512 one = Vector512.Create(1F); + Vector512 sourceAlpha = Vector512_.ShuffleNative(source, ShuffleAlphaControl); + Vector512 destinationAlpha = Vector512_.ShuffleNative(destination, ShuffleAlphaControl); + Vector512 overlap = sourceAlpha * destinationAlpha; + Vector512 color = (destination * destinationAlpha) + (source * (sourceAlpha - overlap)) + (blend * overlap); + Vector512 alpha = Vector512.Min(one, sourceAlpha + destinationAlpha); + + return Numerics.UnPremultiply(Vector512.Min(one, color), alpha); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] private static Vector4 Clear(Vector4 backdrop, Vector4 source) => Vector4.Zero; diff --git a/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs b/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs index 7aa07cf51..aa74f6172 100644 --- a/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs +++ b/src/ImageSharp/PixelFormats/PixelColorBlendingMode.cs @@ -52,4 +52,49 @@ public enum PixelColorBlendingMode /// Multiplies or screens the colors, depending on the source value. /// HardLight, + + /// + /// Brightens the backdrop color to reflect the source color. + /// + ColorDodge, + + /// + /// Darkens the backdrop color to reflect the source color. + /// + ColorBurn, + + /// + /// Darkens or lightens the colors, depending on the source color. + /// + SoftLight, + + /// + /// Subtracts the darker color from the lighter color. + /// + Difference, + + /// + /// Produces an effect similar to Difference with lower contrast. + /// + Exclusion, + + /// + /// Uses the hue of the source color with the saturation and luminosity of the backdrop color. + /// + Hue, + + /// + /// Uses the saturation of the source color with the hue and luminosity of the backdrop color. + /// + Saturation, + + /// + /// Uses the hue and saturation of the source color with the luminosity of the backdrop color. + /// + Color, + + /// + /// Uses the luminosity of the source color with the hue and saturation of the backdrop color. + /// + Luminosity, } diff --git a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs index fe7de51c9..b17c90b92 100644 --- a/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs +++ b/src/ImageSharp/PixelFormats/PixelOperations{TPixel}.PixelBenders.cs @@ -42,6 +42,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenClear; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlayClear; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightClear; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeClear; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnClear; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightClear; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceClear; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionClear; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueClear; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationClear; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorClear; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminosityClear; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalClear; } @@ -57,6 +66,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenXor; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlayXor; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightXor; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeXor; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnXor; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightXor; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceXor; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionXor; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueXor; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationXor; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorXor; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminosityXor; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalXor; } @@ -72,6 +90,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenSrc; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlaySrc; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightSrc; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeSrc; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnSrc; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightSrc; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceSrc; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionSrc; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueSrc; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationSrc; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorSrc; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminositySrc; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalSrc; } @@ -87,6 +114,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenSrcAtop; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlaySrcAtop; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightSrcAtop; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeSrcAtop; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnSrcAtop; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightSrcAtop; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceSrcAtop; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionSrcAtop; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueSrcAtop; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationSrcAtop; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorSrcAtop; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminositySrcAtop; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalSrcAtop; } @@ -102,6 +138,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenSrcIn; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlaySrcIn; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightSrcIn; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeSrcIn; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnSrcIn; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightSrcIn; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceSrcIn; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionSrcIn; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueSrcIn; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationSrcIn; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorSrcIn; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminositySrcIn; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalSrcIn; } @@ -117,6 +162,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenSrcOut; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlaySrcOut; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightSrcOut; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeSrcOut; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnSrcOut; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightSrcOut; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceSrcOut; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionSrcOut; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueSrcOut; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationSrcOut; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorSrcOut; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminositySrcOut; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalSrcOut; } @@ -132,6 +186,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenDest; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlayDest; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightDest; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeDest; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnDest; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightDest; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceDest; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionDest; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueDest; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationDest; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorDest; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminosityDest; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalDest; } @@ -147,6 +210,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenDestAtop; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlayDestAtop; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightDestAtop; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeDestAtop; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnDestAtop; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightDestAtop; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceDestAtop; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionDestAtop; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueDestAtop; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationDestAtop; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorDestAtop; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminosityDestAtop; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalDestAtop; } @@ -162,6 +234,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenDestIn; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlayDestIn; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightDestIn; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeDestIn; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnDestIn; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightDestIn; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceDestIn; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionDestIn; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueDestIn; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationDestIn; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorDestIn; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminosityDestIn; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalDestIn; } @@ -177,6 +258,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenDestOut; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlayDestOut; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightDestOut; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeDestOut; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnDestOut; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightDestOut; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceDestOut; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionDestOut; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueDestOut; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationDestOut; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorDestOut; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminosityDestOut; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalDestOut; } @@ -192,10 +282,43 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenDestOver; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlayDestOver; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightDestOver; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeDestOver; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnDestOver; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightDestOver; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceDestOver; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionDestOver; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueDestOver; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationDestOver; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorDestOver; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminosityDestOver; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalDestOver; } + case PixelAlphaCompositionMode.Plus: + switch (colorMode) + { + case PixelColorBlendingMode.Multiply: return DefaultPixelBlenders.MultiplyPlus; + case PixelColorBlendingMode.Add: return DefaultPixelBlenders.AddPlus; + case PixelColorBlendingMode.Subtract: return DefaultPixelBlenders.SubtractPlus; + case PixelColorBlendingMode.Screen: return DefaultPixelBlenders.ScreenPlus; + case PixelColorBlendingMode.Darken: return DefaultPixelBlenders.DarkenPlus; + case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenPlus; + case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlayPlus; + case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightPlus; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgePlus; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnPlus; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightPlus; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferencePlus; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionPlus; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HuePlus; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationPlus; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorPlus; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminosityPlus; + case PixelColorBlendingMode.Normal: + default: return DefaultPixelBlenders.NormalPlus; + } + case PixelAlphaCompositionMode.SrcOver: default: switch (colorMode) @@ -208,6 +331,15 @@ public partial class PixelOperations case PixelColorBlendingMode.Lighten: return DefaultPixelBlenders.LightenSrcOver; case PixelColorBlendingMode.Overlay: return DefaultPixelBlenders.OverlaySrcOver; case PixelColorBlendingMode.HardLight: return DefaultPixelBlenders.HardLightSrcOver; + case PixelColorBlendingMode.ColorDodge: return DefaultPixelBlenders.ColorDodgeSrcOver; + case PixelColorBlendingMode.ColorBurn: return DefaultPixelBlenders.ColorBurnSrcOver; + case PixelColorBlendingMode.SoftLight: return DefaultPixelBlenders.SoftLightSrcOver; + case PixelColorBlendingMode.Difference: return DefaultPixelBlenders.DifferenceSrcOver; + case PixelColorBlendingMode.Exclusion: return DefaultPixelBlenders.ExclusionSrcOver; + case PixelColorBlendingMode.Hue: return DefaultPixelBlenders.HueSrcOver; + case PixelColorBlendingMode.Saturation: return DefaultPixelBlenders.SaturationSrcOver; + case PixelColorBlendingMode.Color: return DefaultPixelBlenders.ColorSrcOver; + case PixelColorBlendingMode.Luminosity: return DefaultPixelBlenders.LuminositySrcOver; case PixelColorBlendingMode.Normal: default: return DefaultPixelBlenders.NormalSrcOver; } diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs index c203bee16..7562d8ff6 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenderTests.cs @@ -50,7 +50,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenClear.GetType(), DefaultPixelBlenders.LightenClear.GetType(), DefaultPixelBlenders.OverlayClear.GetType(), - DefaultPixelBlenders.HardLightClear.GetType()); + DefaultPixelBlenders.HardLightClear.GetType(), + DefaultPixelBlenders.ColorDodgeClear.GetType(), + DefaultPixelBlenders.ColorBurnClear.GetType(), + DefaultPixelBlenders.SoftLightClear.GetType(), + DefaultPixelBlenders.DifferenceClear.GetType(), + DefaultPixelBlenders.ExclusionClear.GetType(), + DefaultPixelBlenders.HueClear.GetType(), + DefaultPixelBlenders.SaturationClear.GetType(), + DefaultPixelBlenders.ColorClear.GetType(), + DefaultPixelBlenders.LuminosityClear.GetType()); AddBlenderModeMappings( data, @@ -63,7 +72,38 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenXor.GetType(), DefaultPixelBlenders.LightenXor.GetType(), DefaultPixelBlenders.OverlayXor.GetType(), - DefaultPixelBlenders.HardLightXor.GetType()); + DefaultPixelBlenders.HardLightXor.GetType(), + DefaultPixelBlenders.ColorDodgeXor.GetType(), + DefaultPixelBlenders.ColorBurnXor.GetType(), + DefaultPixelBlenders.SoftLightXor.GetType(), + DefaultPixelBlenders.DifferenceXor.GetType(), + DefaultPixelBlenders.ExclusionXor.GetType(), + DefaultPixelBlenders.HueXor.GetType(), + DefaultPixelBlenders.SaturationXor.GetType(), + DefaultPixelBlenders.ColorXor.GetType(), + DefaultPixelBlenders.LuminosityXor.GetType()); + + AddBlenderModeMappings( + data, + PixelAlphaCompositionMode.Plus, + DefaultPixelBlenders.NormalPlus.GetType(), + DefaultPixelBlenders.MultiplyPlus.GetType(), + DefaultPixelBlenders.AddPlus.GetType(), + DefaultPixelBlenders.SubtractPlus.GetType(), + DefaultPixelBlenders.ScreenPlus.GetType(), + DefaultPixelBlenders.DarkenPlus.GetType(), + DefaultPixelBlenders.LightenPlus.GetType(), + DefaultPixelBlenders.OverlayPlus.GetType(), + DefaultPixelBlenders.HardLightPlus.GetType(), + DefaultPixelBlenders.ColorDodgePlus.GetType(), + DefaultPixelBlenders.ColorBurnPlus.GetType(), + DefaultPixelBlenders.SoftLightPlus.GetType(), + DefaultPixelBlenders.DifferencePlus.GetType(), + DefaultPixelBlenders.ExclusionPlus.GetType(), + DefaultPixelBlenders.HuePlus.GetType(), + DefaultPixelBlenders.SaturationPlus.GetType(), + DefaultPixelBlenders.ColorPlus.GetType(), + DefaultPixelBlenders.LuminosityPlus.GetType()); AddBlenderModeMappings( data, @@ -76,7 +116,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenSrc.GetType(), DefaultPixelBlenders.LightenSrc.GetType(), DefaultPixelBlenders.OverlaySrc.GetType(), - DefaultPixelBlenders.HardLightSrc.GetType()); + DefaultPixelBlenders.HardLightSrc.GetType(), + DefaultPixelBlenders.ColorDodgeSrc.GetType(), + DefaultPixelBlenders.ColorBurnSrc.GetType(), + DefaultPixelBlenders.SoftLightSrc.GetType(), + DefaultPixelBlenders.DifferenceSrc.GetType(), + DefaultPixelBlenders.ExclusionSrc.GetType(), + DefaultPixelBlenders.HueSrc.GetType(), + DefaultPixelBlenders.SaturationSrc.GetType(), + DefaultPixelBlenders.ColorSrc.GetType(), + DefaultPixelBlenders.LuminositySrc.GetType()); AddBlenderModeMappings( data, @@ -89,7 +138,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenSrcAtop.GetType(), DefaultPixelBlenders.LightenSrcAtop.GetType(), DefaultPixelBlenders.OverlaySrcAtop.GetType(), - DefaultPixelBlenders.HardLightSrcAtop.GetType()); + DefaultPixelBlenders.HardLightSrcAtop.GetType(), + DefaultPixelBlenders.ColorDodgeSrcAtop.GetType(), + DefaultPixelBlenders.ColorBurnSrcAtop.GetType(), + DefaultPixelBlenders.SoftLightSrcAtop.GetType(), + DefaultPixelBlenders.DifferenceSrcAtop.GetType(), + DefaultPixelBlenders.ExclusionSrcAtop.GetType(), + DefaultPixelBlenders.HueSrcAtop.GetType(), + DefaultPixelBlenders.SaturationSrcAtop.GetType(), + DefaultPixelBlenders.ColorSrcAtop.GetType(), + DefaultPixelBlenders.LuminositySrcAtop.GetType()); AddBlenderModeMappings( data, @@ -102,7 +160,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenSrcIn.GetType(), DefaultPixelBlenders.LightenSrcIn.GetType(), DefaultPixelBlenders.OverlaySrcIn.GetType(), - DefaultPixelBlenders.HardLightSrcIn.GetType()); + DefaultPixelBlenders.HardLightSrcIn.GetType(), + DefaultPixelBlenders.ColorDodgeSrcIn.GetType(), + DefaultPixelBlenders.ColorBurnSrcIn.GetType(), + DefaultPixelBlenders.SoftLightSrcIn.GetType(), + DefaultPixelBlenders.DifferenceSrcIn.GetType(), + DefaultPixelBlenders.ExclusionSrcIn.GetType(), + DefaultPixelBlenders.HueSrcIn.GetType(), + DefaultPixelBlenders.SaturationSrcIn.GetType(), + DefaultPixelBlenders.ColorSrcIn.GetType(), + DefaultPixelBlenders.LuminositySrcIn.GetType()); AddBlenderModeMappings( data, @@ -115,7 +182,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenSrcOut.GetType(), DefaultPixelBlenders.LightenSrcOut.GetType(), DefaultPixelBlenders.OverlaySrcOut.GetType(), - DefaultPixelBlenders.HardLightSrcOut.GetType()); + DefaultPixelBlenders.HardLightSrcOut.GetType(), + DefaultPixelBlenders.ColorDodgeSrcOut.GetType(), + DefaultPixelBlenders.ColorBurnSrcOut.GetType(), + DefaultPixelBlenders.SoftLightSrcOut.GetType(), + DefaultPixelBlenders.DifferenceSrcOut.GetType(), + DefaultPixelBlenders.ExclusionSrcOut.GetType(), + DefaultPixelBlenders.HueSrcOut.GetType(), + DefaultPixelBlenders.SaturationSrcOut.GetType(), + DefaultPixelBlenders.ColorSrcOut.GetType(), + DefaultPixelBlenders.LuminositySrcOut.GetType()); AddBlenderModeMappings( data, @@ -128,7 +204,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenDest.GetType(), DefaultPixelBlenders.LightenDest.GetType(), DefaultPixelBlenders.OverlayDest.GetType(), - DefaultPixelBlenders.HardLightDest.GetType()); + DefaultPixelBlenders.HardLightDest.GetType(), + DefaultPixelBlenders.ColorDodgeDest.GetType(), + DefaultPixelBlenders.ColorBurnDest.GetType(), + DefaultPixelBlenders.SoftLightDest.GetType(), + DefaultPixelBlenders.DifferenceDest.GetType(), + DefaultPixelBlenders.ExclusionDest.GetType(), + DefaultPixelBlenders.HueDest.GetType(), + DefaultPixelBlenders.SaturationDest.GetType(), + DefaultPixelBlenders.ColorDest.GetType(), + DefaultPixelBlenders.LuminosityDest.GetType()); AddBlenderModeMappings( data, @@ -141,7 +226,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenDestAtop.GetType(), DefaultPixelBlenders.LightenDestAtop.GetType(), DefaultPixelBlenders.OverlayDestAtop.GetType(), - DefaultPixelBlenders.HardLightDestAtop.GetType()); + DefaultPixelBlenders.HardLightDestAtop.GetType(), + DefaultPixelBlenders.ColorDodgeDestAtop.GetType(), + DefaultPixelBlenders.ColorBurnDestAtop.GetType(), + DefaultPixelBlenders.SoftLightDestAtop.GetType(), + DefaultPixelBlenders.DifferenceDestAtop.GetType(), + DefaultPixelBlenders.ExclusionDestAtop.GetType(), + DefaultPixelBlenders.HueDestAtop.GetType(), + DefaultPixelBlenders.SaturationDestAtop.GetType(), + DefaultPixelBlenders.ColorDestAtop.GetType(), + DefaultPixelBlenders.LuminosityDestAtop.GetType()); AddBlenderModeMappings( data, @@ -154,7 +248,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenDestIn.GetType(), DefaultPixelBlenders.LightenDestIn.GetType(), DefaultPixelBlenders.OverlayDestIn.GetType(), - DefaultPixelBlenders.HardLightDestIn.GetType()); + DefaultPixelBlenders.HardLightDestIn.GetType(), + DefaultPixelBlenders.ColorDodgeDestIn.GetType(), + DefaultPixelBlenders.ColorBurnDestIn.GetType(), + DefaultPixelBlenders.SoftLightDestIn.GetType(), + DefaultPixelBlenders.DifferenceDestIn.GetType(), + DefaultPixelBlenders.ExclusionDestIn.GetType(), + DefaultPixelBlenders.HueDestIn.GetType(), + DefaultPixelBlenders.SaturationDestIn.GetType(), + DefaultPixelBlenders.ColorDestIn.GetType(), + DefaultPixelBlenders.LuminosityDestIn.GetType()); AddBlenderModeMappings( data, @@ -167,7 +270,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenDestOut.GetType(), DefaultPixelBlenders.LightenDestOut.GetType(), DefaultPixelBlenders.OverlayDestOut.GetType(), - DefaultPixelBlenders.HardLightDestOut.GetType()); + DefaultPixelBlenders.HardLightDestOut.GetType(), + DefaultPixelBlenders.ColorDodgeDestOut.GetType(), + DefaultPixelBlenders.ColorBurnDestOut.GetType(), + DefaultPixelBlenders.SoftLightDestOut.GetType(), + DefaultPixelBlenders.DifferenceDestOut.GetType(), + DefaultPixelBlenders.ExclusionDestOut.GetType(), + DefaultPixelBlenders.HueDestOut.GetType(), + DefaultPixelBlenders.SaturationDestOut.GetType(), + DefaultPixelBlenders.ColorDestOut.GetType(), + DefaultPixelBlenders.LuminosityDestOut.GetType()); AddBlenderModeMappings( data, @@ -180,7 +292,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenDestOver.GetType(), DefaultPixelBlenders.LightenDestOver.GetType(), DefaultPixelBlenders.OverlayDestOver.GetType(), - DefaultPixelBlenders.HardLightDestOver.GetType()); + DefaultPixelBlenders.HardLightDestOver.GetType(), + DefaultPixelBlenders.ColorDodgeDestOver.GetType(), + DefaultPixelBlenders.ColorBurnDestOver.GetType(), + DefaultPixelBlenders.SoftLightDestOver.GetType(), + DefaultPixelBlenders.DifferenceDestOver.GetType(), + DefaultPixelBlenders.ExclusionDestOver.GetType(), + DefaultPixelBlenders.HueDestOver.GetType(), + DefaultPixelBlenders.SaturationDestOver.GetType(), + DefaultPixelBlenders.ColorDestOver.GetType(), + DefaultPixelBlenders.LuminosityDestOver.GetType()); AddBlenderModeMappings( data, @@ -193,7 +314,16 @@ public class PixelBlenderTests DefaultPixelBlenders.DarkenSrcOver.GetType(), DefaultPixelBlenders.LightenSrcOver.GetType(), DefaultPixelBlenders.OverlaySrcOver.GetType(), - DefaultPixelBlenders.HardLightSrcOver.GetType()); + DefaultPixelBlenders.HardLightSrcOver.GetType(), + DefaultPixelBlenders.ColorDodgeSrcOver.GetType(), + DefaultPixelBlenders.ColorBurnSrcOver.GetType(), + DefaultPixelBlenders.SoftLightSrcOver.GetType(), + DefaultPixelBlenders.DifferenceSrcOver.GetType(), + DefaultPixelBlenders.ExclusionSrcOver.GetType(), + DefaultPixelBlenders.HueSrcOver.GetType(), + DefaultPixelBlenders.SaturationSrcOver.GetType(), + DefaultPixelBlenders.ColorSrcOver.GetType(), + DefaultPixelBlenders.LuminositySrcOver.GetType()); return data; } @@ -228,6 +358,51 @@ public class PixelBlenderTests ExerciseAllAssociatedAlphaBlenderModeCombinations, HwIntrinsics.AllowAll | HwIntrinsics.DisableAVX512F | HwIntrinsics.DisableAVX | HwIntrinsics.DisableHWIntrinsic); + [Theory] + [InlineData(PixelColorBlendingMode.ColorDodge)] + [InlineData(PixelColorBlendingMode.ColorBurn)] + [InlineData(PixelColorBlendingMode.SoftLight)] + [InlineData(PixelColorBlendingMode.Difference)] + [InlineData(PixelColorBlendingMode.Exclusion)] + [InlineData(PixelColorBlendingMode.Hue)] + [InlineData(PixelColorBlendingMode.Saturation)] + [InlineData(PixelColorBlendingMode.Color)] + [InlineData(PixelColorBlendingMode.Luminosity)] + public void NewSrcOverModesMatchAcrossAlphaRepresentations(PixelColorBlendingMode colorMode) + { + Rgba32 background = new(220, 80, 40, 160); + Rgba32 source = new(20, 180, 120, 96); + PixelBlender straightBlender = PixelOperations.Instance.GetPixelBlender(colorMode, PixelAlphaCompositionMode.SrcOver); + PixelBlender associatedBlender = PixelOperations.Instance.GetPixelBlender(colorMode, PixelAlphaCompositionMode.SrcOver); + + Rgba32 straightResult = straightBlender.Blend(background, source, .625F); + Rgba32P expected = Rgba32P.FromRgba32(straightResult); + Rgba32P actual = associatedBlender.Blend(Rgba32P.FromRgba32(background), Rgba32P.FromRgba32(source), .625F); + + // Associated storage introduces one extra byte quantization, but both paths must describe the same composite. + Assert.True(Math.Abs(expected.R - actual.R) <= 1, $"{colorMode}: expected {expected}, actual {actual}"); + Assert.True(Math.Abs(expected.G - actual.G) <= 1, $"{colorMode}: expected {expected}, actual {actual}"); + Assert.True(Math.Abs(expected.B - actual.B) <= 1, $"{colorMode}: expected {expected}, actual {actual}"); + Assert.Equal(expected.A, actual.A); + } + + [Fact] + public void PlusMatchesAcrossAlphaRepresentations() + { + Rgba32 background = new(220, 80, 40, 160); + Rgba32 source = new(20, 180, 120, 96); + PixelBlender straightBlender = PixelOperations.Instance.GetPixelBlender(PixelColorBlendingMode.Normal, PixelAlphaCompositionMode.Plus); + PixelBlender associatedBlender = PixelOperations.Instance.GetPixelBlender(PixelColorBlendingMode.Normal, PixelAlphaCompositionMode.Plus); + + Rgba32P expected = Rgba32P.FromRgba32(straightBlender.Blend(background, source, .625F)); + Rgba32P actual = associatedBlender.Blend(Rgba32P.FromRgba32(background), Rgba32P.FromRgba32(source), .625F); + + Assert.True(Math.Abs(expected.R - actual.R) <= 1, $"expected {expected}, actual {actual}"); + Assert.True(Math.Abs(expected.G - actual.G) <= 1, $"expected {expected}, actual {actual}"); + Assert.True(Math.Abs(expected.B - actual.B) <= 1, $"expected {expected}, actual {actual}"); + Assert.Equal(expected.A, actual.A); + } + [Fact] public void AssociatedHardLightDestAtopRoundsExactMidpointAwayFromZero() => FeatureTestRunner.RunWithHwIntrinsicsFeature( @@ -691,6 +866,8 @@ public class PixelBlenderTests { Color.MistyRose.ToPixel(), Color.MidnightBlue.ToPixel(), 1, PixelAlphaCompositionMode.SrcIn, Color.MidnightBlue.ToPixel() }, { Color.MistyRose.ToPixel(), Color.MidnightBlue.ToPixel(), 1, PixelAlphaCompositionMode.SrcOut, new Rgba32(0) }, { Color.MistyRose.ToPixel(), Color.MidnightBlue.ToPixel(), 1, PixelAlphaCompositionMode.SrcOver, Color.MidnightBlue.ToPixel() }, + { new Rgba32(51, 102, 153, 77), new Rgba32(204, 51, 26, 102), .5F, PixelAlphaCompositionMode.Plus, new Rgba32(112, 82, 102, 128) }, + { new Rgba32(230, 51, 26, 191), new Rgba32(204, 230, 77, 191), 1F, PixelAlphaCompositionMode.Plus, new Rgba32(255, 210, 77, 255) }, }; [Theory] @@ -716,7 +893,16 @@ public class PixelBlenderTests Type darken, Type lighten, Type overlay, - Type hardLight) + Type hardLight, + Type colorDodge, + Type colorBurn, + Type softLight, + Type difference, + Type exclusion, + Type hue, + Type saturation, + Type color, + Type luminosity) { data.Add(PixelColorBlendingMode.Normal, alphaMode, normal); data.Add(PixelColorBlendingMode.Multiply, alphaMode, multiply); @@ -727,6 +913,15 @@ public class PixelBlenderTests data.Add(PixelColorBlendingMode.Lighten, alphaMode, lighten); data.Add(PixelColorBlendingMode.Overlay, alphaMode, overlay); data.Add(PixelColorBlendingMode.HardLight, alphaMode, hardLight); + data.Add(PixelColorBlendingMode.ColorDodge, alphaMode, colorDodge); + data.Add(PixelColorBlendingMode.ColorBurn, alphaMode, colorBurn); + data.Add(PixelColorBlendingMode.SoftLight, alphaMode, softLight); + data.Add(PixelColorBlendingMode.Difference, alphaMode, difference); + data.Add(PixelColorBlendingMode.Exclusion, alphaMode, exclusion); + data.Add(PixelColorBlendingMode.Hue, alphaMode, hue); + data.Add(PixelColorBlendingMode.Saturation, alphaMode, saturation); + data.Add(PixelColorBlendingMode.Color, alphaMode, color); + data.Add(PixelColorBlendingMode.Luminosity, alphaMode, luminosity); } private static void ExerciseAllBlenderModeCombinations() diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs index 0def09788..4891f9e44 100644 --- a/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs +++ b/tests/ImageSharp.Tests/PixelFormats/PixelBlenders/PorterDuffFunctionsTests.cs @@ -4,6 +4,7 @@ using System.Numerics; using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; +using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats.PixelBlenders; using SixLabors.ImageSharp.Tests.TestUtilities; @@ -444,10 +445,136 @@ public class PorterDuffFunctionsTests Assert.Equal(expected512, actual, FloatComparer); } + public static TheoryData ExtendedBlendFunctionData { get; } = new() + { + { PixelColorBlendingMode.ColorDodge, CreateTestVector(0F, .25F, .8F, 1F), CreateTestVector(1F, .5F, .5F, 1F), CreateTestVector(0F, .5F, 1F, 1F) }, + { PixelColorBlendingMode.ColorBurn, CreateTestVector(1F, .4F, .75F, 1F), CreateTestVector(0F, 0F, .5F, 1F), CreateTestVector(1F, 0F, .5F, 1F) }, + { PixelColorBlendingMode.SoftLight, CreateTestVector(.25F, .64F, .16F, 1F), CreateTestVector(.75F, .75F, .25F, 1F), CreateTestVector(.375F, .72F, .0928F, 1F) }, + { PixelColorBlendingMode.SoftLight, CreateTestVector(.25F, .36F, .81F, 1F), CreateTestVector(.5F, .5F, .5F, 1F), CreateTestVector(.25F, .36F, .81F, 1F) }, + { PixelColorBlendingMode.Difference, CreateTestVector(.1F, .8F, .4F, 1F), CreateTestVector(.7F, .2F, .4F, 1F), CreateTestVector(.6F, .6F, 0F, 1F) }, + { PixelColorBlendingMode.Exclusion, CreateTestVector(.1F, .8F, .4F, 1F), CreateTestVector(.7F, .2F, .4F, 1F), CreateTestVector(.66F, .68F, .48F, 1F) }, + { PixelColorBlendingMode.Hue, CreateTestVector(.2F, .7F, .4F, 1F), CreateTestVector(.9F, .1F, .6F, 1F), CreateTestVector(.832625F, .332625F, .645125F, 1F) }, + { PixelColorBlendingMode.Saturation, CreateTestVector(.2F, .7F, .4F, 1F), CreateTestVector(.9F, .1F, .6F, 1F), CreateTestVector(.0098F, .8098F, .3298F, 1F) }, + { PixelColorBlendingMode.Color, CreateTestVector(.2F, .7F, .4F, 1F), CreateTestVector(.9F, .1F, .6F, 1F), CreateTestVector(1F, .234851485F, .713069307F, 1F) }, + { PixelColorBlendingMode.Luminosity, CreateTestVector(.2F, .7F, .4F, 1F), CreateTestVector(.9F, .1F, .6F, 1F), CreateTestVector(.078F, .578F, .278F, 1F) }, + { PixelColorBlendingMode.Hue, CreateTestVector(.5F, .5F, .5F, 1F), CreateTestVector(.9F, .2F, .6F, 1F), CreateTestVector(.5F, .5F, .5F, 1F) }, + { PixelColorBlendingMode.Saturation, CreateTestVector(.5F, .5F, .5F, 1F), CreateTestVector(.9F, .2F, .6F, 1F), CreateTestVector(.5F, .5F, .5F, 1F) }, + }; + + [Theory] + [MemberData(nameof(ExtendedBlendFunctionData))] + public void ExtendedBlendFunction(PixelColorBlendingMode mode, TestVector4 back, TestVector4 source, TestVector4 expected) + { + Vector4 actual = InvokeExtendedBlend(mode, back, source, 1F); + VectorAssert.Equal(expected, actual, 4); + } + + [Theory] + [MemberData(nameof(ExtendedBlendFunctionData))] + public void ExtendedBlendFunction256(PixelColorBlendingMode mode, TestVector4 back, TestVector4 source, TestVector4 expected) + { + if (!Avx.IsSupported) + { + return; + } + + Vector256 actual = InvokeExtendedBlend(mode, Vector256.Create(back.AsVector().AsVector128(), back.AsVector().AsVector128()), Vector256.Create(source.AsVector().AsVector128(), source.AsVector().AsVector128()), Vector256.Create(1F)); + Vector256 expectedVector = Vector256.Create(expected.AsVector().AsVector128(), expected.AsVector().AsVector128()); + Assert.Equal(expectedVector, actual, FloatComparer); + } + + [Theory] + [MemberData(nameof(ExtendedBlendFunctionData))] + public void ExtendedBlendFunction512(PixelColorBlendingMode mode, TestVector4 back, TestVector4 source, TestVector4 expected) + { + if (!Avx512F.IsSupported) + { + return; + } + + Vector512 actual = InvokeExtendedBlend(mode, CreateVector512(back), CreateVector512(source), Vector512.Create(1F)); + Assert.Equal(CreateVector512(expected), actual, FloatComparer); + } + + /// + /// Creates serializable vector test data without relying on the legacy convenience constructor's channel assignments. + /// + /// The X component. + /// The Y component. + /// The Z component. + /// The W component. + /// The test vector. + private static TestVector4 CreateTestVector(float x, float y, float z, float w) + => new() { X = x, Y = y, Z = z, W = w }; + + /// + /// Invokes a new blend mode through its straight-alpha source-over function. + /// + /// The color blending mode. + /// The backdrop vector. + /// The source vector. + /// The source amount. + /// The composition result. + private static Vector4 InvokeExtendedBlend(PixelColorBlendingMode mode, Vector4 backdrop, Vector4 source, float amount) + => mode switch + { + PixelColorBlendingMode.ColorDodge => PorterDuffFunctions.ColorDodgeSrcOver(backdrop, source, amount), + PixelColorBlendingMode.ColorBurn => PorterDuffFunctions.ColorBurnSrcOver(backdrop, source, amount), + PixelColorBlendingMode.SoftLight => PorterDuffFunctions.SoftLightSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Difference => PorterDuffFunctions.DifferenceSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Exclusion => PorterDuffFunctions.ExclusionSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Hue => PorterDuffFunctions.HueSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Saturation => PorterDuffFunctions.SaturationSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Color => PorterDuffFunctions.ColorSrcOver(backdrop, source, amount), + _ => PorterDuffFunctions.LuminositySrcOver(backdrop, source, amount), + }; + + /// + private static Vector256 InvokeExtendedBlend(PixelColorBlendingMode mode, Vector256 backdrop, Vector256 source, Vector256 amount) + => mode switch + { + PixelColorBlendingMode.ColorDodge => PorterDuffFunctions.ColorDodgeSrcOver(backdrop, source, amount), + PixelColorBlendingMode.ColorBurn => PorterDuffFunctions.ColorBurnSrcOver(backdrop, source, amount), + PixelColorBlendingMode.SoftLight => PorterDuffFunctions.SoftLightSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Difference => PorterDuffFunctions.DifferenceSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Exclusion => PorterDuffFunctions.ExclusionSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Hue => PorterDuffFunctions.HueSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Saturation => PorterDuffFunctions.SaturationSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Color => PorterDuffFunctions.ColorSrcOver(backdrop, source, amount), + _ => PorterDuffFunctions.LuminositySrcOver(backdrop, source, amount), + }; + + /// + private static Vector512 InvokeExtendedBlend(PixelColorBlendingMode mode, Vector512 backdrop, Vector512 source, Vector512 amount) + => mode switch + { + PixelColorBlendingMode.ColorDodge => PorterDuffFunctions.ColorDodgeSrcOver(backdrop, source, amount), + PixelColorBlendingMode.ColorBurn => PorterDuffFunctions.ColorBurnSrcOver(backdrop, source, amount), + PixelColorBlendingMode.SoftLight => PorterDuffFunctions.SoftLightSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Difference => PorterDuffFunctions.DifferenceSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Exclusion => PorterDuffFunctions.ExclusionSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Hue => PorterDuffFunctions.HueSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Saturation => PorterDuffFunctions.SaturationSrcOver(backdrop, source, amount), + PixelColorBlendingMode.Color => PorterDuffFunctions.ColorSrcOver(backdrop, source, amount), + _ => PorterDuffFunctions.LuminositySrcOver(backdrop, source, amount), + }; + private static Vector512 CreateVector512(TestVector4 vector) => Vector512.Create( - vector.X, vector.Y, vector.Z, vector.W, - vector.X, vector.Y, vector.Z, vector.W, - vector.X, vector.Y, vector.Z, vector.W, - vector.X, vector.Y, vector.Z, vector.W); + vector.X, + vector.Y, + vector.Z, + vector.W, + vector.X, + vector.Y, + vector.Z, + vector.W, + vector.X, + vector.Y, + vector.Z, + vector.W, + vector.X, + vector.Y, + vector.Z, + vector.W); }