X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Frender-tasks%2Frender-task-impl.h;h=de111d01030484650e5ebb1bd049d335eda48949;hb=refs%2Ftags%2Fsubmit%2Ftizen%2F20190312.064145;hp=2305cd2989ee5f761ff613f3a274dd8617122861;hpb=75d8fba72eba375dae047aacfbd36769b1ad05b9;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/render-tasks/render-task-impl.h b/dali/internal/event/render-tasks/render-task-impl.h index 2305cd2..de111d0 100644 --- a/dali/internal/event/render-tasks/render-task-impl.h +++ b/dali/internal/event/render-tasks/render-task-impl.h @@ -2,7 +2,7 @@ #define __DALI_INTERNAL_RENDER_TASK_H__ /* - * Copyright (c) 2016 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. @@ -20,9 +20,11 @@ // INTERNAL INCLUDES #include +#include #include -#include +#include #include +#include namespace Dali { @@ -36,21 +38,23 @@ class EventThreadServices; namespace SceneGraph { +class RenderTaskList; class RenderTask; class Camera; } +using RenderTaskPtr = IntrusivePtr; + class RenderTask : public Object { public: - typedef Dali::RenderTask::ScreenToFrameBufferFunction ScreenToFrameBufferFunction; + using ScreenToFrameBufferFunction = Dali::RenderTask::ScreenToFrameBufferFunction; /** * Creates a new RenderTask. - * @param[in] isSystemLevel Whether the render-task is on the system level task list. */ - static RenderTask* New( bool isSystemLevel ); + static RenderTaskPtr New( Actor* sourceActor, CameraActor* cameraActor, SceneGraph::RenderTaskList& parentSceneObject ); /** * @copydoc Dali::RenderTask::SetSourceActor() @@ -95,12 +99,22 @@ public: /** * @copydoc Dali::RenderTask::SetTargetFrameBuffer() */ - void SetTargetFrameBuffer( Dali::FrameBufferImage frameBuffer ); + void SetTargetFrameBuffer( FrameBufferImagePtr frameBuffer ); /** * @copydoc Dali::RenderTask::GetTargetFrameBuffer */ - Dali::FrameBufferImage GetTargetFrameBuffer() const; + FrameBufferImage* GetTargetFrameBuffer() const; + + /** + * @copydoc Dali::RenderTask::SetFrameBuffer() + */ + void SetFrameBuffer( FrameBufferPtr frameBuffer ); + + /** + * @copydoc Dali::RenderTask::GetFrameBuffer + */ + FrameBuffer* GetFrameBuffer() const; /** * @copydoc Dali::RenderTask::SetScreenToFrameBufferFunction @@ -115,12 +129,12 @@ public: /** * copydoc Dali::RenderTask::SetScreenToFrameBufferMappingActor */ - void SetScreenToFrameBufferMappingActor( Actor* mappingActor ); + void SetScreenToFrameBufferMappingActor( Dali::Actor& mappingActor ); /** * copydoc Dali::RenderTask::GetScreenToFrameBufferMAppingActor */ - Actor* GetScreenToFrameBufferMappingActor() const; + Dali::Actor GetScreenToFrameBufferMappingActor() const; /** * @copydoc Dali::RenderTask::SetViewportPosition @@ -197,12 +211,12 @@ public: /** * @copydoc Dali::RenderTask::SetRefreshRate() */ - void SetRefreshRate( unsigned int refreshRate ); + void SetRefreshRate( uint32_t refreshRate ); /** * @copydoc Dali::RenderTask::GetRefreshRate() */ - unsigned int GetRefreshRate() const; + uint32_t GetRefreshRate() const; /** * Check if the render-task is hittable. If render task is offscreen, the screen coordinates may be translated. @@ -219,12 +233,6 @@ public: bool TranslateCoordinates( Vector2& screenCoords ) const; /** - * Query whether the RenderTask is on the system level render-task list. - * @return true, if on the system level task list, false otherwise. - */ - bool IsSystemLevel() const; - - /** * @copydoc Dali::RenderTask::WorldToViewport() */ bool WorldToViewport(const Vector3 &position, float& viewportX, float& viewportY) const; @@ -237,66 +245,14 @@ public: public: // Used by RenderTaskList, which owns the SceneGraph::RenderTasks /** - * Create the scene-graph RenderTask object. - * @pre CreateSceneObject has not already been called. - * @return A newly allocated scene-graph object; the caller takes ownership. - */ - SceneGraph::RenderTask* CreateSceneObject(); - - /** * Retrieve the scene-graph RenderTask object. - * @return The scene-graph object, or NULL if this has been discarded. + * @return The scene-graph object */ - SceneGraph::RenderTask* GetRenderTaskSceneObject(); - - /** - * Discard the scene-graph RenderTask object. - */ - void DiscardSceneObject(); + const SceneGraph::RenderTask& GetRenderTaskSceneObject() const; public: // Implementation of Object /** - * @copydoc Dali::Internal::Object::GetDefaultPropertyCount() - */ - virtual unsigned int GetDefaultPropertyCount() const; - - /** - * @copydoc Dali::Internal::Object::GetDefaultPropertyIndices() - */ - virtual void GetDefaultPropertyIndices( Property::IndexContainer& indices ) const; - - /** - * @copydoc Dali::Internal::Object::GetDefaultPropertyName() - */ - virtual const char* GetDefaultPropertyName(Property::Index index) const; - - /** - * @copydoc Dali::Internal::Object::GetDefaultPropertyIndex() - */ - virtual Property::Index GetDefaultPropertyIndex(const std::string& name) const; - - /** - * @copydoc Dali::Internal::Object::IsDefaultPropertyWritable() - */ - virtual bool IsDefaultPropertyWritable(Property::Index index) const; - - /** - * @copydoc Dali::Internal::Object::IsDefaultPropertyAnimatable() - */ - virtual bool IsDefaultPropertyAnimatable(Property::Index index) const; - - /** - * @copydoc Dali::Internal::Object::IsDefaultPropertyAConstraintInput() - */ - virtual bool IsDefaultPropertyAConstraintInput( Property::Index index ) const; - - /** - * @copydoc Dali::Internal::Object::GetDefaultPropertyType() - */ - virtual Property::Type GetDefaultPropertyType(Property::Index index) const; - - /** * @copydoc Dali::Internal::Object::SetDefaultProperty() */ virtual void SetDefaultProperty(Property::Index index, const Property::Value& propertyValue); @@ -307,9 +263,14 @@ public: // Implementation of Object virtual Property::Value GetDefaultProperty( Property::Index index ) const; /** - * @copydoc Dali::Internal::Object::GetSceneObject() + * @copydoc Dali::Internal::Object::GetDefaultPropertyCurrentValue() */ - virtual const SceneGraph::PropertyOwner* GetSceneObject() const; + virtual Property::Value GetDefaultPropertyCurrentValue( Property::Index index ) const; + + /** + * @copydoc Dali::Internal::Object::OnNotifyDefaultPropertyAnimation() + */ + virtual void OnNotifyDefaultPropertyAnimation( Animation& animation, Property::Index index, const Property::Value& value, Animation::Type animationType ); /** * @copydoc Dali::Internal::Object::GetSceneObjectAnimatableProperty() @@ -356,101 +317,41 @@ public: //signals protected: /** - * Construct a new RenderTask. - * @param[in] isSystemLevel Whether the RenderTask is on the system level task list. + * Constructor. + * + * @param sceneObject the scene graph object */ - RenderTask( bool isSystemLevel ); + RenderTask( const SceneGraph::RenderTask* sceneObject ); /** * A reference counted object may only be deleted by calling Unreference() */ virtual ~RenderTask(); - /** - * Helper class for connecting Nodes to the scene-graph RenderTask - */ - class Connector : public Object::Observer - { - public: - - enum Type - { - SOURCE_CONNECTOR, - CAMERA_CONNECTOR, - MAPPING_CONNECTOR - }; - - /** - * Create the helper class - */ - Connector( Type type, RenderTask& renderTask ); - - /** - * Non-virtual destructor; not suitable as a base object. - */ - ~Connector(); +private: // not copyable - /** - * Set the actor to be observed. - * @param[in] actor The actor to be observed. - */ - void SetActor( Actor* actor ); - - /** - * Update the scene-graph RenderTask with a new source/camera Node. - */ - void UpdateRenderTask(); - - public: // From Object::Observer - - /** - * @copydoc Dali::Internal::Object::Observer::SceneObjectAdded - */ - virtual void SceneObjectAdded( Object& object ); - - /** - * @copydoc Dali::Internal::Object::Observer::SceneObjectAdded - */ - virtual void SceneObjectRemoved( Object& object ); - - /** - * @copydoc Dali::Internal::Object::Observer::ObjectDestroyed - */ - virtual void ObjectDestroyed( Object& object ); - - private: - - // Undefined - Connector(const Connector&); - - // Undefined - Connector& operator=(const Connector& rhs); - - public: - - const Type mType; - - RenderTask& mRenderTask; - - Actor* mActor; ///< Raw-pointer to the actor; not owned. - const SceneGraph::Camera* mCamera; ///< Raw-pointer to camera scene-graph object; not owned. - }; + RenderTask() = delete; + RenderTask( const RenderTask& ) = delete; + RenderTask& operator=( const RenderTask& ) = delete; private: - SceneGraph::RenderTask* mSceneObject; ///< Raw-pointer to the scene-graph object; not owned. - - Connector mSourceConnector; ///< Responsible for connecting/disconnecting source Nodes - Connector mCameraConnector; ///< Responsible for connecting/disconnecting camera Nodes - Connector mMappingConnector; /// Responsible for connecting/disconnecting actor node, which used to mapping screen to frame buffer coordinate + Actor* mSourceActor; ///< Source actor, we cannot keep the actor alive so raw pointer. + CameraActor* mCameraActor; ///< Camera actor, we cannot keep the actor alive so raw pointer. + WeakHandle mInputMappingActor; /// used to mapping screen to frame buffer coordinate, not kept alive by rendertask Vector4 mClearColor; ///< Optional clear color - unsigned int mRefreshRate; ///< Determines how often the task is processed. + Vector2 mViewportPosition; ///< The cached viewport position + Vector2 mViewportSize; ///< The cached viewport size + + uint32_t mRefreshRate; ///< Determines how often the task is processed. + + uint32_t mRefreshOnceCounter; - unsigned int mRefreshOnceCounter; + FrameBufferImagePtr mFrameBufferImage; ///< Optional off-screen render target. + FrameBufferPtr mFrameBuffer; - Dali::FrameBufferImage mFrameBufferImage; ///< Optional off-screen render target. Dali::RenderTask::ScreenToFrameBufferFunction mScreenToFrameBufferFunction; ///< Used to convert screen to frame-buffer coordinates @@ -458,7 +359,6 @@ private: bool mInputEnabled : 1; ///< True if the render-task should be considered for input handling. bool mClearEnabled : 1; ///< True if the render-task should be clear the color buffer. bool mCullMode : 1; ///< True if the render-task's actors should be culled - bool mIsSystemLevel : 1; ///< True if the render-task is on the system level task list. bool mRequiresSync : 1; ///< True if the GL sync is required to track the render of. //Signals