#include #include #include #include #include #include namespace mbgl { Renderer::Renderer(gfx::RendererBackend& backend, float pixelRatio_, const optional& localFontFamily_) : impl(std::make_unique(backend, pixelRatio_, localFontFamily_)) {} Renderer::~Renderer() { gfx::BackendScope guard { impl->backend }; impl.reset(); } void Renderer::markContextLost() { impl->orchestrator.markContextLost(); } void Renderer::setObserver(RendererObserver* observer) { impl->setObserver(observer); impl->orchestrator.setObserver(observer); } void Renderer::render(const std::shared_ptr& updateParameters) { assert(updateParameters); if (auto renderTree = impl->orchestrator.createRenderTree(updateParameters)) { renderTree->prepare(); impl->render(*renderTree); } } std::vector Renderer::queryRenderedFeatures(const ScreenLineString& geometry, const RenderedQueryOptions& options) const { return impl->orchestrator.queryRenderedFeatures(geometry, options); } std::vector Renderer::queryRenderedFeatures(const ScreenCoordinate& point, const RenderedQueryOptions& options) const { return impl->orchestrator.queryRenderedFeatures({ point }, options); } std::vector Renderer::queryRenderedFeatures(const ScreenBox& box, const RenderedQueryOptions& options) const { return impl->orchestrator.queryRenderedFeatures( { box.min, {box.max.x, box.min.y}, box.max, {box.min.x, box.max.y}, box.min }, options ); } AnnotationIDs Renderer::queryPointAnnotations(const ScreenBox& box) const { if (!LayerManager::annotationsEnabled) { return {}; } RenderedQueryOptions options; options.layerIDs = {{ AnnotationManager::PointLayerID }}; auto features = queryRenderedFeatures(box, options); return getAnnotationIDs(features); } AnnotationIDs Renderer::queryShapeAnnotations(const ScreenBox& box) const { if (!LayerManager::annotationsEnabled) { return {}; } auto features = impl->orchestrator.queryShapeAnnotations({ box.min, {box.max.x, box.min.y}, box.max, {box.min.x, box.max.y}, box.min }); return getAnnotationIDs(features); } AnnotationIDs Renderer::getAnnotationIDs(const std::vector& features) const { if (!LayerManager::annotationsEnabled) { return {}; } std::set set; for (auto &feature : features) { assert(feature.id.is()); assert(feature.id.get() <= std::numeric_limits::max()); set.insert(static_cast(feature.id.get())); } AnnotationIDs ids; ids.reserve(set.size()); std::move(set.begin(), set.end(), std::back_inserter(ids)); return ids; } std::vector Renderer::querySourceFeatures(const std::string& sourceID, const SourceQueryOptions& options) const { return impl->orchestrator.querySourceFeatures(sourceID, options); } FeatureExtensionValue Renderer::queryFeatureExtensions(const std::string& sourceID, const Feature& feature, const std::string& extension, const std::string& extensionField, const optional>& args) const { return impl->orchestrator.queryFeatureExtensions(sourceID, feature, extension, extensionField, args); } void Renderer::setFeatureState(const std::string& sourceID, const optional& sourceLayerID, const std::string& featureID, const FeatureState& state) { impl->orchestrator.setFeatureState(sourceID, sourceLayerID, featureID, state); } void Renderer::getFeatureState(FeatureState& state, const std::string& sourceID, const optional& sourceLayerID, const std::string& featureID) const { impl->orchestrator.getFeatureState(state, sourceID, sourceLayerID, featureID); } void Renderer::removeFeatureState(const std::string& sourceID, const optional& sourceLayerID, const optional& featureID, const optional& stateKey) { impl->orchestrator.removeFeatureState(sourceID, sourceLayerID, featureID, stateKey); } void Renderer::dumpDebugLogs() { impl->orchestrator.dumpDebugLogs(); } void Renderer::collectPlacedSymbolData(bool enable) { impl->orchestrator.collectPlacedSymbolData(enable); } const std::vector& Renderer::getPlacedSymbolsData() const { return impl->orchestrator.getPlacedSymbolsData(); } void Renderer::reduceMemoryUse() { gfx::BackendScope guard { impl->backend }; impl->reduceMemoryUse(); impl->orchestrator.reduceMemoryUse(); } void Renderer::clearData() { impl->orchestrator.clearData(); } } // namespace mbgl