summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/geometry_tile.cpp
diff options
context:
space:
mode:
authorChris Loer <chris.loer@gmail.com>2017-03-10 09:02:07 -0800
committerChris Loer <chris.loer@gmail.com>2017-03-22 08:50:45 -0700
commite90966a9373d7aa7908b4a6fe39fa6cf5230cbc0 (patch)
treef75298824f64a157f6a6d69433bc653822c0a8e8 /src/mbgl/tile/geometry_tile.cpp
parent3c91b6b7de487993e75de552ba44249740644e42 (diff)
downloadqtlocation-mapboxgl-upstream/cloer_glyph_sanity_check.tar.gz
[core] De-mutex GlyphAtlas.upstream/cloer_glyph_sanity_check
- Expose glyph information to workers via message interface. - Symbol preparation for a tile now depends on all glyphs becoming available before it can start.
Diffstat (limited to 'src/mbgl/tile/geometry_tile.cpp')
-rw-r--r--src/mbgl/tile/geometry_tile.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp
index 5f1fc5de66..602c43148a 100644
--- a/src/mbgl/tile/geometry_tile.cpp
+++ b/src/mbgl/tile/geometry_tile.cpp
@@ -32,12 +32,13 @@ GeometryTile::GeometryTile(const OverscaledTileID& id_,
worker(parameters.workerScheduler,
ActorRef<GeometryTile>(*this, mailbox),
id_,
- *parameters.style.glyphAtlas,
obsolete,
- parameters.mode) {
+ parameters.mode),
+ glyphAtlas(*parameters.style.glyphAtlas) {
}
GeometryTile::~GeometryTile() {
+ glyphAtlas.removeGlyphs(*this);
cancel();
}
@@ -130,6 +131,14 @@ void GeometryTile::onError(std::exception_ptr err) {
availableData = DataAvailability::All;
observer->onTileError(*this, err);
}
+
+void GeometryTile::onGlyphsAvailable(GlyphPositionMap glyphPositions) {
+ worker.invoke(&GeometryTileWorker::onGlyphsAvailable, std::move(glyphPositions));
+}
+
+void GeometryTile::getGlyphs(GlyphDependencies glyphDependencies) {
+ glyphAtlas.getGlyphs(*this, std::move(glyphDependencies));
+}
Bucket* GeometryTile::getBucket(const Layer& layer) {
const auto& buckets = layer.is<SymbolLayer>() ? symbolBuckets : nonSymbolBuckets;