void RenderTaskList::RemoveTask( Dali::RenderTask task )
{
  for ( RenderTaskContainer::iterator iter = mTasks.begin(); mTasks.end() != iter; ++iter )
  {
    if ( *iter == task )
    {
      if ( mSceneObject )
      {
        RenderTask& taskImpl = GetImplementation( task );

        SceneGraph::RenderTask* sceneObject = taskImpl.GetRenderTaskSceneObject();
        DALI_ASSERT_DEBUG( NULL != sceneObject );

        // Send a message to remove the scene-graph RenderTask
        RemoveTaskMessage( mEventToUpdate, *mSceneObject, *sceneObject );

        // The scene-graph RenderTask will be destroyed soon; discard the raw-pointer
        taskImpl.DiscardSceneObject();
      }

      mTasks.erase( iter );
      break; // we're finished
    }
  }
}
Esempio n. 2
0
void RenderTaskList::RemoveTask( Dali::RenderTask task )
{
  for ( RenderTaskContainer::iterator iter = mTasks.begin(); mTasks.end() != iter; ++iter )
  {
    if ( *iter == task )
    {
      RenderTask& taskImpl = GetImplementation( task );
      if ( mSceneObject )
      {
        SceneGraph::RenderTask* sceneObject = taskImpl.GetRenderTaskSceneObject();
        DALI_ASSERT_DEBUG( NULL != sceneObject );

        // Send a message to remove the scene-graph RenderTask
        RemoveTaskMessage( mEventThreadServices, *mSceneObject, *sceneObject );

        // The scene-graph RenderTask will be destroyed soon; discard the raw-pointer
        taskImpl.DiscardSceneObject();
      }

      mTasks.erase( iter );

      for ( Vector< Exclusive >::Iterator exclusiveIt = mExclusives.Begin(); exclusiveIt != mExclusives.End(); ++exclusiveIt )
      {
        if ( exclusiveIt->renderTaskPtr == &taskImpl )
        {
          mExclusives.Erase( exclusiveIt );
          break;
        }
      }
      break; // we're finished
    }
  }
}