diff options
Diffstat (limited to 'src/mbgl/renderer/layers')
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.cpp | 19 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.hpp | 4 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index df38d64d70..cc084c5e1a 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -362,4 +362,23 @@ style::SymbolPropertyValues RenderSymbolLayer::textPropertyValues(const style::S }; } +RenderLayer::RenderTiles RenderSymbolLayer::filterRenderTiles(RenderTiles tiles) const { + auto filterFn = [](auto& tile){ return !tile.tile.isRenderable(); }; + return RenderLayer::filterRenderTiles(std::move(tiles), filterFn); +} + +void RenderSymbolLayer::sortRenderTiles(const TransformState& state) { + // Sort symbol tiles in opposite y position, so tiles with overlapping symbols are drawn + // on top of each other, with lower symbols being drawn on top of higher symbols. + std::sort(renderTiles.begin(), renderTiles.end(), [&state](const auto& a, const auto& b) { + Point<float> pa(a.get().id.canonical.x, a.get().id.canonical.y); + Point<float> pb(b.get().id.canonical.x, b.get().id.canonical.y); + + auto par = util::rotate(pa, state.getAngle()); + auto pbr = util::rotate(pb, state.getAngle()); + + return std::tie(b.get().id.canonical.z, par.y, par.x) < std::tie(a.get().id.canonical.z, pbr.y, pbr.x); + }); +} + } // namespace mbgl diff --git a/src/mbgl/renderer/layers/render_symbol_layer.hpp b/src/mbgl/renderer/layers/render_symbol_layer.hpp index 48e048f271..bd43324712 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.hpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.hpp @@ -88,6 +88,10 @@ public: float textSize = 16.0f; const style::SymbolLayer::Impl& impl() const; + +protected: + RenderTiles filterRenderTiles(RenderTiles) const final; + void sortRenderTiles(const TransformState&) final; }; template <> |