From 67bbcd5334a15f659952514b15275892900fd95b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Sun, 1 Jun 2014 18:12:44 +0200 Subject: [PATCH] allow setting prerender state with a function too --- bin/style.js | 25 +++++++++++++------------ include/llmr/style/properties.hpp | 8 ++++++-- src/renderer/painter_fill.cpp | 4 +--- src/style/style_parser.cpp | 2 +- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/bin/style.js b/bin/style.js index eb2994fdf..3b0fd8c5c 100644 --- a/bin/style.js +++ b/bin/style.js @@ -1820,11 +1820,12 @@ module.exports = { {"z": 16, "val": 10}, {"z": 17, "val": 11} ], - "hillshade_prerender_size": [ + "hillshade_prerender": [ "stops", - {"z": 13, "val": 1024 }, - {"z": 14, "val": 512 } - ] + {"z": 13, "val": 0}, + {"z": 14, "val": 1} + ], + "hillshade_prerender_size": 1024 }, "classes": [ { @@ -1977,7 +1978,7 @@ module.exports = { "hillshade_full_shadow": { "color": "#103", "antialias": false, - "prerender": true, + "prerender": "hillshade_prerender", "prerender-size": "hillshade_prerender_size", "prerender-blur": 1, "opacity": [ @@ -1992,7 +1993,7 @@ module.exports = { "hillshade_medium_shadow": { "color": "#206", "antialias": false, - "prerender": true, + "prerender": "hillshade_prerender", "prerender-size": "hillshade_prerender_size", "prerender-blur": 1, "opacity": [ @@ -2007,7 +2008,7 @@ module.exports = { "hillshade_full_highlight": { "color": "#fffff3", "antialias": false, - "prerender": true, + "prerender": "hillshade_prerender", "prerender-size": "hillshade_prerender_size", "prerender-blur": 1, "opacity": [ @@ -2022,7 +2023,7 @@ module.exports = { "hillshade_medium_highlight": { "color": "#ffd", "antialias": false, - "prerender": true, + "prerender": "hillshade_prerender", "prerender-size": "hillshade_prerender_size", "prerender-blur": 1, "opacity": [ @@ -2789,7 +2790,7 @@ module.exports = { "hillshade_full_shadow": { "color": "#103", "antialias": false, - "prerender": true, + "prerender": "hillshade_prerender", "prerender-size": "hillshade_prerender_size", "prerender-blur": 1, "opacity": [ @@ -2803,7 +2804,7 @@ module.exports = { "hillshade_medium_shadow": { "color": "#206", "antialias": false, - "prerender": true, + "prerender": "hillshade_prerender", "prerender-size": "hillshade_prerender_size", "prerender-blur": 1, "opacity": [ @@ -2817,7 +2818,7 @@ module.exports = { "hillshade_full_highlight": { "color": "#fdfdad", "antialias": false, - "prerender": true, + "prerender": "hillshade_prerender", "prerender-size": "hillshade_prerender_size", "prerender-blur": 1, "opacity": [ @@ -2832,7 +2833,7 @@ module.exports = { "hillshade_medium_highlight": { "color": "#ffe1b7", "antialias": false, - "prerender": true, + "prerender": "hillshade_prerender", "prerender-size": "hillshade_prerender_size", "prerender-blur": 1, "opacity": [ diff --git a/include/llmr/style/properties.hpp b/include/llmr/style/properties.hpp index 96e49b7e8..487f2d6c6 100644 --- a/include/llmr/style/properties.hpp +++ b/include/llmr/style/properties.hpp @@ -93,7 +93,7 @@ struct GenericClass { boost::optional translateAnchor; boost::optional opacity; boost::optional opacity_transition; - float prerender = false; + boost::optional prerender; boost::optional prerenderBuffer; boost::optional prerenderSize; boost::optional prerenderBlur; @@ -110,13 +110,17 @@ struct GenericProperties { std::array translate = {{ 0, 0 }}; TranslateAnchor translateAnchor = TranslateAnchor::Map; float opacity = 1.0; - bool prerender; // These are unresolved properties because the value here is per tile, so it might differ. + boost::optional prerender; boost::optional prerenderBuffer; boost::optional prerenderSize; boost::optional prerenderBlur; + inline bool getPrerender(int8_t z) const { + return prerender && prerender.get().evaluate(z); + } + // Obtains prerender properties by integer zoom level. inline PrerenderProperties getPrerenderProperties(int8_t z) const { PrerenderProperties props; diff --git a/src/renderer/painter_fill.cpp b/src/renderer/painter_fill.cpp index 0d3a41511..fd5b1a334 100644 --- a/src/renderer/painter_fill.cpp +++ b/src/renderer/painter_fill.cpp @@ -152,10 +152,8 @@ void Painter::renderFill(FillBucket& bucket, const std::string& layer_name, cons : defaultFillProperties; if (!properties.enabled) return; - if (properties.prerender) { + if (properties.prerender && properties.getPrerender(id.z)) { if (pass == Translucent) { - - // Buffer value around the 0..4096 extent that will be drawn into the 256x256 pixel // texture. We later scale the texture so that the actual bounds will align with this // tile's bounds. The reason we do this is so that the diff --git a/src/style/style_parser.cpp b/src/style/style_parser.cpp index fb3ab5957..2b6c0e3f2 100644 --- a/src/style/style_parser.cpp +++ b/src/style/style_parser.cpp @@ -557,7 +557,7 @@ void StyleParser::parseGenericClass(GenericClass &klass, JSVal value) { } if (value.HasMember("prerender")) { - klass.prerender = parseBoolean(value["prerender"]); + klass.prerender = parseFunction(value["prerender"]); } if (value.HasMember("prerender-buffer")) {