@@ -103,8 +103,13 @@ struct apply_vertex_mode
103103template <typename BufferType>
104104struct RingRenderer {
105105
106- using ren_base = agg::renderer_base<agg::pixfmt_rgba32_pre>;
107- using renderer = agg::renderer_scanline_aa_solid<ren_base>;
106+ using color_type = agg::rgba8;
107+ using order_type = agg::order_rgba;
108+ using blender_type = agg::comp_op_adaptor_rgba_pre<color_type, order_type>; // comp blender
109+ using pixfmt_comp_type = agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer>;
110+ using renderer_base = agg::renderer_base<pixfmt_comp_type>;
111+ using renderer_type = agg::renderer_scanline_aa_solid<renderer_base>;
112+
108113 using path_type = transform_path_adapter<view_transform, geometry::ring_vertex_adapter>;
109114
110115 RingRenderer (rasterizer & ras_ptr,
@@ -122,25 +127,26 @@ struct RingRenderer {
122127 {
123128 ras_ptr_.reset ();
124129 agg::rendering_buffer buf (im_.getBytes (),im_.width (),im_.height (),im_.getRowSize ());
125- agg::pixfmt_rgba32_pre pixf (buf);
126- ren_base renb (pixf);
127- renderer ren (renb);
130+ pixfmt_comp_type pixf (buf);
131+ renderer_base renb (pixf);
132+ renderer_type ren (renb);
128133 geometry::ring_vertex_adapter va (ring);
129134 path_type path (tr_,va,prj_trans_);
130135 ras_ptr_.add_path (path);
136+ ras_ptr_.filling_rule (agg::fill_non_zero);
131137 ren.color (color);
132138 agg::render_scanlines (ras_ptr_, sl_, ren);
133139 }
134140
135141 void draw_outline (geometry::linear_ring const & ring,
136142 agg::rgba8 const & color,
137- double stroke_width)
143+ double stroke_width= 3 )
138144 {
139145 ras_ptr_.reset ();
140146 agg::rendering_buffer buf (im_.getBytes (),im_.width (),im_.height (),im_.getRowSize ());
141- agg::pixfmt_rgba32_pre pixf (buf);
142- ren_base renb (pixf);
143- renderer ren (renb);
147+ pixfmt_comp_type pixf (buf);
148+ renderer_base renb (pixf);
149+ renderer_type ren (renb);
144150 geometry::ring_vertex_adapter va (ring);
145151 path_type path (tr_,va,prj_trans_);
146152 agg::conv_stroke<path_type> stroke (path);
@@ -174,20 +180,20 @@ struct render_ring_visitor {
174180
175181 void operator ()(mapnik::geometry::polygon const & geom)
176182 {
177- agg::rgba8 red (255 , 0 , 0 , 255 );
178- agg::rgba8 green (0 , 255 , 255 , 255 );
179- agg::rgba black (0 ,0 ,0 ,255 );
183+ agg::rgba8 red (255 ,0 , 0 , 255 );
184+ agg::rgba8 green (0 ,255 ,255 ,255 );
185+ agg::rgba8 black (0 ,0 ,0 ,255 );
180186 renderer_.draw_ring (geom.exterior_ring ,red);
181187 if (mapnik::util::is_clockwise (geom.exterior_ring ))
182188 {
183- renderer_.draw_outline (geom.exterior_ring ,black, 2 );
189+ renderer_.draw_outline (geom.exterior_ring ,black);
184190 }
185191 for (auto const & ring : geom.interior_rings )
186192 {
187193 renderer_.draw_ring (ring,green);
188194 if (!mapnik::util::is_clockwise (ring))
189195 {
190- renderer_.draw_outline (ring,black, 2 );
196+ renderer_.draw_outline (ring,black);
191197 }
192198 }
193199 }
0 commit comments