This repository has been archived by the owner on Aug 8, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1326 from mapbox/925-remove_promises
Remove promises from the parsing pipeline
- Loading branch information
Showing
21 changed files
with
568 additions
and
204 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
#include <mbgl/map/resource_loader.hpp> | ||
|
||
#include <mbgl/geometry/sprite_atlas.hpp> | ||
#include <mbgl/map/environment.hpp> | ||
#include <mbgl/map/source.hpp> | ||
#include <mbgl/map/sprite.hpp> | ||
#include <mbgl/map/transform.hpp> | ||
#include <mbgl/style/style.hpp> | ||
|
||
#include <cassert> | ||
|
||
namespace mbgl { | ||
|
||
ResourceLoader::ResourceLoader() { | ||
assert(Environment::currentlyOn(ThreadType::Map)); | ||
} | ||
|
||
ResourceLoader::~ResourceLoader() { | ||
assert(Environment::currentlyOn(ThreadType::Map)); | ||
|
||
for (const auto& source : style_->sources) { | ||
source->setObserver(nullptr); | ||
} | ||
|
||
sprite_->setObserver(nullptr); | ||
} | ||
|
||
void ResourceLoader::setObserver(Observer* observer) { | ||
assert(Environment::currentlyOn(ThreadType::Map)); | ||
assert(!observer_); | ||
|
||
observer_ = observer; | ||
} | ||
|
||
void ResourceLoader::setStyle(Style* style) { | ||
assert(style); | ||
|
||
style_ = style; | ||
|
||
for (const auto& source : style->sources) { | ||
source->setObserver(this); | ||
source->load(accessToken_); | ||
} | ||
} | ||
|
||
void ResourceLoader::setAccessToken(const std::string& accessToken) { | ||
accessToken_ = accessToken; | ||
} | ||
|
||
void ResourceLoader::update(MapData& data, | ||
const TransformState& transform, | ||
GlyphAtlas& glyphAtlas, | ||
GlyphStore& glyphStore, | ||
SpriteAtlas& spriteAtlas, | ||
TexturePool& texturePool) { | ||
if (!style_) { | ||
return; | ||
} | ||
|
||
const float pixelRatio = transform.getPixelRatio(); | ||
if (!sprite_ || !sprite_->hasPixelRatio(pixelRatio)) { | ||
sprite_ = util::make_unique<Sprite>(style_->getSpriteURL(), pixelRatio); | ||
sprite_->setObserver(this); | ||
|
||
spriteAtlas.resize(pixelRatio); | ||
spriteAtlas.setSprite(sprite_); | ||
} | ||
|
||
for (const auto& source : style_->sources) { | ||
source->update( | ||
data, transform, *style_, glyphAtlas, glyphStore, spriteAtlas, sprite_, texturePool); | ||
} | ||
} | ||
|
||
void ResourceLoader::onGlyphRangeLoaded() { | ||
emitTileDataChanged(); | ||
} | ||
|
||
void ResourceLoader::onSourceLoaded() { | ||
emitTileDataChanged(); | ||
} | ||
|
||
void ResourceLoader::onTileLoaded() { | ||
emitTileDataChanged(); | ||
} | ||
|
||
void ResourceLoader::onSpriteLoaded() { | ||
emitTileDataChanged(); | ||
} | ||
|
||
void ResourceLoader::emitTileDataChanged() { | ||
assert(Environment::currentlyOn(ThreadType::Map)); | ||
|
||
if (observer_) { | ||
observer_->onTileDataChanged(); | ||
} | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
#ifndef MBGL_MAP_RESOURCE_LOADER | ||
#define MBGL_MAP_RESOURCE_LOADER | ||
|
||
#include <mbgl/map/source.hpp> | ||
#include <mbgl/map/sprite.hpp> | ||
#include <mbgl/text/glyph_store.hpp> | ||
#include <mbgl/util/noncopyable.hpp> | ||
|
||
#include <string> | ||
|
||
namespace mbgl { | ||
|
||
class GlyphAtlas; | ||
class GlyphStore; | ||
class MapData; | ||
class SpriteAtlas; | ||
class Style; | ||
class TexturePool; | ||
class TransformState; | ||
|
||
// ResourceLoader is responsible for loading and updating the Source(s) owned | ||
// by the Style. The Source object currently owns all the tiles, thus this | ||
// class will notify its observers of any change on these tiles which will | ||
// ultimately cause a new rendering to be triggered. | ||
class ResourceLoader : public GlyphStore::Observer, | ||
public Source::Observer, | ||
public Sprite::Observer, | ||
private util::noncopyable { | ||
public: | ||
class Observer { | ||
public: | ||
virtual ~Observer() = default; | ||
|
||
virtual void onTileDataChanged() = 0; | ||
}; | ||
|
||
ResourceLoader(); | ||
~ResourceLoader(); | ||
|
||
void setObserver(Observer* observer); | ||
|
||
// The style object currently owns all the sources. When setting | ||
// a new style we will go through all of them and try to load. | ||
void setStyle(Style* style); | ||
|
||
// Set the access token to be used for loading the tile data. | ||
void setAccessToken(const std::string& accessToken); | ||
|
||
// Fetch the tiles needed by the current viewport and emit a signal when | ||
// a tile is ready so observers can render the tile. | ||
void update(MapData&, const TransformState&, GlyphAtlas&, GlyphStore&, | ||
SpriteAtlas&, TexturePool&); | ||
|
||
// FIXME: There is probably a better place for this. | ||
inline util::ptr<Sprite> getSprite() const { | ||
return sprite_; | ||
} | ||
|
||
// GlyphStore::Observer implementation. | ||
void onGlyphRangeLoaded() override; | ||
|
||
// Source::Observer implementation. | ||
void onSourceLoaded() override; | ||
void onTileLoaded() override; | ||
|
||
// Sprite::Observer implementation. | ||
void onSpriteLoaded() override; | ||
|
||
private: | ||
void emitTileDataChanged(); | ||
|
||
std::string accessToken_; | ||
util::ptr<Sprite> sprite_; | ||
Style* style_ = nullptr; | ||
Observer* observer_ = nullptr; | ||
}; | ||
|
||
} | ||
|
||
#endif |
Oops, something went wrong.