#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>
+#include <dali/internal/common/math.h>
namespace
{
{
bool inside( true );
Node* node = renderable.mNode;
-
- if( cull && renderable.mRenderer && !renderable.mRenderer->GetShader().HintEnabled( Dali::Shader::Hint::MODIFIES_GEOMETRY ) )
+ bool geomertryModified = false;
+ if( cull && renderable.mRenderer && !( geomertryModified = renderable.mRenderer->GetShader().HintEnabled( Dali::Shader::Hint::MODIFIES_GEOMETRY ) ) )
{
const Vector4& boundingSphere = node->GetBoundingSphere();
inside = ( boundingSphere.w > Math::MACHINE_EPSILON_1000 ) &&
item.mNode = renderable.mNode;
item.mIsOpaque = ( opacityType == Renderer::OPAQUE );
item.mDepthIndex = 0;
+ item.mPartialUpdateEnabled = false;
- if(!isLayer3d)
+ if( !isLayer3d )
{
item.mDepthIndex = renderable.mNode->GetDepthIndex();
}
+ if( isLayer3d || geomertryModified )
+ {
+ renderList.SetPartialUpdateEnabled( false );
+ }
if( DALI_LIKELY( renderable.mRenderer ) )
{
item.mRenderer = &renderable.mRenderer->GetRenderer();
item.mTextureSet = renderable.mRenderer->GetTextures();
item.mDepthIndex += renderable.mRenderer->GetDepthIndex();
+
+ if( FaceCullingMode::NONE != renderable.mRenderer->GetFaceCullingMode() )
+ {
+ renderList.SetPartialUpdateEnabled( false );
+ }
}
else
{
node->GetWorldMatrixAndSize( item.mModelMatrix, item.mSize );
Matrix::Multiply( item.mModelViewMatrix, item.mModelMatrix, viewMatrix );
- }
- node->SetCulled( updateBufferIndex, false );
+ if( node->IsPartialUpdateAvailable() && DALI_LIKELY( item.mRenderer ) && renderList.IsPartialUpdateEnabled() )
+ {
+ if( node->IsComponentChanged() || node->IsPropertyDirty() )
+ {
+ item.mPartialUpdateEnabled = true;
+
+ item.mUpdateSizeHint = item.mSize;
+ Vector3 updateSizeHint = Vector3::ZERO;
+ node->GetUpdateSizeHint( updateBufferIndex, updateSizeHint );
+ if( updateSizeHint != Vector3::ZERO )
+ {
+ item.mUpdateSizeHint = updateSizeHint;
+ }
+ }
+ }
+ }
+ node->SetCulled( updateBufferIndex, false );
}
else
{
- node->SetCulled( updateBufferIndex, true );
+ node->SetCulled( updateBufferIndex, true );
}
}
if( !SetupRenderList( renderables, layer, instruction, tryReuseRenderList, &renderList ) )
{
renderList->SetHasColorRenderItems( true );
+ if( !isLayer3D )
+ {
+ renderList->SetPartialUpdateEnabled( true );
+ }
AddRenderersToRenderList( updateBufferIndex,
*renderList,
renderables,
if( !SetupRenderList( renderables, layer, instruction, tryReuseRenderList, &renderList ) )
{
renderList->SetHasColorRenderItems( false );
+ if( !isLayer3D )
+ {
+ renderList->SetPartialUpdateEnabled( true );
+ }
AddRenderersToRenderList( updateBufferIndex,
*renderList,
renderables,