summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/buckets/symbol_bucket.cpp
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-01-03 17:17:57 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-01-11 11:30:04 +0200
commit2bdab82dedf545b4272c534b067c68614d0355b7 (patch)
treeee437a1e8f26a25fe2e30d65db3d4e4e2985ae10 /src/mbgl/renderer/buckets/symbol_bucket.cpp
parent2da9d483ac8bce5bfa7523f9113e1bc4ef2cbfb5 (diff)
downloadqtlocation-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.cpp11
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)));
}
}