diff options
Diffstat (limited to 'src/mbgl/tile/raster_tile_worker.cpp')
-rw-r--r-- | src/mbgl/tile/raster_tile_worker.cpp | 37 |
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()); } |