summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-12-05 18:01:10 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-12-09 17:32:49 +0200
commit1829fb5e40d03ed053c019bdd324897e787431eb (patch)
tree83cbede1c49612a0535f531208157f2dcf747c36
parentffd378c68e3bb47917468872cad03be7295e33fe (diff)
downloadqtlocation-mapboxgl-1829fb5e40d03ed053c019bdd324897e787431eb.tar.gz
[core] Placement::commit() handles absence of previuos placement
-rw-r--r--src/mbgl/renderer/render_orchestrator.cpp3
-rw-r--r--src/mbgl/text/placement.cpp14
-rw-r--r--src/mbgl/text/placement.hpp2
3 files changed, 14 insertions, 5 deletions
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp
index 1b689cf82f..2462ee6986 100644
--- a/src/mbgl/renderer/render_orchestrator.cpp
+++ b/src/mbgl/renderer/render_orchestrator.cpp
@@ -427,8 +427,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar
Mutable<Placement> placement = makeMutable<Placement>(updateParameters.transformState,
updateParameters.mode,
updateParameters.transitionOptions,
- updateParameters.crossSourceCollisions,
- placementController.getPlacement());
+ updateParameters.crossSourceCollisions);
for (auto it = layersNeedPlacement.crbegin(); it != layersNeedPlacement.crend(); ++it) {
const RenderLayer& layer = *it;
crossTileSymbolIndex.addLayer(layer, updateParameters.transformState.getLatLng().longitude());
diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp
index 639ed7e1de..2566ba4274 100644
--- a/src/mbgl/text/placement.cpp
+++ b/src/mbgl/text/placement.cpp
@@ -101,6 +101,7 @@ Placement::Placement(const TransformState& state_,
placementZoom(state_.getZoom()),
collisionGroups(crossSourceCollisions),
prevPlacement(std::move(prevPlacement_)) {
+ assert(prevPlacement || mapMode != MapMode::Continuous);
if (prevPlacement) {
prevPlacement->get()->prevPlacement = nullopt; // Only hold on to one placement back
}
@@ -533,13 +534,22 @@ void Placement::placeBucket(
}
void Placement::commit(TimePoint now, const double zoom) {
- assert(getPrevPlacement());
commitTime = now;
+ if (!getPrevPlacement()) {
+ assert(mapMode != MapMode::Continuous);
+ fadeStartTime = commitTime;
+ for (auto& jointPlacement : placements) {
+ opacities.emplace(
+ jointPlacement.first,
+ JointOpacityState(
+ jointPlacement.second.text, jointPlacement.second.icon, jointPlacement.second.skipFade));
+ }
+ return;
+ }
bool placementChanged = false;
prevZoomAdjustment = getPrevPlacement()->zoomAdjustment(zoom);
-
float increment = getPrevPlacement()->symbolFadeChange(commitTime);
// add the opacities from the current placement, and copy their current values from the previous placement
diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp
index e2d634c54b..4dd9011da4 100644
--- a/src/mbgl/text/placement.hpp
+++ b/src/mbgl/text/placement.hpp
@@ -116,7 +116,7 @@ public:
MapMode,
style::TransitionOptions,
const bool crossSourceCollisions,
- optional<Immutable<Placement>> prevPlacement);
+ optional<Immutable<Placement>> prevPlacement = nullopt);
void placeLayer(const RenderLayer&, const mat4&, bool showCollisionBoxes);
void commit(TimePoint, const double zoom);
void updateLayerBuckets(const RenderLayer&, const TransformState&, bool updateOpacities) const;