[core] Remove RenderLayerSymbolInterface
This commit is contained in:
@@ -49,6 +49,12 @@ struct LayerTypeInfo {
|
||||
* requires rendering on fading tiles. Contains \c FadingTiles::NotRequired otherwise.
|
||||
*/
|
||||
const enum class FadingTiles { Required, NotRequired } fadingTiles;
|
||||
|
||||
/**
|
||||
* @brief contains \c CrossTileIndex::Required if the corresponding layer type
|
||||
* requires cross-tile indexing and placement. Contains \c CrossTileIndex::NotRequired otherwise.
|
||||
*/
|
||||
const enum class CrossTileIndex { Required, NotRequired } crossTileIndex;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -632,7 +632,6 @@
|
||||
"mbgl/renderer/layers/render_fill_layer.hpp": "src/mbgl/renderer/layers/render_fill_layer.hpp",
|
||||
"mbgl/renderer/layers/render_heatmap_layer.hpp": "src/mbgl/renderer/layers/render_heatmap_layer.hpp",
|
||||
"mbgl/renderer/layers/render_hillshade_layer.hpp": "src/mbgl/renderer/layers/render_hillshade_layer.hpp",
|
||||
"mbgl/renderer/layers/render_layer_symbol_interface.hpp": "src/mbgl/renderer/layers/render_layer_symbol_interface.hpp",
|
||||
"mbgl/renderer/layers/render_line_layer.hpp": "src/mbgl/renderer/layers/render_line_layer.hpp",
|
||||
"mbgl/renderer/layers/render_raster_layer.hpp": "src/mbgl/renderer/layers/render_raster_layer.hpp",
|
||||
"mbgl/renderer/layers/render_symbol_layer.hpp": "src/mbgl/renderer/layers/render_symbol_layer.hpp",
|
||||
|
||||
@@ -156,7 +156,8 @@ void FeatureIndex::addFeature(
|
||||
assert(geometryTileFeature);
|
||||
}
|
||||
|
||||
if (!renderLayer->getSymbolInterface() &&
|
||||
bool needsCrossTileIndex = renderLayer->baseImpl->getTypeInfo()->crossTileIndex == style::LayerTypeInfo::CrossTileIndex::Required;
|
||||
if (!needsCrossTileIndex &&
|
||||
!renderLayer->queryIntersectsFeature(queryGeometry, *geometryTileFeature, tileID.z, transformState, pixelsToTileUnits, posMatrix)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
class RenderTile;
|
||||
class SymbolBucket;
|
||||
|
||||
class RenderLayerSymbolInterface {
|
||||
public:
|
||||
virtual const std::string& layerID() const = 0;
|
||||
virtual const std::vector<std::reference_wrapper<RenderTile>>& getRenderTiles() const = 0;
|
||||
virtual SymbolBucket* getSymbolBucket(const RenderTile&) const = 0;
|
||||
|
||||
protected:
|
||||
virtual ~RenderLayerSymbolInterface() = default;
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
@@ -412,22 +412,6 @@ bool RenderSymbolLayer::hasCrossfade() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
const std::string& RenderSymbolLayer::layerID() const {
|
||||
return RenderLayer::getID();
|
||||
}
|
||||
|
||||
const RenderLayerSymbolInterface* RenderSymbolLayer::getSymbolInterface() const {
|
||||
return this;
|
||||
}
|
||||
|
||||
const std::vector<std::reference_wrapper<RenderTile>>& RenderSymbolLayer::getRenderTiles() const {
|
||||
return renderTiles;
|
||||
}
|
||||
|
||||
SymbolBucket* RenderSymbolLayer::getSymbolBucket(const RenderTile& renderTile) const {
|
||||
return renderTile.tile.getBucket<SymbolBucket>(*baseImpl);
|
||||
}
|
||||
|
||||
void RenderSymbolLayer::upload(gfx::UploadPass& uploadPass, UploadParameters& uploadParameters) {
|
||||
for (const RenderTile& tile : renderTiles) {
|
||||
const LayerRenderData* renderData = tile.tile.getLayerRenderData(*baseImpl);
|
||||
@@ -670,17 +654,18 @@ style::TextPaintProperties::PossiblyEvaluated RenderSymbolLayer::textPaintProper
|
||||
|
||||
void RenderSymbolLayer::setRenderTiles(RenderTiles tiles, const TransformState& state) {
|
||||
renderTiles = std::move(tiles);
|
||||
const auto comp = [bearing = state.getBearing()](const RenderTile& a, const RenderTile& b) {
|
||||
Point<float> pa(a.id.canonical.x, a.id.canonical.y);
|
||||
Point<float> pb(b.id.canonical.x, b.id.canonical.y);
|
||||
|
||||
auto par = util::rotate(pa, bearing);
|
||||
auto pbr = util::rotate(pb, bearing);
|
||||
|
||||
return std::tie(b.id.canonical.z, par.y, par.x) < std::tie(a.id.canonical.z, pbr.y, pbr.x);
|
||||
};
|
||||
// Sort symbol tiles in opposite y position, so tiles with overlapping symbols are drawn
|
||||
// on top of each other, with lower symbols being drawn on top of higher symbols.
|
||||
std::sort(renderTiles.begin(), renderTiles.end(), [&state](const auto& a, const auto& b) {
|
||||
Point<float> pa(a.get().id.canonical.x, a.get().id.canonical.y);
|
||||
Point<float> pb(b.get().id.canonical.x, b.get().id.canonical.y);
|
||||
|
||||
auto par = util::rotate(pa, state.getBearing());
|
||||
auto pbr = util::rotate(pb, state.getBearing());
|
||||
|
||||
return std::tie(b.get().id.canonical.z, par.y, par.x) < std::tie(a.get().id.canonical.z, pbr.y, pbr.x);
|
||||
});
|
||||
std::sort(renderTiles.begin(), renderTiles.end(), comp);
|
||||
|
||||
placementData.clear();
|
||||
for (RenderTile& renderTile : renderTiles) {
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
#include <mbgl/text/glyph.hpp>
|
||||
#include <mbgl/renderer/render_layer.hpp>
|
||||
#include <mbgl/renderer/layers/render_layer_symbol_interface.hpp>
|
||||
#include <mbgl/style/image_impl.hpp>
|
||||
#include <mbgl/style/layers/symbol_layer_impl.hpp>
|
||||
#include <mbgl/style/layers/symbol_layer_properties.hpp>
|
||||
@@ -53,7 +52,7 @@ public:
|
||||
|
||||
} // namespace style
|
||||
|
||||
class RenderSymbolLayer final: public RenderLayer, public RenderLayerSymbolInterface {
|
||||
class RenderSymbolLayer final: public RenderLayer {
|
||||
public:
|
||||
explicit RenderSymbolLayer(Immutable<style::SymbolLayer::Impl>);
|
||||
~RenderSymbolLayer() override;
|
||||
@@ -69,12 +68,6 @@ private:
|
||||
void upload(gfx::UploadPass&, UploadParameters&) override;
|
||||
void render(PaintParameters&, RenderSource*) override;
|
||||
void setRenderTiles(RenderTiles, const TransformState&) override;
|
||||
|
||||
// RenderLayerSymbolInterface overrides
|
||||
const RenderLayerSymbolInterface* getSymbolInterface() const override;
|
||||
const std::string& layerID() const override;
|
||||
const std::vector<std::reference_wrapper<RenderTile>>& getRenderTiles() const override;
|
||||
SymbolBucket* getSymbolBucket(const RenderTile&) const override;
|
||||
|
||||
// Paint properties
|
||||
style::SymbolPaintProperties::Unevaluated unevaluated;
|
||||
|
||||
@@ -21,6 +21,11 @@ void RenderLayer::transition(const TransitionParameters& parameters, Immutable<s
|
||||
transition(parameters);
|
||||
}
|
||||
|
||||
bool RenderLayer::needsPlacement() const {
|
||||
return baseImpl->getTypeInfo()->crossTileIndex == style::LayerTypeInfo::CrossTileIndex::Required
|
||||
&& !placementData.empty();
|
||||
}
|
||||
|
||||
const std::string& RenderLayer::getID() const {
|
||||
return baseImpl->id;
|
||||
}
|
||||
@@ -43,10 +48,6 @@ void RenderLayer::setRenderTiles(RenderTiles tiles, const TransformState&) {
|
||||
renderTiles = filterRenderTiles(std::move(tiles));
|
||||
}
|
||||
|
||||
const RenderLayerSymbolInterface* RenderLayer::getSymbolInterface() const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
optional<Color> RenderLayer::getSolidBackground() const {
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ class PropertyEvaluationParameters;
|
||||
class UploadParameters;
|
||||
class PaintParameters;
|
||||
class RenderSource;
|
||||
class RenderLayerSymbolInterface;
|
||||
class RenderTile;
|
||||
class TransformState;
|
||||
class GeometryTile;
|
||||
@@ -58,8 +57,8 @@ public:
|
||||
// Returns true if the layer has a pattern property and is actively crossfading.
|
||||
virtual bool hasCrossfade() const = 0;
|
||||
|
||||
// Returns instance of RenderLayerSymbolInterface if RenderLayer supports it.
|
||||
virtual const RenderLayerSymbolInterface* getSymbolInterface() const;
|
||||
// Returns true is the layer is subject to placement.
|
||||
bool needsPlacement() const;
|
||||
|
||||
const std::string& getID() const;
|
||||
|
||||
|
||||
@@ -224,7 +224,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
|
||||
};
|
||||
|
||||
std::set<RenderItem> renderItems;
|
||||
std::vector<std::reference_wrapper<RenderLayer>> symbolLayers;
|
||||
std::vector<std::reference_wrapper<RenderLayer>> layersNeedPlacement;
|
||||
auto renderItemsEmplaceHint = renderItems.begin();
|
||||
|
||||
// Update all sources and initialize renderItems.
|
||||
@@ -298,8 +298,8 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
|
||||
}
|
||||
RenderLayer& renderLayer = renderItem.layer;
|
||||
renderLayer.setRenderTiles(renderItem.source->getRenderTiles(), updateParameters.transformState);
|
||||
if (const RenderLayerSymbolInterface* symbolLayer = renderLayer.getSymbolInterface()) {
|
||||
symbolLayers.push_back(renderLayer);
|
||||
if (renderLayer.needsPlacement()) {
|
||||
layersNeedPlacement.emplace_back(renderLayer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -321,13 +321,13 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
|
||||
updateParameters.transformState.getProjMatrix(projMatrix);
|
||||
}
|
||||
|
||||
for (auto it = symbolLayers.rbegin(); it != symbolLayers.rend(); ++it) {
|
||||
const RenderLayer& symbolLayer = *it;
|
||||
if (crossTileSymbolIndex.addLayer(symbolLayer, updateParameters.transformState.getLatLng().longitude())) symbolBucketsChanged = true;
|
||||
for (auto it = layersNeedPlacement.rbegin(); it != layersNeedPlacement.rend(); ++it) {
|
||||
const RenderLayer& layer = *it;
|
||||
if (crossTileSymbolIndex.addLayer(layer, updateParameters.transformState.getLatLng().longitude())) symbolBucketsChanged = true;
|
||||
|
||||
if (placementChanged) {
|
||||
usedSymbolLayers.insert(symbolLayer.getID());
|
||||
placement->placeLayer(symbolLayer, projMatrix, updateParameters.debugOptions & MapDebugOptions::Collision);
|
||||
usedSymbolLayers.insert(layer.getID());
|
||||
placement->placeLayer(layer, projMatrix, updateParameters.debugOptions & MapDebugOptions::Collision);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -340,9 +340,8 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
|
||||
}
|
||||
|
||||
if (placementChanged || symbolBucketsChanged) {
|
||||
for (auto it = symbolLayers.rbegin(); it != symbolLayers.rend(); ++it) {
|
||||
const RenderLayer& symbolLayer = *it;
|
||||
placement->updateLayerOpacities(symbolLayer);
|
||||
for (auto it = layersNeedPlacement.rbegin(); it != layersNeedPlacement.rend(); ++it) {
|
||||
placement->updateLayerOpacities(*it);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ const LayerTypeInfo* BackgroundLayer::Impl::staticTypeInfo() noexcept {
|
||||
LayerTypeInfo::Source::NotRequired,
|
||||
LayerTypeInfo::Pass3D::NotRequired,
|
||||
LayerTypeInfo::Layout::NotRequired,
|
||||
LayerTypeInfo::FadingTiles::NotRequired
|
||||
LayerTypeInfo::FadingTiles::NotRequired,
|
||||
LayerTypeInfo::CrossTileIndex::NotRequired
|
||||
};
|
||||
return &typeInfo;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ const LayerTypeInfo* CircleLayer::Impl::staticTypeInfo() noexcept {
|
||||
LayerTypeInfo::Source::Required,
|
||||
LayerTypeInfo::Pass3D::NotRequired,
|
||||
LayerTypeInfo::Layout::NotRequired,
|
||||
LayerTypeInfo::FadingTiles::NotRequired
|
||||
LayerTypeInfo::FadingTiles::NotRequired,
|
||||
LayerTypeInfo::CrossTileIndex::NotRequired
|
||||
};
|
||||
return &typeInfo;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,8 @@ namespace {
|
||||
LayerTypeInfo::Source::NotRequired,
|
||||
LayerTypeInfo::Pass3D::NotRequired,
|
||||
LayerTypeInfo::Layout::NotRequired,
|
||||
LayerTypeInfo::FadingTiles::NotRequired };
|
||||
LayerTypeInfo::FadingTiles::NotRequired,
|
||||
LayerTypeInfo::CrossTileIndex::NotRequired };
|
||||
} // namespace
|
||||
|
||||
CustomLayer::CustomLayer(const std::string& layerID,
|
||||
|
||||
@@ -23,7 +23,8 @@ const LayerTypeInfo* FillExtrusionLayer::Impl::staticTypeInfo() noexcept {
|
||||
LayerTypeInfo::Source::Required,
|
||||
LayerTypeInfo::Pass3D::Required,
|
||||
LayerTypeInfo::Layout::Required,
|
||||
LayerTypeInfo::FadingTiles::NotRequired
|
||||
LayerTypeInfo::FadingTiles::NotRequired,
|
||||
LayerTypeInfo::CrossTileIndex::NotRequired
|
||||
};
|
||||
return &typeInfo;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ const LayerTypeInfo* FillLayer::Impl::staticTypeInfo() noexcept {
|
||||
LayerTypeInfo::Source::Required,
|
||||
LayerTypeInfo::Pass3D::NotRequired,
|
||||
LayerTypeInfo::Layout::Required,
|
||||
LayerTypeInfo::FadingTiles::NotRequired
|
||||
LayerTypeInfo::FadingTiles::NotRequired,
|
||||
LayerTypeInfo::CrossTileIndex::NotRequired
|
||||
};
|
||||
return &typeInfo;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ const LayerTypeInfo* HeatmapLayer::Impl::staticTypeInfo() noexcept {
|
||||
LayerTypeInfo::Source::Required,
|
||||
LayerTypeInfo::Pass3D::Required,
|
||||
LayerTypeInfo::Layout::NotRequired,
|
||||
LayerTypeInfo::FadingTiles::NotRequired
|
||||
LayerTypeInfo::FadingTiles::NotRequired,
|
||||
LayerTypeInfo::CrossTileIndex::NotRequired
|
||||
};
|
||||
return &typeInfo;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ const LayerTypeInfo* HillshadeLayer::Impl::staticTypeInfo() noexcept {
|
||||
LayerTypeInfo::Source::Required,
|
||||
LayerTypeInfo::Pass3D::Required,
|
||||
LayerTypeInfo::Layout::NotRequired,
|
||||
LayerTypeInfo::FadingTiles::NotRequired
|
||||
LayerTypeInfo::FadingTiles::NotRequired,
|
||||
LayerTypeInfo::CrossTileIndex::NotRequired
|
||||
};
|
||||
return &typeInfo;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,8 @@ let layerCapabilities = {};
|
||||
let defaults = { caps: { 'Source': 'NotRequired',
|
||||
'Pass3D': 'NotRequired',
|
||||
'Layout': 'NotRequired',
|
||||
'FadingTiles': 'NotRequired'
|
||||
'FadingTiles': 'NotRequired',
|
||||
'CrossTileIndex': 'NotRequired'
|
||||
},
|
||||
require: function(cap) {
|
||||
let copy = Object.assign({}, this);
|
||||
@@ -55,6 +56,7 @@ layerCapabilities['hillshade'] = defaults.require('Source')
|
||||
layerCapabilities['symbol'] = defaults.require('Source')
|
||||
.require('Layout')
|
||||
.require('FadingTiles')
|
||||
.require('CrossTileIndex')
|
||||
.finalize();
|
||||
layerCapabilities['circle'] = defaults.require('Source').finalize();
|
||||
layerCapabilities['line'] = layerCapabilities['fill'];
|
||||
|
||||
@@ -23,7 +23,8 @@ const LayerTypeInfo* LineLayer::Impl::staticTypeInfo() noexcept {
|
||||
LayerTypeInfo::Source::Required,
|
||||
LayerTypeInfo::Pass3D::NotRequired,
|
||||
LayerTypeInfo::Layout::Required,
|
||||
LayerTypeInfo::FadingTiles::NotRequired
|
||||
LayerTypeInfo::FadingTiles::NotRequired,
|
||||
LayerTypeInfo::CrossTileIndex::NotRequired
|
||||
};
|
||||
return &typeInfo;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ const LayerTypeInfo* RasterLayer::Impl::staticTypeInfo() noexcept {
|
||||
LayerTypeInfo::Source::Required,
|
||||
LayerTypeInfo::Pass3D::NotRequired,
|
||||
LayerTypeInfo::Layout::NotRequired,
|
||||
LayerTypeInfo::FadingTiles::NotRequired
|
||||
LayerTypeInfo::FadingTiles::NotRequired,
|
||||
LayerTypeInfo::CrossTileIndex::NotRequired
|
||||
};
|
||||
return &typeInfo;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ const LayerTypeInfo* SymbolLayer::Impl::staticTypeInfo() noexcept {
|
||||
LayerTypeInfo::Source::Required,
|
||||
LayerTypeInfo::Pass3D::NotRequired,
|
||||
LayerTypeInfo::Layout::Required,
|
||||
LayerTypeInfo::FadingTiles::Required
|
||||
LayerTypeInfo::FadingTiles::Required,
|
||||
LayerTypeInfo::CrossTileIndex::Required
|
||||
};
|
||||
return &typeInfo;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include <mbgl/text/cross_tile_symbol_index.hpp>
|
||||
#include <mbgl/layout/symbol_instance.hpp>
|
||||
#include <mbgl/renderer/buckets/symbol_bucket.hpp>
|
||||
#include <mbgl/renderer/layers/render_layer_symbol_interface.hpp>
|
||||
#include <mbgl/renderer/render_tile.hpp>
|
||||
#include <mbgl/tile/tile.hpp>
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
#include <mbgl/layout/symbol_layout.hpp>
|
||||
#include <mbgl/renderer/render_layer.hpp>
|
||||
#include <mbgl/renderer/layers/render_layer_symbol_interface.hpp>
|
||||
#include <mbgl/renderer/render_tile.hpp>
|
||||
#include <mbgl/tile/geometry_tile.hpp>
|
||||
#include <mbgl/renderer/buckets/symbol_bucket.hpp>
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
class RenderLayerSymbolInterface;
|
||||
class SymbolBucket;
|
||||
class SymbolInstance;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user