diff options
Diffstat (limited to 'src/mbgl/renderer/layers/render_symbol_layer.cpp')
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.cpp | 78 |
1 files changed, 44 insertions, 34 deletions
diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 11ffd74b10..716b06c24d 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -101,7 +101,8 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { continue; } SymbolBucket& bucket = *bucket_; - + assert(bucket.paintProperties.find(getID()) != bucket.paintProperties.end()); + const auto& evaluated_ = bucket.paintProperties.at(getID()); const auto& layout = bucket.layout; auto draw = [&] (auto& program, @@ -152,8 +153,8 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { GeometryTile& geometryTile = static_cast<GeometryTile&>(tile.tile); if (bucket.hasIconData()) { - auto values = iconPropertyValues(layout); - auto paintPropertyValues = iconPaintProperties(); + auto values = iconPropertyValues(evaluated_, layout); + const auto& paintPropertyValues = iconPaintProperties(evaluated_); const bool alongLine = layout.get<SymbolPlacement>() != SymbolPlacementType::Point && layout.get<IconRotationAlignment>() == AlignmentType::Map; @@ -213,8 +214,8 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { if (bucket.hasTextData()) { parameters.context.bindTexture(*geometryTile.glyphAtlasTexture, 0, gl::TextureFilter::Linear); - auto values = textPropertyValues(layout); - auto paintPropertyValues = textPaintProperties(); + auto values = textPropertyValues(evaluated_, layout); + const auto& paintPropertyValues = textPaintProperties(evaluated_); const bool alongLine = layout.get<SymbolPlacement>() != SymbolPlacementType::Point && layout.get<TextRotationAlignment>() == AlignmentType::Map; @@ -328,54 +329,59 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { } } -style::IconPaintProperties::PossiblyEvaluated RenderSymbolLayer::iconPaintProperties() const { +// static +style::IconPaintProperties::PossiblyEvaluated RenderSymbolLayer::iconPaintProperties(const style::SymbolPaintProperties::PossiblyEvaluated& evaluated_) { return style::IconPaintProperties::PossiblyEvaluated { - evaluated.get<style::IconOpacity>(), - evaluated.get<style::IconColor>(), - evaluated.get<style::IconHaloColor>(), - evaluated.get<style::IconHaloWidth>(), - evaluated.get<style::IconHaloBlur>(), - evaluated.get<style::IconTranslate>(), - evaluated.get<style::IconTranslateAnchor>() + evaluated_.get<style::IconOpacity>(), + evaluated_.get<style::IconColor>(), + evaluated_.get<style::IconHaloColor>(), + evaluated_.get<style::IconHaloWidth>(), + evaluated_.get<style::IconHaloBlur>(), + evaluated_.get<style::IconTranslate>(), + evaluated_.get<style::IconTranslateAnchor>() }; } -style::TextPaintProperties::PossiblyEvaluated RenderSymbolLayer::textPaintProperties() const { +// static +style::TextPaintProperties::PossiblyEvaluated RenderSymbolLayer::textPaintProperties(const style::SymbolPaintProperties::PossiblyEvaluated& evaluated_) { return style::TextPaintProperties::PossiblyEvaluated { - evaluated.get<style::TextOpacity>(), - evaluated.get<style::TextColor>(), - evaluated.get<style::TextHaloColor>(), - evaluated.get<style::TextHaloWidth>(), - evaluated.get<style::TextHaloBlur>(), - evaluated.get<style::TextTranslate>(), - evaluated.get<style::TextTranslateAnchor>() + evaluated_.get<style::TextOpacity>(), + evaluated_.get<style::TextColor>(), + evaluated_.get<style::TextHaloColor>(), + evaluated_.get<style::TextHaloWidth>(), + evaluated_.get<style::TextHaloBlur>(), + evaluated_.get<style::TextTranslate>(), + evaluated_.get<style::TextTranslateAnchor>() }; } - -style::SymbolPropertyValues RenderSymbolLayer::iconPropertyValues(const style::SymbolLayoutProperties::PossiblyEvaluated& layout_) const { +// static +style::SymbolPropertyValues RenderSymbolLayer::iconPropertyValues(const style::SymbolPaintProperties::PossiblyEvaluated& evaluated_, + const style::SymbolLayoutProperties::PossiblyEvaluated& layout_) { return style::SymbolPropertyValues { layout_.get<style::IconPitchAlignment>(), layout_.get<style::IconRotationAlignment>(), layout_.get<style::IconKeepUpright>(), - evaluated.get<style::IconTranslate>(), - evaluated.get<style::IconTranslateAnchor>(), - evaluated.get<style::IconHaloColor>().constantOr(Color::black()).a > 0 && - evaluated.get<style::IconHaloWidth>().constantOr(1), - evaluated.get<style::IconColor>().constantOr(Color::black()).a > 0 + evaluated_.get<style::IconTranslate>(), + evaluated_.get<style::IconTranslateAnchor>(), + evaluated_.get<style::IconHaloColor>().constantOr(Color::black()).a > 0 && + evaluated_.get<style::IconHaloWidth>().constantOr(1), + evaluated_.get<style::IconColor>().constantOr(Color::black()).a > 0 }; } -style::SymbolPropertyValues RenderSymbolLayer::textPropertyValues(const style::SymbolLayoutProperties::PossiblyEvaluated& layout_) const { +// static +style::SymbolPropertyValues RenderSymbolLayer::textPropertyValues(const style::SymbolPaintProperties::PossiblyEvaluated& evaluated_, + const style::SymbolLayoutProperties::PossiblyEvaluated& layout_) { return style::SymbolPropertyValues { layout_.get<style::TextPitchAlignment>(), layout_.get<style::TextRotationAlignment>(), layout_.get<style::TextKeepUpright>(), - evaluated.get<style::TextTranslate>(), - evaluated.get<style::TextTranslateAnchor>(), - evaluated.get<style::TextHaloColor>().constantOr(Color::black()).a > 0 && - evaluated.get<style::TextHaloWidth>().constantOr(1), - evaluated.get<style::TextColor>().constantOr(Color::black()).a > 0 + evaluated_.get<style::TextTranslate>(), + evaluated_.get<style::TextTranslateAnchor>(), + evaluated_.get<style::TextHaloColor>().constantOr(Color::black()).a > 0 && + evaluated_.get<style::TextHaloWidth>().constantOr(1), + evaluated_.get<style::TextColor>().constantOr(Color::black()).a > 0 }; } @@ -398,4 +404,8 @@ void RenderSymbolLayer::sortRenderTiles(const TransformState& state) { }); } +void RenderSymbolLayer::updateBucketPaintProperties(Bucket* bucket) const { + static_cast<SymbolBucket*>(bucket)->paintProperties[getID()] = evaluated; +} + } // namespace mbgl |