[core] Pass UpdateParameters to Placement constructor
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user