agg markers_symbolizer rendering: only create objects if actually rendering

This commit is contained in:
Dane Springmeyer 2012-07-10 22:31:51 -07:00
parent 3efab11bdb
commit bcc8da4dea

View file

@ -26,7 +26,6 @@
#include <mapnik/agg_renderer.hpp>
#include <mapnik/agg_rasterizer.hpp>
#include <mapnik/expression_evaluator.hpp>
#include <mapnik/image_util.hpp>
#include <mapnik/marker.hpp>
#include <mapnik/marker_cache.hpp>
#include <mapnik/marker_helpers.hpp>
@ -66,20 +65,7 @@ void agg_renderer<T>::process(markers_symbolizer const& sym,
typedef agg::renderer_base<pixfmt_comp_type> renderer_base;
typedef agg::renderer_scanline_aa_solid<renderer_base> renderer_type;
ras_ptr->reset();
ras_ptr->gamma(agg::gamma_power());
agg::scanline_u8 sl;
agg::rendering_buffer buf(current_buffer_->raw_data(), width_, height_, width_ * 4);
pixfmt_comp_type pixf(buf);
pixf.comp_op(static_cast<agg::comp_op_e>(sym.comp_op()));
renderer_base renb(pixf);
renderer_type ren(renb);
agg::trans_affine geom_tr;
evaluate_transform(geom_tr, feature, sym.get_transform());
std::string filename = path_processor_type::evaluate(*sym.get_filename(), feature);
marker_placement_e placement_method = sym.get_marker_placement();
if (!filename.empty())
{
@ -92,6 +78,18 @@ void agg_renderer<T>::process(markers_symbolizer const& sym,
return;
}
ras_ptr->reset();
ras_ptr->gamma(agg::gamma_power());
agg::scanline_u8 sl;
agg::rendering_buffer buf(current_buffer_->raw_data(), width_, height_, width_ * 4);
pixfmt_comp_type pixf(buf);
pixf.comp_op(static_cast<agg::comp_op_e>(sym.comp_op()));
renderer_base renb(pixf);
renderer_type ren(renb);
agg::trans_affine geom_tr;
evaluate_transform(geom_tr, feature, sym.get_transform());
boost::optional<path_ptr> marker = (*mark)->get_vector_data();
box2d<double> const& bbox = (*marker)->bounding_box();
@ -115,6 +113,8 @@ void agg_renderer<T>::process(markers_symbolizer const& sym,
renderer_type,
agg::pixfmt_rgba32 > svg_renderer(svg_path, result ? attributes : (*marker)->attributes());
marker_placement_e placement_method = sym.get_marker_placement();
BOOST_FOREACH( geometry_type & geom, feature.paths())
{
// TODO - merge this code with point_symbolizer rendering