diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-01-20 16:55:57 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-01-22 14:30:26 +0200 |
commit | a9d04d7b1ad1ac070f45a3367bec24e9cd4ef074 (patch) | |
tree | 961e547f49eec7b3a60241deb4ccaf10734a5bc8 /src/mbgl/renderer | |
parent | 4dac2f61c244b6ac3859510e21b2c80c83f25841 (diff) | |
download | qtlocation-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')
-rw-r--r-- | src/mbgl/renderer/bucket.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 2 |
4 files changed, 9 insertions, 6 deletions
diff --git a/src/mbgl/renderer/bucket.hpp b/src/mbgl/renderer/bucket.hpp index 3e756a06a4..fc34f55e75 100644 --- a/src/mbgl/renderer/bucket.hpp +++ b/src/mbgl/renderer/bucket.hpp @@ -56,7 +56,7 @@ public: // Returns a pair, the first element of which is a bucket cross-tile id // on success call; `0` otherwise. The second element is `true` if // the bucket was originally registered; `false` otherwise. - virtual std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const OverscaledTileID&) { + virtual std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const RenderTile&) { return std::make_pair(0u, false); } // Places this bucket to the given placement. 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; diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index 79059164ae..c771bd100b 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -422,7 +422,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree( Mutable<Placement> placement = makeMutable<Placement>(updateParameters); for (auto it = layersNeedPlacement.crbegin(); it != layersNeedPlacement.crend(); ++it) { const RenderLayer& layer = *it; - crossTileSymbolIndex.addLayer(layer, updateParameters->transformState); + crossTileSymbolIndex.addLayer(layer, longitude); placement->placeLayer(layer); } placement->commit(); |