summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-04-10 15:11:48 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-04-17 17:21:41 +0300
commitb96d824b2de44d210a8e06fc7c6c4f05c4e98fe2 (patch)
treee025ba720d76f5a96e2132c3612b048d85dfd141
parent150b427300af6425e78a687ce275feae4a7ccc9d (diff)
downloadqtlocation-mapboxgl-b96d824b2de44d210a8e06fc7c6c4f05c4e98fe2.tar.gz
[core] Simplify RenderLayer interface.
-rw-r--r--src/mbgl/renderer/layers/render_heatmap_layer.cpp5
-rw-r--r--src/mbgl/renderer/layers/render_heatmap_layer.hpp1
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.cpp5
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.hpp1
-rw-r--r--src/mbgl/renderer/render_layer.cpp9
-rw-r--r--src/mbgl/renderer/render_layer.hpp9
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp12
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<HeatmapColor>().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<style::LayerProperties> properties)
baseImpl(evaluatedProperties->baseImpl) {
}
-void RenderLayer::setImpl(Immutable<style::Layer::Impl> impl) {
- baseImpl = std::move(impl);
+void RenderLayer::transition(const TransitionParameters& parameters, Immutable<style::Layer::Impl> 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<Color> 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<style::Layer::Impl> 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<style::LayerProperties> evaluatedProperties;
// Private implementation
Immutable<style::Layer::Impl> baseImpl;
- void setImpl(Immutable<style::Layer::Impl>);
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<Color> getSolidBackground() const;
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp
index 4a618919d4..4ba1fc6bbc 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);
}