summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-10-13 17:53:30 -0700
committerKonstantin Käfer <mail@kkaefer.com>2017-10-18 09:11:06 -0700
commit75f61bfe3c3c583be3fd9699b053275f47fd1440 (patch)
tree566cd793c40c3860a7e15bc2a785a57fa44b1d83
parent9c22a0c83534adb6c110170404fb8743e475f275 (diff)
downloadqtlocation-mapboxgl-upstream/release-ios-v3.6.0-android-v5.1.0__dont-generate-clip-ids-needlessly.tar.gz
[core] don't generate clip IDs for buckets/layers that don't need to be clippedupstream/release-ios-v3.6.0-android-v5.1.0__dont-generate-clip-ids-needlessly
-rw-r--r--src/mbgl/algorithm/generate_clip_ids_impl.hpp2
-rw-r--r--src/mbgl/renderer/painter.cpp2
-rw-r--r--src/mbgl/renderer/render_tile.hpp1
-rw-r--r--src/mbgl/style/style.cpp9
-rw-r--r--src/mbgl/style/style.hpp2
-rw-r--r--test/algorithm/generate_clip_ids.test.cpp1
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;