summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/layers
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-05-22 11:01:54 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-05-28 16:16:42 +0300
commita03f7b166b2fe68f63ca75337bd0ac0000cee135 (patch)
treef4435b998b5775a4596392bcc45bea020c09527e /src/mbgl/renderer/layers
parente5431d01817c0546aa0b971a7b0b33c9bbd87077 (diff)
downloadqtlocation-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.cpp2
-rw-r--r--src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp14
-rw-r--r--src/mbgl/renderer/layers/render_fill_layer.cpp15
-rw-r--r--src/mbgl/renderer/layers/render_heatmap_layer.cpp2
-rw-r--r--src/mbgl/renderer/layers/render_hillshade_layer.cpp4
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.cpp18
-rw-r--r--src/mbgl/renderer/layers/render_raster_layer.cpp4
-rw-r--r--src/mbgl/renderer/layers/render_symbol_layer.cpp22
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;