summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/geometry_tile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/tile/geometry_tile.cpp')
-rw-r--r--src/mbgl/tile/geometry_tile.cpp39
1 files changed, 33 insertions, 6 deletions
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp
index 5ccc037ce0..4e67144082 100644
--- a/src/mbgl/tile/geometry_tile.cpp
+++ b/src/mbgl/tile/geometry_tile.cpp
@@ -18,6 +18,8 @@
#include <mbgl/style/query.hpp>
#include <mbgl/util/logging.hpp>
+#include <iostream>
+
namespace mbgl {
using namespace style;
@@ -32,12 +34,16 @@ 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);
+ for (auto spriteAtlas : pendingSpriteAtlases) {
+ spriteAtlas->removeRequestor(*this);
+ }
cancel();
}
@@ -77,10 +83,6 @@ void GeometryTile::setPlacementConfig(const PlacementConfig& desiredConfig) {
worker.invoke(&GeometryTileWorker::setPlacementConfig, desiredConfig, correlationID);
}
-void GeometryTile::symbolDependenciesChanged() {
- worker.invoke(&GeometryTileWorker::symbolDependenciesChanged);
-}
-
void GeometryTile::redoLayout() {
// Mark the tile as pending again if it was complete before to prevent signaling a complete
// state despite pending parse operations.
@@ -130,6 +132,31 @@ void GeometryTile::onError(std::exception_ptr err) {
availableData = DataAvailability::All;
observer->onTileError(*this, err);
}
+
+void GeometryTile::onGlyphsAvailable(GlyphPositionMap glyphPositions, GlyphRangeSet loadedRanges) {
+ worker.invoke(&GeometryTileWorker::onGlyphsAvailable, std::move(glyphPositions), std::move(loadedRanges));
+}
+
+void GeometryTile::getGlyphs(GlyphDependencies glyphDependencies) {
+ glyphAtlas.getGlyphs(*this, std::move(glyphDependencies));
+}
+
+void GeometryTile::onIconsAvailable(SpriteAtlas* spriteAtlas, IconMap icons) {
+ iconAtlasMap[(uintptr_t)spriteAtlas] = icons;
+ pendingSpriteAtlases.erase(spriteAtlas);
+ if (pendingSpriteAtlases.empty()) {
+ worker.invoke(&GeometryTileWorker::onIconsAvailable, std::move(iconAtlasMap));
+ }
+}
+
+// TODO: If there's any value to be gained by it, we can narrow our request to just the sprites
+// we need, but SpriteAtlases are just "loaded" or "not loaded"
+void GeometryTile::getIcons(IconDependencyMap iconDependencyMap) {
+ for (auto dependency : iconDependencyMap) {
+ pendingSpriteAtlases.insert(dependency.first);
+ dependency.first->getIcons(*this);
+ }
+}
Bucket* GeometryTile::getBucket(const Layer& layer) {
const auto& buckets = layer.is<SymbolLayer>() ? symbolBuckets : nonSymbolBuckets;