From 06964233260240585eff910098688625bc3eed2d Mon Sep 17 00:00:00 2001 From: David Steele Date: Wed, 21 Jul 2021 16:25:55 +0100 Subject: [PATCH] Moved SetUpdate propagation to UpdateNodes Change-Id: I6c8f7be591e23a9fd776665d0fc074353fa027ee --- dali/internal/render/common/render-manager.cpp | 16 +++++++--------- .../update/manager/render-task-processor.cpp | 2 +- dali/internal/update/manager/update-algorithms.cpp | 21 ++++++++++++++++++--- dali/internal/update/nodes/node.h | 4 ++-- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/dali/internal/render/common/render-manager.cpp b/dali/internal/render/common/render-manager.cpp index 4a309fd..3f240a9 100644 --- a/dali/internal/render/common/render-manager.cpp +++ b/dali/internal/render/common/render-manager.cpp @@ -35,13 +35,13 @@ #include #include #include +#include #include #include #include #include #include #include -#include #include @@ -125,7 +125,7 @@ struct RenderManager::Impl threadPool->Initialize(1u); uniformBufferManager = std::make_unique(&graphicsController); - pipelineCache = std::make_unique(graphicsController); + pipelineCache = std::make_unique(graphicsController); } ~Impl() @@ -178,7 +178,7 @@ struct RenderManager::Impl Render::ShaderCache shaderCache; ///< The cache for the graphics shaders std::unique_ptr uniformBufferManager; ///< The uniform buffer manager - std::unique_ptr pipelineCache; + std::unique_ptr pipelineCache; Integration::DepthBufferAvailable depthBufferAvailable; ///< Whether the depth buffer is available Integration::StencilBufferAvailable stencilBufferAvailable; ///< Whether the stencil buffer is available @@ -224,8 +224,7 @@ void RenderManager::SetShaderSaver(ShaderSaver& upstream) void RenderManager::AddRenderer(OwnerPointer& renderer) { // Initialize the renderer as we are now in render thread - renderer->Initialize(mImpl->graphicsController, mImpl->programController, mImpl->shaderCache, *(mImpl->uniformBufferManager.get()), - *(mImpl->pipelineCache.get())); + renderer->Initialize(mImpl->graphicsController, mImpl->programController, mImpl->shaderCache, *(mImpl->uniformBufferManager.get()), *(mImpl->pipelineCache.get())); mImpl->rendererContainer.PushBack(renderer.Release()); } @@ -382,8 +381,7 @@ void RenderManager::AddGeometry(OwnerPointer& geometry) void RenderManager::RemoveGeometry(Render::Geometry* geometry) { - auto it = std::find_if( mImpl->geometryContainer.begin(), mImpl->geometryContainer.end(),[geometry]( auto& item ) - { + auto it = std::find_if(mImpl->geometryContainer.begin(), mImpl->geometryContainer.end(), [geometry](auto& item) { return geometry == item; }); @@ -469,7 +467,7 @@ void RenderManager::PreRender(Integration::RenderStatus& status, bool forceClear // Upload the geometries for(auto&& geom : mImpl->geometryContainer) { - geom->Upload( mImpl->graphicsController ); + geom->Upload(mImpl->graphicsController); } } } @@ -613,7 +611,7 @@ void RenderManager::PreRender(Integration::Scene& scene, std::vector>& (item.mNode->Updated() || (item.mRenderer && item.mRenderer->Updated(mImpl->renderBufferIndex, item.mNode))))) { item.mIsUpdated = false; - item.mNode->SetUpdated(false); + item.mNode->SetUpdatedTree(false); rect = item.CalculateViewportSpaceAABB(item.mUpdateSize, viewportRect.width, viewportRect.height); if(rect.IsValid() && rect.Intersect(viewportRect) && !rect.IsEmpty()) diff --git a/dali/internal/update/manager/render-task-processor.cpp b/dali/internal/update/manager/render-task-processor.cpp index db76d86..30d9257 100644 --- a/dali/internal/update/manager/render-task-processor.cpp +++ b/dali/internal/update/manager/render-task-processor.cpp @@ -118,7 +118,7 @@ bool AddRenderablesForTask(BufferIndex updateBufferIndex, if(!node.GetPartialRenderingData().mVisible) { node.GetPartialRenderingData().mVisible = true; - node.SetUpdated(true); + node.SetUpdatedTree(true); } // Check whether node is exclusive to a different render-task diff --git a/dali/internal/update/manager/update-algorithms.cpp b/dali/internal/update/manager/update-algorithms.cpp index b5975c0..db310df 100644 --- a/dali/internal/update/manager/update-algorithms.cpp +++ b/dali/internal/update/manager/update-algorithms.cpp @@ -102,7 +102,8 @@ inline NodePropertyFlags UpdateNodes(Node& node, BufferIndex updateBufferIndex, RenderQueue& renderQueue, Layer& currentLayer, - uint32_t inheritedDrawMode) + uint32_t inheritedDrawMode, + bool updated) { // Apply constraints to the node ConstrainPropertyOwner(node, updateBufferIndex); @@ -141,6 +142,16 @@ inline NodePropertyFlags UpdateNodes(Node& node, layer->SetReuseRenderers(updateBufferIndex, false); } + // For partial update, mark all children of an animating node as updated. + if(updated) // Only set to updated if parent was updated. + { + node.SetUpdated(true); + } + else if(node.Updated()) // Only propagate updated==true downwards. + { + updated = true; + } + // recurse children NodeContainer& children = node.GetChildren(); const NodeIter endIter = children.End(); @@ -152,7 +163,8 @@ inline NodePropertyFlags UpdateNodes(Node& node, updateBufferIndex, renderQueue, *layer, - inheritedDrawMode); + inheritedDrawMode, + updated); } return cumulativeDirtyFlags; @@ -189,6 +201,8 @@ NodePropertyFlags UpdateNodeTree(Layer& rootNode, DrawMode::Type drawMode(rootNode.GetDrawMode()); + bool updated = rootNode.Updated(); + // recurse children NodeContainer& children = rootNode.GetChildren(); const NodeIter endIter = children.End(); @@ -200,7 +214,8 @@ NodePropertyFlags UpdateNodeTree(Layer& rootNode, updateBufferIndex, renderQueue, rootNode, - drawMode); + drawMode, + updated); } return cumulativeDirtyFlags; diff --git a/dali/internal/update/nodes/node.h b/dali/internal/update/nodes/node.h index b0a5818..d1fa90b 100644 --- a/dali/internal/update/nodes/node.h +++ b/dali/internal/update/nodes/node.h @@ -122,13 +122,13 @@ public: * @param[in] updated The updated flag * (used for partial rendering to mark an animating sub tree for example). */ - void SetUpdated(bool updated) override + void SetUpdatedTree(bool updated) { mUpdated = updated; for(Node* child : mChildren) { - child->SetUpdated(updated); + child->SetUpdatedTree(updated); } } -- 2.7.4