From dd604a7b3650617ab3fef81eef1a63fc28761396 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Tue, 4 Oct 2016 15:51:00 +0300 Subject: [core] Pre-filter sources based on the layers they contain --- src/mbgl/style/style.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 50de887dbc..522965b953 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -393,10 +394,23 @@ RenderData Style::getRenderData(MapDebugOptions debugOptions) const { } std::vector Style::queryRenderedFeatures(const QueryParameters& parameters) const { + std::unordered_set sourceFilter; + + if (parameters.layerIDs) { + for (const auto& layerID : *parameters.layerIDs) { + auto layer = getLayer(layerID); + if (layer) sourceFilter.emplace(layer->baseImpl->source); + } + } + std::vector result; std::unordered_map> resultsByLayer; for (const auto& source : sources) { + if (!sourceFilter.empty() && sourceFilter.find(source->getID()) == sourceFilter.end()) { + continue; + } + auto sourceResults = source->baseImpl->queryRenderedFeatures(parameters); std::move(sourceResults.begin(), sourceResults.end(), std::inserter(resultsByLayer, resultsByLayer.begin())); } -- cgit v1.2.1