summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2019-04-12 14:22:22 +0300
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2019-04-12 14:31:24 +0300
commit6d8c6f1c51caf19249854716e688eedd3d9fb207 (patch)
treedfcf066ab319de7d43304cabd28d676a430e380d
parent50ecd659370f676d341fe3c3434e4a200dff224b (diff)
downloadqtlocation-mapboxgl-upstream/alexshalamov_port_symbol-sort-key_reduce_size.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.hpp12
-rw-r--r--src/mbgl/programs/program.hpp6
-rw-r--r--src/mbgl/programs/segment.hpp5
-rw-r--r--src/mbgl/programs/symbol_program.hpp12
-rw-r--r--src/mbgl/renderer/layers/render_symbol_layer.cpp17
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);