#include <dali/internal/render/common/render-instruction-container.h>
#include <dali/internal/render/shaders/scene-graph-shader.h>
#include <dali/internal/render/renderers/render-renderer.h>
-#include <dali/internal/render/renderers/render-property-buffer.h>
#include <dali/internal/update/nodes/scene-graph-layer.h>
namespace
// Get the next free RenderItem.
RenderItem& item = renderList.GetNextFreeItem();
- item.mIsUpdated = (item.mNode != renderable.mNode);
- item.mNode = renderable.mNode;
+ // Get cached values
+ auto& partialRenderingData = node->GetPartialRenderingData();
+
+ auto& partialRenderingCacheInfo = node->GetPartialRenderingData().GetCurrentCacheInfo();
+
+ partialRenderingCacheInfo.node = node;
+ partialRenderingCacheInfo.isOpaque = (opacityType == Renderer::OPAQUE);
+ partialRenderingCacheInfo.renderer = renderable.mRenderer;
+ partialRenderingCacheInfo.color = renderable.mNode->GetColor(updateBufferIndex);
+ partialRenderingCacheInfo.depthIndex = renderable.mNode->GetDepthIndex();
- bool prevIsOpaque = item.mIsOpaque;
+ if( renderable.mRenderer )
+ {
+ partialRenderingCacheInfo.textureSet = renderable.mRenderer->GetTextures();
+ }
+
+ item.mNode = renderable.mNode;
item.mIsOpaque = (opacityType == Renderer::OPAQUE);
- item.mIsUpdated |= (prevIsOpaque != item.mIsOpaque);
+ item.mColor = renderable.mNode->GetColor(updateBufferIndex);
- int prevDepthIndex = item.mDepthIndex;
item.mDepthIndex = 0;
if (!isLayer3d)
{
item.mDepthIndex = renderable.mNode->GetDepthIndex();
}
- Render::Renderer* prevRenderer = item.mRenderer;
if (DALI_LIKELY(renderable.mRenderer))
{
item.mRenderer = &renderable.mRenderer->GetRenderer();
- const void* prevTextureSet = item.mTextureSet;
item.mTextureSet = renderable.mRenderer->GetTextures();
- item.mIsUpdated |= (prevTextureSet != item.mTextureSet);
item.mDepthIndex += renderable.mRenderer->GetDepthIndex();
}
else
item.mRenderer = nullptr;
}
- item.mIsUpdated |= (prevDepthIndex != item.mDepthIndex);
- item.mIsUpdated |= (prevRenderer != item.mRenderer);
item.mIsUpdated |= isLayer3d;
- if (!item.mIsUpdated)
- {
- Matrix prevModelViewMatrix = item.mModelViewMatrix;
- Vector3 prevSize = item.mSize;
+ // Save ModelView matrix onto the item.
+ node->GetWorldMatrixAndSize( item.mModelMatrix, item.mSize );
+ Matrix::Multiply( item.mModelViewMatrix, item.mModelMatrix, viewMatrix );
- // Save ModelView matrix onto the item.
- node->GetWorldMatrixAndSize( item.mModelMatrix, item.mSize );
- Matrix::Multiply( item.mModelViewMatrix, item.mModelMatrix, viewMatrix );
+ partialRenderingCacheInfo.matrix = item.mModelViewMatrix;
+ partialRenderingCacheInfo.size = item.mSize;
- item.mIsUpdated = ((prevSize != item.mSize) || (item.mModelViewMatrix != prevModelViewMatrix));
- }
- else
- {
- // Save ModelView matrix onto the item.
- node->GetWorldMatrixAndSize( item.mModelMatrix, item.mSize );
- Matrix::Multiply( item.mModelViewMatrix, item.mModelMatrix, viewMatrix );
- }
-
- item.mUpdateSize = node->GetUpdateSizeHint();
if (item.mUpdateSize == Vector3::ZERO)
{
// RenderItem::CalculateViewportSpaceAABB cannot cope with z transform
item.mUpdateSize = item.mSize;
}
}
- }
+ partialRenderingCacheInfo.updatedSize = item.mUpdateSize;
+ item.mIsUpdated = partialRenderingData.IsUpdated() || item.mIsUpdated;
+ partialRenderingData.SwapBuffers();
+ }
node->SetCulled( updateBufferIndex, false );
}
else
mSortComparitors.PushBack( CompareItems3DWithClipping );
}
-RenderInstructionProcessor::~RenderInstructionProcessor()
-{
-}
+RenderInstructionProcessor::~RenderInstructionProcessor() = default;
inline void RenderInstructionProcessor::SortRenderItems( BufferIndex bufferIndex, RenderList& renderList, Layer& layer, bool respectClippingOrder )
{
void RenderInstructionProcessor::Prepare( BufferIndex updateBufferIndex,
SortedLayerPointers& sortedLayers,
- Context& context,
RenderTask& renderTask,
bool cull,
bool hasClippingNodes,
Layer& layer = **iter;
const bool tryReuseRenderList( viewMatrixHasNotChanged && layer.CanReuseRenderers( &renderTask.GetCamera() ) );
const bool isLayer3D = layer.GetBehavior() == Dali::Layer::LAYER_3D;
- RenderList* renderList = NULL;
+ RenderList* renderList = nullptr;
if( layer.IsRoot() && ( layer.GetDirtyFlags() != NodePropertyFlags::NOTHING ) )
{
if( isRenderListAdded || instruction.mIsClearColorSet || isRootLayerDirty )
{
- instruction.mContext = &context;
instructions.PushBack( updateBufferIndex, &instruction );
}
}