From: seungho baek Date: Mon, 21 Nov 2022 09:29:38 +0000 (+0900) Subject: Creates RenderTask when it connects on Scene and Remove it when it is disconnected. X-Git-Tag: dali_2.2.3~2^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=df49f571f53f8d79b7f10fcbcf4c9ad194009249 Creates RenderTask when it connects on Scene and Remove it when it is disconnected. Change-Id: Ie571a7a8a10224d5740239d8d651a7ce48ddfa51 Signed-off-by: seungho baek --- diff --git a/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp b/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp index ca9f0eb..08728df 100644 --- a/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp +++ b/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp @@ -302,16 +302,20 @@ int UtcDaliSceneViewOnScene02(void) Scene3D::SceneView view = Scene3D::SceneView::New(); renderTaskCount = application.GetScene().GetRenderTaskList().GetTaskCount(); - DALI_TEST_EQUALS(2u, renderTaskCount, TEST_LOCATION); - - RenderTask renderTask = application.GetScene().GetRenderTaskList().GetTask(1u); - CameraActor camera = renderTask.GetCameraActor(); + DALI_TEST_EQUALS(1u, renderTaskCount, TEST_LOCATION); application.GetScene().Add(view); application.SendNotification(); application.Render(); + + renderTaskCount = application.GetScene().GetRenderTaskList().GetTaskCount(); + DALI_TEST_EQUALS(2u, renderTaskCount, TEST_LOCATION); + + RenderTask renderTask = application.GetScene().GetRenderTaskList().GetTask(1u); + CameraActor camera = renderTask.GetCameraActor(); + CameraActor defaultCamera = renderTask.GetCameraActor(); DALI_TEST_CHECK(defaultCamera); DALI_TEST_EQUALS(camera, defaultCamera, TEST_LOCATION); @@ -724,3 +728,26 @@ int UtcDaliSceneViewSetSkyboxOrientation(void) END_TEST; } + +int UtcDaliSceneViewCreateAndRemoveRenderTask(void) +{ + ToolkitTestApplication application; + RenderTaskList taskList = application.GetScene().GetRenderTaskList(); + + uint32_t renderTaskCount = taskList.GetTaskCount(); + + Scene3D::SceneView view = Scene3D::SceneView::New(); + view.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f)); + + DALI_TEST_EQUALS(renderTaskCount, application.GetScene().GetRenderTaskList().GetTaskCount(), TEST_LOCATION); + + application.GetScene().Add(view); + + DALI_TEST_EQUALS(renderTaskCount + 1, application.GetScene().GetRenderTaskList().GetTaskCount(), TEST_LOCATION); + + view.Unparent(); + + DALI_TEST_EQUALS(renderTaskCount, application.GetScene().GetRenderTaskList().GetTaskCount(), TEST_LOCATION); + + END_TEST; +} diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder-impl.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder-impl.h index 628330d..42050e4 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder-impl.h +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder-impl.h @@ -127,6 +127,8 @@ public: Dali::RenderSurfaceInterface& GetRenderSurface(); + Dali::RenderTaskList GetRenderTaskList(); + protected: TestRenderSurface mRenderSurface; diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder.cpp index 8bcb3c0..132ce79 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder.cpp @@ -26,6 +26,7 @@ #include #include +#include using AdaptorImpl = Dali::Internal::Adaptor::Adaptor; @@ -130,6 +131,11 @@ Dali::RenderSurfaceInterface& SceneHolder::GetRenderSurface() return mRenderSurface; } +Dali::RenderTaskList SceneHolder::GetRenderTaskList() +{ + return mScene.GetRenderTaskList(); +} + } // namespace Adaptor } // namespace Internal diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.cpp index b74a8c0..4902904 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #define DALI_WINDOW_H #include @@ -220,6 +221,11 @@ Window::TouchEventSignalType& Window::TouchedSignal() return GetImplementation(*this).TouchedSignal(); } +Dali::RenderTaskList Window::GetRenderTaskList() +{ + return GetImplementation(*this).GetRenderTaskList(); +} + namespace DevelWindow { Window Get(Actor actor) diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.h index e9edae0..038812c 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.h +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.h @@ -85,6 +85,7 @@ public: KeyEventSignalType& KeyEventSignal(); TouchEventSignalType& TouchedSignal(); ResizeSignalType& ResizeSignal(); + Dali::RenderTaskList GetRenderTaskList(); public: explicit Window(Internal::Adaptor::Window* window); diff --git a/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp b/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp index 9cc2759..1457e19 100644 --- a/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp +++ b/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp @@ -399,12 +399,20 @@ Quaternion SceneView::GetSkyboxOrientation() const void SceneView::OnSceneConnection(int depth) { - UpdateRenderTask(); - Window window = DevelWindow::Get(Self()); if(window) { window.ResizeSignal().Connect(this, &SceneView::OnWindowResized); + RenderTaskList taskList = window.GetRenderTaskList(); + mRenderTask = taskList.CreateTask(); + mRenderTask.SetSourceActor(mRootLayer); + mRenderTask.SetExclusive(true); + mRenderTask.SetInputEnabled(true); + mRenderTask.SetCullMode(false); + mRenderTask.SetScreenToFrameBufferMappingActor(Self()); + + UpdateRenderTask(); + mWindow = window; } Control::OnSceneConnection(depth); @@ -414,11 +422,18 @@ void SceneView::OnSceneDisconnection() { mItems.clear(); - Window window = DevelWindow::Get(Self()); + Window window = mWindow.GetHandle(); if(window) { window.ResizeSignal().Disconnect(this, &SceneView::OnWindowResized); + RenderTaskList taskList = window.GetRenderTaskList(); + if(mRenderTask) + { + taskList.RemoveTask(mRenderTask); + mRenderTarget.Reset(); + } } + mWindow.Reset(); Control::OnSceneDisconnection(); } @@ -435,14 +450,6 @@ void SceneView::OnInitialize() mRootLayer.SetProperty(Dali::Actor::Property::INHERIT_SCALE, false); self.Add(mRootLayer); - RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); - mRenderTask = taskList.CreateTask(); - mRenderTask.SetSourceActor(mRootLayer); - mRenderTask.SetExclusive(true); - mRenderTask.SetInputEnabled(true); - mRenderTask.SetCullMode(false); - mRenderTask.SetScreenToFrameBufferMappingActor(Self()); - mDefaultCamera = Dali::CameraActor::New(); mDefaultCamera.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); mDefaultCamera.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); diff --git a/dali-scene3d/internal/controls/scene-view/scene-view-impl.h b/dali-scene3d/internal/controls/scene-view/scene-view-impl.h index db3c33e..7632d80 100644 --- a/dali-scene3d/internal/controls/scene-view/scene-view-impl.h +++ b/dali-scene3d/internal/controls/scene-view/scene-view-impl.h @@ -237,7 +237,7 @@ private: void OnWindowResized(Window window, Window::WindowSize size); /** - * @brief Update camera's projection orientation according to the screen orientation. + * @brief Updates camera's projection orientation according to the screen orientation. */ void RotateCamera(); @@ -246,6 +246,7 @@ private: ///////////////////////////////////////////////////////////// // FrameBuffer and Rendertask to render child objects as a 3D Scene + Dali::WeakHandle mWindow; CameraActor mDefaultCamera; CameraActor mSelectedCamera; std::vector mCameras;