diff options
-rw-r--r-- | src/mbgl/renderer/render_background_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/render_background_layer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/render_circle_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/render_circle_layer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/render_custom_layer.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/renderer/render_custom_layer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/render_fill_extrusion_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/render_fill_extrusion_layer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/render_fill_layer.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/renderer/render_fill_layer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/render_layer.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/render_line_layer.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/renderer/render_line_layer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/render_raster_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/render_raster_layer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/render_symbol_layer.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/renderer/render_symbol_layer.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/style/style.cpp | 15 | ||||
-rw-r--r-- | src/mbgl/style/style.hpp | 2 |
19 files changed, 58 insertions, 23 deletions
diff --git a/src/mbgl/renderer/render_background_layer.cpp b/src/mbgl/renderer/render_background_layer.cpp index a6b4a5e36e..485d4b16c6 100644 --- a/src/mbgl/renderer/render_background_layer.cpp +++ b/src/mbgl/renderer/render_background_layer.cpp @@ -23,12 +23,14 @@ void RenderBackgroundLayer::cascade(const CascadeParameters ¶meters) { unevaluated = impl->cascading.cascade(parameters, std::move(unevaluated)); } -bool RenderBackgroundLayer::evaluate(const PropertyEvaluationParameters ¶meters) { +void RenderBackgroundLayer::evaluate(const PropertyEvaluationParameters ¶meters) { evaluated = unevaluated.evaluate(parameters); passes = evaluated.get<style::BackgroundOpacity>() > 0 ? RenderPass::Translucent : RenderPass::None; +} +bool RenderBackgroundLayer::hasTransition() const { return unevaluated.hasTransition(); } diff --git a/src/mbgl/renderer/render_background_layer.hpp b/src/mbgl/renderer/render_background_layer.hpp index 137980389c..b1f709953f 100644 --- a/src/mbgl/renderer/render_background_layer.hpp +++ b/src/mbgl/renderer/render_background_layer.hpp @@ -15,7 +15,8 @@ public: std::unique_ptr<RenderLayer> clone() const override; void cascade(const CascadeParameters&) override; - bool evaluate(const PropertyEvaluationParameters&) override; + void evaluate(const PropertyEvaluationParameters&) override; + bool hasTransition() const override; std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override; diff --git a/src/mbgl/renderer/render_circle_layer.cpp b/src/mbgl/renderer/render_circle_layer.cpp index 56832d53cb..f59c174dd3 100644 --- a/src/mbgl/renderer/render_circle_layer.cpp +++ b/src/mbgl/renderer/render_circle_layer.cpp @@ -24,7 +24,7 @@ void RenderCircleLayer::cascade(const CascadeParameters& parameters) { unevaluated = impl->cascading.cascade(parameters, std::move(unevaluated)); } -bool RenderCircleLayer::evaluate(const PropertyEvaluationParameters& parameters) { +void RenderCircleLayer::evaluate(const PropertyEvaluationParameters& parameters) { evaluated = unevaluated.evaluate(parameters); passes = ((evaluated.get<style::CircleRadius>().constantOr(1) > 0 || @@ -34,7 +34,9 @@ bool RenderCircleLayer::evaluate(const PropertyEvaluationParameters& parameters) && (evaluated.get<style::CircleOpacity>().constantOr(1) > 0 || evaluated.get<style::CircleStrokeOpacity>().constantOr(1) > 0)) ? RenderPass::Translucent : RenderPass::None; +} +bool RenderCircleLayer::hasTransition() const { return unevaluated.hasTransition(); } diff --git a/src/mbgl/renderer/render_circle_layer.hpp b/src/mbgl/renderer/render_circle_layer.hpp index 8a2f73ec83..3b82b5c988 100644 --- a/src/mbgl/renderer/render_circle_layer.hpp +++ b/src/mbgl/renderer/render_circle_layer.hpp @@ -15,7 +15,8 @@ public: std::unique_ptr<RenderLayer> clone() const override; void cascade(const CascadeParameters&) override; - bool evaluate(const PropertyEvaluationParameters&) override; + void evaluate(const PropertyEvaluationParameters&) override; + bool hasTransition() const override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/render_custom_layer.cpp b/src/mbgl/renderer/render_custom_layer.cpp index d500d11f4a..66dd57b3d3 100644 --- a/src/mbgl/renderer/render_custom_layer.cpp +++ b/src/mbgl/renderer/render_custom_layer.cpp @@ -13,8 +13,11 @@ std::unique_ptr<RenderLayer> RenderCustomLayer::clone() const { return std::make_unique<RenderCustomLayer>(*this); } -bool RenderCustomLayer::evaluate(const PropertyEvaluationParameters&) { +void RenderCustomLayer::evaluate(const PropertyEvaluationParameters&) { passes = RenderPass::Translucent; +} + +bool RenderCustomLayer::hasTransition() const { return false; } diff --git a/src/mbgl/renderer/render_custom_layer.hpp b/src/mbgl/renderer/render_custom_layer.hpp index cb728fecb3..c3af6c77b2 100644 --- a/src/mbgl/renderer/render_custom_layer.hpp +++ b/src/mbgl/renderer/render_custom_layer.hpp @@ -14,7 +14,8 @@ public: std::unique_ptr<RenderLayer> clone() const override; void cascade(const CascadeParameters&) final {} - bool evaluate(const PropertyEvaluationParameters&) final; + void evaluate(const PropertyEvaluationParameters&) override; + bool hasTransition() const override; std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const final; diff --git a/src/mbgl/renderer/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/render_fill_extrusion_layer.cpp index 70ee74b56e..f6ba164d8c 100644 --- a/src/mbgl/renderer/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/render_fill_extrusion_layer.cpp @@ -24,12 +24,14 @@ void RenderFillExtrusionLayer::cascade(const CascadeParameters& parameters) { unevaluated = impl->cascading.cascade(parameters, std::move(unevaluated)); } -bool RenderFillExtrusionLayer::evaluate(const PropertyEvaluationParameters& parameters) { +void RenderFillExtrusionLayer::evaluate(const PropertyEvaluationParameters& parameters) { evaluated = unevaluated.evaluate(parameters); passes = (evaluated.get<style::FillExtrusionOpacity>() > 0) ? RenderPass::Translucent : RenderPass::None; +} +bool RenderFillExtrusionLayer::hasTransition() const { return unevaluated.hasTransition(); } diff --git a/src/mbgl/renderer/render_fill_extrusion_layer.hpp b/src/mbgl/renderer/render_fill_extrusion_layer.hpp index b4fd1411f5..bd66d8e3b1 100644 --- a/src/mbgl/renderer/render_fill_extrusion_layer.hpp +++ b/src/mbgl/renderer/render_fill_extrusion_layer.hpp @@ -15,7 +15,8 @@ public: std::unique_ptr<RenderLayer> clone() const override; void cascade(const CascadeParameters&) override; - bool evaluate(const PropertyEvaluationParameters&) override; + void evaluate(const PropertyEvaluationParameters&) override; + bool hasTransition() const override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/render_fill_layer.cpp b/src/mbgl/renderer/render_fill_layer.cpp index 53c1ff3032..1af139cded 100644 --- a/src/mbgl/renderer/render_fill_layer.cpp +++ b/src/mbgl/renderer/render_fill_layer.cpp @@ -24,7 +24,7 @@ void RenderFillLayer::cascade(const CascadeParameters& parameters) { unevaluated = impl->cascading.cascade(parameters, std::move(unevaluated)); } -bool RenderFillLayer::evaluate(const PropertyEvaluationParameters& parameters) { +void RenderFillLayer::evaluate(const PropertyEvaluationParameters& parameters) { evaluated = unevaluated.evaluate(parameters); if (unevaluated.get<style::FillOutlineColor>().isUndefined()) { @@ -44,11 +44,12 @@ bool RenderFillLayer::evaluate(const PropertyEvaluationParameters& parameters) { } else { passes |= RenderPass::Opaque; } +} +bool RenderFillLayer::hasTransition() const { return unevaluated.hasTransition(); } - bool RenderFillLayer::queryIntersectsFeature( const GeometryCoordinates& queryGeometry, const GeometryTileFeature& feature, diff --git a/src/mbgl/renderer/render_fill_layer.hpp b/src/mbgl/renderer/render_fill_layer.hpp index 3a8de3622a..8080cf289b 100644 --- a/src/mbgl/renderer/render_fill_layer.hpp +++ b/src/mbgl/renderer/render_fill_layer.hpp @@ -15,7 +15,8 @@ public: std::unique_ptr<RenderLayer> clone() const override; void cascade(const CascadeParameters&) override; - bool evaluate(const PropertyEvaluationParameters&) override; + void evaluate(const PropertyEvaluationParameters&) override; + bool hasTransition() const override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp index 003059005e..eea2ec1f61 100644 --- a/src/mbgl/renderer/render_layer.hpp +++ b/src/mbgl/renderer/render_layer.hpp @@ -33,8 +33,10 @@ public: virtual void cascade(const CascadeParameters&) = 0; // Fully evaluate cascaded paint properties based on a zoom level. + virtual void evaluate(const PropertyEvaluationParameters&) = 0; + // Returns true if any paint properties have active transitions. - virtual bool evaluate(const PropertyEvaluationParameters&) = 0; + virtual bool hasTransition() const = 0; // Check whether this layer is of the given subtype. template <class T> diff --git a/src/mbgl/renderer/render_line_layer.cpp b/src/mbgl/renderer/render_line_layer.cpp index e5060af79e..06c2564516 100644 --- a/src/mbgl/renderer/render_line_layer.cpp +++ b/src/mbgl/renderer/render_line_layer.cpp @@ -24,7 +24,7 @@ void RenderLineLayer::cascade(const CascadeParameters& parameters) { unevaluated = impl->cascading.cascade(parameters, std::move(unevaluated)); } -bool RenderLineLayer::evaluate(const PropertyEvaluationParameters& parameters) { +void RenderLineLayer::evaluate(const PropertyEvaluationParameters& parameters) { // for scaling dasharrays auto dashArrayParams = parameters; dashArrayParams.z = std::floor(dashArrayParams.z); @@ -36,9 +36,12 @@ bool RenderLineLayer::evaluate(const PropertyEvaluationParameters& parameters) { && evaluated.get<style::LineColor>().constantOr(Color::black()).a > 0 && evaluated.get<style::LineWidth>() > 0) ? RenderPass::Translucent : RenderPass::None; +} +bool RenderLineLayer::hasTransition() const { return unevaluated.hasTransition(); } + optional<GeometryCollection> offsetLine(const GeometryCollection& rings, const double offset) { if (offset == 0) return {}; diff --git a/src/mbgl/renderer/render_line_layer.hpp b/src/mbgl/renderer/render_line_layer.hpp index 15052deb38..6d6fecc227 100644 --- a/src/mbgl/renderer/render_line_layer.hpp +++ b/src/mbgl/renderer/render_line_layer.hpp @@ -15,7 +15,8 @@ public: std::unique_ptr<RenderLayer> clone() const override; void cascade(const CascadeParameters&) override; - bool evaluate(const PropertyEvaluationParameters&) override; + void evaluate(const PropertyEvaluationParameters&) override; + bool hasTransition() const override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/render_raster_layer.cpp b/src/mbgl/renderer/render_raster_layer.cpp index 0cfccc81b3..5e664e6f58 100644 --- a/src/mbgl/renderer/render_raster_layer.cpp +++ b/src/mbgl/renderer/render_raster_layer.cpp @@ -22,11 +22,13 @@ void RenderRasterLayer::cascade(const CascadeParameters& parameters) { unevaluated = impl->cascading.cascade(parameters, std::move(unevaluated)); } -bool RenderRasterLayer::evaluate(const PropertyEvaluationParameters& parameters) { +void RenderRasterLayer::evaluate(const PropertyEvaluationParameters& parameters) { evaluated = unevaluated.evaluate(parameters); passes = evaluated.get<style::RasterOpacity>() > 0 ? RenderPass::Translucent : RenderPass::None; +} +bool RenderRasterLayer::hasTransition() const { return unevaluated.hasTransition(); } diff --git a/src/mbgl/renderer/render_raster_layer.hpp b/src/mbgl/renderer/render_raster_layer.hpp index c6e38fa147..3ffeb8febf 100644 --- a/src/mbgl/renderer/render_raster_layer.hpp +++ b/src/mbgl/renderer/render_raster_layer.hpp @@ -15,7 +15,8 @@ public: std::unique_ptr<RenderLayer> clone() const override; void cascade(const CascadeParameters&) override; - bool evaluate(const PropertyEvaluationParameters&) override; + void evaluate(const PropertyEvaluationParameters&) override; + bool hasTransition() const override; std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override; diff --git a/src/mbgl/renderer/render_symbol_layer.cpp b/src/mbgl/renderer/render_symbol_layer.cpp index 0c3601aedf..30d769e032 100644 --- a/src/mbgl/renderer/render_symbol_layer.cpp +++ b/src/mbgl/renderer/render_symbol_layer.cpp @@ -38,7 +38,7 @@ void RenderSymbolLayer::cascade(const CascadeParameters& parameters) { unevaluated = impl->cascading.cascade(parameters, std::move(unevaluated)); } -bool RenderSymbolLayer::evaluate(const PropertyEvaluationParameters& parameters) { +void RenderSymbolLayer::evaluate(const PropertyEvaluationParameters& parameters) { evaluated = unevaluated.evaluate(parameters); auto hasIconOpacity = evaluated.get<style::IconColor>().constantOr(Color::black()).a > 0 || @@ -49,11 +49,12 @@ bool RenderSymbolLayer::evaluate(const PropertyEvaluationParameters& parameters) passes = ((evaluated.get<style::IconOpacity>().constantOr(1) > 0 && hasIconOpacity && iconSize > 0) || (evaluated.get<style::TextOpacity>().constantOr(1) > 0 && hasTextOpacity && textSize > 0)) ? RenderPass::Translucent : RenderPass::None; +} +bool RenderSymbolLayer::hasTransition() const { return unevaluated.hasTransition(); } - style::IconPaintProperties::Evaluated RenderSymbolLayer::iconPaintProperties() const { return style::IconPaintProperties::Evaluated { evaluated.get<style::IconOpacity>(), diff --git a/src/mbgl/renderer/render_symbol_layer.hpp b/src/mbgl/renderer/render_symbol_layer.hpp index b9c2cc3247..80ffd95a06 100644 --- a/src/mbgl/renderer/render_symbol_layer.hpp +++ b/src/mbgl/renderer/render_symbol_layer.hpp @@ -67,7 +67,8 @@ public: std::unique_ptr<RenderLayer> clone() const override; void cascade(const CascadeParameters&) override; - bool evaluate(const PropertyEvaluationParameters&) override; + void evaluate(const PropertyEvaluationParameters&) override; + bool hasTransition() const override; style::IconPaintProperties::Evaluated iconPaintProperties() const; style::TextPaintProperties::Evaluated textPaintProperties() const; diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 23536e0e3e..a3c7ce1ad1 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -387,9 +387,8 @@ void Style::recalculate(float z, const TimePoint& timePoint, MapMode mode) { mode == MapMode::Continuous ? util::DEFAULT_FADE_DURATION : Duration::zero() }; - hasPendingTransitions = transitioningLight.hasTransition(); for (const auto& layer : renderLayers) { - hasPendingTransitions |= layer->evaluate(parameters); + layer->evaluate(parameters); if (layer->needsRendering(zoomHistory.lastZoom)) { if (RenderSource* renderSource = getRenderSource(layer->baseImpl.source)) { @@ -443,7 +442,17 @@ RenderSource* Style::getRenderSource(const std::string& id) const { } bool Style::hasTransitions() const { - return hasPendingTransitions; + if (transitioningLight.hasTransition()) { + return true; + } + + for (const auto& layer : renderLayers) { + if (layer->hasTransition()) { + return true; + } + } + + return false; } bool Style::isLoaded() const { diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index fe588c3ce5..c7528483e9 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -180,9 +180,9 @@ private: UpdateBatch updateBatch; ZoomHistory zoomHistory; - bool hasPendingTransitions = false; void removeRenderLayer(const std::string& layerID); + public: bool loaded = false; }; |