diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-04-11 17:28:06 +0300 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-04-11 17:28:06 +0300 |
commit | 3ca18c05b6548fb89ee7ba4a26c3f4c8d5dd173c (patch) | |
tree | 96b61f5bb37cdc2681ab4371db401e68607e4c02 | |
parent | b5f9df84669e4431abdd494314b1ced4d8176b7c (diff) | |
download | qtlocation-mapboxgl-3ca18c05b6548fb89ee7ba4a26c3f4c8d5dd173c.tar.gz |
[core] WIP, make draw scopes shared_ptr
-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 | 9 |
5 files changed, 21 insertions, 23 deletions
diff --git a/src/mbgl/programs/collision_box_program.hpp b/src/mbgl/programs/collision_box_program.hpp index 1677be1250..89f1380c14 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 cb68735bf8..ab9abebb0b 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 98628507c2..7264d89028 100644 --- a/src/mbgl/programs/segment.hpp +++ b/src/mbgl/programs/segment.hpp @@ -20,10 +20,9 @@ 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; @@ -37,7 +36,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::map<std::string, gfx::DrawScope> drawScopes; + mutable std::shared_ptr<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 980ca253b9..6d584ecc5a 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, class SegmentsContainer> + template <class DrawMode> 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 SegmentsContainer& segments, + const SegmentVector<AttributeList>& segments, const UniformValues& uniformValues, const AttributeBindings& allAttributeBindings, const TextureBindings& textureBindings, @@ -318,11 +318,11 @@ public: return; } - for (const Segment<AttributeList>& segment : segments) { - auto drawScopeIt = segment.drawScopes.find(layerID); + for (const auto& 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 90f09b4d15..a44bc3a109 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -36,9 +36,8 @@ Point<float> calculateVariableRenderShift(style::SymbolAnchorType anchor, float } struct RenderableSegment { - using SegmentRefVector = std::vector<std::reference_wrapper<const Segment<SymbolTextAttributes>>>; - SegmentRefVector segments; - std::function<void(const SegmentRefVector&)> drawSegments; + SegmentVector<SymbolTextAttributes> segments; + std::function<void(const SegmentVector<SymbolTextAttributes>&)> drawSegments; unsigned int sortKey; }; @@ -241,7 +240,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { if (sortFeaturesByKey) { for (const auto& segment : bucket.icon.segments) { - renderableSegments.push_back({{std::cref(segment)}, renderIcon, segment.sortKey}); + renderableSegments.push_back({{segment}, renderIcon, segment.sortKey}); } } else { renderIcon(bucket.icon.segments); @@ -371,7 +370,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { if (sortFeaturesByKey) { for (const auto& segment : bucket.text.segments) { - renderableSegments.push_back({{std::cref(segment)}, renderText, segment.sortKey}); + renderableSegments.push_back({{segment}, renderText, segment.sortKey}); } } else { renderText(bucket.text.segments); |