diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-01 11:29:28 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-17 17:21:41 +0300 |
commit | 4b21560cf59877125ea0bdae1a2546ab06f1efb2 (patch) | |
tree | bd7f76fd51c29c63ef7b15964752f9c8c9e3bf38 /src/mbgl/renderer/layers/render_circle_layer.cpp | |
parent | 1a66a02097f0e3c95a4d06610fc0b7609f6d77b9 (diff) | |
download | qtlocation-mapboxgl-4b21560cf59877125ea0bdae1a2546ab06f1efb2.tar.gz |
[core] Use `style::LayerProperties` in render layers, buckets and layouts.
Diffstat (limited to 'src/mbgl/renderer/layers/render_circle_layer.cpp')
-rw-r--r-- | src/mbgl/renderer/layers/render_circle_layer.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index ad4e6a020f..9df20cf874 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -15,21 +15,24 @@ namespace mbgl { using namespace style; -RenderCircleLayer::RenderCircleLayer(Immutable<style::CircleLayer::Impl> _impl) - : RenderLayer(std::move(_impl)), - unevaluated(impl().paint.untransitioned()) { +inline const style::CircleLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) { + return static_cast<const style::CircleLayer::Impl&>(*impl); } -const style::CircleLayer::Impl& RenderCircleLayer::impl() const { - return static_cast<const style::CircleLayer::Impl&>(*baseImpl); +RenderCircleLayer::RenderCircleLayer(Immutable<style::CircleLayer::Impl> _impl) + : RenderLayer(makeMutable<CircleLayerProperties>(std::move(_impl))), + unevaluated(impl(baseImpl).paint.untransitioned()) { } void RenderCircleLayer::transition(const TransitionParameters& parameters) { - unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated)); + unevaluated = impl(baseImpl).paint.transitioned(parameters, std::move(unevaluated)); } void RenderCircleLayer::evaluate(const PropertyEvaluationParameters& parameters) { - evaluated = unevaluated.evaluate(parameters); + auto properties = makeMutable<CircleLayerProperties>( + staticImmutableCast<CircleLayer::Impl>(baseImpl), + unevaluated.evaluate(parameters)); + const auto& evaluated = properties->evaluated; passes = ((evaluated.get<style::CircleRadius>().constantOr(1) > 0 || evaluated.get<style::CircleStrokeWidth>().constantOr(1) > 0) @@ -38,6 +41,7 @@ void RenderCircleLayer::evaluate(const PropertyEvaluationParameters& parameters) && (evaluated.get<style::CircleOpacity>().constantOr(1) > 0 || evaluated.get<style::CircleStrokeOpacity>().constantOr(1) > 0)) ? RenderPass::Translucent : RenderPass::None; + evaluatedProperties = std::move(properties); } bool RenderCircleLayer::hasTransition() const { @@ -52,7 +56,7 @@ void RenderCircleLayer::render(PaintParameters& parameters, RenderSource*) { if (parameters.pass == RenderPass::Opaque) { return; } - + const auto& evaluated = static_cast<const CircleLayerProperties&>(*evaluatedProperties).evaluated; const bool scaleWithMap = evaluated.get<CirclePitchScale>() == CirclePitchScaleType::Map; const bool pitchWithMap = evaluated.get<CirclePitchAlignment>() == AlignmentType::Map; @@ -139,7 +143,7 @@ bool RenderCircleLayer::queryIntersectsFeature( const TransformState& transformState, const float pixelsToTileUnits, const mat4& posMatrix) const { - + const auto& evaluated = static_cast<const CircleLayerProperties&>(*evaluatedProperties).evaluated; // Translate query geometry const GeometryCoordinates& translatedQueryGeometry = FeatureIndex::translateQueryGeometry( queryGeometry, |