diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2017-07-20 14:49:56 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2017-07-24 12:10:45 +0200 |
commit | c0efad5de22e50a2f2d541a62a07b0786cde0202 (patch) | |
tree | f6a3e63ded1ffd317c2af6d5f4a47b4ae623218d /src/mbgl/tile | |
parent | 4dff51719b27988fe4672bd4022d305b6e7d9816 (diff) | |
download | qtlocation-mapboxgl-c0efad5de22e50a2f2d541a62a07b0786cde0202.tar.gz |
[core] generate masks for raster tiles to avoid painting over children
Diffstat (limited to 'src/mbgl/tile')
-rw-r--r-- | src/mbgl/tile/raster_tile.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/tile/raster_tile.hpp | 7 | ||||
-rw-r--r-- | src/mbgl/tile/tile.hpp | 2 |
3 files changed, 14 insertions, 3 deletions
diff --git a/src/mbgl/tile/raster_tile.cpp b/src/mbgl/tile/raster_tile.cpp index 8a92c40e4a..1260fd1edd 100644 --- a/src/mbgl/tile/raster_tile.cpp +++ b/src/mbgl/tile/raster_tile.cpp @@ -41,7 +41,7 @@ void RasterTile::setData(std::shared_ptr<const std::string> data, worker.invoke(&RasterTileWorker::parse, data); } -void RasterTile::onParsed(std::unique_ptr<Bucket> result) { +void RasterTile::onParsed(std::unique_ptr<RasterBucket> result) { bucket = std::move(result); loaded = true; renderable = bucket ? true : false; @@ -65,6 +65,12 @@ Bucket* RasterTile::getBucket(const style::Layer::Impl&) const { return bucket.get(); } +void RasterTile::setMask(TileMask&& mask) { + if (bucket) { + bucket->setMask(std::move(mask)); + } +} + void RasterTile::setNecessity(Necessity necessity) { loader.setNecessity(necessity); } diff --git a/src/mbgl/tile/raster_tile.hpp b/src/mbgl/tile/raster_tile.hpp index 51075a2dbc..28a27b2b37 100644 --- a/src/mbgl/tile/raster_tile.hpp +++ b/src/mbgl/tile/raster_tile.hpp @@ -9,6 +9,7 @@ namespace mbgl { class Tileset; class TileParameters; +class RasterBucket; namespace style { class Layer; @@ -33,7 +34,9 @@ public: void upload(gl::Context&) override; Bucket* getBucket(const style::Layer::Impl&) const override; - void onParsed(std::unique_ptr<Bucket> result); + void setMask(TileMask&&) override; + + void onParsed(std::unique_ptr<RasterBucket> result); void onError(std::exception_ptr); private: @@ -44,7 +47,7 @@ private: // Contains the Bucket object for the tile. Buckets are render // objects and they get added by tile parsing operations. - std::unique_ptr<Bucket> bucket; + std::unique_ptr<RasterBucket> bucket; }; } // namespace mbgl diff --git a/src/mbgl/tile/tile.hpp b/src/mbgl/tile/tile.hpp index 1898f76849..a1ab6a84b7 100644 --- a/src/mbgl/tile/tile.hpp +++ b/src/mbgl/tile/tile.hpp @@ -6,6 +6,7 @@ #include <mbgl/util/feature.hpp> #include <mbgl/util/tile_coordinate.hpp> #include <mbgl/tile/tile_id.hpp> +#include <mbgl/renderer/tile_mask.hpp> #include <mbgl/renderer/bucket.hpp> #include <mbgl/tile/geometry_tile_data.hpp> #include <mbgl/storage/resource.hpp> @@ -54,6 +55,7 @@ public: virtual void setPlacementConfig(const PlacementConfig&) {} virtual void setLayers(const std::vector<Immutable<style::Layer::Impl>>&) {} + virtual void setMask(TileMask&&) {} virtual void queryRenderedFeatures( std::unordered_map<std::string, std::vector<Feature>>& result, |