X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Frender-tasks%2Frender-task-list-impl.cpp;h=3c4fe79bb43a0045889f01c3f21069f9f5141f8a;hb=70ac0bad6473d7a21dfcb5eae3506dc9400e7824;hp=e20c147aef375d3eba6103c17b0f73d43f7cdb51;hpb=cd0ce6e412df8961b1a5e28b496369fa49fd72d7;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/render-tasks/render-task-list-impl.cpp b/dali/internal/event/render-tasks/render-task-list-impl.cpp index e20c147..3c4fe79 100644 --- a/dali/internal/event/render-tasks/render-task-list-impl.cpp +++ b/dali/internal/event/render-tasks/render-task-list-impl.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -43,18 +44,23 @@ namespace Dali namespace Internal { -RenderTaskList* RenderTaskList::New( EventThreadServices& eventServices, RenderTaskDefaults& defaults, bool systemLevel ) +RenderTaskListPtr RenderTaskList::New() { - RenderTaskList* taskList = new RenderTaskList( eventServices, defaults, systemLevel ); + RenderTaskListPtr taskList = new RenderTaskList(); - taskList->Initialize( eventServices.GetUpdateManager() ); + taskList->Initialize(); return taskList; } Dali::RenderTask RenderTaskList::CreateTask() { - RenderTask* taskImpl = RenderTask::New( mIsSystemLevel ); + return CreateTask( &mDefaults.GetDefaultRootActor(), &mDefaults.GetDefaultCameraActor() ); +} + +Dali::RenderTask RenderTaskList::CreateTask( Actor* sourceActor, CameraActor* cameraActor) +{ + RenderTask* taskImpl = RenderTask::New(); Dali::RenderTask newTask( taskImpl ); mTasks.push_back( newTask ); @@ -68,8 +74,8 @@ Dali::RenderTask RenderTaskList::CreateTask() } // Set the default source & camera actors - taskImpl->SetSourceActor( &mDefaults.GetDefaultRootActor() ); - taskImpl->SetCameraActor( &mDefaults.GetDefaultCameraActor() ); + taskImpl->SetSourceActor( sourceActor ); + taskImpl->SetCameraActor( cameraActor ); return newTask; } @@ -149,29 +155,53 @@ void RenderTaskList::SetExclusive( RenderTask* task, bool exclusive ) } } -RenderTaskList::RenderTaskList( EventThreadServices& eventThreadServices, RenderTaskDefaults& defaults, bool systemLevel ) -: mEventThreadServices( eventThreadServices ), - mDefaults( defaults ), - mIsSystemLevel( systemLevel ), +RenderTaskList::RenderTaskList() +: mEventThreadServices( *Stage::GetCurrent() ), + mDefaults( *Stage::GetCurrent() ), mSceneObject( NULL ) { } RenderTaskList::~RenderTaskList() { + if( EventThreadServices::IsCoreRunning() ) + { + DestroySceneObject(); + } } -void RenderTaskList::Initialize( UpdateManager& updateManager ) +void RenderTaskList::Initialize() { // This should only be called once, with no existing scene-object DALI_ASSERT_DEBUG( NULL == mSceneObject ); - // Get raw-pointer to render task list - mSceneObject = updateManager.GetRenderTaskList( mIsSystemLevel ); + CreateSceneObject(); + // set the callback to call us back when tasks are completed mSceneObject->SetCompleteNotificationInterface( this ); } +void RenderTaskList::CreateSceneObject() +{ + DALI_ASSERT_DEBUG( mSceneObject == NULL ); + + // Create a new render task list, Keep a const pointer to the render task list. + mSceneObject = SceneGraph::RenderTaskList::New(); + + OwnerPointer< SceneGraph::RenderTaskList > transferOwnership( const_cast< SceneGraph::RenderTaskList* >( mSceneObject ) ); + AddRenderTaskListMessage( mEventThreadServices.GetUpdateManager(), transferOwnership ); +} + +void RenderTaskList::DestroySceneObject() +{ + if ( mSceneObject != NULL ) + { + // Remove the render task list using a message to the update manager + RemoveRenderTaskListMessage( mEventThreadServices.GetUpdateManager(), *mSceneObject ); + mSceneObject = NULL; + } +} + void RenderTaskList::NotifyCompleted() { DALI_LOG_TRACE_METHOD(gLogRenderList);