summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2019-03-13 13:18:11 +0200
committerBruno de Oliveira Abinader <bruno@mapbox.com>2019-03-13 13:19:52 +0200
commitf66532534827ea3f68e93e381a58bd0d02ab7f79 (patch)
tree7202a905064c7c1bd9e8b20cf81b43a12c428a22
parentffa74deeb3b2e37a04c35bea35925a3929396b53 (diff)
downloadqtlocation-mapboxgl-f66532534827ea3f68e93e381a58bd0d02ab7f79.tar.gz
[core] Move {Glyph,Image}Manager to Map::Impl
-rw-r--r--src/mbgl/map/map.cpp1
-rw-r--r--src/mbgl/map/map_impl.cpp18
-rw-r--r--src/mbgl/map/map_impl.hpp13
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp36
-rw-r--r--src/mbgl/renderer/renderer_impl.hpp13
-rw-r--r--src/mbgl/renderer/update_parameters.hpp4
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;