diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2018-11-16 13:59:41 +0200 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2018-11-19 14:06:21 +0200 |
commit | 527851e2aa71c828f013303c827b90aa496cec15 (patch) | |
tree | d74f3d1aad5993fa3f51a11c4007fa9955c47393 | |
parent | 9be6c8b1b77f8fc026caee8a09e0cf28e0781253 (diff) | |
download | qtlocation-mapboxgl-527851e2aa71c828f013303c827b90aa496cec15.tar.gz |
[core] Add static layer properties to mbgl::style::LayerTypeInfo
-rw-r--r-- | include/mbgl/style/layer.hpp | 25 | ||||
-rw-r--r-- | src/mbgl/style/layers/background_layer.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/layers/circle_layer.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/layers/custom_layer.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/style/layers/fill_extrusion_layer.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/layers/fill_layer.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/layers/heatmap_layer.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/layers/hillshade_layer.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/layers/layer.cpp.ejs | 51 | ||||
-rw-r--r-- | src/mbgl/style/layers/line_layer.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/layers/raster_layer.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/layers/symbol_layer.cpp | 8 |
12 files changed, 136 insertions, 19 deletions
diff --git a/include/mbgl/style/layer.hpp b/include/mbgl/style/layer.hpp index 21ed3adbce..5c1b361419 100644 --- a/include/mbgl/style/layer.hpp +++ b/include/mbgl/style/layer.hpp @@ -26,11 +26,30 @@ struct LayerTypeInfo { * @brief contains the layer type as defined in the style specification; */ const char* type; + + /** + * @brief contains \c Source::Required if the corresponding layer type + * requires source. Contains \c Source::NotRequired otherwise. + */ + const enum class Source { Required, NotRequired } source; + + /** + * @brief contains \c Pass3D::Required if the corresponding layer type + * requires 3D rendering pass. Contains \c Pass3D::NotRequired otherwise. + */ + const enum class Pass3D { Required, NotRequired } pass3d; + + /** + * @brief contains \c Layout::Required if the corresponding layer type + * requires layouting. * contains \c Layout::NotRequired otherwise. + */ + const enum class Layout { Required, NotRequired } layout; + /** - * @brief contains \c SourceRequired if the corresponding layer type requires source; - * contains \c SourceNotRequired otherwise. + * @brief contains \c Clipping::Required if the corresponding layer type + * requires clipping. Contains \c Clipping::NotRequired otherwise. */ - const enum { SourceRequired, SourceNotRequired } source; + const enum class Clipping { Required, NotRequired } clipping; }; /** diff --git a/src/mbgl/style/layers/background_layer.cpp b/src/mbgl/style/layers/background_layer.cpp index 43ada28ab7..1342afd7b1 100644 --- a/src/mbgl/style/layers/background_layer.cpp +++ b/src/mbgl/style/layers/background_layer.cpp @@ -15,7 +15,13 @@ namespace mbgl { namespace style { namespace { - const LayerTypeInfo typeInfoBackground{ "background", LayerTypeInfo::SourceNotRequired }; + const LayerTypeInfo typeInfoBackground + {"background", + LayerTypeInfo::Source::NotRequired, + LayerTypeInfo::Pass3D::NotRequired, + LayerTypeInfo::Layout::NotRequired, + LayerTypeInfo::Clipping::NotRequired + }; } // namespace BackgroundLayer::BackgroundLayer(const std::string& layerID) diff --git a/src/mbgl/style/layers/circle_layer.cpp b/src/mbgl/style/layers/circle_layer.cpp index 76942d808a..c04d40083a 100644 --- a/src/mbgl/style/layers/circle_layer.cpp +++ b/src/mbgl/style/layers/circle_layer.cpp @@ -15,7 +15,13 @@ namespace mbgl { namespace style { namespace { - const LayerTypeInfo typeInfoCircle{ "circle", LayerTypeInfo::SourceRequired }; + const LayerTypeInfo typeInfoCircle + {"circle", + LayerTypeInfo::Source::Required, + LayerTypeInfo::Pass3D::NotRequired, + LayerTypeInfo::Layout::NotRequired, + LayerTypeInfo::Clipping::NotRequired + }; } // namespace CircleLayer::CircleLayer(const std::string& layerID, const std::string& sourceID) diff --git a/src/mbgl/style/layers/custom_layer.cpp b/src/mbgl/style/layers/custom_layer.cpp index 42d8349c41..bff55a7a52 100644 --- a/src/mbgl/style/layers/custom_layer.cpp +++ b/src/mbgl/style/layers/custom_layer.cpp @@ -6,7 +6,12 @@ namespace mbgl { namespace style { namespace { - const LayerTypeInfo typeInfoCustom{ "", LayerTypeInfo::SourceNotRequired }; + const LayerTypeInfo typeInfoCustom + { "", + LayerTypeInfo::Source::NotRequired, + LayerTypeInfo::Pass3D::NotRequired, + LayerTypeInfo::Layout::NotRequired, + LayerTypeInfo::Clipping::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 5357197641..9a5cc02df4 100644 --- a/src/mbgl/style/layers/fill_extrusion_layer.cpp +++ b/src/mbgl/style/layers/fill_extrusion_layer.cpp @@ -15,7 +15,13 @@ namespace mbgl { namespace style { namespace { - const LayerTypeInfo typeInfoFillExtrusion{ "fill-extrusion", LayerTypeInfo::SourceRequired }; + const LayerTypeInfo typeInfoFillExtrusion + {"fill-extrusion", + LayerTypeInfo::Source::Required, + LayerTypeInfo::Pass3D::Required, + LayerTypeInfo::Layout::Required, + LayerTypeInfo::Clipping::NotRequired + }; } // namespace FillExtrusionLayer::FillExtrusionLayer(const std::string& layerID, const std::string& sourceID) diff --git a/src/mbgl/style/layers/fill_layer.cpp b/src/mbgl/style/layers/fill_layer.cpp index 621428fc7c..17a5eaf3b1 100644 --- a/src/mbgl/style/layers/fill_layer.cpp +++ b/src/mbgl/style/layers/fill_layer.cpp @@ -15,7 +15,13 @@ namespace mbgl { namespace style { namespace { - const LayerTypeInfo typeInfoFill{ "fill", LayerTypeInfo::SourceRequired }; + const LayerTypeInfo typeInfoFill + {"fill", + LayerTypeInfo::Source::Required, + LayerTypeInfo::Pass3D::NotRequired, + LayerTypeInfo::Layout::Required, + LayerTypeInfo::Clipping::Required + }; } // namespace FillLayer::FillLayer(const std::string& layerID, const std::string& sourceID) diff --git a/src/mbgl/style/layers/heatmap_layer.cpp b/src/mbgl/style/layers/heatmap_layer.cpp index 3d848ec128..113f158f51 100644 --- a/src/mbgl/style/layers/heatmap_layer.cpp +++ b/src/mbgl/style/layers/heatmap_layer.cpp @@ -15,7 +15,13 @@ namespace mbgl { namespace style { namespace { - const LayerTypeInfo typeInfoHeatmap{ "heatmap", LayerTypeInfo::SourceRequired }; + const LayerTypeInfo typeInfoHeatmap + {"heatmap", + LayerTypeInfo::Source::Required, + LayerTypeInfo::Pass3D::Required, + LayerTypeInfo::Layout::NotRequired, + LayerTypeInfo::Clipping::NotRequired + }; } // namespace HeatmapLayer::HeatmapLayer(const std::string& layerID, const std::string& sourceID) diff --git a/src/mbgl/style/layers/hillshade_layer.cpp b/src/mbgl/style/layers/hillshade_layer.cpp index 6a7e3dc1a7..81d2c32f6f 100644 --- a/src/mbgl/style/layers/hillshade_layer.cpp +++ b/src/mbgl/style/layers/hillshade_layer.cpp @@ -15,7 +15,13 @@ namespace mbgl { namespace style { namespace { - const LayerTypeInfo typeInfoHillshade{ "hillshade", LayerTypeInfo::SourceRequired }; + const LayerTypeInfo typeInfoHillshade + {"hillshade", + LayerTypeInfo::Source::Required, + LayerTypeInfo::Pass3D::Required, + LayerTypeInfo::Layout::NotRequired, + LayerTypeInfo::Clipping::NotRequired + }; } // namespace HillshadeLayer::HillshadeLayer(const std::string& layerID, const std::string& sourceID) diff --git a/src/mbgl/style/layers/layer.cpp.ejs b/src/mbgl/style/layers/layer.cpp.ejs index 4a708041e9..0971e1af5b 100644 --- a/src/mbgl/style/layers/layer.cpp.ejs +++ b/src/mbgl/style/layers/layer.cpp.ejs @@ -19,12 +19,51 @@ namespace mbgl { namespace style { -namespace { -<% if (type === 'background') { -%> - const LayerTypeInfo typeInfo<%- camelize(type) %>{ "<%- type %>", LayerTypeInfo::SourceNotRequired }; -<% } else { -%> - const LayerTypeInfo typeInfo<%- camelize(type) %>{ "<%- type %>", LayerTypeInfo::SourceRequired }; -<% } -%> +namespace {<% +let layerCapabilities = {}; +let defaults = { caps: { 'Source': 'NotRequired', + 'Pass3D': 'NotRequired', + 'Layout': 'NotRequired', + 'Clipping': 'NotRequired' + }, + require: function(cap) { + let copy = Object.assign({}, this); + copy.caps = Object.assign({}, this.caps); + copy.caps[cap] = 'Required'; + return copy; + }, + finalize: function() { + return Object.keys(this.caps).reduce((acc, key) => { + acc.push(`${key}::${this.caps[key]}`); + return acc; + }, []); + } + }; + +layerCapabilities['background'] = defaults.finalize(); +layerCapabilities['fill'] = defaults.require('Source') + .require('Layout') + .require('Clipping') + .finalize(); +layerCapabilities['fill-extrusion'] = defaults.require('Source') + .require('Pass3D') + .require('Layout') + .finalize(); +layerCapabilities['hillshade'] = defaults.require('Source') + .require('Pass3D') + .finalize(); +layerCapabilities['symbol'] = defaults.require('Source') + .require('Layout') + .finalize(); +layerCapabilities['circle'] = defaults.require('Source').finalize(); +layerCapabilities['line'] = layerCapabilities['fill']; +layerCapabilities['heatmap'] = layerCapabilities['hillshade']; +layerCapabilities['raster'] = layerCapabilities['circle']; +%> + const LayerTypeInfo typeInfo<%- `${camelize(type)}`%> + {"<%- type %>", + <%-`${layerCapabilities[type].map(cap => `LayerTypeInfo::${cap}`).join(',\n ')}` %> + }; } // namespace <% if (type === 'background') { -%> diff --git a/src/mbgl/style/layers/line_layer.cpp b/src/mbgl/style/layers/line_layer.cpp index e2875fc455..aeb0635254 100644 --- a/src/mbgl/style/layers/line_layer.cpp +++ b/src/mbgl/style/layers/line_layer.cpp @@ -15,7 +15,13 @@ namespace mbgl { namespace style { namespace { - const LayerTypeInfo typeInfoLine{ "line", LayerTypeInfo::SourceRequired }; + const LayerTypeInfo typeInfoLine + {"line", + LayerTypeInfo::Source::Required, + LayerTypeInfo::Pass3D::NotRequired, + LayerTypeInfo::Layout::Required, + LayerTypeInfo::Clipping::Required + }; } // namespace LineLayer::LineLayer(const std::string& layerID, const std::string& sourceID) diff --git a/src/mbgl/style/layers/raster_layer.cpp b/src/mbgl/style/layers/raster_layer.cpp index 8e7c768680..0356c2f75c 100644 --- a/src/mbgl/style/layers/raster_layer.cpp +++ b/src/mbgl/style/layers/raster_layer.cpp @@ -15,7 +15,13 @@ namespace mbgl { namespace style { namespace { - const LayerTypeInfo typeInfoRaster{ "raster", LayerTypeInfo::SourceRequired }; + const LayerTypeInfo typeInfoRaster + {"raster", + LayerTypeInfo::Source::Required, + LayerTypeInfo::Pass3D::NotRequired, + LayerTypeInfo::Layout::NotRequired, + LayerTypeInfo::Clipping::NotRequired + }; } // namespace RasterLayer::RasterLayer(const std::string& layerID, const std::string& sourceID) diff --git a/src/mbgl/style/layers/symbol_layer.cpp b/src/mbgl/style/layers/symbol_layer.cpp index 0c37396637..65a81c1071 100644 --- a/src/mbgl/style/layers/symbol_layer.cpp +++ b/src/mbgl/style/layers/symbol_layer.cpp @@ -15,7 +15,13 @@ namespace mbgl { namespace style { namespace { - const LayerTypeInfo typeInfoSymbol{ "symbol", LayerTypeInfo::SourceRequired }; + const LayerTypeInfo typeInfoSymbol + {"symbol", + LayerTypeInfo::Source::Required, + LayerTypeInfo::Pass3D::NotRequired, + LayerTypeInfo::Layout::Required, + LayerTypeInfo::Clipping::NotRequired + }; } // namespace SymbolLayer::SymbolLayer(const std::string& layerID, const std::string& sourceID) |