[core] RenderLayer::setRenderTiles(RenderTiles) -> prepare(LayerPrepareParameters)

RenderLayer::prepare() is responsible for the complete initialization of a render
layer, so that it can render.
This commit is contained in:
Mikhail Pozdnyakov
2019-05-19 12:09:50 +03:00
parent 84d3b5f899
commit 25093370e2
5 changed files with 18 additions and 10 deletions

View File

@@ -2,6 +2,7 @@
#include <mbgl/renderer/buckets/symbol_bucket.hpp>
#include <mbgl/renderer/bucket_parameters.hpp>
#include <mbgl/renderer/property_evaluation_parameters.hpp>
#include <mbgl/renderer/render_source.hpp>
#include <mbgl/renderer/render_tile.hpp>
#include <mbgl/renderer/upload_parameters.hpp>
#include <mbgl/renderer/paint_parameters.hpp>
@@ -652,9 +653,9 @@ 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) {
void RenderSymbolLayer::prepare(const LayerPrepareParameters& params) {
renderTiles = params.source->getRenderTiles();
const auto comp = [bearing = params.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);

View File

@@ -67,7 +67,7 @@ private:
bool hasCrossfade() const override;
void upload(gfx::UploadPass&, UploadParameters&) override;
void render(PaintParameters&, RenderSource*) override;
void setRenderTiles(RenderTiles, const TransformState&) override;
void prepare(const LayerPrepareParameters&) override;
// Paint properties
style::SymbolPaintProperties::Unevaluated unevaluated;

View File

@@ -1,5 +1,6 @@
#include <mbgl/renderer/render_layer.hpp>
#include <mbgl/renderer/paint_parameters.hpp>
#include <mbgl/renderer/render_source.hpp>
#include <mbgl/renderer/render_tile.hpp>
#include <mbgl/style/types.hpp>
#include <mbgl/style/layer.hpp>
@@ -44,8 +45,9 @@ bool RenderLayer::supportsZoom(float zoom) const {
return baseImpl->minZoom <= zoom && baseImpl->maxZoom >= zoom;
}
void RenderLayer::setRenderTiles(RenderTiles tiles, const TransformState&) {
renderTiles = filterRenderTiles(std::move(tiles));
void RenderLayer::prepare(const LayerPrepareParameters& params) {
assert(params.source);
renderTiles = filterRenderTiles(params.source->getRenderTiles());
}
optional<Color> RenderLayer::getSolidBackground() const {

View File

@@ -34,6 +34,12 @@ public:
bool rotateWithMap;
};
class LayerPrepareParameters {
public:
RenderSource* source;
const TransformState& state;
};
class RenderLayer {
protected:
RenderLayer(Immutable<style::LayerProperties>);
@@ -84,8 +90,7 @@ public:
const float,
const mat4&) const { return false; };
using RenderTiles = std::vector<std::reference_wrapper<RenderTile>>;
virtual void setRenderTiles(RenderTiles, const TransformState&);
virtual void prepare(const LayerPrepareParameters&);
const std::vector<LayerPlacementData>& getPlacementData() const {
return placementData;
@@ -107,6 +112,7 @@ protected:
void checkRenderability(const PaintParameters&, uint32_t activeBindingCount);
protected:
using RenderTiles = std::vector<std::reference_wrapper<RenderTile>>;
// Stores current set of tiles to be rendered for this layer.
RenderTiles renderTiles;

View File

@@ -300,13 +300,12 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
}
}
// Set render tiles to the render items.
for (auto& renderItem : renderItems) {
if (!renderItem.source) {
continue;
}
RenderLayer& renderLayer = renderItem.layer;
renderLayer.setRenderTiles(renderItem.source->getRenderTiles(), updateParameters.transformState);
renderLayer.prepare({renderItem.source, updateParameters.transformState});
if (renderLayer.needsPlacement()) {
layersNeedPlacement.emplace_back(renderLayer);
}