diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-12-05 18:01:10 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-12-09 17:32:49 +0200 |
commit | 1829fb5e40d03ed053c019bdd324897e787431eb (patch) | |
tree | 83cbede1c49612a0535f531208157f2dcf747c36 /src | |
parent | ffd378c68e3bb47917468872cad03be7295e33fe (diff) | |
download | qtlocation-mapboxgl-1829fb5e40d03ed053c019bdd324897e787431eb.tar.gz |
[core] Placement::commit() handles absence of previuos placement
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/text/placement.cpp | 14 | ||||
-rw-r--r-- | src/mbgl/text/placement.hpp | 2 |
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; |