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=61a980362da228ab4e44b589aa7deec4bde8d2e4;hpb=e2ee93d144c63abb914c086281d09c40b213919f;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 61a9803..3c4fe79 100644 --- a/dali/internal/event/render-tasks/render-task-list-impl.cpp +++ b/dali/internal/event/render-tasks/render-task-list-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -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; } @@ -108,12 +114,12 @@ void RenderTaskList::RemoveTask( Dali::RenderTask task ) } } -unsigned int RenderTaskList::GetTaskCount() const +uint32_t RenderTaskList::GetTaskCount() const { - return mTasks.size(); + return static_cast( mTasks.size() ); // only 4,294,967,295 render tasks supported } -Dali::RenderTask RenderTaskList::GetTask( unsigned int index ) const +Dali::RenderTask RenderTaskList::GetTask( uint32_t index ) const { DALI_ASSERT_ALWAYS( ( index < mTasks.size() ) && "RenderTask index out-of-range" ); @@ -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);