diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-05-22 13:28:09 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-05-26 11:21:56 -0700 |
commit | aa216d00254c18f7b5903026ab1a489ae7797dd8 (patch) | |
tree | 7decb42cb0f8a8a5ae0e9d3bdcfdf69e76949e15 /src/mbgl/style | |
parent | 6cf9d5cfbfe8120121d8d53cbbf8915cea8f4879 (diff) | |
download | qtlocation-mapboxgl-aa216d00254c18f7b5903026ab1a489ae7797dd8.tar.gz |
[core] Don't use a separate SpriteAtlas for annotation images
Instead, just add them to the Style as needed. Includes changes from #8905 and takes care to avoid regressing #3817.
Diffstat (limited to 'src/mbgl/style')
-rw-r--r-- | src/mbgl/style/image.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/style/style.cpp | 28 | ||||
-rw-r--r-- | src/mbgl/style/style.hpp | 2 |
3 files changed, 18 insertions, 14 deletions
diff --git a/src/mbgl/style/image.cpp b/src/mbgl/style/image.cpp index 0cce32ab98..6039c0458c 100644 --- a/src/mbgl/style/image.cpp +++ b/src/mbgl/style/image.cpp @@ -16,6 +16,8 @@ std::string Image::getID() const { return impl->id; } +Image::Image(const Image&) = default; + const PremultipliedImage& Image::getImage() const { return impl->image; } diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 1a4cf0ca10..9445772a66 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -16,7 +16,6 @@ #include <mbgl/style/parser.hpp> #include <mbgl/style/transition_options.hpp> #include <mbgl/sprite/sprite_atlas.hpp> -#include <mbgl/sprite/sprite_image_collection.hpp> #include <mbgl/sprite/sprite_loader.hpp> #include <mbgl/text/glyph_atlas.hpp> #include <mbgl/geometry/line_atlas.hpp> @@ -36,6 +35,7 @@ #include <mbgl/renderer/layers/render_raster_layer.hpp> #include <mbgl/renderer/layers/render_symbol_layer.hpp> #include <mbgl/renderer/style_diff.hpp> +#include <mbgl/sprite/sprite_atlas.hpp> #include <mbgl/tile/tile.hpp> #include <mbgl/util/constants.hpp> #include <mbgl/util/exception.hpp> @@ -506,22 +506,24 @@ bool Style::isLoaded() const { } void Style::addImage(std::unique_ptr<style::Image> image) { - addSpriteImage(spriteImages, std::move(image), [&](style::Image& added) { - spriteAtlas->addImage(added.impl); - observer->onUpdate(Update::Repaint); - }); + std::string id = image->getID(); + auto it = images.find(id); + if (it != images.end() && it->second->getImage().size != image->getImage().size) { + Log::Warning(Event::Sprite, "Can't change sprite dimensions for '%s'", id.c_str()); + return; + } + spriteAtlas->addImage(image->impl); + images[id] = std::move(image); } void Style::removeImage(const std::string& id) { - removeSpriteImage(spriteImages, id, [&] () { - spriteAtlas->removeImage(id); - observer->onUpdate(Update::Repaint); - }); + images.erase(id); + spriteAtlas->removeImage(id); } const style::Image* Style::getImage(const std::string& id) const { - auto it = spriteImages.find(id); - return it == spriteImages.end() ? nullptr : it->second.get(); + auto it = images.find(id); + return it == images.end() ? nullptr : it->second.get(); } RenderData Style::getRenderData(MapDebugOptions debugOptions, float angle) const { @@ -735,8 +737,8 @@ void Style::onTileError(RenderSource& source, const OverscaledTileID& tileID, st observer->onResourceError(error); } -void Style::onSpriteLoaded(std::vector<std::unique_ptr<Image>>&& images) { - for (auto& image : images) { +void Style::onSpriteLoaded(std::vector<std::unique_ptr<Image>>&& images_) { + for (auto& image : images_) { addImage(std::move(image)); } spriteAtlas->onSpriteLoaded(); diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index bc1d52eed8..5d3c2899fd 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -125,6 +125,7 @@ public: RenderSource* getRenderSource(const std::string& id) const; private: + std::unordered_map<std::string, std::unique_ptr<style::Image>> images; std::vector<std::unique_ptr<Source>> sources; std::vector<std::unique_ptr<Layer>> layers; TransitionOptions transitionOptions; @@ -150,7 +151,6 @@ private: void onGlyphsError(const FontStack&, const GlyphRange&, std::exception_ptr) override; // SpriteLoaderObserver implementation. - std::unordered_map<std::string, std::unique_ptr<style::Image>> spriteImages; void onSpriteLoaded(std::vector<std::unique_ptr<Image>>&&) override; void onSpriteError(std::exception_ptr) override; |