diff options
author | Gali Nelle <galinelle.mapbox@gmail.com> | 2020-04-15 18:15:29 +0300 |
---|---|---|
committer | Gali Nelle <galinelle.mapbox@gmail.com> | 2020-04-17 19:08:43 +0300 |
commit | 33465df0002e2c61fe5c39d4aeb7a674ce0147da (patch) | |
tree | 335cdeb03d3b2edd06ed8465dcfbc9d11f5ee694 /src/mbgl/renderer/render_orchestrator.cpp | |
parent | b190e12f5b565cd87ab528910bf9dcd7878596ec (diff) | |
download | qtlocation-mapboxgl-upstream/galinelle_locationIndicatorPicking.tar.gz |
Introduce a mean to add render features in layers with no sourcesupstream/galinelle_locationIndicatorPicking
This change also uses the support in the LocationIndicator layer, to
return a point feature when queried in correspondence of the location
indicator.
Diffstat (limited to 'src/mbgl/renderer/render_orchestrator.cpp')
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index 77e23d3ab6..d7f13695de 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -52,7 +52,7 @@ private: bool hasRenderPass(RenderPass pass) const override { return layer.get().hasRenderPass(pass); } void upload(gfx::UploadPass& pass) const override { layer.get().upload(pass); } void render(PaintParameters& parameters) const override { layer.get().render(parameters); } - const std::string& getName() const override { return layer.get().getID(); } + const std::string& getName() const override { return layer.get().getID(); } }; class RenderTreeImpl final : public RenderTree { @@ -327,7 +327,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree( } } continue; - } + } // Handle layers without source. if (layerIsVisible && zoomFitsLayer && sourceImpl.get() == sourceImpls->at(0).get()) { @@ -335,7 +335,8 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree( const auto& solidBackground = layer.getSolidBackground(); if (solidBackground) { renderTreeParameters->backgroundColor = *solidBackground; - continue; // This layer is shown with background color, and it shall not be added to render items. + continue; // This layer is shown with background color, and it shall not be added to render + // items. } } renderItemsEmplaceHint = layerRenderItems.emplace_hint(renderItemsEmplaceHint, layer, nullptr, index); @@ -474,7 +475,7 @@ std::vector<Feature> RenderOrchestrator::queryRenderedFeatures(const ScreenLineS return queryRenderedFeatures(geometry, options, layers); } - + void RenderOrchestrator::queryRenderedSymbols(std::unordered_map<std::string, std::vector<Feature>>& resultsByLayer, const ScreenLineString& geometry, const std::unordered_map<std::string, const RenderLayer*>& layers, @@ -506,7 +507,7 @@ void RenderOrchestrator::queryRenderedSymbols(std::unordered_map<std::string, st std::tie(a.tileID.canonical.z, a.tileID.canonical.y, a.tileID.wrap, a.tileID.canonical.x) < std::tie(b.tileID.canonical.z, b.tileID.canonical.y, b.tileID.wrap, b.tileID.canonical.x); }); - + for (auto wrappedQueryData : bucketQueryData) { auto& queryData = wrappedQueryData.get(); auto bucketSymbols = queryData.featureIndex->lookupSymbolFeatures(renderedSymbols[queryData.bucketInstanceId], @@ -514,7 +515,7 @@ void RenderOrchestrator::queryRenderedSymbols(std::unordered_map<std::string, st crossTileSymbolIndexLayers, queryData.tileID, queryData.featureSortOrder); - + for (auto layer : bucketSymbols) { auto& resultFeatures = resultsByLayer[layer.first]; std::move(layer.second.begin(), layer.second.end(), std::inserter(resultFeatures, resultFeatures.end())); @@ -543,9 +544,15 @@ std::vector<Feature> RenderOrchestrator::queryRenderedFeatures(const ScreenLineS std::move(sourceResults.begin(), sourceResults.end(), std::inserter(resultsByLayer, resultsByLayer.begin())); } } - + queryRenderedSymbols(resultsByLayer, geometry, filteredLayers, options); + mbgl::DynamicFeatureIndex dynamicIndex; + for (const auto& pair : filteredLayers) { + const RenderLayer* layer = pair.second; + layer->populateDynamicRenderFeatureIndex(dynamicIndex); + } + dynamicIndex.query(resultsByLayer, geometry, transformState); std::vector<Feature> result; if (resultsByLayer.empty()) { |