summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/raster_tile_worker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/tile/raster_tile_worker.cpp')
-rw-r--r--src/mbgl/tile/raster_tile_worker.cpp37
1 files changed, 30 insertions, 7 deletions
diff --git a/src/mbgl/tile/raster_tile_worker.cpp b/src/mbgl/tile/raster_tile_worker.cpp
index 443ee10400..25cec516cc 100644
--- a/src/mbgl/tile/raster_tile_worker.cpp
+++ b/src/mbgl/tile/raster_tile_worker.cpp
@@ -1,23 +1,46 @@
#include <mbgl/tile/raster_tile_worker.hpp>
#include <mbgl/tile/raster_tile.hpp>
-#include <mbgl/renderer/raster_bucket.cpp>
+#include <mbgl/style/layer_impl.hpp>
+#include <mbgl/style/raster_bucket_parameters.hpp>
+#include <mbgl/style/geometry_bucket_parameters.hpp>
#include <mbgl/actor/actor.hpp>
namespace mbgl {
-RasterTileWorker::RasterTileWorker(ActorRef<RasterTileWorker>, ActorRef<RasterTile> parent_)
- : parent(std::move(parent_)) {
+using namespace style;
+
+RasterTileWorker::RasterTileWorker(ActorRef<RasterTileWorker>,
+ ActorRef<RasterTile> parent_,
+ OverscaledTileID id_)
+ : parent(std::move(parent_)), id(std::move(id_)) {
+}
+
+RasterTileWorker::~RasterTileWorker() = default;
+
+void RasterTileWorker::setLayers(std::vector<std::unique_ptr<Layer>> layers_) {
+ layers = std::move(layers_);
}
void RasterTileWorker::parse(std::shared_ptr<const std::string> data) {
- if (!data) {
- parent.invoke(&RasterTile::onParsed, nullptr); // No data; empty tile.
+ if (!layers) {
return;
}
try {
- auto bucket = std::make_unique<RasterBucket>(decodeImage(*data));
- parent.invoke(&RasterTile::onParsed, std::move(bucket));
+ std::unordered_map<std::string, std::unique_ptr<Bucket>> buckets;
+
+ BucketParameters parameters = RasterBucketParameters{id, data};
+
+ for (auto& layer : *layers) {
+ std::unique_ptr<Bucket> bucket = layer->baseImpl->createBucket(parameters);
+ if (bucket && bucket->hasData()) {
+ buckets.emplace(layer->baseImpl->bucketName(), std::move(bucket));
+ }
+ }
+
+ parent.invoke(&RasterTile::onParsed, RasterTile::ParseResult {
+ std::move(buckets)
+ });
} catch (...) {
parent.invoke(&RasterTile::onError, std::current_exception());
}