@ -50,7 +50,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightClear . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorClear . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminosityClear . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -63,7 +72,38 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightXor . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorXor . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminosityXor . GetType ( ) ) ;
AddBlenderModeMappings (
data ,
PixelAlphaCompositionMode . Plus ,
DefaultPixelBlenders < Rgba32 > . NormalPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . MultiplyPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . AddPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SubtractPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ScreenPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgePlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferencePlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HuePlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorPlus . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminosityPlus . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -76,7 +116,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlaySrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlaySrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightSrc . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorSrc . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminositySrc . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -89,7 +138,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlaySrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlaySrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightSrcAtop . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorSrcAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminositySrcAtop . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -102,7 +160,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlaySrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlaySrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightSrcIn . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorSrcIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminositySrcIn . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -115,7 +182,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlaySrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlaySrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightSrcOut . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorSrcOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminositySrcOut . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -128,7 +204,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightDest . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDest . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminosityDest . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -141,7 +226,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightDestAtop . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDestAtop . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminosityDestAtop . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -154,7 +248,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightDestIn . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDestIn . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminosityDestIn . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -167,7 +270,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightDestOut . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDestOut . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminosityDestOut . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -180,7 +292,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlayDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightDestOver . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDestOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminosityDestOver . GetType ( ) ) ;
AddBlenderModeMappings (
AddBlenderModeMappings (
data ,
data ,
@ -193,7 +314,16 @@ public class PixelBlenderTests
DefaultPixelBlenders < Rgba32 > . DarkenSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DarkenSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LightenSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlaySrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . OverlaySrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HardLightSrcOver . GetType ( ) ) ;
DefaultPixelBlenders < Rgba32 > . HardLightSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorDodgeSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorBurnSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SoftLightSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . DifferenceSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ExclusionSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . HueSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . SaturationSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . ColorSrcOver . GetType ( ) ,
DefaultPixelBlenders < Rgba32 > . LuminositySrcOver . GetType ( ) ) ;
return data ;
return data ;
}
}
@ -228,6 +358,51 @@ public class PixelBlenderTests
ExerciseAllAssociatedAlphaBlenderModeCombinations ,
ExerciseAllAssociatedAlphaBlenderModeCombinations ,
HwIntrinsics . AllowAll | HwIntrinsics . DisableAVX512F | HwIntrinsics . DisableAVX | HwIntrinsics . DisableHWIntrinsic ) ;
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 ( 2 2 0 , 8 0 , 4 0 , 1 6 0 ) ;
Rgba32 source = new ( 2 0 , 1 8 0 , 1 2 0 , 9 6 ) ;
PixelBlender < Rgba32 > straightBlender = PixelOperations < Rgba32 > . Instance . GetPixelBlender ( colorMode , PixelAlphaCompositionMode . SrcOver ) ;
PixelBlender < Rgba32P > associatedBlender = PixelOperations < Rgba32P > . Instance . GetPixelBlender ( colorMode , PixelAlphaCompositionMode . SrcOver ) ;
Rgba32 straightResult = straightBlender . Blend ( background , source , . 6 2 5F ) ;
Rgba32P expected = Rgba32P . FromRgba32 ( straightResult ) ;
Rgba32P actual = associatedBlender . Blend ( Rgba32P . FromRgba32 ( background ) , Rgba32P . FromRgba32 ( source ) , . 6 2 5F ) ;
// 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 ( 2 2 0 , 8 0 , 4 0 , 1 6 0 ) ;
Rgba32 source = new ( 2 0 , 1 8 0 , 1 2 0 , 9 6 ) ;
PixelBlender < Rgba32 > straightBlender = PixelOperations < Rgba32 > . Instance . GetPixelBlender ( PixelColorBlendingMode . Normal , PixelAlphaCompositionMode . Plus ) ;
PixelBlender < Rgba32P > associatedBlender = PixelOperations < Rgba32P > . Instance . GetPixelBlender ( PixelColorBlendingMode . Normal , PixelAlphaCompositionMode . Plus ) ;
Rgba32P expected = Rgba32P . FromRgba32 ( straightBlender . Blend ( background , source , . 6 2 5F ) ) ;
Rgba32P actual = associatedBlender . Blend ( Rgba32P . FromRgba32 ( background ) , Rgba32P . FromRgba32 ( source ) , . 6 2 5F ) ;
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]
[Fact]
public void AssociatedHardLightDestAtopRoundsExactMidpointAwayFromZero ( ) = >
public void AssociatedHardLightDestAtopRoundsExactMidpointAwayFromZero ( ) = >
FeatureTestRunner . RunWithHwIntrinsicsFeature (
FeatureTestRunner . RunWithHwIntrinsicsFeature (
@ -691,6 +866,8 @@ public class PixelBlenderTests
{ Color . MistyRose . ToPixel < Rgba32 > ( ) , Color . MidnightBlue . ToPixel < Rgba32 > ( ) , 1 , PixelAlphaCompositionMode . SrcIn , Color . MidnightBlue . ToPixel < Rgba32 > ( ) } ,
{ Color . MistyRose . ToPixel < Rgba32 > ( ) , Color . MidnightBlue . ToPixel < Rgba32 > ( ) , 1 , PixelAlphaCompositionMode . SrcIn , Color . MidnightBlue . ToPixel < Rgba32 > ( ) } ,
{ Color . MistyRose . ToPixel < Rgba32 > ( ) , Color . MidnightBlue . ToPixel < Rgba32 > ( ) , 1 , PixelAlphaCompositionMode . SrcOut , new Rgba32 ( 0 ) } ,
{ Color . MistyRose . ToPixel < Rgba32 > ( ) , Color . MidnightBlue . ToPixel < Rgba32 > ( ) , 1 , PixelAlphaCompositionMode . SrcOut , new Rgba32 ( 0 ) } ,
{ Color . MistyRose . ToPixel < Rgba32 > ( ) , Color . MidnightBlue . ToPixel < Rgba32 > ( ) , 1 , PixelAlphaCompositionMode . SrcOver , Color . MidnightBlue . ToPixel < Rgba32 > ( ) } ,
{ Color . MistyRose . ToPixel < Rgba32 > ( ) , Color . MidnightBlue . ToPixel < Rgba32 > ( ) , 1 , PixelAlphaCompositionMode . SrcOver , Color . MidnightBlue . ToPixel < Rgba32 > ( ) } ,
{ new Rgba32 ( 5 1 , 1 0 2 , 1 5 3 , 7 7 ) , new Rgba32 ( 2 0 4 , 5 1 , 2 6 , 1 0 2 ) , . 5F , PixelAlphaCompositionMode . Plus , new Rgba32 ( 1 1 2 , 8 2 , 1 0 2 , 1 2 8 ) } ,
{ new Rgba32 ( 2 3 0 , 5 1 , 2 6 , 1 9 1 ) , new Rgba32 ( 2 0 4 , 2 3 0 , 7 7 , 1 9 1 ) , 1F , PixelAlphaCompositionMode . Plus , new Rgba32 ( 2 5 5 , 2 1 0 , 7 7 , 2 5 5 ) } ,
} ;
} ;
[Theory]
[Theory]
@ -716,7 +893,16 @@ public class PixelBlenderTests
Type darken ,
Type darken ,
Type lighten ,
Type lighten ,
Type overlay ,
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 . Normal , alphaMode , normal ) ;
data . Add ( PixelColorBlendingMode . Multiply , alphaMode , multiply ) ;
data . Add ( PixelColorBlendingMode . Multiply , alphaMode , multiply ) ;
@ -727,6 +913,15 @@ public class PixelBlenderTests
data . Add ( PixelColorBlendingMode . Lighten , alphaMode , lighten ) ;
data . Add ( PixelColorBlendingMode . Lighten , alphaMode , lighten ) ;
data . Add ( PixelColorBlendingMode . Overlay , alphaMode , overlay ) ;
data . Add ( PixelColorBlendingMode . Overlay , alphaMode , overlay ) ;
data . Add ( PixelColorBlendingMode . HardLight , alphaMode , hardLight ) ;
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 ( )
private static void ExerciseAllBlenderModeCombinations ( )