From 152d4c35fc5c7f06940b820790474fa5d5767112 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Wed, 18 Sep 2019 14:31:03 +0300 Subject: [core] Add LayerTypeInfo::TileKind --- include/mbgl/style/layer.hpp | 6 ++++++ src/mbgl/style/layer.cpp | 5 +++++ src/mbgl/style/layers/background_layer.cpp | 3 ++- src/mbgl/style/layers/circle_layer.cpp | 3 ++- src/mbgl/style/layers/custom_layer.cpp | 3 ++- src/mbgl/style/layers/fill_extrusion_layer.cpp | 3 ++- src/mbgl/style/layers/fill_layer.cpp | 3 ++- src/mbgl/style/layers/heatmap_layer.cpp | 3 ++- src/mbgl/style/layers/hillshade_layer.cpp | 3 ++- src/mbgl/style/layers/layer.cpp.ejs | 30 +++++++++++++++++++------- src/mbgl/style/layers/line_layer.cpp | 3 ++- src/mbgl/style/layers/raster_layer.cpp | 3 ++- src/mbgl/style/layers/symbol_layer.cpp | 3 ++- 13 files changed, 53 insertions(+), 18 deletions(-) diff --git a/include/mbgl/style/layer.hpp b/include/mbgl/style/layer.hpp index ecd3f01f70..35577411eb 100644 --- a/include/mbgl/style/layer.hpp +++ b/include/mbgl/style/layer.hpp @@ -57,6 +57,12 @@ struct LayerTypeInfo { * requires cross-tile indexing and placement. Contains \c CrossTileIndex::NotRequired otherwise. */ const enum class CrossTileIndex { Required, NotRequired } crossTileIndex; + + /** + * @brief contains the Id of the supported tile type. Used for internal checks. + * The contained values correspond to \c Tile::Kind enum. + */ + const enum class TileKind : uint8_t { Geometry, Raster, RasterDEM, NotRequired } tileKind; }; /** diff --git a/src/mbgl/style/layer.cpp b/src/mbgl/style/layer.cpp index 328cd47555..2f4d50cd83 100644 --- a/src/mbgl/style/layer.cpp +++ b/src/mbgl/style/layer.cpp @@ -4,12 +4,17 @@ #include #include #include +#include #include namespace mbgl { namespace style { +static_assert(mbgl::underlying_type(Tile::Kind::Geometry) == mbgl::underlying_type(LayerTypeInfo::TileKind::Geometry), "tile kind error"); +static_assert(mbgl::underlying_type(Tile::Kind::Raster) == mbgl::underlying_type(LayerTypeInfo::TileKind::Raster), "tile kind error"); +static_assert(mbgl::underlying_type(Tile::Kind::RasterDEM) == mbgl::underlying_type(LayerTypeInfo::TileKind::RasterDEM), "tile kind error"); + static LayerObserver nullObserver; Layer::Layer(Immutable impl) diff --git a/src/mbgl/style/layers/background_layer.cpp b/src/mbgl/style/layers/background_layer.cpp index 1693c47204..f91d8f8493 100644 --- a/src/mbgl/style/layers/background_layer.cpp +++ b/src/mbgl/style/layers/background_layer.cpp @@ -25,7 +25,8 @@ const LayerTypeInfo* BackgroundLayer::Impl::staticTypeInfo() noexcept { LayerTypeInfo::Pass3D::NotRequired, LayerTypeInfo::Layout::NotRequired, LayerTypeInfo::FadingTiles::NotRequired, - LayerTypeInfo::CrossTileIndex::NotRequired + LayerTypeInfo::CrossTileIndex::NotRequired, + LayerTypeInfo::TileKind::NotRequired }; return &typeInfo; } diff --git a/src/mbgl/style/layers/circle_layer.cpp b/src/mbgl/style/layers/circle_layer.cpp index 2293ed222e..aba6b897b1 100644 --- a/src/mbgl/style/layers/circle_layer.cpp +++ b/src/mbgl/style/layers/circle_layer.cpp @@ -25,7 +25,8 @@ const LayerTypeInfo* CircleLayer::Impl::staticTypeInfo() noexcept { LayerTypeInfo::Pass3D::NotRequired, LayerTypeInfo::Layout::NotRequired, LayerTypeInfo::FadingTiles::NotRequired, - LayerTypeInfo::CrossTileIndex::NotRequired + LayerTypeInfo::CrossTileIndex::NotRequired, + LayerTypeInfo::TileKind::Geometry }; return &typeInfo; } diff --git a/src/mbgl/style/layers/custom_layer.cpp b/src/mbgl/style/layers/custom_layer.cpp index e77d6590f7..7e58b8e4e1 100644 --- a/src/mbgl/style/layers/custom_layer.cpp +++ b/src/mbgl/style/layers/custom_layer.cpp @@ -14,7 +14,8 @@ namespace { LayerTypeInfo::Pass3D::NotRequired, LayerTypeInfo::Layout::NotRequired, LayerTypeInfo::FadingTiles::NotRequired, - LayerTypeInfo::CrossTileIndex::NotRequired }; + LayerTypeInfo::CrossTileIndex::NotRequired, + LayerTypeInfo::TileKind::NotRequired }; } // namespace CustomLayer::CustomLayer(const std::string& layerID, diff --git a/src/mbgl/style/layers/fill_extrusion_layer.cpp b/src/mbgl/style/layers/fill_extrusion_layer.cpp index 50e32cf812..5214b275fb 100644 --- a/src/mbgl/style/layers/fill_extrusion_layer.cpp +++ b/src/mbgl/style/layers/fill_extrusion_layer.cpp @@ -25,7 +25,8 @@ const LayerTypeInfo* FillExtrusionLayer::Impl::staticTypeInfo() noexcept { LayerTypeInfo::Pass3D::Required, LayerTypeInfo::Layout::Required, LayerTypeInfo::FadingTiles::NotRequired, - LayerTypeInfo::CrossTileIndex::NotRequired + LayerTypeInfo::CrossTileIndex::NotRequired, + LayerTypeInfo::TileKind::Geometry }; return &typeInfo; } diff --git a/src/mbgl/style/layers/fill_layer.cpp b/src/mbgl/style/layers/fill_layer.cpp index e08c8f3962..63371b34f0 100644 --- a/src/mbgl/style/layers/fill_layer.cpp +++ b/src/mbgl/style/layers/fill_layer.cpp @@ -25,7 +25,8 @@ const LayerTypeInfo* FillLayer::Impl::staticTypeInfo() noexcept { LayerTypeInfo::Pass3D::NotRequired, LayerTypeInfo::Layout::Required, LayerTypeInfo::FadingTiles::NotRequired, - LayerTypeInfo::CrossTileIndex::NotRequired + LayerTypeInfo::CrossTileIndex::NotRequired, + LayerTypeInfo::TileKind::Geometry }; return &typeInfo; } diff --git a/src/mbgl/style/layers/heatmap_layer.cpp b/src/mbgl/style/layers/heatmap_layer.cpp index cb99f76a51..da4f6a35a4 100644 --- a/src/mbgl/style/layers/heatmap_layer.cpp +++ b/src/mbgl/style/layers/heatmap_layer.cpp @@ -25,7 +25,8 @@ const LayerTypeInfo* HeatmapLayer::Impl::staticTypeInfo() noexcept { LayerTypeInfo::Pass3D::Required, LayerTypeInfo::Layout::NotRequired, LayerTypeInfo::FadingTiles::NotRequired, - LayerTypeInfo::CrossTileIndex::NotRequired + LayerTypeInfo::CrossTileIndex::NotRequired, + LayerTypeInfo::TileKind::Geometry }; return &typeInfo; } diff --git a/src/mbgl/style/layers/hillshade_layer.cpp b/src/mbgl/style/layers/hillshade_layer.cpp index 95a395ef25..e96e0f1839 100644 --- a/src/mbgl/style/layers/hillshade_layer.cpp +++ b/src/mbgl/style/layers/hillshade_layer.cpp @@ -25,7 +25,8 @@ const LayerTypeInfo* HillshadeLayer::Impl::staticTypeInfo() noexcept { LayerTypeInfo::Pass3D::Required, LayerTypeInfo::Layout::NotRequired, LayerTypeInfo::FadingTiles::NotRequired, - LayerTypeInfo::CrossTileIndex::NotRequired + LayerTypeInfo::CrossTileIndex::NotRequired, + LayerTypeInfo::TileKind::RasterDEM }; return &typeInfo; } diff --git a/src/mbgl/style/layers/layer.cpp.ejs b/src/mbgl/style/layers/layer.cpp.ejs index da34565461..c63999ca32 100644 --- a/src/mbgl/style/layers/layer.cpp.ejs +++ b/src/mbgl/style/layers/layer.cpp.ejs @@ -27,13 +27,20 @@ let defaults = { caps: { 'Source': 'NotRequired', 'Pass3D': 'NotRequired', 'Layout': 'NotRequired', 'FadingTiles': 'NotRequired', - 'CrossTileIndex': 'NotRequired' + 'CrossTileIndex': 'NotRequired', + 'TileKind' : 'NotRequired' }, require: function(cap) { - let copy = Object.assign({}, this); - copy.caps = Object.assign({}, this.caps); - copy.caps[cap] = 'Required'; - return copy; + let copy = Object.assign({}, this); + copy.caps = Object.assign({}, this.caps); + copy.caps[cap] = 'Required'; + return copy; + }, + set: function(cap, value) { + let copy = Object.assign({}, this); + copy.caps = Object.assign({}, this.caps); + copy.caps[cap] = value; + return copy; }, finalize: function() { return Object.keys(this.caps).reduce((acc, key) => { @@ -46,23 +53,30 @@ let defaults = { caps: { 'Source': 'NotRequired', layerCapabilities['background'] = defaults.finalize(); layerCapabilities['fill'] = defaults.require('Source') .require('Layout') + .set('TileKind', 'Geometry') .finalize(); layerCapabilities['fill-extrusion'] = defaults.require('Source') .require('Pass3D') .require('Layout') + .set('TileKind', 'Geometry') .finalize(); layerCapabilities['hillshade'] = defaults.require('Source') .require('Pass3D') + .set('TileKind', 'RasterDEM') .finalize(); layerCapabilities['symbol'] = defaults.require('Source') .require('Layout') .require('FadingTiles') .require('CrossTileIndex') + .set('TileKind', 'Geometry') .finalize(); -layerCapabilities['circle'] = defaults.require('Source').finalize(); +layerCapabilities['circle'] = defaults.require('Source').set('TileKind', 'Geometry').finalize(); layerCapabilities['line'] = layerCapabilities['fill']; -layerCapabilities['heatmap'] = layerCapabilities['hillshade']; -layerCapabilities['raster'] = layerCapabilities['circle']; +layerCapabilities['heatmap'] = defaults.require('Source') + .require('Pass3D') + .set('TileKind', 'Geometry') + .finalize(); +layerCapabilities['raster'] = defaults.require('Source').set('TileKind', 'Raster').finalize(); %> // static const LayerTypeInfo* <%- camelize(type) %>Layer::Impl::staticTypeInfo() noexcept { diff --git a/src/mbgl/style/layers/line_layer.cpp b/src/mbgl/style/layers/line_layer.cpp index deb85cad66..f376765085 100644 --- a/src/mbgl/style/layers/line_layer.cpp +++ b/src/mbgl/style/layers/line_layer.cpp @@ -25,7 +25,8 @@ const LayerTypeInfo* LineLayer::Impl::staticTypeInfo() noexcept { LayerTypeInfo::Pass3D::NotRequired, LayerTypeInfo::Layout::Required, LayerTypeInfo::FadingTiles::NotRequired, - LayerTypeInfo::CrossTileIndex::NotRequired + LayerTypeInfo::CrossTileIndex::NotRequired, + LayerTypeInfo::TileKind::Geometry }; return &typeInfo; } diff --git a/src/mbgl/style/layers/raster_layer.cpp b/src/mbgl/style/layers/raster_layer.cpp index ead2223ea6..a98919b24a 100644 --- a/src/mbgl/style/layers/raster_layer.cpp +++ b/src/mbgl/style/layers/raster_layer.cpp @@ -25,7 +25,8 @@ const LayerTypeInfo* RasterLayer::Impl::staticTypeInfo() noexcept { LayerTypeInfo::Pass3D::NotRequired, LayerTypeInfo::Layout::NotRequired, LayerTypeInfo::FadingTiles::NotRequired, - LayerTypeInfo::CrossTileIndex::NotRequired + LayerTypeInfo::CrossTileIndex::NotRequired, + LayerTypeInfo::TileKind::Raster }; return &typeInfo; } diff --git a/src/mbgl/style/layers/symbol_layer.cpp b/src/mbgl/style/layers/symbol_layer.cpp index 157d8c745f..fbf7c1e958 100644 --- a/src/mbgl/style/layers/symbol_layer.cpp +++ b/src/mbgl/style/layers/symbol_layer.cpp @@ -25,7 +25,8 @@ const LayerTypeInfo* SymbolLayer::Impl::staticTypeInfo() noexcept { LayerTypeInfo::Pass3D::NotRequired, LayerTypeInfo::Layout::Required, LayerTypeInfo::FadingTiles::Required, - LayerTypeInfo::CrossTileIndex::Required + LayerTypeInfo::CrossTileIndex::Required, + LayerTypeInfo::TileKind::Geometry }; return &typeInfo; } -- cgit v1.2.1