Merge "Allow multiple renderers per Actor and sharing renderers between actors" into...
[platform/core/uifw/dali-core.git] / dali / internal / event / render-tasks / render-task-impl.cpp
index a1e312f..a64d4ea 100644 (file)
@@ -31,6 +31,7 @@
 #include <dali/internal/event/common/stage-impl.h>
 #include <dali/internal/event/images/frame-buffer-image-impl.h>
 #include <dali/internal/update/nodes/node.h>
+#include <dali/internal/event/render-tasks/render-task-list-impl.h>
 #include <dali/internal/update/render-tasks/scene-graph-render-task.h>
 
 #if defined(DEBUG_ENABLED)
@@ -77,6 +78,11 @@ RenderTask* RenderTask::New( bool isSystemLevel )
 
 void RenderTask::SetSourceActor( Actor* actor )
 {
+  const Stage* stage = Stage::GetCurrent();
+  if ( stage )
+  {
+    stage->GetRenderTaskList().SetExclusive( this, mExclusive );
+  }
   mSourceConnector.SetActor( actor );
 }
 
@@ -91,6 +97,12 @@ void RenderTask::SetExclusive( bool exclusive )
   {
     mExclusive = exclusive;
 
+    const Stage* stage = Stage::GetCurrent();
+    if ( stage )
+    {
+      stage->GetRenderTaskList().SetExclusive( this, exclusive );
+    }
+
     if ( mSceneObject )
     {
       // mSceneObject is being used in a separate thread; queue a message to set the value
@@ -765,6 +777,15 @@ void RenderTask::Connector::SceneObjectRemoved( Object& object )
 
 void RenderTask::Connector::ObjectDestroyed( Object& object )
 {
+  if ( SOURCE_CONNECTOR == mType )
+  {
+    const Stage* stage = Stage::GetCurrent();
+    if ( stage )
+    {
+      stage->GetRenderTaskList().SetExclusive( &mRenderTask, false );
+    }
+  }
+
   mActor = NULL;
 
   UpdateRenderTask();