diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2017-10-13 17:53:30 -0700 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2017-10-18 09:41:33 -0700 |
commit | 6e0f95b1746a658959843fbb08c74ec1541ff0ea (patch) | |
tree | e4e52a3d4ee14bad0ea1541d9f2f8bd7a7d7c159 | |
parent | a731fc7ba7c2f7c1c4eb78fca5676290794346ea (diff) | |
download | qtlocation-mapboxgl-6e0f95b1746a658959843fbb08c74ec1541ff0ea.tar.gz |
[core] don't generate clip IDs for buckets/layers that don't need to be clipped
-rw-r--r-- | src/mbgl/algorithm/generate_clip_ids_impl.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/painter.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/render_tile.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/style/style.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/style/style.hpp | 2 | ||||
-rw-r--r-- | test/algorithm/generate_clip_ids.test.cpp | 1 |
6 files changed, 13 insertions, 4 deletions
diff --git a/src/mbgl/algorithm/generate_clip_ids_impl.hpp b/src/mbgl/algorithm/generate_clip_ids_impl.hpp index d63ba27b6b..7c244cc664 100644 --- a/src/mbgl/algorithm/generate_clip_ids_impl.hpp +++ b/src/mbgl/algorithm/generate_clip_ids_impl.hpp @@ -15,7 +15,7 @@ void ClipIDGenerator::update(Renderables& renderables) { for (auto it = renderables.begin(); it != end; it++) { auto& tileID = it->first; auto& renderable = it->second; - if (!renderable.used) { + if (!renderable.used || !renderable.needsClipping) { continue; } diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp index fbaf40d5c0..6b131427d7 100644 --- a/src/mbgl/renderer/painter.cpp +++ b/src/mbgl/renderer/painter.cpp @@ -146,7 +146,7 @@ void Painter::render(const Style& style, const FrameData& frame_, View& view, Sp evaluatedLight = style.getRenderLight()->getEvaluated(); - RenderData renderData = style.getRenderData(frame.debugOptions, state.getAngle()); + RenderData renderData = style.getRenderData(frame.debugOptions, frame.mapMode, state.getAngle()); const std::vector<RenderItem>& order = renderData.order; const std::unordered_set<RenderSource*>& sources = renderData.sources; diff --git a/src/mbgl/renderer/render_tile.hpp b/src/mbgl/renderer/render_tile.hpp index 02e8667eec..6dcd675524 100644 --- a/src/mbgl/renderer/render_tile.hpp +++ b/src/mbgl/renderer/render_tile.hpp @@ -26,6 +26,7 @@ public: mat4 matrix; mat4 nearClippedMatrix; bool used = false; + bool needsClipping = false; mat4 translatedMatrix(const std::array<float, 2>& translate, style::TranslateAnchorType anchor, diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index f1ac22082b..1cb30bf8d8 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -541,7 +541,7 @@ bool Style::isLoaded() const { return true; } -RenderData Style::getRenderData(MapDebugOptions debugOptions, float angle) const { +RenderData Style::getRenderData(MapDebugOptions debugOptions, MapMode mapMode, float angle) const { RenderData result; for (const auto& renderSource: renderSources) { @@ -636,6 +636,13 @@ RenderData Style::getRenderData(MapDebugOptions debugOptions, float angle) const if (bucket) { sortedTilesForInsertion.emplace_back(tile); tile.used = true; + + // We only need clipping when we're _not_ drawing a symbol layer. The only exception + // for symbol layers is when we're rendering still images. See render_symbol_layer.cpp + // for the exception we make there. + if (!symbolLayer || mapMode == MapMode::Still) { + tile.needsClipping = true; + } } } diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index 7d235dc665..0060f4bb3a 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -107,7 +107,7 @@ public: Light* getLight() const; RenderLight* getRenderLight() const; - RenderData getRenderData(MapDebugOptions, float angle) const; + RenderData getRenderData(MapDebugOptions, MapMode, float angle) const; std::vector<Feature> queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, diff --git a/test/algorithm/generate_clip_ids.test.cpp b/test/algorithm/generate_clip_ids.test.cpp index 8ca0191b3a..70e2055a38 100644 --- a/test/algorithm/generate_clip_ids.test.cpp +++ b/test/algorithm/generate_clip_ids.test.cpp @@ -7,6 +7,7 @@ using namespace mbgl; struct Renderable { ClipID clip; bool used = true; + bool needsClipping = true; bool operator==(const Renderable& rhs) const { return clip == rhs.clip; |