summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r--src/mbgl/renderer/layers/render_symbol_layer.cpp4
-rw-r--r--src/mbgl/renderer/paint_parameters.cpp4
-rw-r--r--src/mbgl/renderer/paint_parameters.hpp5
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp16
4 files changed, 16 insertions, 13 deletions
diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp
index ef18a21005..ff035ab04b 100644
--- a/src/mbgl/renderer/layers/render_symbol_layer.cpp
+++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp
@@ -258,8 +258,8 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) {
for (const PlacedSymbol& symbol : bucket.text.placedSymbols) {
optional<VariableOffset> variableOffset;
if (!symbol.hidden && symbol.crossTileID != 0u) {
- auto it = parameters.variableOffsets.find(symbol.crossTileID);
- if (it != parameters.variableOffsets.end()) {
+ auto it = parameters.variableOffsets.get().find(symbol.crossTileID);
+ if (it != parameters.variableOffsets.get().end()) {
variableOffset = it->second;
hasVariablePacement |= true;
}
diff --git a/src/mbgl/renderer/paint_parameters.cpp b/src/mbgl/renderer/paint_parameters.cpp
index 2237b016d2..1f858ca105 100644
--- a/src/mbgl/renderer/paint_parameters.cpp
+++ b/src/mbgl/renderer/paint_parameters.cpp
@@ -13,7 +13,8 @@ PaintParameters::PaintParameters(gl::Context& context_,
const EvaluatedLight& evaluatedLight_,
RenderStaticData& staticData_,
ImageManager& imageManager_,
- LineAtlas& lineAtlas_)
+ LineAtlas& lineAtlas_,
+ Placement::VariableOffsets variableOffsets_)
: context(context_),
backend(backend_),
state(updateParameters.transformState),
@@ -26,6 +27,7 @@ PaintParameters::PaintParameters(gl::Context& context_,
contextMode(contextMode_),
timePoint(updateParameters.timePoint),
pixelRatio(pixelRatio_),
+ variableOffsets(variableOffsets_),
#ifndef NDEBUG
programs((debugOptions & MapDebugOptions::Overdraw) ? staticData_.overdrawPrograms : staticData_.programs)
#else
diff --git a/src/mbgl/renderer/paint_parameters.hpp b/src/mbgl/renderer/paint_parameters.hpp
index 0b729d102b..553b4f94bf 100644
--- a/src/mbgl/renderer/paint_parameters.hpp
+++ b/src/mbgl/renderer/paint_parameters.hpp
@@ -38,7 +38,8 @@ public:
const EvaluatedLight&,
RenderStaticData&,
ImageManager&,
- LineAtlas&);
+ LineAtlas&,
+ Placement::VariableOffsets);
gl::Context& context;
RendererBackend& backend;
@@ -57,7 +58,7 @@ public:
TimePoint timePoint;
float pixelRatio;
- std::unordered_map<uint32_t, VariableOffset> variableOffsets;
+ Placement::VariableOffsets variableOffsets;
std::array<float, 2> pixelsToGLUnits;
algorithm::ClipIDGenerator clipIDGenerator;
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp
index 471536cf40..19635c7784 100644
--- a/src/mbgl/renderer/renderer_impl.cpp
+++ b/src/mbgl/renderer/renderer_impl.cpp
@@ -262,7 +262,8 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
renderLight.getEvaluated(),
*staticData,
*imageManager,
- *lineAtlas
+ *lineAtlas,
+ placement->getVariableOffsets()
};
bool loaded = updateParameters.styleLoaded && isLoaded();
@@ -340,26 +341,25 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
bool symbolBucketsChanged = false;
const bool placementChanged = !placement->stillRecent(parameters.timePoint);
- std::unique_ptr<Placement> newPlacement;
std::set<std::string> usedSymbolLayers;
if (placementChanged) {
- newPlacement = std::make_unique<Placement>(parameters.state, parameters.mapMode, updateParameters.transitionOptions, updateParameters.crossSourceCollisions);
+ placement = std::make_unique<Placement>(parameters.state, parameters.mapMode, updateParameters.transitionOptions, updateParameters.crossSourceCollisions, std::move(placement));
}
for (const auto& item : renderItemsWithSymbols) {
if (crossTileSymbolIndex.addLayer(*item.layer.getSymbolInterface(), parameters.state.getLatLng().longitude())) symbolBucketsChanged = true;
- if (newPlacement) {
+ if (placementChanged) {
usedSymbolLayers.insert(item.layer.getID());
- newPlacement->placeLayer(*item.layer.getSymbolInterface(), parameters.projMatrix, parameters.debugOptions & MapDebugOptions::Collision);
+ placement->placeLayer(*item.layer.getSymbolInterface(), parameters.projMatrix, parameters.debugOptions & MapDebugOptions::Collision);
}
}
- if (newPlacement) {
- newPlacement->commit(*placement, parameters.timePoint);
+ if (placementChanged) {
+ placement->commit(parameters.timePoint);
crossTileSymbolIndex.pruneUnusedLayers(usedSymbolLayers);
- placement = std::move(newPlacement);
+ parameters.variableOffsets = placement->getVariableOffsets();
updateFadingTiles();
} else {
placement->setStale();