diff options
author | Ansis Brammanis <ansis@mapbox.com> | 2020-02-11 11:24:14 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-11 11:24:14 -0500 |
commit | 4f18d5fa92df175ac30f856a9273a00349b56cc3 (patch) | |
tree | 52efcbe12eb4f40890d6dcdc390036613b233519 /src/mbgl/renderer/render_layer.hpp | |
parent | 98f99e07433d057880dcd30f21bcb4f1e147482d (diff) | |
download | qtlocation-mapboxgl-4f18d5fa92df175ac30f856a9273a00349b56cc3.tar.gz |
[core] sort symbols using symbol-sort-key before placement (#16023)
fix #15964
partially port mapbox/mapbox-gl-js#9054
Diffstat (limited to 'src/mbgl/renderer/render_layer.hpp')
-rw-r--r-- | src/mbgl/renderer/render_layer.hpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp index ba3c638f88..4931893271 100644 --- a/src/mbgl/renderer/render_layer.hpp +++ b/src/mbgl/renderer/render_layer.hpp @@ -1,11 +1,11 @@ #pragma once +#include <list> #include <mbgl/layout/layout.hpp> #include <mbgl/renderer/render_pass.hpp> #include <mbgl/renderer/render_source.hpp> #include <mbgl/style/layer_properties.hpp> #include <mbgl/tile/geometry_tile_data.hpp> #include <mbgl/util/mat4.hpp> - #include <memory> #include <string> @@ -20,6 +20,7 @@ class RenderTile; class TransformState; class PatternAtlas; class LineAtlas; +class SymbolBucket; class LayerRenderData { public: @@ -29,9 +30,16 @@ public: class LayerPlacementData { public: + friend bool operator<(const LayerPlacementData& lhs, const LayerPlacementData& rhs) { + return lhs.sortKey < rhs.sortKey; + } std::reference_wrapper<Bucket> bucket; std::reference_wrapper<const RenderTile> tile; std::shared_ptr<FeatureIndex> featureIndex; + bool firstInBucket; + float sortKey; + size_t symbolInstanceStart; + size_t symbolInstanceEnd; }; class LayerPrepareParameters { @@ -95,9 +103,7 @@ public: virtual void prepare(const LayerPrepareParameters&); - const std::vector<LayerPlacementData>& getPlacementData() const { - return placementData; - } + const std::list<LayerPlacementData>& getPlacementData() const { return placementData; } // Latest evaluated properties. Immutable<style::LayerProperties> evaluatedProperties; @@ -126,7 +132,7 @@ protected: // evaluated StyleProperties object and is updated accordingly. RenderPass passes = RenderPass::None; - std::vector<LayerPlacementData> placementData; + std::list<LayerPlacementData> placementData; private: // Some layers may not render correctly on some hardware when the vertex attribute limit of |