#include <dali/internal/render/common/render-instruction.h>
#include <dali/internal/render/common/render-tracker.h>
#include <dali/internal/render/queue/render-queue.h>
+#include <dali/internal/render/renderers/pipeline-cache.h>
#include <dali/internal/render/renderers/render-frame-buffer.h>
#include <dali/internal/render/renderers/render-texture.h>
#include <dali/internal/render/renderers/shader-cache.h>
#include <dali/internal/render/renderers/uniform-buffer-manager.h>
#include <dali/internal/render/renderers/uniform-buffer-view-pool.h>
#include <dali/internal/render/shaders/program-controller.h>
-#include <dali/internal/render/renderers/pipeline-cache.h>
#include <memory>
threadPool->Initialize(1u);
uniformBufferManager = std::make_unique<Render::UniformBufferManager>(&graphicsController);
- pipelineCache = std::make_unique<Render::PipelineCache>(graphicsController);
+ pipelineCache = std::make_unique<Render::PipelineCache>(graphicsController);
}
~Impl()
Render::ShaderCache shaderCache; ///< The cache for the graphics shaders
std::unique_ptr<Render::UniformBufferManager> uniformBufferManager; ///< The uniform buffer manager
- std::unique_ptr<Render::PipelineCache> pipelineCache;
+ std::unique_ptr<Render::PipelineCache> pipelineCache;
Integration::DepthBufferAvailable depthBufferAvailable; ///< Whether the depth buffer is available
Integration::StencilBufferAvailable stencilBufferAvailable; ///< Whether the stencil buffer is available
void RenderManager::AddRenderer(OwnerPointer<Render::Renderer>& 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());
}
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;
});
// Upload the geometries
for(auto&& geom : mImpl->geometryContainer)
{
- geom->Upload( mImpl->graphicsController );
+ geom->Upload(mImpl->graphicsController);
}
}
}
(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())
BufferIndex updateBufferIndex,
RenderQueue& renderQueue,
Layer& currentLayer,
- uint32_t inheritedDrawMode)
+ uint32_t inheritedDrawMode,
+ bool updated)
{
// Apply constraints to the node
ConstrainPropertyOwner(node, updateBufferIndex);
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();
updateBufferIndex,
renderQueue,
*layer,
- inheritedDrawMode);
+ inheritedDrawMode,
+ updated);
}
return cumulativeDirtyFlags;
DrawMode::Type drawMode(rootNode.GetDrawMode());
+ bool updated = rootNode.Updated();
+
// recurse children
NodeContainer& children = rootNode.GetChildren();
const NodeIter endIter = children.End();
updateBufferIndex,
renderQueue,
rootNode,
- drawMode);
+ drawMode,
+ updated);
}
return cumulativeDirtyFlags;