From 099e320b5b3081b29490c420b579eda921aaed82 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Wed, 10 Apr 2019 15:11:48 +0300 Subject: [core] Simplify RenderLayer interface. --- src/mbgl/renderer/layers/render_heatmap_layer.cpp | 5 +---- src/mbgl/renderer/layers/render_heatmap_layer.hpp | 1 - src/mbgl/renderer/layers/render_line_layer.cpp | 5 +---- src/mbgl/renderer/layers/render_line_layer.hpp | 1 - src/mbgl/renderer/render_layer.cpp | 9 +++------ src/mbgl/renderer/render_layer.hpp | 9 +++------ src/mbgl/renderer/renderer_impl.cpp | 12 ++++-------- 7 files changed, 12 insertions(+), 30 deletions(-) diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index 92b54c6cc8..83a989195b 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -32,6 +32,7 @@ RenderHeatmapLayer::~RenderHeatmapLayer() = default; void RenderHeatmapLayer::transition(const TransitionParameters& parameters) { unevaluated = impl(baseImpl).paint.transitioned(parameters, std::move(unevaluated)); + updateColorRamp(); } void RenderHeatmapLayer::evaluate(const PropertyEvaluationParameters& parameters) { @@ -189,10 +190,6 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { } } -void RenderHeatmapLayer::update() { - updateColorRamp(); -} - void RenderHeatmapLayer::updateColorRamp() { auto colorValue = unevaluated.get().getValue(); if (colorValue.isUndefined()) { diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.hpp b/src/mbgl/renderer/layers/render_heatmap_layer.hpp index 50a7d72e94..65dad9828b 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.hpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.hpp @@ -20,7 +20,6 @@ private: bool hasTransition() const override; bool hasCrossfade() const override; void render(PaintParameters&, RenderSource*) override; - void update() final; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index cf4d3ed9b2..2a7468ca1f 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -32,6 +32,7 @@ RenderLineLayer::~RenderLineLayer() = default; void RenderLineLayer::transition(const TransitionParameters& parameters) { unevaluated = impl(baseImpl).paint.transitioned(parameters, std::move(unevaluated)); + updateColorRamp(); } void RenderLineLayer::evaluate(const PropertyEvaluationParameters& parameters) { @@ -279,8 +280,4 @@ float RenderLineLayer::getLineWidth(const GeometryTileFeature& feature, const fl } } -void RenderLineLayer::update() { - updateColorRamp(); -} - } // namespace mbgl diff --git a/src/mbgl/renderer/layers/render_line_layer.hpp b/src/mbgl/renderer/layers/render_line_layer.hpp index da64f58455..657f72e5f1 100644 --- a/src/mbgl/renderer/layers/render_line_layer.hpp +++ b/src/mbgl/renderer/layers/render_line_layer.hpp @@ -21,7 +21,6 @@ private: bool hasTransition() const override; bool hasCrossfade() const override; void render(PaintParameters&, RenderSource*) override; - void update() override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/render_layer.cpp b/src/mbgl/renderer/render_layer.cpp index b844c3f60d..5868c38fbc 100644 --- a/src/mbgl/renderer/render_layer.cpp +++ b/src/mbgl/renderer/render_layer.cpp @@ -15,8 +15,9 @@ RenderLayer::RenderLayer(Immutable properties) baseImpl(evaluatedProperties->baseImpl) { } -void RenderLayer::setImpl(Immutable impl) { - baseImpl = std::move(impl); +void RenderLayer::transition(const TransitionParameters& parameters, Immutable newImpl) { + baseImpl = std::move(newImpl); + transition(parameters); } const std::string& RenderLayer::getID() const { @@ -43,10 +44,6 @@ const RenderLayerSymbolInterface* RenderLayer::getSymbolInterface() const { return nullptr; } -void RenderLayer::update() { - // no-op -} - optional RenderLayer::getSolidBackground() const { return nullopt; } diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp index 692fc85f29..cda67cfe15 100644 --- a/src/mbgl/renderer/render_layer.hpp +++ b/src/mbgl/renderer/render_layer.hpp @@ -35,6 +35,9 @@ public: // Begin transitions for any properties that have changed since the last frame. virtual void transition(const TransitionParameters&) = 0; + // Overloaded version for transitions to a new layer impl. + void transition(const TransitionParameters&, Immutable newImpl); + // Fully evaluate possibly-transitioning paint properties based on a zoom level. // Updates the contained `evaluatedProperties` member. virtual void evaluate(const PropertyEvaluationParameters&) = 0; @@ -75,15 +78,9 @@ public: Immutable evaluatedProperties; // Private implementation Immutable baseImpl; - void setImpl(Immutable); virtual void markContextDestroyed(); - // TODO: Figure out how to remove this or whether layers other than - // RenderHeatmapLayer and RenderLineLayer need paint property updates, - // similar to color ramp. Temporarily moved to the base. - virtual void update(); - // TODO: Only for background layers. virtual optional getSolidBackground() const; diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 1d548fed28..3313221a62 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -175,12 +175,14 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { // Create render layers for newly added layers. for (const auto& entry : layerDiff.added) { - renderLayers.emplace(entry.first, LayerManager::get()->createRenderLayer(entry.second)); + auto renderLayer = LayerManager::get()->createRenderLayer(entry.second); + renderLayer->transition(transitionParameters); + renderLayers.emplace(entry.first, std::move(renderLayer)); } // Update render layers for changed layers. for (const auto& entry : layerDiff.changed) { - renderLayers.at(entry.first)->setImpl(entry.second.after); + renderLayers.at(entry.first)->transition(transitionParameters, entry.second.after); } if (!layerDiff.removed.empty() || !layerDiff.added.empty() || !layerDiff.changed.empty()) { @@ -191,12 +193,6 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { for (const auto& entry : renderLayers) { RenderLayer& layer = *entry.second; const bool layerAddedOrChanged = layerDiff.added.count(entry.first) || layerDiff.changed.count(entry.first); - - if (layerAddedOrChanged) { - layer.transition(transitionParameters); - layer.update(); - } - if (layerAddedOrChanged || zoomChanged || layer.hasTransition() || layer.hasCrossfade()) { layer.evaluate(evaluationParameters); } -- cgit v1.2.1