diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-10 17:53:35 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-11 15:36:28 +0300 |
commit | fa5646d112259758cee9fba0564a067376d07566 (patch) | |
tree | 3707f22455574b16c6a47019a10a306ed15f4cec /src/mbgl/renderer/layers/render_background_layer.cpp | |
parent | 200af48754fdc30021108baf85ab6fe4e3e5ba85 (diff) | |
download | qtlocation-mapboxgl-fa5646d112259758cee9fba0564a067376d07566.tar.gz |
[core] Synchronize render passes and render tiles
Before this change render passes were assigned for the
whole layer at properties evaluation stage.
This caused problems, as layer render data are bound
to the tile and these data might differ from tile to
tile, depending on which tile has been updated by the
tile worker and which has not been yet updated.
This change takes into consideration the actual render
passes required for each tile and combines them for
the layer render passes. Naturally, this change also
introduces render pass check for each render layer in
`RenderLayer::render()` implementations.
Diffstat (limited to 'src/mbgl/renderer/layers/render_background_layer.cpp')
-rw-r--r-- | src/mbgl/renderer/layers/render_background_layer.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index db755adf0b..885b6fe9b2 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -39,6 +39,7 @@ void RenderBackgroundLayer::evaluate(const PropertyEvaluationParameters ¶met passes = properties->evaluated.get<style::BackgroundOpacity>() > 0 ? RenderPass::Translucent : RenderPass::None; + properties->renderPasses = mbgl::underlying_type(passes); evaluatedProperties = std::move(properties); } @@ -133,8 +134,8 @@ void RenderBackgroundLayer::render(PaintParameters& parameters) { } optional<Color> RenderBackgroundLayer::getSolidBackground() const { - const auto& evaluated = static_cast<const BackgroundLayerProperties&>(*evaluatedProperties).evaluated; - if (!evaluated.get<BackgroundPattern>().from.empty()) { + const auto& evaluated = getEvaluated<BackgroundLayerProperties>(evaluatedProperties); + if (!evaluated.get<BackgroundPattern>().from.empty() || evaluated.get<style::BackgroundOpacity>() <= 0.0f) { return nullopt; } @@ -152,7 +153,7 @@ void addPatternIfNeeded(const std::string& id, const LayerPrepareParameters& par } // namespace void RenderBackgroundLayer::prepare(const LayerPrepareParameters& params) { - const auto& evaluated = static_cast<const BackgroundLayerProperties&>(*evaluatedProperties).evaluated; + const auto& evaluated = getEvaluated<BackgroundLayerProperties>(evaluatedProperties); if (!evaluated.get<BackgroundPattern>().to.empty()) { // Ensures that the pattern bitmap gets copied to atlas bitmap. // Atlas bitmap is uploaded to atlas texture in upload. |