diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-05-15 14:18:01 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-05-30 11:34:13 -0700 |
commit | 6be6263ebf32c45dcbbc2dbe2937422553bc897a (patch) | |
tree | f12021eb71905a0734378b42b03aeba94e287040 /src/mbgl/renderer | |
parent | fb3cef632d7732fab54f93971d3c8ef4d8291bef (diff) | |
download | qtlocation-mapboxgl-6be6263ebf32c45dcbbc2dbe2937422553bc897a.tar.gz |
[core] Replace inline SpriteAtlas updates with diffing
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r-- | src/mbgl/renderer/style_diff.cpp | 26 | ||||
-rw-r--r-- | src/mbgl/renderer/style_diff.hpp | 7 |
2 files changed, 24 insertions, 9 deletions
diff --git a/src/mbgl/renderer/style_diff.cpp b/src/mbgl/renderer/style_diff.cpp index 12000069ea..e2be95432f 100644 --- a/src/mbgl/renderer/style_diff.cpp +++ b/src/mbgl/renderer/style_diff.cpp @@ -6,15 +6,10 @@ namespace mbgl { -template <class T> -StyleDifference<T> diff(const std::vector<T>& a, const std::vector<T>& b) { +template <class T, class Eq> +StyleDifference<T> diff(const std::vector<T>& a, const std::vector<T>& b, const Eq& eq) { std::vector<T> lcs; - auto eq = [] (const T& lhs, const T& rhs) { - return std::tie(lhs->id, lhs->type) - == std::tie(rhs->id, rhs->type); - }; - longest_common_subsequence(a.begin(), a.end(), b.begin(), b.end(), std::back_inserter(lcs), eq); auto aIt = a.begin(); @@ -43,14 +38,27 @@ StyleDifference<T> diff(const std::vector<T>& a, const std::vector<T>& b) { return result; } +ImageDifference diffImages(const std::vector<ImmutableImage>& a, + const std::vector<ImmutableImage>& b) { + return diff(a, b, [] (const ImmutableImage& lhs, const ImmutableImage& rhs) { + return lhs->id == rhs->id; + }); +} + SourceDifference diffSources(const std::vector<ImmutableSource>& a, const std::vector<ImmutableSource>& b) { - return diff(a, b); + return diff(a, b, [] (const ImmutableSource& lhs, const ImmutableSource& rhs) { + return std::tie(lhs->id, lhs->type) + == std::tie(rhs->id, rhs->type); + }); } LayerDifference diffLayers(const std::vector<ImmutableLayer>& a, const std::vector<ImmutableLayer>& b) { - return diff(a, b); + return diff(a, b, [] (const ImmutableLayer& lhs, const ImmutableLayer& rhs) { + return std::tie(lhs->id, lhs->type) + == std::tie(rhs->id, rhs->type); + }); } } // namespace mbgl diff --git a/src/mbgl/renderer/style_diff.hpp b/src/mbgl/renderer/style_diff.hpp index dc2ef95c6c..0ebb1fbfd6 100644 --- a/src/mbgl/renderer/style_diff.hpp +++ b/src/mbgl/renderer/style_diff.hpp @@ -1,3 +1,4 @@ +#include <mbgl/style/image_impl.hpp> #include <mbgl/style/source_impl.hpp> #include <mbgl/style/layer_impl.hpp> #include <mbgl/util/immutable.hpp> @@ -15,6 +16,12 @@ public: std::unordered_map<std::string, T> changed; }; +using ImmutableImage = Immutable<style::Image::Impl>; +using ImageDifference = StyleDifference<ImmutableImage>; + +ImageDifference diffImages(const std::vector<ImmutableImage>&, + const std::vector<ImmutableImage>&); + using ImmutableSource = Immutable<style::Source::Impl>; using SourceDifference = StyleDifference<ImmutableSource>; |