diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-06-08 13:58:46 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-06-13 10:18:43 -0700 |
commit | 3270440f234570f1426c442898c2400e36608ebf (patch) | |
tree | dfc2330d74187a2503b244e632592cd984c0d84f /src/mbgl/renderer/image_atlas.cpp | |
parent | f610e9bef969dc8d7ec1ea545e93919a03d98882 (diff) | |
download | qtlocation-mapboxgl-3270440f234570f1426c442898c2400e36608ebf.tar.gz |
[core] Per-tile glyph/icon atlases
Diffstat (limited to 'src/mbgl/renderer/image_atlas.cpp')
-rw-r--r-- | src/mbgl/renderer/image_atlas.cpp | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/src/mbgl/renderer/image_atlas.cpp b/src/mbgl/renderer/image_atlas.cpp index b53c2162ea..9649187175 100644 --- a/src/mbgl/renderer/image_atlas.cpp +++ b/src/mbgl/renderer/image_atlas.cpp @@ -23,31 +23,17 @@ ImageAtlas makeImageAtlas(const ImageMap& images) { options.autoResize = true; mapbox::ShelfPack pack(0, 0, options); - std::vector<const style::Image::Impl*> pointers; - pointers.reserve(images.size()); - - std::vector<mapbox::Bin> bins; - bins.reserve(images.size()); - for (const auto& entry : images) { const style::Image::Impl& image = *entry.second; - pointers.emplace_back(&image); - bins.emplace_back(pointers.size() - 1, - image.image.size.width + 2 * padding, - image.image.size.height + 2 * padding); - } - mapbox::ShelfPack::PackOptions packOptions; - packOptions.inPlace = true; - pack.pack(bins, packOptions); + const mapbox::Bin& bin = *pack.packOne(-1, + image.image.size.width + 2 * padding, + image.image.size.height + 2 * padding); - result.image = PremultipliedImage({ - static_cast<uint32_t>(pack.width()), - static_cast<uint32_t>(pack.height()) - }); - - for (const auto& bin : bins) { - const style::Image::Impl& image = *pointers.at(bin.id); + result.image.resize({ + static_cast<uint32_t>(pack.width()), + static_cast<uint32_t>(pack.height()) + }); PremultipliedImage::copy(image.image, result.image, @@ -62,6 +48,12 @@ ImageAtlas makeImageAtlas(const ImageMap& images) { ImagePosition { bin, image }); } +// pack.shrink(); +// result.image.resize({ +// static_cast<uint32_t>(pack.width()), +// static_cast<uint32_t>(pack.height()) +// }); + return result; } |