@@ -934,6 +934,8 @@ public void DrawPath_Stroke_LineJoin_MatchesDefaultOutput<TPixel>(TestImageProvi
934934 } ) ;
935935
936936 void DrawAction ( DrawingCanvas < TPixel > canvas ) => canvas . Draw ( pen , path ) ;
937+ IPath outline = path . GenerateOutline ( pen . StrokeWidth , pen . StrokeOptions ) ;
938+ void DrawReference ( DrawingCanvas < TPixel > canvas ) => canvas . Fill ( pen . StrokeFill , outline ) ;
937939
938940 using Image < TPixel > defaultImage = provider . GetImage ( ) ;
939941 RenderWithDefaultBackend ( defaultImage , drawingOptions , DrawAction ) ;
@@ -948,14 +950,34 @@ public void DrawPath_Stroke_LineJoin_MatchesDefaultOutput<TPixel>(TestImageProvi
948950 DrawAction ,
949951 nativeSurfaceInitialImage ) ;
950952
951- DebugSaveBackendPair ( provider , $ "DrawPath_Stroke_LineJoin_{ lineJoin } ", defaultImage , nativeSurfaceImage ) ;
952953 AssertBackendPairSimilarity ( defaultImage , nativeSurfaceImage , 0.01F ) ;
954+
955+ using Image < TPixel > referenceImage = provider . GetImage ( ) ;
956+ RenderWithDefaultBackend ( referenceImage , drawingOptions , DrawReference ) ;
957+
958+ using Image < TPixel > defaultComparisonImage = CreateJoinComparisonImage ( referenceImage , defaultImage ) ;
959+ using Image < TPixel > nativeSurfaceComparisonImage = CreateJoinComparisonImage ( referenceImage , nativeSurfaceImage ) ;
960+
961+ DebugSaveBackendPair (
962+ provider ,
963+ $ "DrawPath_Stroke_LineJoin_{ lineJoin } ",
964+ defaultComparisonImage ,
965+ nativeSurfaceComparisonImage ) ;
953966 AssertBackendPairReferenceOutputs (
954967 provider ,
955968 $ "DrawPath_Stroke_LineJoin_{ lineJoin } ",
956- defaultImage ,
957- nativeSurfaceImage ) ;
969+ defaultComparisonImage ,
970+ nativeSurfaceComparisonImage ) ;
958971 AssertGpuPathWhenRequired ( nativeSurfaceBackend ) ;
972+
973+ static Image < TPixel > CreateJoinComparisonImage ( Image < TPixel > reference , Image < TPixel > rendered )
974+ {
975+ Image < TPixel > comparison = new ( reference . Width , reference . Height * 2 , Color . White . ToPixel < TPixel > ( ) ) ;
976+ comparison . Mutate ( ctx => ctx
977+ . DrawImage ( reference , new Point ( 0 , 0 ) , 1F )
978+ . DrawImage ( rendered , new Point ( 0 , reference . Height ) , 1F ) ) ;
979+ return comparison ;
980+ }
959981 }
960982
961983 [ WebGPUTheory ]
@@ -982,6 +1004,8 @@ public void DrawPath_Stroke_LineCap_MatchesDefaultOutput<TPixel>(TestImageProvid
9821004 } ) ;
9831005
9841006 void DrawAction ( DrawingCanvas < TPixel > canvas ) => canvas . Draw ( pen , path ) ;
1007+ IPath outline = path . GenerateOutline ( pen . StrokeWidth , pen . StrokeOptions ) ;
1008+ void DrawReference ( DrawingCanvas < TPixel > canvas ) => canvas . Fill ( pen . StrokeFill , outline ) ;
9851009
9861010 using Image < TPixel > defaultImage = provider . GetImage ( ) ;
9871011 RenderWithDefaultBackend ( defaultImage , drawingOptions , DrawAction ) ;
@@ -996,14 +1020,34 @@ public void DrawPath_Stroke_LineCap_MatchesDefaultOutput<TPixel>(TestImageProvid
9961020 DrawAction ,
9971021 nativeSurfaceInitialImage ) ;
9981022
999- DebugSaveBackendPair ( provider , $ "DrawPath_Stroke_LineCap_{ lineCap } ", defaultImage , nativeSurfaceImage ) ;
10001023 AssertBackendPairSimilarity ( defaultImage , nativeSurfaceImage , 0.0103F ) ;
1024+
1025+ using Image < TPixel > referenceImage = provider . GetImage ( ) ;
1026+ RenderWithDefaultBackend ( referenceImage , drawingOptions , DrawReference ) ;
1027+
1028+ using Image < TPixel > defaultComparisonImage = CreateLineCapComparisonImage ( referenceImage , defaultImage ) ;
1029+ using Image < TPixel > nativeSurfaceComparisonImage = CreateLineCapComparisonImage ( referenceImage , nativeSurfaceImage ) ;
1030+
1031+ DebugSaveBackendPair (
1032+ provider ,
1033+ $ "DrawPath_Stroke_LineCap_{ lineCap } ",
1034+ defaultComparisonImage ,
1035+ nativeSurfaceComparisonImage ) ;
10011036 AssertBackendPairReferenceOutputs (
10021037 provider ,
10031038 $ "DrawPath_Stroke_LineCap_{ lineCap } ",
1004- defaultImage ,
1005- nativeSurfaceImage ) ;
1039+ defaultComparisonImage ,
1040+ nativeSurfaceComparisonImage ) ;
10061041 AssertGpuPathWhenRequired ( nativeSurfaceBackend ) ;
1042+
1043+ static Image < TPixel > CreateLineCapComparisonImage ( Image < TPixel > reference , Image < TPixel > rendered )
1044+ {
1045+ Image < TPixel > comparison = new ( reference . Width , reference . Height * 2 , Color . White . ToPixel < TPixel > ( ) ) ;
1046+ comparison . Mutate ( ctx => ctx
1047+ . DrawImage ( reference , new Point ( 0 , 0 ) , 1F )
1048+ . DrawImage ( rendered , new Point ( 0 , reference . Height ) , 1F ) ) ;
1049+ return comparison ;
1050+ }
10071051 }
10081052
10091053 [ WebGPUTheory ]
@@ -1240,7 +1284,7 @@ static void AssertBackend(WebGPUDrawingBackend backend)
12401284
12411285 DebugSaveBackendPair ( provider , "SaveLayer_ClipReduce" , defaultImage , nativeSurfaceImage ) ;
12421286 AssertBackendPairSimilarity ( defaultImage , nativeSurfaceImage , 1F ) ;
1243- AssertBackendPairReferenceOutputs ( provider , "SaveLayer_ClipReduce" , defaultImage , nativeSurfaceImage ) ;
1287+ AssertBackendPairReferenceOutputs ( provider , "SaveLayer_ClipReduce" , defaultImage , nativeSurfaceImage , 0.0006F ) ;
12441288 AssertGpuPathWhenRequired ( nativeSurfaceBackend ) ;
12451289 }
12461290
0 commit comments