@@ -109,8 +109,8 @@ class RendererAgg
109109{
110110 public:
111111
112- typedef fixed_blender_rgba_plain <agg::rgba8, agg::order_rgba> fixed_blender_rgba32_plain ;
113- typedef agg::pixfmt_alpha_blend_rgba<fixed_blender_rgba32_plain , agg::rendering_buffer> pixfmt;
112+ typedef agg::comp_op_adaptor_rgba_plain <agg::rgba8, agg::order_rgba> comp_op_blender_plain ;
113+ typedef agg::pixfmt_custom_blend_rgba<comp_op_blender_plain , agg::rendering_buffer> pixfmt;
114114 typedef agg::renderer_base<pixfmt> renderer_base;
115115 typedef agg::renderer_scanline_aa_solid<renderer_base> renderer_aa;
116116 typedef agg::renderer_scanline_bin_solid<renderer_base> renderer_bin;
@@ -461,6 +461,8 @@ RendererAgg::draw_path(GCAgg &gc, PathIterator &path, agg::trans_affine &trans,
461461 face = color;
462462 }
463463
464+ pixFmt.comp_op (gc.comp_op );
465+
464466 theRasterizer.reset_clipping ();
465467 rendererBase.reset_clipping (true );
466468 set_clipbox (gc.cliprect , theRasterizer);
@@ -484,6 +486,8 @@ RendererAgg::draw_path(GCAgg &gc, PathIterator &path, agg::trans_affine &trans,
484486 sketch_t sketch (curve, gc.sketch .scale , gc.sketch .length , gc.sketch .randomness );
485487
486488 _draw_path (sketch, has_clippath, face, gc);
489+
490+ pixFmt.comp_op (agg::comp_op_src_over);
487491}
488492
489493template <class PathIterator >
@@ -571,6 +575,9 @@ inline void RendererAgg::draw_markers(GCAgg &gc,
571575 std::max (marker_size.x2 , scanlines.max_x ()),
572576 std::max (marker_size.y2 , scanlines.max_y ()));
573577
578+
579+ pixFmt.comp_op (gc.comp_op );
580+
574581 theRasterizer.reset_clipping ();
575582 rendererBase.reset_clipping (true );
576583 set_clipbox (gc.cliprect , rendererBase);
@@ -658,6 +665,8 @@ inline void RendererAgg::draw_markers(GCAgg &gc,
658665
659666 theRasterizer.reset_clipping ();
660667 rendererBase.reset_clipping (true );
668+
669+ pixFmt.comp_op (agg::comp_op_src_over);
661670}
662671
663672/* *
@@ -714,6 +723,8 @@ inline void RendererAgg::draw_text_image(GCAgg &gc, ImageArray &image, int x, in
714723 typedef agg::renderer_scanline_aa<renderer_base, color_span_alloc_type, span_gen_type>
715724 renderer_type;
716725
726+ pixFmt.comp_op (gc.comp_op );
727+
717728 theRasterizer.reset_clipping ();
718729 rendererBase.reset_clipping (true );
719730 if (angle != 0.0 ) {
@@ -782,6 +793,8 @@ inline void RendererAgg::draw_text_image(GCAgg &gc, ImageArray &image, int x, in
782793 }
783794 }
784795 }
796+
797+ pixFmt.comp_op (agg::comp_op_src_over);
785798}
786799
787800class span_conv_alpha
@@ -814,6 +827,7 @@ inline void RendererAgg::draw_image(GCAgg &gc,
814827 ImageArray &image)
815828{
816829 double alpha = gc.alpha ;
830+ pixFmt.comp_op (gc.comp_op );
817831
818832 theRasterizer.reset_clipping ();
819833 rendererBase.reset_clipping (true );
@@ -878,6 +892,8 @@ inline void RendererAgg::draw_image(GCAgg &gc,
878892 }
879893
880894 rendererBase.reset_clipping (true );
895+
896+ pixFmt.comp_op (agg::comp_op_src_over);
881897}
882898
883899template <class PathIterator ,
@@ -1042,6 +1058,7 @@ inline void RendererAgg::draw_path_collection(GCAgg &gc,
10421058 AntialiasedArray &antialiaseds,
10431059 ColorArray &hatchcolors)
10441060{
1061+ pixFmt.comp_op (gc.comp_op );
10451062 _draw_path_collection_generic (gc,
10461063 master_transform,
10471064 gc.cliprect ,
@@ -1059,6 +1076,7 @@ inline void RendererAgg::draw_path_collection(GCAgg &gc,
10591076 true ,
10601077 true ,
10611078 hatchcolors);
1079+ pixFmt.comp_op (agg::comp_op_src_over);
10621080}
10631081
10641082template <class CoordinateArray >
@@ -1154,6 +1172,7 @@ inline void RendererAgg::draw_quad_mesh(GCAgg &gc,
11541172 DashesVector linestyles;
11551173 ColorArray hatchcolors = py::array_t <double >().reshape ({0 , 4 }).unchecked <double , 2 >();
11561174
1175+ pixFmt.comp_op (gc.comp_op );
11571176 _draw_path_collection_generic (gc,
11581177 master_transform,
11591178 gc.cliprect ,
@@ -1171,6 +1190,7 @@ inline void RendererAgg::draw_quad_mesh(GCAgg &gc,
11711190 true , // check_snap
11721191 false ,
11731192 hatchcolors);
1193+ pixFmt.comp_op (agg::comp_op_src_over);
11741194}
11751195
11761196template <class PointArray , class ColorArray >
@@ -1248,6 +1268,8 @@ inline void RendererAgg::draw_gouraud_triangles(GCAgg &gc,
12481268 std::to_string (colors.shape (0 )) + " colors" );
12491269 }
12501270
1271+ pixFmt.comp_op (gc.comp_op );
1272+
12511273 theRasterizer.reset_clipping ();
12521274 rendererBase.reset_clipping (true );
12531275 set_clipbox (gc.cliprect , theRasterizer);
@@ -1259,6 +1281,8 @@ inline void RendererAgg::draw_gouraud_triangles(GCAgg &gc,
12591281
12601282 _draw_gouraud_triangle (point, color, trans, has_clippath);
12611283 }
1284+
1285+ pixFmt.comp_op (agg::comp_op_src_over);
12621286}
12631287
12641288template <class R >
0 commit comments