Skip to content
This repository was archived by the owner on Aug 8, 2023. It is now read-only.

Commit 8103a2b

Browse files
committed
[core] Enable opaque pass for background layer. fix heatmap+background test.
Follow the approach from mapbox-gl-js for enabling opaque pass for background layer (same as for fill layer). Fix combinations/heatmap-translucent--background-opaque render test.
1 parent c523391 commit 8103a2b

3 files changed

Lines changed: 21 additions & 13 deletions

File tree

platform/node/test/ignores.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@
8585
"render-tests/text-rotate/with-offset": "https://github.com/mapbox/mapbox-gl-native/issues/11872",
8686
"render-tests/video/default": "skip - https://github.com/mapbox/mapbox-gl-native/issues/601",
8787
"render-tests/background-color/colorSpace-hcl": "needs issue",
88-
"render-tests/combinations/heatmap-translucent--background-opaque": "needs investigation",
8988
"render-tests/feature-state/composite-expression": "https://github.com/mapbox/mapbox-gl-native/issues/12613",
9089
"render-tests/feature-state/data-expression": "https://github.com/mapbox/mapbox-gl-native/issues/12613",
9190
"render-tests/feature-state/vector-source": "https://github.com/mapbox/mapbox-gl-native/issues/12613",

src/mbgl/renderer/layers/render_background_layer.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,14 @@ void RenderBackgroundLayer::evaluate(const PropertyEvaluationParameters &paramet
3737
parameters.getCrossfadeParameters(),
3838
unevaluated.evaluate(parameters));
3939

40-
passes = properties->evaluated.get<style::BackgroundOpacity>() > 0 ? RenderPass::Translucent
41-
: RenderPass::None;
40+
passes = properties->evaluated.get<style::BackgroundOpacity>() == 0.0f
41+
? RenderPass::None
42+
: (!unevaluated.get<style::BackgroundPattern>().isUndefined()
43+
|| properties->evaluated.get<style::BackgroundOpacity>() < 1.0f
44+
|| properties->evaluated.get<style::BackgroundColor>().a < 1.0f)
45+
? RenderPass::Translucent
46+
// Supply both - evaluated based on opaquePassCutoff in render().
47+
: RenderPass::Opaque | RenderPass::Translucent;
4248
properties->renderPasses = mbgl::underlying_type(passes);
4349
evaluatedProperties = std::move(properties);
4450
}
@@ -77,7 +83,9 @@ void RenderBackgroundLayer::render(PaintParameters& parameters) {
7783
parameters.context,
7884
*parameters.renderPass,
7985
gfx::Triangles(),
80-
parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly),
86+
parameters.depthModeForSublayer(0, parameters.pass == RenderPass::Opaque
87+
? gfx::DepthMaskType::ReadWrite
88+
: gfx::DepthMaskType::ReadOnly),
8189
gfx::StencilMode::disabled(),
8290
parameters.colorModeForRenderPass(),
8391
gfx::CullFaceMode::disabled(),
@@ -118,6 +126,12 @@ void RenderBackgroundLayer::render(PaintParameters& parameters) {
118126
);
119127
}
120128
} else {
129+
auto backgroundRenderPass = (evaluated.get<BackgroundColor>().a >= 1.0f
130+
&& evaluated.get<BackgroundOpacity>() >= 1.0f
131+
&& parameters.currentLayer >= parameters.opaquePassCutoff) ? RenderPass::Opaque : RenderPass::Translucent;
132+
if (parameters.pass != backgroundRenderPass) {
133+
return;
134+
}
121135
for (const auto& tileID : util::tileCover(parameters.state, parameters.state.getIntegerZoom())) {
122136
draw(
123137
parameters.programs.getBackgroundLayerPrograms().background,

src/mbgl/renderer/layers/render_fill_layer.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,12 @@ void RenderFillLayer::evaluate(const PropertyEvaluationParameters& parameters) {
4747
evaluated.get<style::FillOutlineColor>() = evaluated.get<style::FillColor>();
4848
}
4949

50-
passes = RenderPass::None;
50+
passes = RenderPass::Translucent;
5151

52-
if (evaluated.get<style::FillAntialias>()) {
53-
passes |= RenderPass::Translucent;
54-
}
55-
56-
if (!unevaluated.get<style::FillPattern>().isUndefined()
52+
if (!(!unevaluated.get<style::FillPattern>().isUndefined()
5753
|| evaluated.get<style::FillColor>().constantOr(Color()).a < 1.0f
58-
|| evaluated.get<style::FillOpacity>().constantOr(0) < 1.0f) {
59-
passes |= RenderPass::Translucent;
60-
} else {
54+
|| evaluated.get<style::FillOpacity>().constantOr(0) < 1.0f)) {
55+
// Supply both - evaluated based on opaquePassCutoff in render().
6156
passes |= RenderPass::Opaque;
6257
}
6358
properties->renderPasses = mbgl::underlying_type(passes);

0 commit comments

Comments
 (0)