diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bc068f55b..3e725d0309 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ For a complete change history, see the git log. ## Future +- Faster rendering of rasters by reducing memory allocation of temporary buffers (#1516) + - Added ability to pass a pre-created collision detector to the cairo renderer (#1444) - Tolerance parameter is now supported for querying datasources at a given point (#503/#1499) diff --git a/plugins/input/gdal/gdal_featureset.cpp b/plugins/input/gdal/gdal_featureset.cpp index 3beaa60a98..0addfc8aad 100644 --- a/plugins/input/gdal/gdal_featureset.cpp +++ b/plugins/input/gdal/gdal_featureset.cpp @@ -223,7 +223,8 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q) if (im_width > 0 && im_height > 0) { - mapnik::image_data_32 image(im_width, im_height); + mapnik::raster_ptr raster = boost::make_shared(intersect, im_width, im_height); + mapnik::image_data_32 & image = raster->data_; image.set(0xffffffff); MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Image Size=(" << im_width << "," << im_height << ")"; @@ -489,7 +490,7 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q) image.width(), image.height(), GDT_Byte, 4, 4 * image.width()); } - feature->set_raster(boost::make_shared(intersect, image)); + feature->set_raster(raster); } return feature; } diff --git a/plugins/input/raster/raster_featureset.cpp b/plugins/input/raster/raster_featureset.cpp index 9d7c0b4d1a..ea4942bd83 100644 --- a/plugins/input/raster/raster_featureset.cpp +++ b/plugins/input/raster/raster_featureset.cpp @@ -111,9 +111,10 @@ feature_ptr raster_featureset::next() rem.maxy() + y_off + height); intersect = t.backward(feature_raster_extent); - image_data_32 image(width,height); - reader->read(x_off, y_off, image); - feature->set_raster(boost::make_shared(intersect, image,reader->premultiplied_alpha())); + mapnik::raster_ptr raster = boost::make_shared(intersect, width, height); + reader->read(x_off, y_off, raster->data_); + raster->premultiplied_alpha_ = reader->premultiplied_alpha(); + feature->set_raster(raster); } } }