From 150fc6b643e0f10d2fb98d056ee4ea6a159596fb Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 21 Jun 2017 11:39:02 -0700 Subject: [core] Don't transition new layers on a setStyle operation --- .../renderer/layers/render_background_layer.cpp | 5 ++-- src/mbgl/renderer/layers/render_circle_layer.cpp | 5 ++-- .../layers/render_fill_extrusion_layer.cpp | 5 ++-- src/mbgl/renderer/layers/render_fill_layer.cpp | 5 ++-- src/mbgl/renderer/layers/render_line_layer.cpp | 8 +++---- src/mbgl/renderer/layers/render_raster_layer.cpp | 5 ++-- src/mbgl/renderer/layers/render_symbol_layer.cpp | 5 ++-- src/mbgl/renderer/render_light.cpp | 5 ++-- src/mbgl/style/properties.hpp | 27 ++++++++++++++++++---- 9 files changed, 48 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index 83ec7bf2db..702977cd23 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -5,7 +5,8 @@ namespace mbgl { RenderBackgroundLayer::RenderBackgroundLayer(Immutable _impl) - : RenderLayer(style::LayerType::Background, _impl) { + : RenderLayer(style::LayerType::Background, _impl), + unevaluated(impl().paint.untransitioned()) { } const style::BackgroundLayer::Impl& RenderBackgroundLayer::impl() const { @@ -19,7 +20,7 @@ std::unique_ptr RenderBackgroundLayer::createBucket(const BucketParamete } void RenderBackgroundLayer::transition(const TransitionParameters ¶meters) { - unevaluated = impl().paint.transition(parameters, std::move(unevaluated)); + unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated)); } void RenderBackgroundLayer::evaluate(const PropertyEvaluationParameters ¶meters) { diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index a8595ce61d..51a5ecd7d6 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -8,7 +8,8 @@ namespace mbgl { RenderCircleLayer::RenderCircleLayer(Immutable _impl) - : RenderLayer(style::LayerType::Circle, _impl) { + : RenderLayer(style::LayerType::Circle, _impl), + unevaluated(impl().paint.untransitioned()) { } const style::CircleLayer::Impl& RenderCircleLayer::impl() const { @@ -20,7 +21,7 @@ std::unique_ptr RenderCircleLayer::createBucket(const BucketParameters& } void RenderCircleLayer::transition(const TransitionParameters& parameters) { - unevaluated = impl().paint.transition(parameters, std::move(unevaluated)); + unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated)); } void RenderCircleLayer::evaluate(const PropertyEvaluationParameters& parameters) { diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp index 551fcc5fc9..cd69316670 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp @@ -8,7 +8,8 @@ namespace mbgl { RenderFillExtrusionLayer::RenderFillExtrusionLayer(Immutable _impl) - : RenderLayer(style::LayerType::FillExtrusion, _impl) { + : RenderLayer(style::LayerType::FillExtrusion, _impl), + unevaluated(impl().paint.untransitioned()) { } const style::FillExtrusionLayer::Impl& RenderFillExtrusionLayer::impl() const { @@ -20,7 +21,7 @@ std::unique_ptr RenderFillExtrusionLayer::createBucket(const BucketParam } void RenderFillExtrusionLayer::transition(const TransitionParameters& parameters) { - unevaluated = impl().paint.transition(parameters, std::move(unevaluated)); + unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated)); } void RenderFillExtrusionLayer::evaluate(const PropertyEvaluationParameters& parameters) { diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index a36e1688a7..f1c7e97067 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -8,7 +8,8 @@ namespace mbgl { RenderFillLayer::RenderFillLayer(Immutable _impl) - : RenderLayer(style::LayerType::Fill, _impl) { + : RenderLayer(style::LayerType::Fill, _impl), + unevaluated(impl().paint.untransitioned()) { } const style::FillLayer::Impl& RenderFillLayer::impl() const { @@ -20,7 +21,7 @@ std::unique_ptr RenderFillLayer::createBucket(const BucketParameters& pa } void RenderFillLayer::transition(const TransitionParameters& parameters) { - unevaluated = impl().paint.transition(parameters, std::move(unevaluated)); + unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated)); } void RenderFillLayer::evaluate(const PropertyEvaluationParameters& parameters) { diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index 5998c1f2fb..c27e5ea990 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -8,7 +8,8 @@ namespace mbgl { RenderLineLayer::RenderLineLayer(Immutable _impl) - : RenderLayer(style::LayerType::Line, _impl) { + : RenderLayer(style::LayerType::Line, _impl), + unevaluated(impl().paint.untransitioned()) { } const style::LineLayer::Impl& RenderLineLayer::impl() const { @@ -20,12 +21,11 @@ std::unique_ptr RenderLineLayer::createBucket(const BucketParameters& pa } void RenderLineLayer::transition(const TransitionParameters& parameters) { - unevaluated = impl().paint.transition(parameters, std::move(unevaluated)); + unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated)); } void RenderLineLayer::evaluate(const PropertyEvaluationParameters& parameters) { - style::Properties::Unevaluated extra; - extra.get() = unevaluated.get(); + style::Properties::Unevaluated extra(unevaluated.get()); auto dashArrayParams = parameters; dashArrayParams.useIntegerZoom = true; diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index 30b506b63b..84e27a3895 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -10,7 +10,8 @@ namespace mbgl { RenderRasterLayer::RenderRasterLayer(Immutable _impl) - : RenderLayer(style::LayerType::Raster, _impl) { + : RenderLayer(style::LayerType::Raster, _impl), + unevaluated(impl().paint.untransitioned()) { } const style::RasterLayer::Impl& RenderRasterLayer::impl() const { @@ -23,7 +24,7 @@ std::unique_ptr RenderRasterLayer::createBucket(const BucketParameters&, } void RenderRasterLayer::transition(const TransitionParameters& parameters) { - unevaluated = impl().paint.transition(parameters, std::move(unevaluated)); + unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated)); } void RenderRasterLayer::evaluate(const PropertyEvaluationParameters& parameters) { diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 9d59162a86..6540fc9612 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -9,7 +9,8 @@ namespace mbgl { RenderSymbolLayer::RenderSymbolLayer(Immutable _impl) - : RenderLayer(style::LayerType::Symbol, _impl) { + : RenderLayer(style::LayerType::Symbol, _impl), + unevaluated(impl().paint.untransitioned()) { } const style::SymbolLayer::Impl& RenderSymbolLayer::impl() const { @@ -34,7 +35,7 @@ std::unique_ptr RenderSymbolLayer::createLayout(const BucketParame } void RenderSymbolLayer::transition(const TransitionParameters& parameters) { - unevaluated = impl().paint.transition(parameters, std::move(unevaluated)); + unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated)); } void RenderSymbolLayer::evaluate(const PropertyEvaluationParameters& parameters) { diff --git a/src/mbgl/renderer/render_light.cpp b/src/mbgl/renderer/render_light.cpp index f1b5c28d3b..85768cff47 100644 --- a/src/mbgl/renderer/render_light.cpp +++ b/src/mbgl/renderer/render_light.cpp @@ -3,11 +3,12 @@ namespace mbgl { RenderLight::RenderLight(Immutable impl_) - : impl(std::move(impl_)) { + : impl(std::move(impl_)), + transitioning(impl->properties.untransitioned()) { } void RenderLight::transition(const TransitionParameters& parameters) { - transitioning = impl->properties.transition(parameters, std::move(transitioning)); + transitioning = impl->properties.transitioned(parameters, std::move(transitioning)); } void RenderLight::evaluate(const PropertyEvaluationParameters& parameters) { diff --git a/src/mbgl/style/properties.hpp b/src/mbgl/style/properties.hpp index e42beac97a..dfcf7993a7 100644 --- a/src/mbgl/style/properties.hpp +++ b/src/mbgl/style/properties.hpp @@ -20,6 +20,10 @@ class Transitioning { public: Transitioning() = default; + explicit Transitioning(Value value_) + : value(std::move(value_)) { + } + Transitioning(Value value_, Transitioning prior_, TransitionOptions transition, @@ -125,7 +129,10 @@ public: class Evaluated : public Tuple { public: - using Tuple::Tuple; + template + Evaluated(Us&&... us) + : Tuple(std::forward(us)...) { + } }; class PossiblyEvaluated : public Tuple { @@ -169,7 +176,10 @@ public: class Unevaluated : public Tuple { public: - using Tuple::Tuple; + template + Unevaluated(Us&&... us) + : Tuple(std::forward(us)...) { + } bool hasTransition() const { bool result = false; @@ -200,15 +210,24 @@ public: class Transitionable : public Tuple { public: - using Tuple::Tuple; + template + Transitionable(Us&&... us) + : Tuple(std::forward(us)...) { + } - Unevaluated transition(const TransitionParameters& parameters, Unevaluated&& prior) const { + Unevaluated transitioned(const TransitionParameters& parameters, Unevaluated&& prior) const { return Unevaluated { this->template get() .transition(parameters, std::move(prior.template get()))... }; } + Unevaluated untransitioned() const { + return Unevaluated { + typename Ps::UnevaluatedType(this->template get().value)... + }; + } + bool hasDataDrivenPropertyDifference(const Transitionable& other) const { bool result = false; util::ignore({ (result |= this->template get().value.hasDataDrivenPropertyDifference(other.template get().value))... }); -- cgit v1.2.1