diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-03 15:55:47 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-04 16:56:43 +0300 |
commit | da3b7749b05af842797e83d3b3815ae3d8ab79bf (patch) | |
tree | ab6b76e445c45dfd274e8bb7b5bf8aafb5645b74 /src/mbgl/renderer/render_orchestrator.cpp | |
parent | 8b78398190a5a7957d507c33b41af841e112a91b (diff) | |
download | qtlocation-mapboxgl-da3b7749b05af842797e83d3b3815ae3d8ab79bf.tar.gz |
[core] RenderSource creates render items
Diffstat (limited to 'src/mbgl/renderer/render_orchestrator.cpp')
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index b980efcff8..fafbc8b635 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -55,25 +55,11 @@ private: uint32_t index; }; -class SourceRenderItem final : public RenderItem { -public: - explicit SourceRenderItem(RenderSource& source_) - : source(source_) {} - -private: - bool hasRenderPass(RenderPass) const override { return false; } - void upload(gfx::UploadPass& pass) const override { source.get().upload(pass); } - void render(PaintParameters& parameters) const override { source.get().finishRender(parameters); } - const std::string& getName() const override { return source.get().baseImpl->id; } - - std::reference_wrapper<RenderSource> source; -}; - class RenderTreeImpl final : public RenderTree { public: RenderTreeImpl(std::unique_ptr<RenderTreeParameters> parameters_, std::set<LayerRenderItem> layerRenderItems_, - std::vector<SourceRenderItem> sourceRenderItems_, + std::vector<std::unique_ptr<RenderItem>> sourceRenderItems_, LineAtlas& lineAtlas_, PatternAtlas& patternAtlas_) : RenderTree(std::move(parameters_)), @@ -87,13 +73,16 @@ public: return { layerRenderItems.begin(), layerRenderItems.end() }; } RenderItems getSourceRenderItems() const override { - return { sourceRenderItems.begin(), sourceRenderItems.end() }; + RenderItems result; + result.reserve(sourceRenderItems.size()); + for (const auto& item : sourceRenderItems) result.emplace_back(*item); + return result; } LineAtlas& getLineAtlas() const override { return lineAtlas; } PatternAtlas& getPatternAtlas() const override { return patternAtlas; } std::set<LayerRenderItem> layerRenderItems; - std::vector<SourceRenderItem> sourceRenderItems; + std::vector<std::unique_ptr<RenderItem>> sourceRenderItems; std::reference_wrapper<LineAtlas> lineAtlas; std::reference_wrapper<PatternAtlas> patternAtlas; }; @@ -339,12 +328,10 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar return nullptr; } - std::vector<SourceRenderItem> sourceRenderItems; - // Update all matrices and generate data that we should upload to the GPU. + // Prepare. Update all matrices and generate data that we should upload to the GPU. for (const auto& entry : renderSources) { if (entry.second->isEnabled()) { entry.second->prepare({renderTreeParameters->transformParams, updateParameters.debugOptions, *imageManager}); - sourceRenderItems.emplace_back(*entry.second); } } @@ -355,7 +342,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar layersNeedPlacement.emplace_back(renderLayer); } } - + // Symbol placement. { if (!isMapModeContinuous) { // TODO: Think about right way for symbol index to handle still rendering @@ -406,6 +393,13 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar imageManager->reduceMemoryUseIfCacheSizeExceedsLimit(); } + std::vector<std::unique_ptr<RenderItem>> sourceRenderItems; + for (const auto& entry : renderSources) { + if (entry.second->isEnabled()) { + sourceRenderItems.emplace_back(entry.second->createRenderItem()); + } + } + return std::make_unique<RenderTreeImpl>( std::move(renderTreeParameters), std::move(layerRenderItems), |