summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/render_orchestrator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/render_orchestrator.cpp')
-rw-r--r--src/mbgl/renderer/render_orchestrator.cpp21
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()) {