diff options
Diffstat (limited to 'src/mbgl/renderer/sources/render_tile_source.cpp')
-rw-r--r-- | src/mbgl/renderer/sources/render_tile_source.cpp | 57 |
1 files changed, 40 insertions, 17 deletions
diff --git a/src/mbgl/renderer/sources/render_tile_source.cpp b/src/mbgl/renderer/sources/render_tile_source.cpp index 3af3b92e77..99bdfde485 100644 --- a/src/mbgl/renderer/sources/render_tile_source.cpp +++ b/src/mbgl/renderer/sources/render_tile_source.cpp @@ -2,6 +2,7 @@ #include <mbgl/renderer/buckets/debug_bucket.hpp> #include <mbgl/renderer/render_tile.hpp> +#include <mbgl/renderer/render_tree.hpp> #include <mbgl/renderer/paint_parameters.hpp> #include <mbgl/renderer/tile_render_data.hpp> #include <mbgl/tile/vector_tile.hpp> @@ -10,8 +11,37 @@ namespace mbgl { using namespace style; +class TileSourceRenderItem : public RenderItem { +public: + TileSourceRenderItem(Immutable<std::vector<RenderTile>> renderTiles_, std::string name_) + : renderTiles(std::move(renderTiles_)) + , name(std::move(name_)) {} + +private: + void upload(gfx::UploadPass&) const override; + void render(PaintParameters&) const override; + bool hasRenderPass(RenderPass) const override { return false; } + const std::string& getName() const override { return name; } + + Immutable<std::vector<RenderTile>> renderTiles; + std::string name; +}; + +void TileSourceRenderItem::upload(gfx::UploadPass& parameters) const { + for (auto& tile : *renderTiles) { + tile.upload(parameters); + } +} + +void TileSourceRenderItem::render(PaintParameters& parameters) const { + for (auto& tile : *renderTiles) { + tile.finishRender(parameters); + } +} + RenderTileSource::RenderTileSource(Immutable<style::Source::Impl> impl_) - : RenderSource(std::move(impl_)) { + : RenderSource(std::move(impl_)) + , renderTiles(makeMutable<std::vector<RenderTile>>()) { tilePyramid.setObserver(this); } @@ -21,25 +51,18 @@ bool RenderTileSource::isLoaded() const { return tilePyramid.isLoaded(); } -void RenderTileSource::upload(gfx::UploadPass& parameters) { - for (auto& tile : renderTiles) { - tile.upload(parameters); - } +std::unique_ptr<RenderItem> RenderTileSource::createRenderItem() { + return std::make_unique<TileSourceRenderItem>(renderTiles, baseImpl->id); } void RenderTileSource::prepare(const SourcePrepareParameters& parameters) { - renderTiles.clear(); - renderTiles.reserve(tilePyramid.getRenderedTiles().size()); + auto tiles = makeMutable<std::vector<RenderTile>>(); + tiles->reserve(tilePyramid.getRenderedTiles().size()); for (auto& entry : tilePyramid.getRenderedTiles()) { - renderTiles.emplace_back(entry.first, entry.second); - renderTiles.back().prepare(parameters); - } -} - -void RenderTileSource::finishRender(PaintParameters& parameters) { - for (auto& tile : renderTiles) { - tile.finishRender(parameters); + tiles->emplace_back(entry.first, entry.second); + tiles->back().prepare(parameters); } + renderTiles = std::move(tiles); } void RenderTileSource::updateFadingTiles() { @@ -50,8 +73,8 @@ bool RenderTileSource::hasFadingTiles() const { return tilePyramid.hasFadingTiles(); } -std::vector<std::reference_wrapper<RenderTile>> RenderTileSource::getRenderTiles() { - return { renderTiles.begin(), renderTiles.end() }; +RenderTiles RenderTileSource::getRenderTiles() { + return { renderTiles->begin(), renderTiles->end() }; } const Tile* RenderTileSource::getRenderedTile(const UnwrappedTileID& tileID) const { |