diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-04-12 14:22:22 +0300 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-04-12 14:31:24 +0300 |
commit | 6d8c6f1c51caf19249854716e688eedd3d9fb207 (patch) | |
tree | dfcf066ab319de7d43304cabd28d676a430e380d | |
parent | 50ecd659370f676d341fe3c3434e4a200dff224b (diff) | |
download | qtlocation-mapboxgl-6d8c6f1c51caf19249854716e688eedd3d9fb207.tar.gz |
Revert "[core] WIP, make draw scopes shared_ptr"upstream/alexshalamov_port_symbol-sort-key_reduce_size
This reverts commit 3ca18c05b6548fb89ee7ba4a26c3f4c8d5dd173c.
-rw-r--r-- | src/mbgl/programs/collision_box_program.hpp | 12 | ||||
-rw-r--r-- | src/mbgl/programs/program.hpp | 6 | ||||
-rw-r--r-- | src/mbgl/programs/segment.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/programs/symbol_program.hpp | 12 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.cpp | 17 |
5 files changed, 27 insertions, 25 deletions
diff --git a/src/mbgl/programs/collision_box_program.hpp b/src/mbgl/programs/collision_box_program.hpp index 89f1380c14..1677be1250 100644 --- a/src/mbgl/programs/collision_box_program.hpp +++ b/src/mbgl/programs/collision_box_program.hpp @@ -83,10 +83,10 @@ public: assert(layoutVertexBuffer.elements == dynamicVertexBuffer.elements); for (auto& segment : segments) { - auto drawScopeIt = segment.drawScopes->find(layerID); + auto drawScopeIt = segment.drawScopes.find(layerID); - if (drawScopeIt == segment.drawScopes->end()) { - drawScopeIt = segment.drawScopes->emplace(layerID, context.createDrawScope()).first; + if (drawScopeIt == segment.drawScopes.end()) { + drawScopeIt = segment.drawScopes.emplace(layerID, context.createDrawScope()).first; } program->draw( @@ -167,10 +167,10 @@ public: .concat(paintPropertyBinders.attributeBindings(currentProperties)); for (auto& segment : segments) { - auto drawScopeIt = segment.drawScopes->find(layerID); + auto drawScopeIt = segment.drawScopes.find(layerID); - if (drawScopeIt == segment.drawScopes->end()) { - drawScopeIt = segment.drawScopes->emplace(layerID, context.createDrawScope()).first; + if (drawScopeIt == segment.drawScopes.end()) { + drawScopeIt = segment.drawScopes.emplace(layerID, context.createDrawScope()).first; } program->draw( diff --git a/src/mbgl/programs/program.hpp b/src/mbgl/programs/program.hpp index ab9abebb0b..cb68735bf8 100644 --- a/src/mbgl/programs/program.hpp +++ b/src/mbgl/programs/program.hpp @@ -90,10 +90,10 @@ public: } for (auto& segment : segments) { - auto drawScopeIt = segment.drawScopes->find(layerID); + auto drawScopeIt = segment.drawScopes.find(layerID); - if (drawScopeIt == segment.drawScopes->end()) { - drawScopeIt = segment.drawScopes->emplace(layerID, context.createDrawScope()).first; + if (drawScopeIt == segment.drawScopes.end()) { + drawScopeIt = segment.drawScopes.emplace(layerID, context.createDrawScope()).first; } program->draw( diff --git a/src/mbgl/programs/segment.hpp b/src/mbgl/programs/segment.hpp index 7264d89028..98628507c2 100644 --- a/src/mbgl/programs/segment.hpp +++ b/src/mbgl/programs/segment.hpp @@ -20,9 +20,10 @@ public: indexOffset(indexOffset_), vertexLength(vertexLength_), indexLength(indexLength_), - drawScopes(std::make_shared<std::map<std::string, gfx::DrawScope>>()), sortKey(sortKey_) {} + Segment(Segment&&) = default; + const std::size_t vertexOffset; const std::size_t indexOffset; @@ -36,7 +37,7 @@ public: // data-driven paint properties // * when two fill layers have the same layout properties, but one // uses fill-color and the other uses fill-pattern - mutable std::shared_ptr<std::map<std::string, gfx::DrawScope>> drawScopes; + mutable std::map<std::string, gfx::DrawScope> drawScopes; unsigned int sortKey; }; diff --git a/src/mbgl/programs/symbol_program.hpp b/src/mbgl/programs/symbol_program.hpp index 6d584ecc5a..980ca253b9 100644 --- a/src/mbgl/programs/symbol_program.hpp +++ b/src/mbgl/programs/symbol_program.hpp @@ -298,7 +298,7 @@ public: return allAttributeBindings.activeCount(); } - template <class DrawMode> + template <class DrawMode, class SegmentsContainer> void draw(gfx::Context& context, gfx::RenderPass& renderPass, const DrawMode& drawMode, @@ -307,7 +307,7 @@ public: const gfx::ColorMode& colorMode, const gfx::CullFaceMode& cullFaceMode, const gfx::IndexBuffer& indexBuffer, - const SegmentVector<AttributeList>& segments, + const SegmentsContainer& segments, const UniformValues& uniformValues, const AttributeBindings& allAttributeBindings, const TextureBindings& textureBindings, @@ -318,11 +318,11 @@ public: return; } - for (const auto& segment : segments) { - auto drawScopeIt = segment.drawScopes->find(layerID); + for (const Segment<AttributeList>& segment : segments) { + auto drawScopeIt = segment.drawScopes.find(layerID); - if (drawScopeIt == segment.drawScopes->end()) { - drawScopeIt = segment.drawScopes->emplace(layerID, context.createDrawScope()).first; + if (drawScopeIt == segment.drawScopes.end()) { + drawScopeIt = segment.drawScopes.emplace(layerID, context.createDrawScope()).first; } program->draw( diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 277b18fedf..504b464ab9 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -37,8 +37,9 @@ Point<float> calculateVariableRenderShift(style::SymbolAnchorType anchor, float } struct RenderableSegment { + using SegmentRefVector = std::vector<std::reference_wrapper<const Segment<SymbolTextAttributes>>>; RenderableSegment(bool isIcon_, - SegmentVector<SymbolTextAttributes> segments_, + SegmentRefVector segments_, const RenderTile& tile_, SymbolBucket& bucket_, const SymbolBucket::PaintProperties& bucketPaintProperties_, @@ -51,7 +52,7 @@ struct RenderableSegment { sortKey(sortKey_) {} bool isIcon; - SegmentVector<SymbolTextAttributes> segments; + SegmentRefVector segments; const RenderTile& tile; SymbolBucket& bucket; const SymbolBucket::PaintProperties& bucketPaintProperties; @@ -62,11 +63,11 @@ struct RenderableSegment { } }; -template <typename DrawFn> +template <typename DrawFn, typename SegmentsContainer> void drawIcon(const DrawFn& draw, const RenderTile& tile, SymbolBucket& bucket, - const SegmentVector<SymbolTextAttributes>& iconSegments, + const SegmentsContainer& iconSegments, const SymbolBucket::PaintProperties& bucketPaintProperties, const PaintParameters& parameters) { assert(tile.tile.kind == Tile::Kind::Geometry); @@ -146,11 +147,11 @@ void drawIcon(const DrawFn& draw, } } -template <typename DrawFn> +template <typename DrawFn, typename SegmentsContainer> void drawText(const DrawFn& draw, const RenderTile& tile, SymbolBucket& bucket, - const SegmentVector<SymbolTextAttributes>& textSegments, + const SegmentsContainer& textSegments, const SymbolBucket::PaintProperties& bucketPaintProperties, const PaintParameters& parameters) { assert(tile.tile.kind == Tile::Kind::Geometry); @@ -397,7 +398,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { if (bucket.hasIconData()) { if (sortFeaturesByKey) { for (auto& segment : bucket.icon.segments) { - renderableSegments.emplace_hint(it, true, SegmentVector<SymbolTextAttributes>{segment}, tile, bucket, bucketPaintProperties, segment.sortKey); + renderableSegments.emplace_hint(it, true, RenderableSegment::SegmentRefVector{std::cref(segment)}, tile, bucket, bucketPaintProperties, segment.sortKey); } } else { drawIcon(draw, tile, bucket, bucket.icon.segments, bucketPaintProperties, parameters); @@ -407,7 +408,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { if (bucket.hasTextData()) { if (sortFeaturesByKey) { for (auto& segment : bucket.text.segments) { - renderableSegments.emplace_hint(it, false, SegmentVector<SymbolTextAttributes>{segment}, tile, bucket, bucketPaintProperties, segment.sortKey); + renderableSegments.emplace_hint(it, false, RenderableSegment::SegmentRefVector{std::cref(segment)}, tile, bucket, bucketPaintProperties, segment.sortKey); } } else { drawText(draw, tile, bucket, bucket.text.segments, bucketPaintProperties, parameters); |