|
|
@ -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(220, 80, 40, 160); |
|
|
|
|
|
Rgba32 source = new(20, 180, 120, 96); |
|
|
|
|
|
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, .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<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, .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] |
|
|
[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(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] |
|
|
[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() |
|
|
|