Skip to content

Commit 14bfb5d

Browse files
authored
Retain property update flags (#2083)
1 parent d2feec2 commit 14bfb5d

6 files changed

+35
-32
lines changed

src/mbgl/renderer/layers/fill_layer_tweaker.cpp

+15-23
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,16 @@ void FillLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParameters
4343
const auto debugGroup = parameters.encoder->createDebugGroup(label.c_str());
4444
#endif
4545

46-
// Only run each update function once
47-
bool fillUniformBufferUpdated = false;
48-
bool fillOutlineUniformBufferUpdated = false;
49-
bool fillPatternUniformBufferUpdated = false;
50-
bool fillOutlinePatternUniformBufferUpdated = false;
51-
52-
const auto UpdateFillUniformBuffers = [&]() {
53-
if (fillUniformBufferUpdated) return;
46+
if (propertiesUpdated) {
5447
fillUniformBufferUpdated = true;
48+
fillOutlineUniformBufferUpdated = true;
49+
fillPatternUniformBufferUpdated = true;
50+
fillOutlinePatternUniformBufferUpdated = true;
51+
propertiesUpdated = false;
52+
}
5553

56-
if (!fillPropsUniformBuffer || propertiesUpdated) {
54+
const auto UpdateFillUniformBuffers = [&]() {
55+
if (!fillPropsUniformBuffer || fillUniformBufferUpdated) {
5756
const FillEvaluatedPropsUBO paramsUBO = {
5857
/* .color = */ evaluated.get<FillColor>().constantOr(FillColor::defaultValue()),
5958
/* .opacity = */ evaluated.get<FillOpacity>().constantOr(FillOpacity::defaultValue()),
@@ -62,14 +61,12 @@ void FillLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParameters
6261
0,
6362
};
6463
context.emplaceOrUpdateUniformBuffer(fillPropsUniformBuffer, &paramsUBO);
64+
fillUniformBufferUpdated = false;
6565
}
6666
};
6767

6868
const auto UpdateFillOutlineUniformBuffers = [&]() {
69-
if (fillOutlineUniformBufferUpdated) return;
70-
fillOutlineUniformBufferUpdated = true;
71-
72-
if (!fillOutlinePropsUniformBuffer || propertiesUpdated) {
69+
if (!fillOutlinePropsUniformBuffer || fillOutlineUniformBufferUpdated) {
7370
const FillOutlineEvaluatedPropsUBO paramsUBO = {
7471
/* .outline_color = */ evaluated.get<FillOutlineColor>().constantOr(FillOutlineColor::defaultValue()),
7572
/* .opacity = */ evaluated.get<FillOpacity>().constantOr(FillOpacity::defaultValue()),
@@ -78,36 +75,33 @@ void FillLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParameters
7875
0,
7976
};
8077
context.emplaceOrUpdateUniformBuffer(fillOutlinePropsUniformBuffer, &paramsUBO);
78+
fillOutlineUniformBufferUpdated = false;
8179
}
8280
};
8381

8482
const auto UpdateFillPatternUniformBuffers = [&]() {
85-
if (fillPatternUniformBufferUpdated) return;
86-
fillPatternUniformBufferUpdated = true;
87-
88-
if (!fillPatternPropsUniformBuffer || propertiesUpdated) {
83+
if (!fillPatternPropsUniformBuffer || fillPatternUniformBufferUpdated) {
8984
const FillPatternEvaluatedPropsUBO paramsUBO = {
9085
/* .opacity = */ evaluated.get<FillOpacity>().constantOr(FillOpacity::defaultValue()),
9186
/* .fade = */ crossfade.t,
9287
0,
9388
0,
9489
};
9590
context.emplaceOrUpdateUniformBuffer(fillPatternPropsUniformBuffer, &paramsUBO);
91+
fillPatternUniformBufferUpdated = false;
9692
}
9793
};
9894

9995
const auto UpdateFillOutlinePatternUniformBuffers = [&]() {
100-
if (fillOutlinePatternUniformBufferUpdated) return;
101-
fillOutlinePatternUniformBufferUpdated = true;
102-
103-
if (!fillOutlinePatternPropsUniformBuffer || propertiesUpdated) {
96+
if (!fillOutlinePatternPropsUniformBuffer || fillOutlinePatternUniformBufferUpdated) {
10497
const FillOutlinePatternEvaluatedPropsUBO paramsUBO = {
10598
/* .opacity = */ evaluated.get<FillOpacity>().constantOr(FillOpacity::defaultValue()),
10699
/* .fade = */ crossfade.t,
107100
0,
108101
0,
109102
};
110103
context.emplaceOrUpdateUniformBuffer(fillOutlinePatternPropsUniformBuffer, &paramsUBO);
104+
fillOutlinePatternUniformBufferUpdated = false;
111105
}
112106
};
113107

@@ -214,8 +208,6 @@ void FillLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParameters
214208
}
215209
}
216210
});
217-
218-
propertiesUpdated = false;
219211
}
220212

221213
} // namespace mbgl

src/mbgl/renderer/layers/fill_layer_tweaker.hpp

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ class FillLayerTweaker : public LayerTweaker {
2525
gfx::UniformBufferPtr fillOutlinePropsUniformBuffer;
2626
gfx::UniformBufferPtr fillPatternPropsUniformBuffer;
2727
gfx::UniformBufferPtr fillOutlinePatternPropsUniformBuffer;
28+
29+
// Only run each update function once per property update
30+
bool fillUniformBufferUpdated = true;
31+
bool fillOutlineUniformBufferUpdated = true;
32+
bool fillPatternUniformBufferUpdated = true;
33+
bool fillOutlinePatternUniformBufferUpdated = true;
2834
};
2935

3036
} // namespace mbgl

src/mbgl/renderer/layers/heatmap_layer_tweaker.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ void HeatmapLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParamet
4242
/* .intensity = */ evaluated.get<HeatmapIntensity>(),
4343
/* .padding = */ 0};
4444
parameters.context.emplaceOrUpdateUniformBuffer(evaluatedPropsUniformBuffer, &evaluatedPropsUBO);
45+
propertiesUpdated = false;
4546
}
4647
return evaluatedPropsUniformBuffer;
4748
};
@@ -67,8 +68,6 @@ void HeatmapLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParamet
6768

6869
uniforms.createOrUpdate(idHeatmapDrawableUBO, &drawableUBO, context);
6970
});
70-
71-
propertiesUpdated = false;
7271
}
7372

7473
} // namespace mbgl

src/mbgl/renderer/layers/hillshade_layer_tweaker.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ void HillshadeLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParam
5151
/* .shadow = */ evaluated.get<HillshadeShadowColor>(),
5252
/* .accent = */ evaluated.get<HillshadeAccentColor>()};
5353
parameters.context.emplaceOrUpdateUniformBuffer(evaluatedPropsUniformBuffer, &evaluatedPropsUBO);
54+
propertiesUpdated = false;
5455
}
5556
return evaluatedPropsUniformBuffer;
5657
};
@@ -72,8 +73,6 @@ void HillshadeLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParam
7273
/* .light = */ getLight(parameters, evaluated)};
7374
uniforms.createOrUpdate(idHillshadeDrawableUBO, &drawableUBO, parameters.context);
7475
});
75-
76-
propertiesUpdated = false;
7776
}
7877

7978
} // namespace mbgl

src/mbgl/renderer/layers/line_layer_tweaker.cpp

+7-5
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@ void LineLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParameters
3434
const auto& crossfade = static_cast<const LineLayerProperties&>(*evaluatedProperties).crossfade;
3535

3636
// Each property UBO is updated at most once if new evaluated properties were set
37-
bool simplePropertiesUpdated = propertiesUpdated;
38-
bool gradientPropertiesUpdated = propertiesUpdated;
39-
bool patternPropertiesUpdated = propertiesUpdated;
40-
bool sdfPropertiesUpdated = propertiesUpdated;
41-
propertiesUpdated = false;
37+
if (propertiesUpdated) {
38+
simplePropertiesUpdated = true;
39+
gradientPropertiesUpdated = true;
40+
patternPropertiesUpdated = true;
41+
sdfPropertiesUpdated = true;
42+
propertiesUpdated = false;
43+
}
4244

4345
const auto getLinePropsBuffer = [&]() {
4446
if (!linePropertiesBuffer || simplePropertiesUpdated) {

src/mbgl/renderer/layers/line_layer_tweaker.hpp

+5
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ class LineLayerTweaker : public LayerTweaker {
4141
gfx::UniformBufferPtr permutationUniformBuffer;
4242
gfx::UniformBufferPtr expressionUniformBuffer;
4343
#endif // MLN_RENDER_BACKEND_METAL
44+
45+
bool simplePropertiesUpdated = true;
46+
bool gradientPropertiesUpdated = true;
47+
bool patternPropertiesUpdated = true;
48+
bool sdfPropertiesUpdated = true;
4449
};
4550

4651
} // namespace mbgl

0 commit comments

Comments
 (0)