From a03f7b166b2fe68f63ca75337bd0ac0000cee135 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Wed, 22 May 2019 11:01:54 +0300 Subject: [core] RenderTile does not expose Tile RenderTile and Tile will be split when ochestration movces to a separate thread. This PR improves encapsulation of Tiles management: now performed within TilePyramid. --- src/mbgl/text/cross_tile_symbol_index.cpp | 2 +- src/mbgl/text/placement.cpp | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) (limited to 'src/mbgl/text') diff --git a/src/mbgl/text/cross_tile_symbol_index.cpp b/src/mbgl/text/cross_tile_symbol_index.cpp index 2ddb209878..b92bab861f 100644 --- a/src/mbgl/text/cross_tile_symbol_index.cpp +++ b/src/mbgl/text/cross_tile_symbol_index.cpp @@ -174,7 +174,7 @@ bool CrossTileSymbolIndex::addLayer(const RenderLayer& layer, float lng) { for (const auto& item : layer.getPlacementData()) { RenderTile& renderTile = item.tile; Bucket& bucket = item.bucket; - auto result = bucket.registerAtCrossTileIndex(layerIndex, renderTile.tile.id, maxCrossTileID); + auto result = bucket.registerAtCrossTileIndex(layerIndex, renderTile.getOverscaledTileID(), maxCrossTileID); assert(result.first != 0u); symbolBucketsChanged = symbolBucketsChanged || result.second; currentBucketIDs.insert(result.first); diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index 8dbb7fe346..dfe663a8a2 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -77,14 +77,12 @@ void Placement::placeLayer(const RenderLayer& layer, const mat4& projMatrix, boo for (const auto& item : layer.getPlacementData()) { RenderTile& renderTile = item.tile; - assert(renderTile.tile.kind == Tile::Kind::Geometry); - auto& geometryTile = static_cast(renderTile.tile); Bucket& bucket = item.bucket; const float pixelsToTileUnits = renderTile.id.pixelsToTileUnits(1, state.getZoom()); - - const float scale = std::pow(2, state.getZoom() - geometryTile.id.overscaledZ); - const float textPixelRatio = (util::tileSize * geometryTile.id.overscaleFactor()) / util::EXTENT; + const OverscaledTileID& overscaledID = renderTile.getOverscaledTileID(); + const float scale = std::pow(2, state.getZoom() - overscaledID.overscaledZ); + const float textPixelRatio = (util::tileSize * overscaledID.overscaleFactor()) / util::EXTENT; mat4 posMatrix; state.matrixFor(posMatrix, renderTile.id); @@ -102,7 +100,7 @@ void Placement::placeLayer(const RenderLayer& layer, const mat4& projMatrix, boo state, pixelsToTileUnits); - const auto& collisionGroup = collisionGroups.get(geometryTile.sourceID); + const auto& collisionGroup = collisionGroups.get(layer.baseImpl->source); BucketPlacementParameters params{ posMatrix, textLabelPlaneMatrix, @@ -110,7 +108,7 @@ void Placement::placeLayer(const RenderLayer& layer, const mat4& projMatrix, boo scale, textPixelRatio, showCollisionBoxes, - renderTile.tile.holdForFade(), + renderTile.holdForFade(), collisionGroup}; auto bucketInstanceId = bucket.place(*this, params, seenCrossTileIDs); assert(bucketInstanceId != 0u); @@ -119,9 +117,7 @@ void Placement::placeLayer(const RenderLayer& layer, const mat4& projMatrix, boo // matching FeatureIndex/data for querying purposes retainedQueryData.emplace(std::piecewise_construct, std::forward_as_tuple(bucketInstanceId), - std::forward_as_tuple(bucketInstanceId, geometryTile.getFeatureIndex(), geometryTile.id)); - - + std::forward_as_tuple(bucketInstanceId, renderTile.getFeatureIndex(), overscaledID)); } } @@ -439,7 +435,7 @@ void Placement::updateBucketDynamicVertices(SymbolBucket& bucket, const RenderTi bucket.hasVariablePlacement = false; const auto partiallyEvaluatedSize = bucket.textSizeBinder->evaluateForZoom(state.getZoom()); - const float tileScale = std::pow(2, state.getZoom() - tile.tile.id.overscaledZ); + const float tileScale = std::pow(2, state.getZoom() - tile.getOverscaledTileID().overscaledZ); const bool rotateWithMap = layout.get() == AlignmentType::Map; const bool pitchWithMap = layout.get() == AlignmentType::Map; const float pixelsToTileUnits = tile.id.pixelsToTileUnits(1.0, state.getZoom()); -- cgit v1.2.1