X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Frender-tasks%2Frender-task-list-impl.h;h=068a42fcc2d5064741c63ddb1a233831cefc44f1;hb=c1df908470fc3dd242fef202248e56009727bca4;hp=a515893ba09a91b2d0a31cab59b59f6b917089a3;hpb=8f2c5571c924479b6a07a2c2187dedd9c685baf0;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/render-tasks/render-task-list-impl.h b/dali/internal/event/render-tasks/render-task-list-impl.h index a515893..068a42f 100644 --- a/dali/internal/event/render-tasks/render-task-list-impl.h +++ b/dali/internal/event/render-tasks/render-task-list-impl.h @@ -1,28 +1,30 @@ -#ifndef __DALI_INTERNAL_RENDER_TASK_LIST_H__ -#define __DALI_INTERNAL_RENDER_TASK_LIST_H__ - -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +#ifndef DALI_INTERNAL_RENDER_TASK_LIST_H +#define DALI_INTERNAL_RENDER_TASK_LIST_H + +/* + * Copyright (c) 2019 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ // INTERNAL INCLUDES #include #include -#include #include -#include +#include +#include +#include namespace Dali { @@ -30,8 +32,14 @@ namespace Dali namespace Internal { -class EventToUpdate; +class EventThreadServices; class RenderTaskDefaults; +class Actor; +class CameraActor; + +using RenderTaskPtr = IntrusivePtr; +class RenderTaskList; +using RenderTaskListPtr = IntrusivePtr; namespace SceneGraph { @@ -43,40 +51,56 @@ class UpdateManager; * A proxy for the scene-graph RenderTaskList. * A separate LayerList is maintained for actors added via the SystemLevel::Add(). */ -class RenderTaskList : public BaseObject +class RenderTaskList : public BaseObject, public CompleteNotificationInterface { public: - typedef std::vector< Dali::RenderTask > RenderTaskContainer; + using RenderTaskContainer = std::vector< RenderTaskPtr >; + + struct Exclusive + { + RenderTask* renderTaskPtr; ///< Pointer for comparison with current rendertask. + ActorObserver actor; ///< For comparison with current actor. + }; + + using ExclusivesContainer = std::vector< Exclusive >; /** * Create a RenderTaskList. - * @param[in] updateManager Used for creating render-tasks in the scene graph. - * @param[in] defaults Provides the default source & camera actors. - * @param[in] systemLevel True if this is the LayerList for actors added via the SystemLevel::Add(). * @return A newly allocated RenderTaskList; the caller takes ownership. */ - static RenderTaskList* New( SceneGraph::UpdateManager& updateManager, RenderTaskDefaults& defaults, bool systemLevel ); + static RenderTaskListPtr New(); /** * @copydoc Dali::RenderTaskList::CreateTask() */ - Dali::RenderTask CreateTask(); + RenderTaskPtr CreateTask(); + + /** + * @brief Creates a new RenderTask. + * + * This will be appended to the list of render-tasks. + * + * @param[in] sourceActor The actor and its children to be rendered for this render task. + * @param[in] cameraActor The actor from which the scene is viewed for this render task. + * @return A valid handle to a new RenderTask + */ + RenderTaskPtr CreateTask( Actor* sourceActor, CameraActor* cameraActor); /** * @copydoc Dali::RenderTaskList::RemoveTask() */ - void RemoveTask( Dali::RenderTask task ); + void RemoveTask( Internal::RenderTask& task ); /** * @copydoc Dali::RenderTaskList::GetTaskCount() */ - unsigned int GetTaskCount() const; + uint32_t GetTaskCount() const; /** * @copydoc Dali::RenderTaskList::GetTask() */ - Dali::RenderTask GetTask( unsigned int index ) const; + RenderTaskPtr GetTask( uint32_t index ) const; /** * Retrieve the container of render-tasks. @@ -88,21 +112,49 @@ public: } /** + * @brief Mark a rendertask as having exclusive access to its source actor. + * + * @param[in] task Pointer to the rendertask. + * @param[in] exclusive If a rendertask is to have exclusive acesss to its source actor. + */ + void SetExclusive( RenderTask* task, bool exclusive ); + + /** + * @brief Return the list of rendertasks that exclusively own their source actor. + * + * @return [description] + */ + const ExclusivesContainer& GetExclusivesList() const + { + return mExclusives; + } + + /** * Provide notification signals for a "Finished" render task. * This method should be called in the event-thread * Queue NotifyFinishedMessage() from update-thread + * @param object pointer to this class instance */ - void NotifyFinished(); + static void NotifyFinished( void* object ); + + /** + * This method refreshes all render tasks that have a frame buffer + * and a refresh rate of RefreshOnce. + */ + void RecoverFromContextLoss(); + + /** + * Retrieve the SceneGraph::RenderTaskList object. + * @return The RenderTaskList. + */ + const SceneGraph::RenderTaskList& GetSceneObject() const; protected: /** * Construct a new RenderTaskList. - * @param[in] eventToUpdate Used for creating render-tasks in the scene graph. - * @param[in] defaults Provides the default source & camera actors. - * @param[in] systemLevel True if this is the system-level list. */ - RenderTaskList( EventToUpdate& eventToUpdate, RenderTaskDefaults& defaults, bool systemLevel ); + RenderTaskList(); /** * A reference counted object may only be deleted by calling Unreference() @@ -112,29 +164,26 @@ protected: /** * 2nd-phase construction */ - void Initialize( SceneGraph::UpdateManager& updateManager ); + void Initialize(); + +private: // from CompleteNotificationInterface + + /** + * @copydoc CompleteNotificationInterface::NotifyCompleted() + */ + virtual void NotifyCompleted(); private: - EventToUpdate& mEventToUpdate; + EventThreadServices& mEventThreadServices; RenderTaskDefaults& mDefaults; - bool mIsSystemLevel; ///< True if the layers are added via the SystemLevel API - SceneGraph::RenderTaskList* mSceneObject; ///< Raw-pointer to the scene-graph object; not owned. - RenderTaskContainer mTasks; ///< Reference counted render-tasks + RenderTaskContainer mTasks; ///< Reference counted render-tasks + ExclusivesContainer mExclusives; ///< List of rendertasks with exclusively owned source actors. }; -/** - * Notification message for when 1+ render tasks have finished - * @param[in] renderTaskList This will provide the notification signals. - */ -inline MessageBase* NotifyFinishedMessage( RenderTaskList& renderTaskList ) -{ - return new Message< RenderTaskList >( &renderTaskList, &RenderTaskList::NotifyFinished ); -} - } // namespace Internal // Helpers for public-api forwarding methods @@ -159,4 +208,4 @@ inline const Internal::RenderTaskList& GetImplementation(const Dali::RenderTaskL } // namespace Dali -#endif //__DALI_INTERNAL_RENDER_TASK_LIST_H__ +#endif // DALI_INTERNAL_RENDER_TASK_LIST_H