summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-01-16 12:05:11 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-01-22 14:30:26 +0200
commit769a822fec2090fc37e00344dc63d5a1c2e32ac2 (patch)
tree83fbd610bd9498b4032077c03592fbcd3d2f930a
parentd24c1d625af61328b8ada2d005ab3f9e659a2c69 (diff)
downloadqtlocation-mapboxgl-769a822fec2090fc37e00344dc63d5a1c2e32ac2.tar.gz
[core] Pass UpdateParameters to Placement constructor
-rw-r--r--src/mbgl/renderer/render_orchestrator.cpp13
-rw-r--r--src/mbgl/text/collision_index.cpp2
-rw-r--r--src/mbgl/text/collision_index.hpp2
-rw-r--r--src/mbgl/text/placement.cpp30
-rw-r--r--src/mbgl/text/placement.hpp18
5 files changed, 27 insertions, 38 deletions
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp
index 239ad19876..c77eaca37e 100644
--- a/src/mbgl/renderer/render_orchestrator.cpp
+++ b/src/mbgl/renderer/render_orchestrator.cpp
@@ -394,12 +394,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(
std::set<std::string> usedSymbolLayers;
if (renderTreeParameters->placementChanged) {
- Mutable<Placement> placement = makeMutable<Placement>(updateParameters->transformState,
- updateParameters->mode,
- updateParameters->transitionOptions,
- updateParameters->crossSourceCollisions,
- updateParameters->timePoint,
- placementController.getPlacement());
+ Mutable<Placement> placement = makeMutable<Placement>(updateParameters, placementController.getPlacement());
for (auto it = layersNeedPlacement.crbegin(); it != layersNeedPlacement.crend(); ++it) {
const RenderLayer& layer = *it;
@@ -425,11 +420,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(
crossTileSymbolIndex.reset();
renderTreeParameters->placementChanged = symbolBucketsChanged = !layersNeedPlacement.empty();
if (renderTreeParameters->placementChanged) {
- Mutable<Placement> placement = makeMutable<Placement>(updateParameters->transformState,
- updateParameters->mode,
- updateParameters->transitionOptions,
- updateParameters->crossSourceCollisions,
- updateParameters->timePoint);
+ Mutable<Placement> placement = makeMutable<Placement>(updateParameters);
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/collision_index.cpp b/src/mbgl/text/collision_index.cpp
index 50567ab895..e75bdf8ba9 100644
--- a/src/mbgl/text/collision_index.cpp
+++ b/src/mbgl/text/collision_index.cpp
@@ -26,7 +26,7 @@ static const float viewportPaddingDefault = 100;
// Viewport padding must be much larger for static tiles to avoid clipped labels.
static const float viewportPaddingForStaticTiles = 1024;
-CollisionIndex::CollisionIndex(const TransformState& transformState_, MapMode& mapMode)
+CollisionIndex::CollisionIndex(const TransformState& transformState_, MapMode mapMode)
: transformState(transformState_),
viewportPadding(mapMode == MapMode::Tile ? viewportPaddingForStaticTiles : viewportPaddingDefault),
collisionGrid(transformState.getSize().width + 2 * viewportPadding,
diff --git a/src/mbgl/text/collision_index.hpp b/src/mbgl/text/collision_index.hpp
index d1a77b5492..b9f3e9d88a 100644
--- a/src/mbgl/text/collision_index.hpp
+++ b/src/mbgl/text/collision_index.hpp
@@ -20,7 +20,7 @@ class CollisionIndex {
public:
using CollisionGrid = GridIndex<IndexedSubfeature>;
- explicit CollisionIndex(const TransformState&, MapMode&);
+ explicit CollisionIndex(const TransformState&, MapMode);
bool featureIntersectsTileBorders(const CollisionFeature& feature,
Point<float> shift,
const mat4& posMatrix,
diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp
index f3917a8fdb..5673ff5041 100644
--- a/src/mbgl/text/placement.cpp
+++ b/src/mbgl/text/placement.cpp
@@ -1,11 +1,12 @@
#include <mbgl/text/placement.hpp>
#include <mbgl/layout/symbol_layout.hpp>
+#include <mbgl/renderer/bucket.hpp>
+#include <mbgl/renderer/buckets/symbol_bucket.hpp>
#include <mbgl/renderer/render_layer.hpp>
#include <mbgl/renderer/render_tile.hpp>
+#include <mbgl/renderer/update_parameters.hpp>
#include <mbgl/tile/geometry_tile.hpp>
-#include <mbgl/renderer/buckets/symbol_bucket.hpp>
-#include <mbgl/renderer/bucket.hpp>
#include <mbgl/util/math.hpp>
#include <utility>
@@ -60,9 +61,7 @@ const CollisionGroups::CollisionGroup& CollisionGroups::get(const std::string& s
// PlacementController implemenation
-PlacementController::PlacementController()
- : placement(makeMutable<Placement>(
- TransformState{}, MapMode::Static, style::TransitionOptions{}, true, TimePoint(), nullopt)) {}
+PlacementController::PlacementController() : placement(makeMutable<Placement>()) {}
void PlacementController::setPlacement(Immutable<Placement> placement_) {
placement = std::move(placement_);
@@ -91,18 +90,15 @@ bool PlacementController::hasTransitions(TimePoint now) const {
// Placement implementation
-Placement::Placement(const TransformState& state_,
- MapMode mapMode_,
- style::TransitionOptions transitionOptions_,
- const bool crossSourceCollisions,
- TimePoint commitTime_,
+Placement::Placement(std::shared_ptr<const UpdateParameters> updateParameters_,
optional<Immutable<Placement>> prevPlacement_)
- : collisionIndex(state_, mapMode_),
- mapMode(mapMode_),
- transitionOptions(std::move(transitionOptions_)),
- commitTime(commitTime_),
- placementZoom(state_.getZoom()),
- collisionGroups(crossSourceCollisions),
+ : updateParameters(std::move(updateParameters_)),
+ collisionIndex(updateParameters->transformState, updateParameters->mode),
+ mapMode(updateParameters->mode),
+ transitionOptions(updateParameters->transitionOptions),
+ commitTime(updateParameters->timePoint),
+ placementZoom(updateParameters->transformState.getZoom()),
+ collisionGroups(updateParameters->crossSourceCollisions),
prevPlacement(std::move(prevPlacement_)) {
assert(prevPlacement || mapMode != MapMode::Continuous);
if (prevPlacement) {
@@ -110,6 +106,8 @@ Placement::Placement(const TransformState& state_,
}
}
+Placement::Placement() : collisionIndex({}, MapMode::Static), collisionGroups(true) {}
+
void Placement::placeLayer(const RenderLayer& layer, const mat4& projMatrix, bool showCollisionBoxes) {
std::set<uint32_t> seenCrossTileIDs;
for (const auto& item : layer.getPlacementData()) {
diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp
index dd46970780..04a0bc7f5d 100644
--- a/src/mbgl/text/placement.hpp
+++ b/src/mbgl/text/placement.hpp
@@ -12,6 +12,7 @@ namespace mbgl {
class SymbolBucket;
class SymbolInstance;
+class UpdateParameters;
enum class PlacedSymbolOrientation : bool;
class OpacityState {
@@ -112,12 +113,9 @@ private:
class Placement {
public:
- Placement(const TransformState&,
- MapMode,
- style::TransitionOptions,
- const bool crossSourceCollisions,
- TimePoint commitTime,
- optional<Immutable<Placement>> prevPlacement = nullopt);
+ Placement(std::shared_ptr<const UpdateParameters>, optional<Immutable<Placement>> prevPlacement = nullopt);
+ Placement();
+
void placeLayer(const RenderLayer&, const mat4&, bool showCollisionBoxes);
void commit();
void updateLayerBuckets(const RenderLayer&, const TransformState&, bool updateOpacities) const;
@@ -132,6 +130,7 @@ public:
float zoomAdjustment(const float zoom) const;
const RetainedQueryData& getQueryData(uint32_t bucketInstanceId) const;
+
private:
friend SymbolBucket;
void placeBucket(const SymbolBucket&, const BucketPlacementParameters&, std::set<uint32_t>& seenCrossTileIDs);
@@ -145,15 +144,16 @@ private:
void markUsedOrientation(SymbolBucket&, style::TextWritingModeType, const SymbolInstance&) const;
const Placement* getPrevPlacement() const { return prevPlacement ? prevPlacement->get() : nullptr; }
+ std::shared_ptr<const UpdateParameters> updateParameters;
CollisionIndex collisionIndex;
- MapMode mapMode;
+ MapMode mapMode = MapMode::Static;
style::TransitionOptions transitionOptions;
TimePoint fadeStartTime;
TimePoint commitTime;
- const float placementZoom;
- float prevZoomAdjustment = 0;
+ float placementZoom = 0.0f;
+ float prevZoomAdjustment = 0.0f;
std::unordered_map<uint32_t, JointPlacement> placements;
std::unordered_map<uint32_t, JointOpacityState> opacities;