diff --git a/src/mbgl/map/live_tile_data.cpp b/src/mbgl/map/live_tile_data.cpp index ad983343b18..8be918d6d43 100644 --- a/src/mbgl/map/live_tile_data.cpp +++ b/src/mbgl/map/live_tile_data.cpp @@ -20,9 +20,10 @@ LiveTileData::LiveTileData(const TileID& id_, : TileData(id_), worker(style_.workers), tileWorker(id_, + source_.source_id, + source_.max_zoom, style_, style_.layers, - source_.max_zoom, state, std::make_unique(id_.z, 4096, source_.tile_size * id.overscaling, diff --git a/src/mbgl/map/tile_worker.cpp b/src/mbgl/map/tile_worker.cpp index 790a34cf5c6..e8c8e15b266 100644 --- a/src/mbgl/map/tile_worker.cpp +++ b/src/mbgl/map/tile_worker.cpp @@ -11,16 +11,18 @@ using namespace mbgl; -TileWorker::TileWorker(const TileID& id_, +TileWorker::TileWorker(TileID id_, + std::string sourceID_, + const uint16_t maxZoom_, Style& style_, std::vector> layers_, - const uint16_t maxZoom_, const std::atomic& state_, std::unique_ptr collision_) : layers(std::move(layers_)), - style(style_), id(id_), + sourceID(sourceID_), maxZoom(maxZoom_), + style(style_), state(state_), collision(std::move(collision_)) { assert(style.sprite); @@ -121,6 +123,8 @@ void TileWorker::parseLayer(const StyleLayer& layer, const GeometryTile& geometr const StyleBucket& styleBucket = *layer.bucket; // Skip this bucket if we are to not render this + if (styleBucket.source != sourceID) + return; if (id.z < std::floor(styleBucket.min_zoom) && std::floor(styleBucket.min_zoom) < maxZoom) return; if (id.z >= std::ceil(styleBucket.max_zoom)) diff --git a/src/mbgl/map/tile_worker.hpp b/src/mbgl/map/tile_worker.hpp index d8c8aa3e00d..2306bf1acfc 100644 --- a/src/mbgl/map/tile_worker.hpp +++ b/src/mbgl/map/tile_worker.hpp @@ -31,10 +31,11 @@ using TileParseResult = mapbox::util::variant< class TileWorker : public util::noncopyable { public: - TileWorker(const TileID&, + TileWorker(TileID, + std::string sourceID, + uint16_t maxZoom, Style&, std::vector>, - const uint16_t maxZoom, const std::atomic&, std::unique_ptr); ~TileWorker(); @@ -57,10 +58,11 @@ class TileWorker : public util::noncopyable { template void addBucketGeometries(Bucket&, const GeometryTileLayer&, const FilterExpression&); - Style& style; - const TileID id; + const std::string sourceID; const uint16_t maxZoom; + + Style& style; const std::atomic& state; bool partialParse = false; diff --git a/src/mbgl/map/vector_tile_data.cpp b/src/mbgl/map/vector_tile_data.cpp index 04ef339c436..c87cc370e89 100644 --- a/src/mbgl/map/vector_tile_data.cpp +++ b/src/mbgl/map/vector_tile_data.cpp @@ -20,9 +20,10 @@ VectorTileData::VectorTileData(const TileID& id_, : TileData(id_), worker(style_.workers), tileWorker(id_, + source_.source_id, + source_.max_zoom, style_, style_.layers, - source_.max_zoom, state, std::make_unique(id_.z, 4096, source_.tile_size * id.overscaling,