[core] Pass UpdateParameters to Placement constructor

This commit is contained in:
Mikhail Pozdnyakov
2020-01-16 12:05:11 +02:00
parent d24c1d625a
commit 769a822fec
5 changed files with 27 additions and 38 deletions

View File

@@ -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());

View File

@@ -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,

View File

@@ -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,

View File

@@ -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()) {

View File

@@ -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;