aboutsummaryrefslogtreecommitdiffstats
path: root/src/mbgl/map/map_context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/map/map_context.cpp')
-rw-r--r--src/mbgl/map/map_context.cpp56
1 files changed, 17 insertions, 39 deletions
diff --git a/src/mbgl/map/map_context.cpp b/src/mbgl/map/map_context.cpp
index 4e0a04472..2352e09c2 100644
--- a/src/mbgl/map/map_context.cpp
+++ b/src/mbgl/map/map_context.cpp
@@ -3,7 +3,6 @@
#include <mbgl/map/view.hpp>
#include <mbgl/map/environment.hpp>
#include <mbgl/map/source.hpp>
-#include <mbgl/map/sprite.hpp>
#include <mbgl/map/still_image.hpp>
#include <mbgl/platform/log.hpp>
@@ -62,8 +61,8 @@ MapContext::~MapContext() {
// Explicit resets currently necessary because these abandon resources that need to be
// cleaned up by env.performCleanup();
+ resourceLoader.reset();
style.reset();
- sprite.reset();
painter.reset();
texturePool.reset();
lineAtlas.reset();
@@ -124,24 +123,10 @@ void MapContext::setStyleJSON(const std::string& json, const std::string& base)
loadStyleJSON(json, base);
}
-util::ptr<Sprite> MapContext::getSprite() {
- assert(Environment::currentlyOn(ThreadType::Map));
- const float pixelRatio = transformState.getPixelRatio();
- const std::string &sprite_url = style->getSpriteURL();
- if (!sprite || !sprite->hasPixelRatio(pixelRatio)) {
- sprite = std::make_shared<Sprite>(sprite_url, pixelRatio, env, [this] {
- assert(Environment::currentlyOn(ThreadType::Map));
- triggerUpdate();
- });
- }
-
- return sprite;
-}
-
void MapContext::loadStyleJSON(const std::string& json, const std::string& base) {
assert(Environment::currentlyOn(ThreadType::Map));
- sprite.reset();
+ resourceLoader.reset();
style.reset();
style = util::make_unique<Style>();
@@ -153,26 +138,19 @@ void MapContext::loadStyleJSON(const std::string& json, const std::string& base)
const std::string glyphURL = util::mapbox::normalizeGlyphsURL(style->glyph_url, data.getAccessToken());
glyphStore->setURL(glyphURL);
- for (const auto& source : style->sources) {
- source->load(data.getAccessToken(), env, [this]() {
- assert(Environment::currentlyOn(ThreadType::Map));
- triggerUpdate();
- });
- }
+ resourceLoader = util::make_unique<ResourceLoader>();
+ resourceLoader->setAccessToken(data.getAccessToken());
+ resourceLoader->setObserver(this);
+ resourceLoader->setStyle(style.get());
triggerUpdate(Update::Zoom);
}
void MapContext::updateTiles() {
assert(Environment::currentlyOn(ThreadType::Map));
- if (!style) return;
- for (const auto& source : style->sources) {
- source->update(data, transformState, *style, *glyphAtlas, *glyphStore, *spriteAtlas,
- getSprite(), *texturePool, [this]() {
- assert(Environment::currentlyOn(ThreadType::Map));
- triggerUpdate();
- });
- }
+
+ resourceLoader->update(data, transformState, *glyphAtlas, *glyphStore,
+ *spriteAtlas, *texturePool);
}
void MapContext::updateAnnotationTiles(const std::vector<TileID>& ids) {
@@ -214,13 +192,9 @@ void MapContext::update() {
style->recalculate(transformState.getNormalizedZoom(), now);
}
- // Allow the sprite atlas to potentially pull new sprite images if needed.
- spriteAtlas->resize(transformState.getPixelRatio());
- spriteAtlas->setSprite(getSprite());
-
updateTiles();
- if (sprite->isLoaded() && style->isLoaded()) {
+ if (style->isLoaded()) {
if (!data.getFullyLoaded()) {
data.setFullyLoaded(true);
}
@@ -260,7 +234,7 @@ void MapContext::render() {
painter->render(*style, transformState, data.getAnimationTime());
- if (data.mode == MapMode::Still && callback && style->isLoaded() && getSprite()->isLoaded()) {
+ if (data.mode == MapMode::Still && callback && style->isLoaded() && resourceLoader->getSprite()->isLoaded()) {
callback(view.readStillImage());
callback = nullptr;
}
@@ -273,8 +247,7 @@ void MapContext::render() {
double MapContext::getTopOffsetPixelsForAnnotationSymbol(const std::string& symbol) {
assert(Environment::currentlyOn(ThreadType::Map));
- assert(sprite);
- const SpritePosition pos = sprite->getSpritePosition(symbol);
+ const SpritePosition pos = resourceLoader->getSprite()->getSpritePosition(symbol);
return -pos.height / pos.pixelRatio / 2;
}
@@ -299,4 +272,9 @@ void MapContext::onLowMemory() {
view.invalidate([this] { render(); });
}
+void MapContext::onTileDataChanged() {
+ assert(Environment::currentlyOn(ThreadType::Map));
+ triggerUpdate();
+}
+
}