diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-05-22 11:01:54 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-05-28 16:16:42 +0300 |
commit | a03f7b166b2fe68f63ca75337bd0ac0000cee135 (patch) | |
tree | f4435b998b5775a4596392bcc45bea020c09527e /src/mbgl/renderer/layers | |
parent | e5431d01817c0546aa0b971a7b0b33c9bbd87077 (diff) | |
download | qtlocation-mapboxgl-a03f7b166b2fe68f63ca75337bd0ac0000cee135.tar.gz |
[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.
Diffstat (limited to 'src/mbgl/renderer/layers')
-rw-r--r-- | src/mbgl/renderer/layers/render_circle_layer.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp | 14 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_layer.cpp | 15 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_heatmap_layer.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_hillshade_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_line_layer.cpp | 18 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_raster_layer.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.cpp | 22 |
8 files changed, 36 insertions, 45 deletions
diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index b5bbc4b22e..e7496df074 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -58,7 +58,7 @@ void RenderCircleLayer::render(PaintParameters& parameters) { } for (const RenderTile& tile : renderTiles) { - const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl); + const LayerRenderData* renderData = tile.getLayerRenderData(*baseImpl); if (!renderData) { continue; } diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp index a21f62c6a6..1a2e623dd5 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp @@ -115,7 +115,7 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters) { // Draw solid color extrusions auto drawTiles = [&](const gfx::StencilMode& stencilMode_, const gfx::ColorMode& colorMode_) { for (const RenderTile& tile : renderTiles) { - const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl); + const LayerRenderData* renderData = tile.getLayerRenderData(*baseImpl); if (!renderData) { continue; } @@ -160,15 +160,13 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters) { const auto fillPatternValue = evaluated.get<FillExtrusionPattern>().constantOr(mbgl::Faded<std::basic_string<char> >{"", ""}); auto drawTiles = [&](const gfx::StencilMode& stencilMode_, const gfx::ColorMode& colorMode_) { for (const RenderTile& tile : renderTiles) { - const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl); + const LayerRenderData* renderData = tile.getLayerRenderData(*baseImpl); if (!renderData) { continue; } auto& bucket = static_cast<FillExtrusionBucket&>(*renderData->bucket); - - auto& geometryTile = static_cast<GeometryTile&>(tile.tile); - optional<ImagePosition> patternPosA = geometryTile.getPattern(fillPatternValue.from); - optional<ImagePosition> patternPosB = geometryTile.getPattern(fillPatternValue.to); + optional<ImagePosition> patternPosA = tile.getPattern(fillPatternValue.from); + optional<ImagePosition> patternPosB = tile.getPattern(fillPatternValue.to); draw( parameters.programs.getFillExtrusionLayerPrograms().fillExtrusionPattern, @@ -181,7 +179,7 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters) { tile.translatedClipMatrix(evaluated.get<FillExtrusionTranslate>(), evaluated.get<FillExtrusionTranslateAnchor>(), parameters.state), - geometryTile.iconAtlasTexture->size, + tile.getIconAtlasTexture()->size, crossfade, tile.id, parameters.state, @@ -193,7 +191,7 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters) { patternPosA, patternPosB, FillExtrusionPatternProgram::TextureBindings{ - textures::image::Value{ geometryTile.iconAtlasTexture->getResource(), gfx::TextureFilterType::Linear }, + textures::image::Value{ tile.getIconAtlasTexture()->getResource(), gfx::TextureFilterType::Linear }, } ); } diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index 73b6c3d596..64e0f0bba1 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -76,7 +76,7 @@ void RenderFillLayer::render(PaintParameters& parameters) { if (unevaluated.get<FillPattern>().isUndefined()) { parameters.renderTileClippingMasks(renderTiles); for (const RenderTile& tile : renderTiles) { - const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl); + const LayerRenderData* renderData = tile.getLayerRenderData(*baseImpl); if (!renderData) { continue; } @@ -163,7 +163,7 @@ void RenderFillLayer::render(PaintParameters& parameters) { parameters.renderTileClippingMasks(renderTiles); for (const RenderTile& tile : renderTiles) { - const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl); + const LayerRenderData* renderData = tile.getLayerRenderData(*baseImpl); if (!renderData) { continue; } @@ -172,9 +172,8 @@ void RenderFillLayer::render(PaintParameters& parameters) { const auto& crossfade = getCrossfade<FillLayerProperties>(renderData->layerProperties); const auto& fillPatternValue = evaluated.get<FillPattern>().constantOr(Faded<std::basic_string<char>>{"", ""}); - auto& geometryTile = static_cast<GeometryTile&>(tile.tile); - optional<ImagePosition> patternPosA = geometryTile.getPattern(fillPatternValue.from); - optional<ImagePosition> patternPosB = geometryTile.getPattern(fillPatternValue.to); + optional<ImagePosition> patternPosA = tile.getPattern(fillPatternValue.from); + optional<ImagePosition> patternPosB = tile.getPattern(fillPatternValue.to); auto draw = [&] (auto& programInstance, const auto& drawMode, @@ -191,7 +190,7 @@ void RenderFillLayer::render(PaintParameters& parameters) { evaluated.get<FillTranslateAnchor>(), parameters.state), parameters.backend.getDefaultRenderable().getSize(), - geometryTile.iconAtlasTexture->size, + tile.getIconAtlasTexture()->size, crossfade, tile.id, parameters.state, @@ -233,7 +232,7 @@ void RenderFillLayer::render(PaintParameters& parameters) { *bucket.triangleIndexBuffer, bucket.triangleSegments, FillPatternProgram::TextureBindings{ - textures::image::Value{ geometryTile.iconAtlasTexture->getResource(), gfx::TextureFilterType::Linear }, + textures::image::Value{ tile.getIconAtlasTexture()->getResource(), gfx::TextureFilterType::Linear }, }); } if (evaluated.get<FillAntialias>() && unevaluated.get<FillOutlineColor>().isUndefined()) { @@ -243,7 +242,7 @@ void RenderFillLayer::render(PaintParameters& parameters) { *bucket.lineIndexBuffer, bucket.lineSegments, FillOutlinePatternProgram::TextureBindings{ - textures::image::Value{ geometryTile.iconAtlasTexture->getResource(), gfx::TextureFilterType::Linear }, + textures::image::Value{ tile.getIconAtlasTexture()->getResource(), gfx::TextureFilterType::Linear }, }); } } diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index 2c071d1fcf..ba6e6b7a26 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -94,7 +94,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters) { "heatmap texture", { *renderTexture, Color{ 0.0f, 0.0f, 0.0f, 1.0f }, {}, {} }); for (const RenderTile& tile : renderTiles) { - const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl); + const LayerRenderData* renderData = tile.getLayerRenderData(*baseImpl); if (!renderData) { continue; } diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.cpp b/src/mbgl/renderer/layers/render_hillshade_layer.cpp index b271cd478f..b3c01941b9 100644 --- a/src/mbgl/renderer/layers/render_hillshade_layer.cpp +++ b/src/mbgl/renderer/layers/render_hillshade_layer.cpp @@ -129,11 +129,11 @@ void RenderHillshadeLayer::render(PaintParameters& parameters) { matrix::translate(mat, mat, 0, -util::EXTENT, 0); for (const RenderTile& tile : renderTiles) { - auto bucket_ = tile.tile.getBucket<HillshadeBucket>(*baseImpl); + auto* bucket_ = tile.getBucket(*baseImpl); if (!bucket_) { continue; } - HillshadeBucket& bucket = *bucket_; + auto& bucket = static_cast<HillshadeBucket&>(*bucket_); if (!bucket.hasData()){ continue; diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index 5b98c75a3e..2520386df8 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -61,7 +61,7 @@ bool RenderLineLayer::hasCrossfade() const { void RenderLineLayer::upload(gfx::UploadPass& uploadPass, UploadParameters& uploadParameters) { for (const RenderTile& tile : renderTiles) { - const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl); + const LayerRenderData* renderData = tile.getLayerRenderData(*baseImpl); if (!renderData) { continue; } @@ -77,11 +77,10 @@ void RenderLineLayer::upload(gfx::UploadPass& uploadPass, UploadParameters& uplo } else if (!unevaluated.get<LinePattern>().isUndefined()) { const auto& linePatternValue = evaluated.get<LinePattern>().constantOr(Faded<std::basic_string<char>>{ "", ""}); - auto& geometryTile = static_cast<GeometryTile&>(tile.tile); // Ensures that the pattern gets added and uplodated to the atlas. - geometryTile.getPattern(linePatternValue.from); - geometryTile.getPattern(linePatternValue.to); + tile.getPattern(linePatternValue.from); + tile.getPattern(linePatternValue.to); } else if (!unevaluated.get<LineGradient>().getValue().isUndefined()) { if (!colorRampTexture) { @@ -99,7 +98,7 @@ void RenderLineLayer::render(PaintParameters& parameters) { parameters.renderTileClippingMasks(renderTiles); for (const RenderTile& tile : renderTiles) { - const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl); + const LayerRenderData* renderData = tile.getLayerRenderData(*baseImpl); if (!renderData) { continue; } @@ -171,11 +170,10 @@ void RenderLineLayer::render(PaintParameters& parameters) { } else if (!unevaluated.get<LinePattern>().isUndefined()) { const auto& linePatternValue = evaluated.get<LinePattern>().constantOr(Faded<std::basic_string<char>>{ "", ""}); - auto& geometryTile = static_cast<GeometryTile&>(tile.tile); - const Size texsize = geometryTile.iconAtlasTexture->size; + const Size& texsize = tile.getIconAtlasTexture()->size; - optional<ImagePosition> posA = geometryTile.getPattern(linePatternValue.from); - optional<ImagePosition> posB = geometryTile.getPattern(linePatternValue.to); + optional<ImagePosition> posA = tile.getPattern(linePatternValue.from); + optional<ImagePosition> posB = tile.getPattern(linePatternValue.to); draw(parameters.programs.getLineLayerPrograms().linePattern, LinePatternProgram::layoutUniformValues( @@ -189,7 +187,7 @@ void RenderLineLayer::render(PaintParameters& parameters) { posA, posB, LinePatternProgram::TextureBindings{ - textures::image::Value{ geometryTile.iconAtlasTexture->getResource(), gfx::TextureFilterType::Linear }, + textures::image::Value{ tile.getIconAtlasTexture()->getResource(), gfx::TextureFilterType::Linear }, }); } else if (!unevaluated.get<LineGradient>().getValue().isUndefined()) { assert(colorRampTexture); diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index ade5cbb4e1..af9022189a 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -159,11 +159,11 @@ void RenderRasterLayer::render(PaintParameters& parameters) { } } else { for (const RenderTile& tile : renderTiles) { - auto bucket_ = tile.tile.getBucket<RasterBucket>(*baseImpl); + auto* bucket_ = tile.getBucket(*baseImpl); if (!bucket_) { continue; } - RasterBucket& bucket = *bucket_; + auto& bucket = static_cast<RasterBucket&>(*bucket_); if (!bucket.hasData()) continue; diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index dc67dea7e3..235f0dfdfb 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -111,8 +111,6 @@ void drawIcon(const DrawFn& draw, SegmentsWrapper iconSegments, const SymbolBucket::PaintProperties& bucketPaintProperties, const PaintParameters& parameters) { - assert(tile.tile.kind == Tile::Kind::Geometry); - auto& geometryTile = static_cast<GeometryTile&>(tile.tile); auto& bucket = static_cast<SymbolBucket&>(*renderData.bucket); const auto& evaluated = getEvaluated<SymbolLayerProperties>(renderData.layerProperties); const auto& layout = bucket.layout; @@ -125,14 +123,14 @@ void drawIcon(const DrawFn& draw, const bool iconScaled = layout.get<IconSize>().constantOr(1.0) != 1.0 || bucket.iconsNeedLinear; const bool iconTransformed = values.rotationAlignment == AlignmentType::Map || parameters.state.getPitch() != 0; - const gfx::TextureBinding textureBinding{ geometryTile.iconAtlasTexture->getResource(), + const gfx::TextureBinding textureBinding{ tile.getIconAtlasTexture()->getResource(), bucket.sdfIcons || parameters.state.isChanging() || iconScaled || iconTransformed ? gfx::TextureFilterType::Linear : gfx::TextureFilterType::Nearest }; - const Size iconSize = geometryTile.iconAtlasTexture->size; + const Size& iconSize = tile.getIconAtlasTexture()->size; if (bucket.sdfIcons) { if (values.hasHalo) { @@ -187,13 +185,11 @@ void drawText(const DrawFn& draw, SegmentsWrapper textSegments, const SymbolBucket::PaintProperties& bucketPaintProperties, const PaintParameters& parameters) { - assert(tile.tile.kind == Tile::Kind::Geometry); - auto& geometryTile = static_cast<GeometryTile&>(tile.tile); auto& bucket = static_cast<SymbolBucket&>(*renderData.bucket); const auto& evaluated = getEvaluated<SymbolLayerProperties>(renderData.layerProperties); const auto& layout = bucket.layout; - const gfx::TextureBinding textureBinding{ geometryTile.glyphAtlasTexture->getResource(), + const gfx::TextureBinding textureBinding{ tile.getGlyphAtlasTexture()->getResource(), gfx::TextureFilterType::Linear }; auto values = textPropertyValues(evaluated, layout); @@ -202,7 +198,7 @@ void drawText(const DrawFn& draw, const bool alongLine = layout.get<SymbolPlacement>() != SymbolPlacementType::Point && layout.get<TextRotationAlignment>() == AlignmentType::Map; - const Size texsize = geometryTile.glyphAtlasTexture->size; + const Size& texsize = tile.getGlyphAtlasTexture()->size; if (values.hasHalo) { draw(parameters.programs.getSymbolLayerPrograms().symbolGlyph, @@ -363,7 +359,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters) { }; for (const RenderTile& tile : renderTiles) { - const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl); + const LayerRenderData* renderData = tile.getLayerRenderData(*baseImpl); if (!renderData) { continue; } @@ -399,7 +395,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters) { static const CollisionBoxProgram::Binders paintAttributeData(properties, 0); auto pixelRatio = tile.id.pixelsToTileUnits(1, parameters.state.getZoom()); - const float scale = std::pow(2, parameters.state.getZoom() - tile.tile.id.overscaledZ); + const float scale = std::pow(2, parameters.state.getZoom() - tile.getOverscaledTileID().overscaledZ); std::array<float,2> extrudeScale = {{ parameters.pixelsToGLUnits[0] / (pixelRatio * scale), @@ -435,7 +431,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters) { static const CollisionBoxProgram::Binders paintAttributeData(properties, 0); auto pixelRatio = tile.id.pixelsToTileUnits(1, parameters.state.getZoom()); - const float scale = std::pow(2, parameters.state.getZoom() - tile.tile.id.overscaledZ); + const float scale = std::pow(2, parameters.state.getZoom() - tile.getOverscaledTileID().overscaledZ); std::array<float,2> extrudeScale = {{ parameters.pixelsToGLUnits[0] / (pixelRatio * scale), @@ -453,7 +449,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters) { CollisionCircleProgram::LayoutUniformValues { uniforms::matrix::Value( tile.matrix ), uniforms::extrude_scale::Value( extrudeScale ), - uniforms::overscale_factor::Value( float(tile.tile.id.overscaleFactor()) ), + uniforms::overscale_factor::Value( float(tile.getOverscaledTileID().overscaleFactor()) ), uniforms::camera_to_center_distance::Value( parameters.state.getCameraToCenterDistance() ) }, *bucket.collisionCircle.vertexBuffer, @@ -523,7 +519,7 @@ void RenderSymbolLayer::prepare(const LayerPrepareParameters& params) { placementData.clear(); for (RenderTile& renderTile : renderTiles) { - auto bucket = renderTile.tile.getBucket<SymbolBucket>(*baseImpl); + auto* bucket = static_cast<SymbolBucket*>(renderTile.getBucket(*baseImpl)); if (bucket && bucket->bucketLeaderID == getID()) { auto& layout = bucket->layout; bool pitchWithMap = layout.get<style::TextPitchAlignment>() == style::AlignmentType::Map; |