diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-01-03 17:17:57 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-01-11 11:30:04 +0200 |
commit | 2bdab82dedf545b4272c534b067c68614d0355b7 (patch) | |
tree | ee437a1e8f26a25fe2e30d65db3d4e4e2985ae10 /src/mbgl/renderer/buckets/symbol_bucket.cpp | |
parent | 2da9d483ac8bce5bfa7523f9113e1bc4ef2cbfb5 (diff) | |
download | qtlocation-mapboxgl-2bdab82dedf545b4272c534b067c68614d0355b7.tar.gz |
[core] shader program must always match bucket in render symbol layer
Before this change, `RenderSymbolLayer` with updated style was trying to render
symbols using the previous bucket (with paint property binders that matched a previous program).
Now, symbol bucket caches the latest corresponding paint properties (caching is happening on
complete tiles only). As a result, `RenderSymbolLayer` always picks the shader program and
its parameters in sync with the obtained bucket.
Diffstat (limited to 'src/mbgl/renderer/buckets/symbol_bucket.cpp')
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp index 93870b287b..4947b6b521 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.cpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp @@ -9,9 +9,7 @@ namespace mbgl { using namespace style; SymbolBucket::SymbolBucket(style::SymbolLayoutProperties::PossiblyEvaluated layout_, - const std::map<std::string, std::pair< - style::IconPaintProperties::PossiblyEvaluated, - style::TextPaintProperties::PossiblyEvaluated>>& layerPaintProperties, + std::map<std::string, style::SymbolPaintProperties::PossiblyEvaluated> paintProperties_, const style::PropertyValue<float>& textSize, const style::PropertyValue<float>& iconSize, float zoom, @@ -26,17 +24,18 @@ SymbolBucket::SymbolBucket(style::SymbolLayoutProperties::PossiblyEvaluated layo sortFeaturesByY(sortFeaturesByY_), bucketLeaderID(std::move(bucketName_)), symbolInstances(std::move(symbolInstances_)), + paintProperties(std::move(paintProperties_)), textSizeBinder(SymbolSizeBinder::create(zoom, textSize, TextSize::defaultValue())), iconSizeBinder(SymbolSizeBinder::create(zoom, iconSize, IconSize::defaultValue())) { - for (const auto& pair : layerPaintProperties) { + for (const auto& pair : paintProperties) { paintPropertyBinders.emplace( std::piecewise_construct, std::forward_as_tuple(pair.first), std::forward_as_tuple( std::piecewise_construct, - std::forward_as_tuple(pair.second.first, zoom), - std::forward_as_tuple(pair.second.second, zoom))); + std::forward_as_tuple(RenderSymbolLayer::iconPaintProperties(pair.second), zoom), + std::forward_as_tuple(RenderSymbolLayer::textPaintProperties(pair.second), zoom))); } } |