diff options
author | Aleksandar Stojiljkovic <aleksandar.stojiljkovic@mapbox.com> | 2019-08-01 12:23:04 +0300 |
---|---|---|
committer | Aleksandar Stojiljkovic <aleksandar.stojiljkovic@mapbox.com> | 2019-08-05 18:56:07 +0300 |
commit | 8103a2b028358b747fe0f2d6cce2e32ca1424680 (patch) | |
tree | 268bf352aff912eb08b93088aba452aa2d221c5e /src | |
parent | c523391b2024bfa6ab5d60c8a86fe3bf735c588f (diff) | |
download | qtlocation-mapboxgl-8103a2b028358b747fe0f2d6cce2e32ca1424680.tar.gz |
[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.
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/renderer/layers/render_background_layer.cpp | 20 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_layer.cpp | 13 |
2 files changed, 21 insertions, 12 deletions
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index 885b6fe9b2..4725bce435 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -37,8 +37,14 @@ void RenderBackgroundLayer::evaluate(const PropertyEvaluationParameters ¶met parameters.getCrossfadeParameters(), unevaluated.evaluate(parameters)); - passes = properties->evaluated.get<style::BackgroundOpacity>() > 0 ? RenderPass::Translucent - : RenderPass::None; + passes = properties->evaluated.get<style::BackgroundOpacity>() == 0.0f + ? RenderPass::None + : (!unevaluated.get<style::BackgroundPattern>().isUndefined() + || properties->evaluated.get<style::BackgroundOpacity>() < 1.0f + || properties->evaluated.get<style::BackgroundColor>().a < 1.0f) + ? RenderPass::Translucent + // Supply both - evaluated based on opaquePassCutoff in render(). + : RenderPass::Opaque | RenderPass::Translucent; properties->renderPasses = mbgl::underlying_type(passes); evaluatedProperties = std::move(properties); } @@ -77,7 +83,9 @@ void RenderBackgroundLayer::render(PaintParameters& parameters) { parameters.context, *parameters.renderPass, gfx::Triangles(), - parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly), + parameters.depthModeForSublayer(0, parameters.pass == RenderPass::Opaque + ? gfx::DepthMaskType::ReadWrite + : gfx::DepthMaskType::ReadOnly), gfx::StencilMode::disabled(), parameters.colorModeForRenderPass(), gfx::CullFaceMode::disabled(), @@ -118,6 +126,12 @@ void RenderBackgroundLayer::render(PaintParameters& parameters) { ); } } else { + auto backgroundRenderPass = (evaluated.get<BackgroundColor>().a >= 1.0f + && evaluated.get<BackgroundOpacity>() >= 1.0f + && parameters.currentLayer >= parameters.opaquePassCutoff) ? RenderPass::Opaque : RenderPass::Translucent; + if (parameters.pass != backgroundRenderPass) { + return; + } for (const auto& tileID : util::tileCover(parameters.state, parameters.state.getIntegerZoom())) { draw( parameters.programs.getBackgroundLayerPrograms().background, diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index cf31201d77..6a134a398a 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -47,17 +47,12 @@ void RenderFillLayer::evaluate(const PropertyEvaluationParameters& parameters) { evaluated.get<style::FillOutlineColor>() = evaluated.get<style::FillColor>(); } - passes = RenderPass::None; + passes = RenderPass::Translucent; - if (evaluated.get<style::FillAntialias>()) { - passes |= RenderPass::Translucent; - } - - if (!unevaluated.get<style::FillPattern>().isUndefined() + if (!(!unevaluated.get<style::FillPattern>().isUndefined() || evaluated.get<style::FillColor>().constantOr(Color()).a < 1.0f - || evaluated.get<style::FillOpacity>().constantOr(0) < 1.0f) { - passes |= RenderPass::Translucent; - } else { + || evaluated.get<style::FillOpacity>().constantOr(0) < 1.0f)) { + // Supply both - evaluated based on opaquePassCutoff in render(). passes |= RenderPass::Opaque; } properties->renderPasses = mbgl::underlying_type(passes); |