mClippingMode( ClippingMode::DISABLED ),
mIsRoot( false ),
mIsLayer( false ),
- mPositionUsesAnchorPoint( true )
+ mPositionUsesAnchorPoint( true ),
+ mPartialUpdateAvailable( false )
{
mUniformMapChanged[0] = 0u;
mUniformMapChanged[1] = 0u;
- mPropertyDirty = false;
+ mPropertyDirty = true;
#ifdef DEBUG_ENABLED
gNodeCount++;
SetPropertyDirty( true );
}
+
void Node::RemoveRenderer( const Renderer* renderer )
{
+ Node *parent = mIsRoot ? NULL : GetParent();
RendererContainer::SizeType rendererCount( mRenderer.Size() );
for( RendererContainer::SizeType i = 0; i < rendererCount; ++i )
{
if( mRenderer[i] == renderer )
{
+ if( parent != NULL )
+ {
+ parent->mPropertyDirty = true;
+ }
SetPropertyDirty( true );
mRenderer.Erase( mRenderer.Begin()+i);
return;
mTransformManager->SetParent( mTransformId, INVALID_TRANSFORM_ID );
}
}
+void Node::SetPartialUpdateAvailable( bool value )
+{
+ mPartialUpdateAvailable = value;
+}
-void Node::SetPropertyDirty( bool value )
+bool Node::IsPartialUpdateAvailable() const
{
- mPropertyDirty = value;
+ return mPartialUpdateAvailable;
+}
- const NodeIter endIter = mChildren.End();
- for ( NodeIter iter = mChildren.Begin(); iter != endIter; ++iter )
+void Node::SetPropertyDirty( bool value )
+{
+ if( mPartialUpdateAvailable )
{
- Node* current = *iter;
- current->SetPropertyDirty( value );
+ mPropertyDirty = value;
+
+ const NodeIter endIter = mChildren.End();
+ for ( NodeIter iter = mChildren.Begin(); iter != endIter; ++iter )
+ {
+ Node* current = *iter;
+ current->SetPropertyDirty( value );
+ }
}
}
bool Node::IsPropertyDirty() const
{
- for( auto&& existingRenderer : mRenderer )
+ if( mPartialUpdateAvailable )
{
- if( existingRenderer->IsDirty() )
+ if( !mPropertyDirty )
{
- return true;
+ for( auto&& existingRenderer : mRenderer )
+ {
+ if( existingRenderer->IsDirty() )
+ {
+ return true;
+ }
+ }
}
}
-
return mPropertyDirty;
}