[core] Simplify RenderLayer interface.

This commit is contained in:
Mikhail Pozdnyakov
2019-04-10 15:11:48 +03:00
parent 150b427300
commit b96d824b2d
7 changed files with 12 additions and 30 deletions

View File

@@ -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()) {

View File

@@ -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&,

View File

@@ -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

View File

@@ -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&,

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);
}