summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/buckets
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-01-20 16:55:57 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-01-22 14:30:26 +0200
commita9d04d7b1ad1ac070f45a3367bec24e9cd4ef074 (patch)
tree961e547f49eec7b3a60241deb4ccaf10734a5bc8 /src/mbgl/renderer/buckets
parent4dac2f61c244b6ac3859510e21b2c80c83f25841 (diff)
downloadqtlocation-mapboxgl-a9d04d7b1ad1ac070f45a3367bec24e9cd4ef074.tar.gz
[core] Do not index and place the off-screen symbols for overscaled tiles
For overscaled tiles the viewport might be showing only a small part of the tile, so we filter out the off-screen symbols to improve the performance.
Diffstat (limited to 'src/mbgl/renderer/buckets')
-rw-r--r--src/mbgl/renderer/buckets/symbol_bucket.cpp8
-rw-r--r--src/mbgl/renderer/buckets/symbol_bucket.hpp3
2 files changed, 7 insertions, 4 deletions
diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp
index 382aac6563..55002e7851 100644
--- a/src/mbgl/renderer/buckets/symbol_bucket.cpp
+++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp
@@ -1,6 +1,7 @@
+#include <mbgl/renderer/bucket_parameters.hpp>
#include <mbgl/renderer/buckets/symbol_bucket.hpp>
#include <mbgl/renderer/layers/render_symbol_layer.hpp>
-#include <mbgl/renderer/bucket_parameters.hpp>
+#include <mbgl/renderer/render_tile.hpp>
#include <mbgl/style/layers/symbol_layer_impl.hpp>
#include <mbgl/text/cross_tile_symbol_index.hpp>
#include <mbgl/text/glyph_atlas.hpp>
@@ -37,6 +38,7 @@ SymbolBucket::SymbolBucket(Immutable<style::SymbolLayoutProperties::PossiblyEval
iconsInText(iconsInText_),
justReloaded(false),
hasVariablePlacement(false),
+ hasUninitializedSymbols(false),
symbolInstances(symbolInstances_),
textSizeBinder(SymbolSizeBinder::create(zoom, textSize, TextSize::defaultValue())),
iconSizeBinder(SymbolSizeBinder::create(zoom, iconSize, IconSize::defaultValue())),
@@ -296,8 +298,8 @@ bool SymbolBucket::hasFormatSectionOverrides() const {
}
std::pair<uint32_t, bool> SymbolBucket::registerAtCrossTileIndex(CrossTileSymbolLayerIndex& index,
- const OverscaledTileID& tileID) {
- bool firstTimeAdded = index.addBucket(tileID, *this);
+ const RenderTile& renderTile) {
+ bool firstTimeAdded = index.addBucket(renderTile.getOverscaledTileID(), renderTile.matrix, *this);
return std::make_pair(bucketInstanceId, firstTimeAdded);
}
diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp
index 432589a52b..82d8c682aa 100644
--- a/src/mbgl/renderer/buckets/symbol_bucket.hpp
+++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp
@@ -81,7 +81,7 @@ public:
void upload(gfx::UploadPass&) override;
bool hasData() const override;
- std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const OverscaledTileID&) override;
+ std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const RenderTile&) override;
void place(Placement&, const BucketPlacementParameters&, std::set<uint32_t>&) override;
void updateVertices(
const Placement&, bool updateOpacities, const TransformState&, const RenderTile&, std::set<uint32_t>&) override;
@@ -114,6 +114,7 @@ public:
// Set and used by placement.
mutable bool justReloaded : 1;
bool hasVariablePlacement : 1;
+ bool hasUninitializedSymbols : 1;
std::vector<SymbolInstance> symbolInstances;