diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-07-21 12:16:02 +0300 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-07-23 15:43:27 +0300 |
commit | ac74fc6d005e334ff7126e49b4c737ecb10666b3 (patch) | |
tree | ca810576c0ed0f0fba393c7040254d3e919d5195 /src/mbgl/layout/symbol_instance.hpp | |
parent | dabf5d0c3a76f9fbe8b866f64f51accf12d1a2a6 (diff) | |
download | qtlocation-mapboxgl-ac74fc6d005e334ff7126e49b4c737ecb10666b3.tar.gz |
[core] Release quad data after vertex buffers are created
Diffstat (limited to 'src/mbgl/layout/symbol_instance.hpp')
-rw-r--r-- | src/mbgl/layout/symbol_instance.hpp | 59 |
1 files changed, 42 insertions, 17 deletions
diff --git a/src/mbgl/layout/symbol_instance.hpp b/src/mbgl/layout/symbol_instance.hpp index 95159deeb1..48bb2f0cbc 100644 --- a/src/mbgl/layout/symbol_instance.hpp +++ b/src/mbgl/layout/symbol_instance.hpp @@ -21,23 +21,39 @@ struct ShapedTextOrientations { bool singleLine = false; }; +struct SymbolInstanceSharedData { + SymbolInstanceSharedData(GeometryCoordinates line, + const ShapedTextOrientations& shapedTextOrientations, + const optional<PositionedIcon>& shapedIcon, + const style::SymbolLayoutProperties::Evaluated& layout, + const float layoutTextSize, + const style::SymbolPlacementType textPlacement, + const std::array<float, 2>& textOffset, + const GlyphPositions& positions); + bool empty() const; + GeometryCoordinates line; + // Note: When singleLine == true, only `rightJustifiedGlyphQuads` is populated. + SymbolQuads rightJustifiedGlyphQuads; + SymbolQuads centerJustifiedGlyphQuads; + SymbolQuads leftJustifiedGlyphQuads; + SymbolQuads verticalGlyphQuads; + optional<SymbolQuad> iconQuad; +}; + class SymbolInstance { public: - SymbolInstance(Anchor& anchor, - GeometryCoordinates line, + SymbolInstance(Anchor& anchor_, + std::shared_ptr<SymbolInstanceSharedData> sharedData, const ShapedTextOrientations& shapedTextOrientations, - optional<PositionedIcon> shapedIcon, - const style::SymbolLayoutProperties::Evaluated&, - const float layoutTextSize, + const optional<PositionedIcon>& shapedIcon, const float textBoxScale, const float textPadding, - style::SymbolPlacementType textPlacement, - const std::array<float, 2> textOffset, + const style::SymbolPlacementType textPlacement, + const std::array<float, 2>& textOffset, const float iconBoxScale, const float iconPadding, - const std::array<float, 2> iconOffset, - const GlyphPositions&, - const IndexedSubfeature&, + const std::array<float, 2>& iconOffset, + const IndexedSubfeature& indexedFeature, const std::size_t layoutFeatureIndex, const std::size_t dataFeatureIndex, std::u16string key, @@ -46,18 +62,27 @@ public: float radialTextOffset); optional<size_t> getDefaultHorizontalPlacedTextIndex() const; + const GeometryCoordinates& line() const; + const SymbolQuads& rightJustifiedGlyphQuads() const; + const SymbolQuads& leftJustifiedGlyphQuads() const; + const SymbolQuads& centerJustifiedGlyphQuads() const; + const SymbolQuads& verticalGlyphQuads() const; + const optional<SymbolQuad>& iconQuad() const; + void releaseSharedData(); + +private: + std::shared_ptr<SymbolInstanceSharedData> sharedData; + +public: Anchor anchor; - GeometryCoordinates line; bool hasText; bool hasIcon; - // Note: When singleLine == true, only `rightJustifiedGlyphQuads` is populated. - SymbolQuads rightJustifiedGlyphQuads; - SymbolQuads centerJustifiedGlyphQuads; - SymbolQuads leftJustifiedGlyphQuads; - SymbolQuads verticalGlyphQuads; + std::size_t rightJustifiedGlyphQuadsSize; + std::size_t centerJustifiedGlyphQuadsSize; + std::size_t leftJustifiedGlyphQuadsSize; + std::size_t verticalGlyphQuadsSize; - optional<SymbolQuad> iconQuad; CollisionFeature textCollisionFeature; CollisionFeature iconCollisionFeature; WritingModeType writingModes; |