diff --git a/src/mbgl/renderer/buckets/circle_bucket.cpp b/src/mbgl/renderer/buckets/circle_bucket.cpp index 7e08b3c96..51da3eb89 100644 --- a/src/mbgl/renderer/buckets/circle_bucket.cpp +++ b/src/mbgl/renderer/buckets/circle_bucket.cpp @@ -104,12 +104,7 @@ static float get(const RenderCircleLayer& layer, const std::map()) { - return 0; - } - - auto circleLayer = layer.as(); - + const RenderCircleLayer* circleLayer = toRenderCircleLayer(&layer); float radius = get(*circleLayer, paintPropertyBinders); float stroke = get(*circleLayer, paintPropertyBinders); auto translate = circleLayer->evaluated.get(); diff --git a/src/mbgl/renderer/buckets/fill_bucket.cpp b/src/mbgl/renderer/buckets/fill_bucket.cpp index 3b1b7ec00..043882f13 100644 --- a/src/mbgl/renderer/buckets/fill_bucket.cpp +++ b/src/mbgl/renderer/buckets/fill_bucket.cpp @@ -137,13 +137,9 @@ bool FillBucket::hasData() const { } float FillBucket::getQueryRadius(const RenderLayer& layer) const { - if (!layer.is()) { - return 0; - } - - const std::array& translate = layer.as()->evaluated.get(); + const RenderFillLayer* fillLayer = toRenderFillLayer(&layer); + const std::array& translate = fillLayer->evaluated.get(); return util::length(translate[0], translate[1]); - } } // namespace mbgl diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp index fb491e0db..177c6e0c2 100644 --- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp +++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp @@ -181,11 +181,8 @@ bool FillExtrusionBucket::hasData() const { } float FillExtrusionBucket::getQueryRadius(const RenderLayer& layer) const { - if (!layer.is()) { - return 0; - } - - const std::array& translate = layer.as()->evaluated.get(); + const RenderFillExtrusionLayer* fillExtrusionLayer = toRenderFillExtrusionLayer(&layer); + const std::array& translate = fillExtrusionLayer->evaluated.get(); return util::length(translate[0], translate[1]); } diff --git a/src/mbgl/renderer/buckets/line_bucket.cpp b/src/mbgl/renderer/buckets/line_bucket.cpp index 2efb60c9a..ace6c8bfa 100644 --- a/src/mbgl/renderer/buckets/line_bucket.cpp +++ b/src/mbgl/renderer/buckets/line_bucket.cpp @@ -545,16 +545,10 @@ float LineBucket::getLineWidth(const RenderLineLayer& layer) const { } float LineBucket::getQueryRadius(const RenderLayer& layer) const { - if (!layer.is()) { - return 0; - } - - auto lineLayer = layer.as(); - + const RenderLineLayer* lineLayer = toRenderLineLayer(&layer); const std::array& translate = lineLayer->evaluated.get(); float offset = get(*lineLayer, paintPropertyBinders); return getLineWidth(*lineLayer) / 2.0 + std::abs(offset) + util::length(translate[0], translate[1]); } - } // namespace mbgl diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp index b9684b73f..a7d128dc0 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp @@ -56,4 +56,8 @@ inline bool RenderLayer::is() const { return type == style::LayerType::FillExtrusion; } +inline const RenderFillExtrusionLayer* toRenderFillExtrusionLayer(const RenderLayer* layer) { + return static_cast(layer); +} + } // namespace mbgl diff --git a/src/mbgl/renderer/layers/render_fill_layer.hpp b/src/mbgl/renderer/layers/render_fill_layer.hpp index 41926e130..48168a623 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.hpp +++ b/src/mbgl/renderer/layers/render_fill_layer.hpp @@ -51,4 +51,8 @@ inline bool RenderLayer::is() const { return type == style::LayerType::Fill; } +inline const RenderFillLayer* toRenderFillLayer(const RenderLayer* layer) { + return static_cast(layer); +} + } // namespace mbgl diff --git a/src/mbgl/renderer/layers/render_line_layer.hpp b/src/mbgl/renderer/layers/render_line_layer.hpp index 1b2641923..737aa2e5b 100644 --- a/src/mbgl/renderer/layers/render_line_layer.hpp +++ b/src/mbgl/renderer/layers/render_line_layer.hpp @@ -71,4 +71,8 @@ inline bool RenderLayer::is() const { return type == style::LayerType::Line; } +inline const RenderLineLayer* toRenderLineLayer(const RenderLayer* layer) { + return static_cast(layer); +} + } // namespace mbgl