diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2019-03-13 13:18:11 +0200 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2019-03-13 13:19:52 +0200 |
commit | f66532534827ea3f68e93e381a58bd0d02ab7f79 (patch) | |
tree | 7202a905064c7c1bd9e8b20cf81b43a12c428a22 | |
parent | ffa74deeb3b2e37a04c35bea35925a3929396b53 (diff) | |
download | qtlocation-mapboxgl-f66532534827ea3f68e93e381a58bd0d02ab7f79.tar.gz |
[core] Move {Glyph,Image}Manager to Map::Impl
-rw-r--r-- | src/mbgl/map/map.cpp | 1 | ||||
-rw-r--r-- | src/mbgl/map/map_impl.cpp | 18 | ||||
-rw-r--r-- | src/mbgl/map/map_impl.hpp | 13 | ||||
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 36 | ||||
-rw-r--r-- | src/mbgl/renderer/renderer_impl.hpp | 13 | ||||
-rw-r--r-- | src/mbgl/renderer/update_parameters.hpp | 4 |
6 files changed, 45 insertions, 40 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index d661936145..8fcaf2e236 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -495,6 +495,7 @@ bool Map::isFullyLoaded() const { void Map::dumpDebugLogs() const { Log::Info(Event::General, "--------------------------------------------------------------------------------"); impl->style->impl->dumpDebugLogs(); + impl->imageManager.dumpDebugLogs(); Log::Info(Event::General, "--------------------------------------------------------------------------------"); } diff --git a/src/mbgl/map/map_impl.cpp b/src/mbgl/map/map_impl.cpp index 71f85c76f0..95ac24d2d6 100644 --- a/src/mbgl/map/map_impl.cpp +++ b/src/mbgl/map/map_impl.cpp @@ -3,6 +3,7 @@ #include <mbgl/renderer/update_parameters.hpp> #include <mbgl/style/style_impl.hpp> #include <mbgl/util/exception.hpp> +#include <mbgl/util/logging.hpp> namespace mbgl { @@ -30,9 +31,12 @@ Map::Impl::Impl(Map& map_, pixelRatio(pixelRatio_), crossSourceCollisions(crossSourceCollisions_), style(std::make_unique<style::Style>(scheduler, fileSource, pixelRatio)), - annotationManager(*style) { + annotationManager(*style), + glyphManager(fileSource, std::make_unique<LocalGlyphRasterizer>(localFontFamily_)), + imageManager() { style->impl->setObserver(this); + glyphManager.setObserver(this); rendererFrontend.setObserver(*this); transform.resize(size_); } @@ -60,7 +64,7 @@ void Map::Impl::onUpdate() { transform.updateTransitions(timePoint); UpdateParameters params = { - style->impl->isLoaded(), + style->impl->isLoaded() && imageManager.isLoaded(), mode, pixelRatio, debugOptions, @@ -74,6 +78,8 @@ void Map::Impl::onUpdate() { style->impl->getSourceImpls(), style->impl->getLayerImpls(), annotationManager, + glyphManager, + imageManager, prefetchZoomDelta, bool(stillImageRequest), crossSourceCollisions @@ -121,6 +127,14 @@ void Map::Impl::onStyleError(std::exception_ptr error) { observer.onDidFailLoadingMap(type, description); } +#pragma mark - Map::Impl GlyphManagerObserver + +void Map::Impl::onGlyphsError(const FontStack& fontStack, const GlyphRange& glyphRange, std::exception_ptr error) { + Log::Error(Event::Style, "Failed to load glyph range %d-%d for font stack %s: %s", + glyphRange.first, glyphRange.second, fontStackToString(fontStack).c_str(), util::toString(error).c_str()); + onResourceError(error); +} + #pragma mark - Map::Impl RendererObserver void Map::Impl::onInvalidate() { diff --git a/src/mbgl/map/map_impl.hpp b/src/mbgl/map/map_impl.hpp index b7cd18cdae..2e5aa2f9b4 100644 --- a/src/mbgl/map/map_impl.hpp +++ b/src/mbgl/map/map_impl.hpp @@ -8,10 +8,13 @@ #include <mbgl/map/transform.hpp> #include <mbgl/renderer/renderer_frontend.hpp> #include <mbgl/renderer/renderer_observer.hpp> +#include <mbgl/renderer/image_manager.hpp> #include <mbgl/storage/file_source.hpp> #include <mbgl/style/observer.hpp> #include <mbgl/style/source.hpp> #include <mbgl/style/style.hpp> +#include <mbgl/text/glyph_manager_observer.hpp> +#include <mbgl/text/glyph_manager.hpp> #include <mbgl/util/size.hpp> namespace mbgl { @@ -24,7 +27,9 @@ struct StillImageRequest { Map::StillImageCallback callback; }; -class Map::Impl : public style::Observer, public RendererObserver { +class Map::Impl : public style::Observer, + public GlyphManagerObserver, + public RendererObserver { public: Impl(Map&, RendererFrontend&, @@ -50,6 +55,9 @@ public: void onStyleLoaded() final; void onStyleError(std::exception_ptr) final; + // GlyphManagerObserver implementation. + void onGlyphsError(const FontStack&, const GlyphRange&, std::exception_ptr) final; + // RendererObserver void onInvalidate() final; void onResourceError(std::exception_ptr) final; @@ -74,6 +82,9 @@ public: std::unique_ptr<style::Style> style; AnnotationManager annotationManager; + GlyphManager glyphManager; + ImageManager imageManager; + bool cameraMutated = false; diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index e3346a39a5..34e314ba79 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -40,8 +40,7 @@ Renderer::Impl::Impl(RendererBackend& backend_, FileSource& fileSource_, Scheduler& scheduler_, GLContextMode contextMode_, - const optional<std::string> programCacheDir_, - const optional<std::string> localFontFamily_) + const optional<std::string> programCacheDir_) : backend(backend_) , scheduler(scheduler_) , fileSource(fileSource_) @@ -49,15 +48,12 @@ Renderer::Impl::Impl(RendererBackend& backend_, , contextMode(contextMode_) , pixelRatio(pixelRatio_) , programCacheDir(programCacheDir_) - , glyphManager(std::make_unique<GlyphManager>(fileSource, std::make_unique<LocalGlyphRasterizer>(localFontFamily_))) - , imageManager(std::make_unique<ImageManager>()) , lineAtlas(std::make_unique<LineAtlas>(Size{ 256, 512 })) , imageImpls(makeMutable<std::vector<Immutable<style::Image::Impl>>>()) , sourceImpls(makeMutable<std::vector<Immutable<style::Source::Impl>>>()) , layerImpls(makeMutable<std::vector<Immutable<style::Layer::Impl>>>()) , renderLight(makeMutable<Light::Impl>()) , placement(std::make_unique<Placement>(TransformState{}, MapMode::Static, TransitionOptions{}, true)) { - glyphManager->setObserver(this); } Renderer::Impl::~Impl() { @@ -115,12 +111,12 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { fileSource, updateParameters.mode, updateParameters.annotationManager, - *imageManager, - *glyphManager, + updateParameters.imageManager, + updateParameters.glyphManager, updateParameters.prefetchZoomDelta }; - glyphManager->setURL(updateParameters.glyphURL); + updateParameters.glyphManager.setURL(updateParameters.glyphURL); // Update light. const bool lightChanged = renderLight.impl != updateParameters.light; @@ -140,20 +136,20 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { // Remove removed images from sprite atlas. for (const auto& entry : imageDiff.removed) { - imageManager->removeImage(entry.first); + updateParameters.imageManager.removeImage(entry.first); } // Add added images to sprite atlas. for (const auto& entry : imageDiff.added) { - imageManager->addImage(entry.second); + updateParameters.imageManager.addImage(entry.second); } // Update changed images. for (const auto& entry : imageDiff.changed) { - imageManager->updateImage(entry.second.after); + updateParameters.imageManager.updateImage(entry.second.after); } - imageManager->setLoaded(updateParameters.spriteLoaded); + updateParameters.imageManager.setLoaded(updateParameters.spriteLoaded); const LayerDifference layerDiff = diffLayers(layerImpls, updateParameters.layers); @@ -175,7 +171,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { } if (!layerDiff.removed.empty() || !layerDiff.added.empty() || !layerDiff.changed.empty()) { - glyphManager->evict(fontStacks(*updateParameters.layers)); + updateParameters.glyphManager.evict(fontStacks(*updateParameters.layers)); } // Update layers for class and zoom changes. @@ -257,7 +253,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { updateParameters, renderLight.getEvaluated(), *staticData, - *imageManager, + updateParameters.imageManager, *lineAtlas }; @@ -747,8 +743,6 @@ void Renderer::Impl::dumDebugLogs() { for (const auto& entry : renderSources) { entry.second->dumpDebugLogs(); } - - imageManager->dumpDebugLogs(); } RenderLayer* Renderer::Impl::getRenderLayer(const std::string& id) { @@ -808,19 +802,9 @@ bool Renderer::Impl::isLoaded() const { } } - if (!imageManager->isLoaded()) { - return false; - } - return true; } -void Renderer::Impl::onGlyphsError(const FontStack& fontStack, const GlyphRange& glyphRange, std::exception_ptr error) { - Log::Error(Event::Style, "Failed to load glyph range %d-%d for font stack %s: %s", - glyphRange.first, glyphRange.second, fontStackToString(fontStack).c_str(), util::toString(error).c_str()); - observer->onResourceError(error); -} - void Renderer::Impl::onTileError(RenderSource& source, const OverscaledTileID& tileID, std::exception_ptr error) { Log::Error(Event::Style, "Failed to load tile %s for source %s: %s", util::toString(tileID).c_str(), source.baseImpl->id.c_str(), util::toString(error).c_str()); diff --git a/src/mbgl/renderer/renderer_impl.hpp b/src/mbgl/renderer/renderer_impl.hpp index 4555ba27d5..20ef5ddd3a 100644 --- a/src/mbgl/renderer/renderer_impl.hpp +++ b/src/mbgl/renderer/renderer_impl.hpp @@ -10,7 +10,6 @@ #include <mbgl/map/transform_state.hpp> #include <mbgl/map/zoom_history.hpp> #include <mbgl/text/cross_tile_symbol_index.hpp> -#include <mbgl/text/glyph_manager_observer.hpp> #include <mbgl/text/placement.hpp> #include <memory> @@ -29,16 +28,13 @@ class RenderedQueryOptions; class SourceQueryOptions; class FileSource; class Scheduler; -class GlyphManager; -class ImageManager; class LineAtlas; class CrossTileSymbolIndex; -class Renderer::Impl : public GlyphManagerObserver, - public RenderSourceObserver{ +class Renderer::Impl : public RenderSourceObserver { public: Impl(RendererBackend&, float pixelRatio_, FileSource&, Scheduler&, GLContextMode, - const optional<std::string> programCacheDir, const optional<std::string> localFontFamily); + const optional<std::string> programCacheDir); ~Impl() final; void markContextLost() { @@ -78,9 +74,6 @@ private: std::vector<Feature> queryRenderedFeatures(const ScreenLineString&, const RenderedQueryOptions&, const std::vector<const RenderLayer*>&) const; - // GlyphManagerObserver implementation. - void onGlyphsError(const FontStack&, const GlyphRange&, std::exception_ptr) override; - // RenderSourceObserver implementation. void onTileChanged(RenderSource&, const OverscaledTileID&) override; void onTileError(RenderSource&, const OverscaledTileID&, std::exception_ptr) override; @@ -109,8 +102,6 @@ private: ZoomHistory zoomHistory; TransformState transformState; - std::unique_ptr<GlyphManager> glyphManager; - std::unique_ptr<ImageManager> imageManager; std::unique_ptr<LineAtlas> lineAtlas; std::unique_ptr<RenderStaticData> staticData; diff --git a/src/mbgl/renderer/update_parameters.hpp b/src/mbgl/renderer/update_parameters.hpp index a668c64f48..d8a36047fb 100644 --- a/src/mbgl/renderer/update_parameters.hpp +++ b/src/mbgl/renderer/update_parameters.hpp @@ -14,6 +14,8 @@ namespace mbgl { class AnnotationManager; +class GlyphManager; +class ImageManager; class UpdateParameters { public: @@ -33,6 +35,8 @@ public: const Immutable<std::vector<Immutable<style::Layer::Impl>>> layers; AnnotationManager& annotationManager; + GlyphManager& glyphManager; + ImageManager& imageManager; const uint8_t prefetchZoomDelta; |