Add regression test for #3323, bug in layer dependency tracking (#3326)

Co-authored-by: Bart Louwers <bart@emeel.net>
This commit is contained in:
Tim Sylvester
2025-03-24 09:44:01 -07:00
committed by GitHub
parent 2544cce753
commit c4f33fab32
14 changed files with 55 additions and 2 deletions

View File

@@ -50,6 +50,7 @@ RenderBackgroundLayer::~RenderBackgroundLayer() = default;
void RenderBackgroundLayer::transition(const TransitionParameters& parameters) {
unevaluated = impl_cast(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
styleDependencies = unevaluated.getDependencies();
}
void RenderBackgroundLayer::evaluate(const PropertyEvaluationParameters& parameters) {

View File

@@ -68,6 +68,7 @@ RenderCircleLayer::RenderCircleLayer(Immutable<style::CircleLayer::Impl> _impl)
void RenderCircleLayer::transition(const TransitionParameters& parameters) {
unevaluated = impl_cast(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
styleDependencies = unevaluated.getDependencies();
}
void RenderCircleLayer::evaluate(const PropertyEvaluationParameters& parameters) {

View File

@@ -54,6 +54,7 @@ RenderFillExtrusionLayer::~RenderFillExtrusionLayer() = default;
void RenderFillExtrusionLayer::transition(const TransitionParameters& parameters) {
unevaluated = impl_cast(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
styleDependencies = unevaluated.getDependencies();
}
void RenderFillExtrusionLayer::evaluate(const PropertyEvaluationParameters& parameters) {

View File

@@ -66,6 +66,7 @@ RenderFillLayer::~RenderFillLayer() = default;
void RenderFillLayer::transition(const TransitionParameters& parameters) {
unevaluated = impl_cast(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
styleDependencies = unevaluated.getDependencies();
}
void RenderFillLayer::evaluate(const PropertyEvaluationParameters& parameters) {

View File

@@ -50,6 +50,7 @@ RenderHeatmapLayer::~RenderHeatmapLayer() = default;
void RenderHeatmapLayer::transition(const TransitionParameters& parameters) {
unevaluated = impl_cast(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
styleDependencies = unevaluated.getDependencies();
updateColorRamp();
}

View File

@@ -65,6 +65,7 @@ std::array<float, 2> RenderHillshadeLayer::getLight(const PaintParameters& param
void RenderHillshadeLayer::transition(const TransitionParameters& parameters) {
unevaluated = impl_cast(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
styleDependencies = unevaluated.getDependencies();
}
#if MLN_DRAWABLE_RENDERER

View File

@@ -63,6 +63,7 @@ RenderLineLayer::~RenderLineLayer() = default;
void RenderLineLayer::transition(const TransitionParameters& parameters) {
unevaluated = impl_cast(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
styleDependencies = unevaluated.getDependencies();
updateColorRamp();
#if MLN_RENDER_BACKEND_METAL

View File

@@ -944,6 +944,7 @@ RenderLocationIndicatorLayer::~RenderLocationIndicatorLayer() {
void RenderLocationIndicatorLayer::transition(const TransitionParameters& parameters) {
unevaluated = impl(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
styleDependencies = unevaluated.getDependencies();
}
void RenderLocationIndicatorLayer::evaluate(const PropertyEvaluationParameters& parameters) {

View File

@@ -47,6 +47,7 @@ RenderRasterLayer::~RenderRasterLayer() = default;
void RenderRasterLayer::transition(const TransitionParameters& parameters) {
unevaluated = impl_cast(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
styleDependencies = unevaluated.getDependencies();
}
void RenderRasterLayer::evaluate(const PropertyEvaluationParameters& parameters) {

View File

@@ -364,6 +364,7 @@ void RenderSymbolLayer::transition(const TransitionParameters& parameters) {
unevaluated = impl_cast(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
hasFormatSectionOverrides = SymbolLayerPaintPropertyOverrides::hasOverrides(
impl_cast(baseImpl).layout.get<TextField>());
styleDependencies = unevaluated.getDependencies();
}
void RenderSymbolLayer::evaluate(const PropertyEvaluationParameters& parameters) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 853 B

View File

@@ -0,0 +1,13 @@
{
"version": 8,
"sources": {},
"layers": [
{
"id": "background",
"type": "background",
"paint": {
"background-color": "#ff0000"
}
}
]
}

View File

@@ -19,8 +19,10 @@
#include <mbgl/storage/network_status.hpp>
#include <mbgl/storage/online_file_source.hpp>
#include <mbgl/storage/resource_options.hpp>
#include <mbgl/style/image.hpp>
#include <mbgl/style/expression/dsl.hpp>
#include <mbgl/style/image_impl.hpp>
#include <mbgl/style/image.hpp>
#include <mbgl/style/layers/background_layer.hpp>
#include <mbgl/style/layers/background_layer.hpp>
#include <mbgl/style/layers/fill_layer.hpp>
#include <mbgl/style/layers/raster_layer.hpp>
@@ -29,8 +31,8 @@
#include <mbgl/style/sources/geojson_source.hpp>
#include <mbgl/style/sources/image_source.hpp>
#include <mbgl/style/sources/vector_source.hpp>
#include <mbgl/style/style.hpp>
#include <mbgl/style/style_impl.hpp>
#include <mbgl/style/style.hpp>
#include <mbgl/util/async_task.hpp>
#include <mbgl/util/client_options.hpp>
#include <mbgl/util/color.hpp>
@@ -1866,3 +1868,31 @@ TEST(Map, ObserveTileLifecycle) {
EXPECT_FALSE(parsing);
}
}
TEST(BackgroundLayer, StyleUpdateZoomDependency) {
using namespace mbgl::style::expression::dsl;
MapTest<> test;
test.map.getStyle().loadJSON(util::read_file("test/fixtures/map/style_update_zoom_dependency/style.json"));
test.map.jumpTo(CameraOptions().withZoom(0.0));
// Initial render: background should be red at zoom 0
test::checkImage("test/fixtures/map/style_update_zoom_dependency/initial_red",
test.frontend.render(test.map).image,
0.0006,
0.1);
// Update background layer to use zoom-dependent color
auto layer = static_cast<style::BackgroundLayer*>(test.map.getStyle().getLayer("background"));
layer->setBackgroundColor(PropertyExpression<Color>(
interpolate(linear(), zoom(), 0.0, literal(Color::red()), 14.0, literal(Color::green()))));
test.frontend.render(test.map);
// Change zoom to 14 and re-render
test.map.jumpTo(CameraOptions().withZoom(14.0));
test::checkImage("test/fixtures/map/style_update_zoom_dependency/after_update_green",
test.frontend.render(test.map).image,
0.0006,
0.1);
}