[core] Simplify RenderLayer interface.
This commit is contained in:
@@ -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()) {
|
||||
|
||||
@@ -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&,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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&,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user