From 6d8c6f1c51caf19249854716e688eedd3d9fb207 Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Fri, 12 Apr 2019 14:22:22 +0300 Subject: Revert "[core] WIP, make draw scopes shared_ptr" This reverts commit 3ca18c05b6548fb89ee7ba4a26c3f4c8d5dd173c. --- src/mbgl/programs/collision_box_program.hpp | 12 ++++++------ src/mbgl/programs/program.hpp | 6 +++--- src/mbgl/programs/segment.hpp | 5 +++-- src/mbgl/programs/symbol_program.hpp | 12 ++++++------ 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>()), 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> drawScopes; + mutable std::map 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 + template 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& 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& 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 calculateVariableRenderShift(style::SymbolAnchorType anchor, float } struct RenderableSegment { + using SegmentRefVector = std::vector>>; RenderableSegment(bool isIcon_, - SegmentVector segments_, + SegmentRefVector segments_, const RenderTile& tile_, SymbolBucket& bucket_, const SymbolBucket::PaintProperties& bucketPaintProperties_, @@ -51,7 +52,7 @@ struct RenderableSegment { sortKey(sortKey_) {} bool isIcon; - SegmentVector segments; + SegmentRefVector segments; const RenderTile& tile; SymbolBucket& bucket; const SymbolBucket::PaintProperties& bucketPaintProperties; @@ -62,11 +63,11 @@ struct RenderableSegment { } }; -template +template void drawIcon(const DrawFn& draw, const RenderTile& tile, SymbolBucket& bucket, - const SegmentVector& 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 +template void drawText(const DrawFn& draw, const RenderTile& tile, SymbolBucket& bucket, - const SegmentVector& 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{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{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); -- cgit v1.2.1