From 73b8369178246d91cf2af456e4a0a04e6034d7b8 Mon Sep 17 00:00:00 2001 From: Jiri Drbalek Date: Wed, 19 Sep 2018 08:27:06 +0000 Subject: [PATCH] render_pattern() needs its own rasterizer --- include/mapnik/cairo/render_polygon_pattern.hpp | 3 +-- .../mapnik/renderer_common/render_pattern.hpp | 3 +-- src/agg/process_line_pattern_symbolizer.cpp | 2 +- src/agg/process_polygon_pattern_symbolizer.cpp | 2 +- src/cairo/process_line_pattern_symbolizer.cpp | 3 +-- src/renderer_common/render_pattern.cpp | 17 ++++++++--------- 6 files changed, 13 insertions(+), 17 deletions(-) diff --git a/include/mapnik/cairo/render_polygon_pattern.hpp b/include/mapnik/cairo/render_polygon_pattern.hpp index 98bb518a3..9e6e82dda 100644 --- a/include/mapnik/cairo/render_polygon_pattern.hpp +++ b/include/mapnik/cairo/render_polygon_pattern.hpp @@ -52,10 +52,9 @@ struct cairo_renderer_process_visitor_p void operator() (marker_svg const& marker) { - mapnik::rasterizer ras; mapnik::box2d const& bbox_image = marker.get_data()->bounding_box() * image_tr_; mapnik::image_rgba8 image(bbox_image.width(), bbox_image.height()); - render_pattern(ras, marker, image_tr_, 1.0, image); + render_pattern(marker, image_tr_, 1.0, image); cairo_pattern pattern(image, opacity_); pattern.set_extend(CAIRO_EXTEND_REPEAT); pattern.set_origin(offset_x_, offset_y_); diff --git a/include/mapnik/renderer_common/render_pattern.hpp b/include/mapnik/renderer_common/render_pattern.hpp index acb989731..4efdaa8c8 100644 --- a/include/mapnik/renderer_common/render_pattern.hpp +++ b/include/mapnik/renderer_common/render_pattern.hpp @@ -38,8 +38,7 @@ struct rasterizer; struct marker_svg; template -void render_pattern(rasterizer & ras, - marker_svg const& marker, +void render_pattern(marker_svg const& marker, agg::trans_affine const& tr, double opacity, T & image); diff --git a/src/agg/process_line_pattern_symbolizer.cpp b/src/agg/process_line_pattern_symbolizer.cpp index 71b84e205..d273b9b2a 100644 --- a/src/agg/process_line_pattern_symbolizer.cpp +++ b/src/agg/process_line_pattern_symbolizer.cpp @@ -199,7 +199,7 @@ struct agg_renderer_process_visitor_l if (image_transform) evaluate_transform(image_tr, feature_, common_.vars_, *image_transform, common_.scale_factor_); mapnik::box2d const& bbox_image = marker.get_data()->bounding_box() * image_tr; image_rgba8 image(bbox_image.width(), bbox_image.height()); - render_pattern(ras_, marker, image_tr, 1.0, image); + render_pattern(marker, image_tr, 1.0, image); render_by_pattern_type(image); } diff --git a/src/agg/process_polygon_pattern_symbolizer.cpp b/src/agg/process_polygon_pattern_symbolizer.cpp index e2163f55d..a1f014b45 100644 --- a/src/agg/process_polygon_pattern_symbolizer.cpp +++ b/src/agg/process_polygon_pattern_symbolizer.cpp @@ -85,7 +85,7 @@ struct agg_renderer_process_visitor_p if (image_transform) evaluate_transform(image_tr, feature_, common_.vars_, *image_transform, common_.scale_factor_); mapnik::box2d const& bbox_image = marker.get_data()->bounding_box() * image_tr; mapnik::image_rgba8 image(bbox_image.width(), bbox_image.height()); - render_pattern(*ras_ptr_, marker, image_tr, 1.0, image); + render_pattern(marker, image_tr, 1.0, image); render(image); } diff --git a/src/cairo/process_line_pattern_symbolizer.cpp b/src/cairo/process_line_pattern_symbolizer.cpp index db85cb88d..094664666 100644 --- a/src/cairo/process_line_pattern_symbolizer.cpp +++ b/src/cairo/process_line_pattern_symbolizer.cpp @@ -63,13 +63,12 @@ struct prepare_pattern_visitor std::shared_ptr operator() (mapnik::marker_svg const& marker) { double opacity = get(sym_, feature_, common_.vars_); - mapnik::rasterizer ras; agg::trans_affine image_tr = agg::trans_affine_scaling(common_.scale_factor_); auto image_transform = get_optional(sym_, keys::image_transform); if (image_transform) evaluate_transform(image_tr, feature_, common_.vars_, *image_transform, common_.scale_factor_); mapnik::box2d const& bbox_image = marker.get_data()->bounding_box() * image_tr; mapnik::image_rgba8 image(bbox_image.width(), bbox_image.height()); - render_pattern(ras, marker, image_tr, 1.0, image); + render_pattern(marker, image_tr, 1.0, image); width_ = image.width(); height_ = image.height(); return std::make_shared(image, opacity); diff --git a/src/renderer_common/render_pattern.cpp b/src/renderer_common/render_pattern.cpp index 5e6f95820..3ea7f2bd5 100644 --- a/src/renderer_common/render_pattern.cpp +++ b/src/renderer_common/render_pattern.cpp @@ -41,8 +41,7 @@ namespace mapnik { template <> -void render_pattern(rasterizer & ras, - marker_svg const& marker, +void render_pattern(marker_svg const& marker, agg::trans_affine const& tr, double opacity, image_rgba8 & image) @@ -62,13 +61,13 @@ void render_pattern(rasterizer & ras, pixfmt pixf(buf); renderer_base renb(pixf); - mapnik::svg::vertex_stl_adapter stl_storage(marker.get_data()->source()); - mapnik::svg::svg_path_adapter svg_path(stl_storage); - mapnik::svg::svg_renderer_agg, - renderer_solid, - pixfmt > svg_renderer(svg_path, - marker.get_data()->attributes()); + svg::vertex_stl_adapter stl_storage(marker.get_data()->source()); + svg_path_adapter svg_path(stl_storage); + svg::svg_renderer_agg svg_renderer(svg_path, marker.get_data()->attributes()); + rasterizer ras; svg_renderer.render(ras, sl, renb, mtx, opacity, bbox); }