diff options
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 42 | ||||
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/render_source.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_image_source.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_image_source.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_raster_dem_source.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_raster_dem_source.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_raster_source.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_raster_source.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_tile_source.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_tile_source.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.hpp | 2 |
13 files changed, 40 insertions, 28 deletions
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index fafbc8b635..c42273eca2 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -409,16 +409,16 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar } std::vector<Feature> RenderOrchestrator::queryRenderedFeatures(const ScreenLineString& geometry, const RenderedQueryOptions& options) const { - std::vector<const RenderLayer*> layers; + std::unordered_map<std::string, const RenderLayer*> layers; if (options.layerIDs) { for (const auto& layerID : *options.layerIDs) { if (const RenderLayer* layer = getRenderLayer(layerID)) { - layers.emplace_back(layer); + layers.emplace(layer->getID(), layer); } } } else { for (const auto& entry : renderLayers) { - layers.emplace_back(entry.second.get()); + layers.emplace(entry.second->getID(), entry.second.get()); } } @@ -427,9 +427,22 @@ std::vector<Feature> RenderOrchestrator::queryRenderedFeatures(const ScreenLineS void RenderOrchestrator::queryRenderedSymbols(std::unordered_map<std::string, std::vector<Feature>>& resultsByLayer, const ScreenLineString& geometry, - const std::vector<const RenderLayer*>& layers, + const std::unordered_map<std::string, const RenderLayer*>& layers, const RenderedQueryOptions& options) const { - + const auto hasCrossTileIndex = [] (const auto& pair) { + return pair.second->baseImpl->getTypeInfo()->crossTileIndex == style::LayerTypeInfo::CrossTileIndex::Required; + }; + + std::unordered_map<std::string, const RenderLayer*> crossTileSymbolIndexLayers; + std::copy_if(layers.begin(), + layers.end(), + std::inserter(crossTileSymbolIndexLayers, crossTileSymbolIndexLayers.begin()), + hasCrossTileIndex); + + if (crossTileSymbolIndexLayers.empty()) { + return; + } + auto renderedSymbols = placement->getCollisionIndex().queryRenderedSymbols(geometry); std::vector<std::reference_wrapper<const RetainedQueryData>> bucketQueryData; for (auto entry : renderedSymbols) { @@ -447,7 +460,7 @@ void RenderOrchestrator::queryRenderedSymbols(std::unordered_map<std::string, st auto& queryData = wrappedQueryData.get(); auto bucketSymbols = queryData.featureIndex->lookupSymbolFeatures(renderedSymbols[queryData.bucketInstanceId], options, - layers, + crossTileSymbolIndexLayers, queryData.tileID, queryData.featureSortOrder); @@ -458,10 +471,10 @@ void RenderOrchestrator::queryRenderedSymbols(std::unordered_map<std::string, st } } -std::vector<Feature> RenderOrchestrator::queryRenderedFeatures(const ScreenLineString& geometry, const RenderedQueryOptions& options, const std::vector<const RenderLayer*>& layers) const { +std::vector<Feature> RenderOrchestrator::queryRenderedFeatures(const ScreenLineString& geometry, const RenderedQueryOptions& options, const std::unordered_map<std::string, const RenderLayer*>& layers) const { std::unordered_set<std::string> sourceIDs; - for (const RenderLayer* layer : layers) { - sourceIDs.emplace(layer->baseImpl->source); + for (const auto& pair : layers) { + sourceIDs.emplace(pair.second->baseImpl->source); } mat4 projMatrix; @@ -484,13 +497,12 @@ std::vector<Feature> RenderOrchestrator::queryRenderedFeatures(const ScreenLineS } // Combine all results based on the style layer renderItems. - for (const auto& layerImpl : *layerImpls) { - const RenderLayer* layer = getRenderLayer(layerImpl->id); - if (!layer->needsRendering() || !layer->supportsZoom(zoomHistory.lastZoom)) { + for (const auto& pair : layers) { + if (!pair.second->needsRendering() || !pair.second->supportsZoom(zoomHistory.lastZoom)) { continue; } - auto it = resultsByLayer.find(layer->baseImpl->id); + auto it = resultsByLayer.find(pair.second->baseImpl->id); if (it != resultsByLayer.end()) { std::move(it->second.begin(), it->second.end(), std::back_inserter(result)); } @@ -501,13 +513,13 @@ std::vector<Feature> RenderOrchestrator::queryRenderedFeatures(const ScreenLineS std::vector<Feature> RenderOrchestrator::queryShapeAnnotations(const ScreenLineString& geometry) const { assert(LayerManager::annotationsEnabled); - std::vector<const RenderLayer*> shapeAnnotationLayers; + std::unordered_map<std::string, const RenderLayer*> shapeAnnotationLayers; RenderedQueryOptions options; for (const auto& layerImpl : *layerImpls) { if (std::mismatch(layerImpl->id.begin(), layerImpl->id.end(), AnnotationManager::ShapeLayerID.begin(), AnnotationManager::ShapeLayerID.end()).second == AnnotationManager::ShapeLayerID.end()) { if (const RenderLayer* layer = getRenderLayer(layerImpl->id)) { - shapeAnnotationLayers.emplace_back(layer); + shapeAnnotationLayers.emplace(layer->getID(), layer); } } } diff --git a/src/mbgl/renderer/render_orchestrator.hpp b/src/mbgl/renderer/render_orchestrator.hpp index a60bac2e16..4622ac1749 100644 --- a/src/mbgl/renderer/render_orchestrator.hpp +++ b/src/mbgl/renderer/render_orchestrator.hpp @@ -74,10 +74,10 @@ private: void queryRenderedSymbols(std::unordered_map<std::string, std::vector<Feature>>& resultsByLayer, const ScreenLineString& geometry, - const std::vector<const RenderLayer*>& layers, + const std::unordered_map<std::string, const RenderLayer*>& layers, const RenderedQueryOptions& options) const; - std::vector<Feature> queryRenderedFeatures(const ScreenLineString&, const RenderedQueryOptions&, const std::vector<const RenderLayer*>&) const; + std::vector<Feature> queryRenderedFeatures(const ScreenLineString&, const RenderedQueryOptions&, const std::unordered_map<std::string, const RenderLayer*>&) const; // GlyphManagerObserver implementation. void onGlyphsError(const FontStack&, const GlyphRange&, std::exception_ptr) override; diff --git a/src/mbgl/renderer/render_source.hpp b/src/mbgl/renderer/render_source.hpp index fc770f83cf..2a4983e799 100644 --- a/src/mbgl/renderer/render_source.hpp +++ b/src/mbgl/renderer/render_source.hpp @@ -72,7 +72,7 @@ public: virtual std::unordered_map<std::string, std::vector<Feature>> queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, - const std::vector<const RenderLayer*>& layers, + const std::unordered_map<std::string, const RenderLayer*>& layers, const RenderedQueryOptions& options, const mat4& projMatrix) const = 0; diff --git a/src/mbgl/renderer/sources/render_image_source.cpp b/src/mbgl/renderer/sources/render_image_source.cpp index 7e793c6a4a..6d197df9db 100644 --- a/src/mbgl/renderer/sources/render_image_source.cpp +++ b/src/mbgl/renderer/sources/render_image_source.cpp @@ -106,7 +106,7 @@ void RenderImageSource::prepare(const SourcePrepareParameters& parameters) { std::unordered_map<std::string, std::vector<Feature>> RenderImageSource::queryRenderedFeatures(const ScreenLineString&, const TransformState&, - const std::vector<const RenderLayer*>&, + const std::unordered_map<std::string, const RenderLayer*>&, const RenderedQueryOptions&, const mat4&) const { return std::unordered_map<std::string, std::vector<Feature>> {}; diff --git a/src/mbgl/renderer/sources/render_image_source.hpp b/src/mbgl/renderer/sources/render_image_source.hpp index d21f4fae10..4264f74564 100644 --- a/src/mbgl/renderer/sources/render_image_source.hpp +++ b/src/mbgl/renderer/sources/render_image_source.hpp @@ -57,7 +57,7 @@ public: std::unordered_map<std::string, std::vector<Feature>> queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, - const std::vector<const RenderLayer*>& layers, + const std::unordered_map<std::string, const RenderLayer*>& layers, const RenderedQueryOptions& options, const mat4& projMatrix) const final; diff --git a/src/mbgl/renderer/sources/render_raster_dem_source.cpp b/src/mbgl/renderer/sources/render_raster_dem_source.cpp index 9854b4fdc3..841124fa4a 100644 --- a/src/mbgl/renderer/sources/render_raster_dem_source.cpp +++ b/src/mbgl/renderer/sources/render_raster_dem_source.cpp @@ -125,7 +125,7 @@ void RenderRasterDEMSource::onTileChanged(Tile& tile){ std::unordered_map<std::string, std::vector<Feature>> RenderRasterDEMSource::queryRenderedFeatures(const ScreenLineString&, const TransformState&, - const std::vector<const RenderLayer*>&, + const std::unordered_map<std::string, const RenderLayer*>&, const RenderedQueryOptions&, const mat4&) const { return std::unordered_map<std::string, std::vector<Feature>>{}; diff --git a/src/mbgl/renderer/sources/render_raster_dem_source.hpp b/src/mbgl/renderer/sources/render_raster_dem_source.hpp index e49ad1d1d4..dd74f4d7e7 100644 --- a/src/mbgl/renderer/sources/render_raster_dem_source.hpp +++ b/src/mbgl/renderer/sources/render_raster_dem_source.hpp @@ -19,7 +19,7 @@ public: std::unordered_map<std::string, std::vector<Feature>> queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, - const std::vector<const RenderLayer*>& layers, + const std::unordered_map<std::string, const RenderLayer*>& layers, const RenderedQueryOptions& options, const mat4& projMatrix) const override; diff --git a/src/mbgl/renderer/sources/render_raster_source.cpp b/src/mbgl/renderer/sources/render_raster_source.cpp index 827ffb9759..06eb36795b 100644 --- a/src/mbgl/renderer/sources/render_raster_source.cpp +++ b/src/mbgl/renderer/sources/render_raster_source.cpp @@ -60,7 +60,7 @@ void RenderRasterSource::prepare(const SourcePrepareParameters& parameters) { std::unordered_map<std::string, std::vector<Feature>> RenderRasterSource::queryRenderedFeatures(const ScreenLineString&, const TransformState&, - const std::vector<const RenderLayer*>&, + const std::unordered_map<std::string, const RenderLayer*>&, const RenderedQueryOptions&, const mat4&) const { return std::unordered_map<std::string, std::vector<Feature>>{}; diff --git a/src/mbgl/renderer/sources/render_raster_source.hpp b/src/mbgl/renderer/sources/render_raster_source.hpp index dc80630add..0071dddec9 100644 --- a/src/mbgl/renderer/sources/render_raster_source.hpp +++ b/src/mbgl/renderer/sources/render_raster_source.hpp @@ -19,7 +19,7 @@ public: std::unordered_map<std::string, std::vector<Feature>> queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, - const std::vector<const RenderLayer*>& layers, + const std::unordered_map<std::string, const RenderLayer*>& layers, const RenderedQueryOptions& options, const mat4& projMatrix) const override; diff --git a/src/mbgl/renderer/sources/render_tile_source.cpp b/src/mbgl/renderer/sources/render_tile_source.cpp index 99bdfde485..93c41940b6 100644 --- a/src/mbgl/renderer/sources/render_tile_source.cpp +++ b/src/mbgl/renderer/sources/render_tile_source.cpp @@ -84,7 +84,7 @@ const Tile* RenderTileSource::getRenderedTile(const UnwrappedTileID& tileID) con std::unordered_map<std::string, std::vector<Feature>> RenderTileSource::queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, - const std::vector<const RenderLayer*>& layers, + const std::unordered_map<std::string, const RenderLayer*>& layers, const RenderedQueryOptions& options, const mat4& projMatrix) const { return tilePyramid.queryRenderedFeatures(geometry, transformState, layers, options, projMatrix); diff --git a/src/mbgl/renderer/sources/render_tile_source.hpp b/src/mbgl/renderer/sources/render_tile_source.hpp index e3148b45b9..8ec1439306 100644 --- a/src/mbgl/renderer/sources/render_tile_source.hpp +++ b/src/mbgl/renderer/sources/render_tile_source.hpp @@ -27,7 +27,7 @@ public: std::unordered_map<std::string, std::vector<Feature>> queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, - const std::vector<const RenderLayer*>& layers, + const std::unordered_map<std::string, const RenderLayer*>& layers, const RenderedQueryOptions& options, const mat4& projMatrix) const override; diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp index e08803134d..f47198e275 100644 --- a/src/mbgl/renderer/tile_pyramid.cpp +++ b/src/mbgl/renderer/tile_pyramid.cpp @@ -284,7 +284,7 @@ void TilePyramid::handleWrapJump(float lng) { std::unordered_map<std::string, std::vector<Feature>> TilePyramid::queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, - const std::vector<const RenderLayer*>& layers, + const std::unordered_map<std::string, const RenderLayer*>& layers, const RenderedQueryOptions& options, const mat4& projMatrix) const { std::unordered_map<std::string, std::vector<Feature>> result; diff --git a/src/mbgl/renderer/tile_pyramid.hpp b/src/mbgl/renderer/tile_pyramid.hpp index 675831fbc9..f80eb0db78 100644 --- a/src/mbgl/renderer/tile_pyramid.hpp +++ b/src/mbgl/renderer/tile_pyramid.hpp @@ -52,7 +52,7 @@ public: std::unordered_map<std::string, std::vector<Feature>> queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, - const std::vector<const RenderLayer*>&, + const std::unordered_map<std::string, const RenderLayer*>&, const RenderedQueryOptions& options, const mat4& projMatrix) const; |