From: jmm Date: Mon, 31 Mar 2025 10:11:28 +0000 (+0900) Subject: Revert "Refactor RenderEffect" X-Git-Tag: dali_2.4.13~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=aaad95dab59d824deea5bd633617b268e5b84b4c;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Revert "Refactor RenderEffect" Change-Id: I8331628216d61ab0f17d2efa177181013c3b4fdd --- diff --git a/automated-tests/src/dali-scene3d/utc-Dali-Panel.cpp b/automated-tests/src/dali-scene3d/utc-Dali-Panel.cpp index 17da66658e..3c4e638c66 100644 --- a/automated-tests/src/dali-scene3d/utc-Dali-Panel.cpp +++ b/automated-tests/src/dali-scene3d/utc-Dali-Panel.cpp @@ -771,7 +771,7 @@ int UtcDaliPanelRenderTaskOrdering(void) Control control1 = Control::New(); control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); control1.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f)); - control1.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control1.SetRenderEffect(BackgroundBlurEffect::New()); panel.Add(control1); diff --git a/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp b/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp index 5c51751acf..61582f76e8 100644 --- a/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp +++ b/automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp @@ -1671,7 +1671,7 @@ int UtcDaliSceneViewRenderTaskOrdering(void) Control control1 = Control::New(); control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); control1.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f)); - control1.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control1.SetRenderEffect(BackgroundBlurEffect::New()); sceneView.Add(control1); diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-RenderEffect-internal.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-RenderEffect-internal.cpp index 821572a6b4..b9a986c7e9 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-RenderEffect-internal.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-RenderEffect-internal.cpp @@ -62,11 +62,6 @@ public: return handle; } - RenderEffectImplPtr Clone() const override - { - return New(); - } - OffScreenRenderable::Type GetOffScreenRenderableType() override { return OffScreenRenderable::Type::NONE; @@ -142,7 +137,7 @@ int UtcDaliInternalRenderEffectNewP(void) Toolkit::TestRenderEffect testEffect = Toolkit::TestRenderEffect::New(); DALI_TEST_CHECK(testEffect); - // Check that effect is not activate yet. + // Check that effect is not activated yet. Toolkit::Internal::TestRenderEffectImpl& impl = Toolkit::Internal::GetImplementation(testEffect); DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION); DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); @@ -152,16 +147,17 @@ int UtcDaliInternalRenderEffectNewP(void) int UtcDaliInternalRenderEffectGetOwnerControl01(void) { - tet_infoline("UtcDaliInternalRenderEffecGetOwnerControl01"); ToolkitTestApplication application; + tet_infoline("UtcDaliInternalRenderEffecGetOwnerControl01"); Toolkit::TestRenderEffect testEffect = Toolkit::TestRenderEffect::New(); DALI_TEST_CHECK(testEffect); - // Check that effect prototype is not activated. - Toolkit::Internal::TestRenderEffectImpl& prototype = Toolkit::Internal::GetImplementation(testEffect); - DALI_TEST_EQUALS(prototype.mOnActivated, false, TEST_LOCATION); - DALI_TEST_EQUALS(prototype.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); + // Check that effect is not activated yet. + Toolkit::Internal::TestRenderEffectImpl& impl = Toolkit::Internal::GetImplementation(testEffect); + + DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); Integration::Scene scene = application.GetScene(); @@ -173,45 +169,29 @@ int UtcDaliInternalRenderEffectGetOwnerControl01(void) tet_printf("Test effect set, and activate due to control scene on.\n"); control.SetRenderEffect(testEffect); - Toolkit::Internal::TestRenderEffectImplPtr impl = - dynamic_cast(control.GetRenderEffect().GetObjectPtr()); - - { // Check that effect prototype is not activated, - DALI_TEST_EQUALS(impl == &prototype, false, TEST_LOCATION); - - DALI_TEST_EQUALS(prototype.mOnActivated, false, TEST_LOCATION); - DALI_TEST_EQUALS(prototype.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); - - // but the effect is set and activated. - DALI_TEST_EQUALS(impl->mOnActivated, true, TEST_LOCATION); - DALI_TEST_EQUALS(impl->GetOwnerControl(), control, TEST_LOCATION); - } + DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), control, TEST_LOCATION); control.Unparent(); - { - DALI_TEST_EQUALS(impl->mOnActivated, false, TEST_LOCATION); - DALI_TEST_EQUALS(impl->GetOwnerControl(), control, TEST_LOCATION); - } + DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), control, TEST_LOCATION); scene.Add(control); - { - DALI_TEST_EQUALS(impl->mOnActivated, true, TEST_LOCATION); - DALI_TEST_EQUALS(impl->GetOwnerControl(), control, TEST_LOCATION); - } + DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), control, TEST_LOCATION); // Control released. + control.Unparent(); control.Reset(); tet_printf("Test effect owner control is empty after control destructed.\n"); DALI_TEST_CHECK(testEffect); - { - DALI_TEST_EQUALS(impl->mOnActivated, false, TEST_LOCATION); - DALI_TEST_EQUALS(impl->GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); - } + DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); control = Control::New(); control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); @@ -221,17 +201,8 @@ int UtcDaliInternalRenderEffectGetOwnerControl01(void) tet_printf("Test effect set again.\n"); control.SetRenderEffect(testEffect); - Toolkit::Internal::TestRenderEffectImplPtr impl2 = - dynamic_cast(control.GetRenderEffect().GetObjectPtr()); - { - DALI_TEST_EQUALS(impl == impl2, false, TEST_LOCATION); - - DALI_TEST_EQUALS(impl->mOnActivated, false, TEST_LOCATION); - DALI_TEST_EQUALS(impl->GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); // may be false? - - DALI_TEST_EQUALS(impl2->mOnActivated, true, TEST_LOCATION); - DALI_TEST_EQUALS(impl2->GetOwnerControl(), control, TEST_LOCATION); - } + DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), control, TEST_LOCATION); END_TEST; } @@ -257,64 +228,45 @@ int UtcDaliInternalRenderEffectGetOwnerControl02(void) DALI_TEST_CHECK(testEffect); // Check that effect is not activate yet. - Toolkit::Internal::TestRenderEffectImpl& prototype = Toolkit::Internal::GetImplementation(testEffect); - DALI_TEST_EQUALS(prototype.mOnActivated, false, TEST_LOCATION); - DALI_TEST_EQUALS(prototype.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); + Toolkit::Internal::TestRenderEffectImpl& impl = Toolkit::Internal::GetImplementation(testEffect); + DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); tet_printf("Test effect set, and activate due to control scene on.\n"); control1.SetRenderEffect(testEffect); - Toolkit::Internal::TestRenderEffectImplPtr impl1 = - dynamic_cast(control1.GetRenderEffect().GetObjectPtr()); - - DALI_TEST_EQUALS(&prototype == impl1, false, TEST_LOCATION); - DALI_TEST_EQUALS(prototype.mOnActivated, false, TEST_LOCATION); - DALI_TEST_EQUALS(prototype.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); - - DALI_TEST_EQUALS(impl1->mOnActivated, true, TEST_LOCATION); - DALI_TEST_EQUALS(impl1->GetOwnerControl(), control1, TEST_LOCATION); + DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), control1, TEST_LOCATION); tet_printf("Test effect set to another control\n"); control2.SetRenderEffect(testEffect); - Toolkit::Internal::TestRenderEffectImplPtr impl2 = - dynamic_cast(control2.GetRenderEffect().GetObjectPtr()); - DALI_TEST_EQUALS(impl1 == impl2, false, TEST_LOCATION); - - DALI_TEST_EQUALS(impl2->mOnActivated, true, TEST_LOCATION); - DALI_TEST_EQUALS(impl2->GetOwnerControl(), control2, TEST_LOCATION); + DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), control2, TEST_LOCATION); tet_printf("Test control1 call ClearRenderEffect don't have any effort to control2's effect\n"); control1.ClearRenderEffect(); - DALI_TEST_EQUALS(impl1->mOnActivated, false, TEST_LOCATION); - DALI_TEST_EQUALS(impl1->GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); - - DALI_TEST_EQUALS(impl2->mOnActivated, true, TEST_LOCATION); - DALI_TEST_EQUALS(impl2->GetOwnerControl(), control2, TEST_LOCATION); + DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), control2, TEST_LOCATION); tet_printf("Test control2 call ClearRenderEffect\n"); control2.ClearRenderEffect(); - DALI_TEST_EQUALS(impl2->mOnActivated, false, TEST_LOCATION); - DALI_TEST_EQUALS(impl2->GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); + DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); tet_printf("Reset control1 effect\n"); control1.SetRenderEffect(testEffect); - Toolkit::Internal::TestRenderEffectImplPtr impl3 = - dynamic_cast(control1.GetRenderEffect().GetObjectPtr()); - - DALI_TEST_EQUALS(impl1 == impl3, false, TEST_LOCATION); - DALI_TEST_EQUALS(impl1->mOnActivated, false, TEST_LOCATION); - DALI_TEST_EQUALS(impl1->GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); - - DALI_TEST_EQUALS(impl3->mOnActivated, true, TEST_LOCATION); - DALI_TEST_EQUALS(impl3->GetOwnerControl(), control1, TEST_LOCATION); + DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), control1, TEST_LOCATION); tet_printf("Test control1 call SetRenderEffect with empty handle\n"); control1.SetRenderEffect(Toolkit::RenderEffect()); - DALI_TEST_CHECK(!control1.GetRenderEffect()); + + DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION); + DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); END_TEST; } diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp index 787b46d428..dc710c3c99 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp @@ -1634,7 +1634,7 @@ int UtcDaliControlCornerRadius(void) application.GetScene().Add(control); - RenderEffect effect = RenderEffect::CreateBackgroundBlurEffect(0.25f, 50.0f); + RenderEffect effect = BackgroundBlurEffect::New(0.25f, 50.0f); control.SetRenderEffect(effect); control.SetProperty(DevelControl::Property::OFFSCREEN_RENDERING, DevelControl::OffScreenRenderingType::REFRESH_ALWAYS); diff --git a/automated-tests/src/dali-toolkit/utc-Dali-RenderEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-RenderEffect.cpp index 67d0187b6f..486cb95405 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-RenderEffect.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-RenderEffect.cpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include using namespace Dali; @@ -29,10 +29,10 @@ int UtcDaliRenderEffectNewP(void) ToolkitTestApplication application; tet_infoline("UtcDaliRenderEffectNewP"); - RenderEffect blurEffect = RenderEffect::CreateBackgroundBlurEffect(); + RenderEffect blurEffect = BackgroundBlurEffect::New(); DALI_TEST_CHECK(blurEffect); - RenderEffect blurEffect2 = RenderEffect::CreateBackgroundBlurEffect(0.5f, 10); + RenderEffect blurEffect2 = BackgroundBlurEffect::New(0.5f, 10); DALI_TEST_CHECK(blurEffect2); END_TEST; @@ -45,10 +45,10 @@ int UtcDaliRenderEffectNewN(void) tet_printf("Check some invalid parameters clamp internally\n"); - RenderEffect blurEffect = RenderEffect::CreateBackgroundBlurEffect(-0.5f, 10); - RenderEffect blurEffect2 = RenderEffect::CreateBackgroundBlurEffect(10.0f, 10); - RenderEffect blurEffect3 = RenderEffect::CreateBackgroundBlurEffect(0.5f, 0); - RenderEffect blurEffect4 = RenderEffect::CreateBackgroundBlurEffect(0.5f, 2147483647); + RenderEffect blurEffect = BackgroundBlurEffect::New(-0.5f, 10); + RenderEffect blurEffect2 = BackgroundBlurEffect::New(10.0f, 10); + RenderEffect blurEffect3 = BackgroundBlurEffect::New(0.5f, 0); + RenderEffect blurEffect4 = BackgroundBlurEffect::New(0.5f, 2147483647); DALI_TEST_CHECK(blurEffect); DALI_TEST_CHECK(blurEffect2); @@ -78,7 +78,7 @@ int UtcDaliRenderEffectActivateP01(void) RenderTaskList taskList = scene.GetRenderTaskList(); DALI_TEST_EQUALS(1u, taskList.GetTaskCount(), TEST_LOCATION); - childControl.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + childControl.SetRenderEffect(BackgroundBlurEffect::New()); taskList = scene.GetRenderTaskList(); DALI_TEST_EQUALS(4u, taskList.GetTaskCount(), TEST_LOCATION); @@ -98,7 +98,7 @@ int UtcDaliRenderEffectActivateP02(void) control.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f)); scene.Add(control); - RenderEffect blurEffect = RenderEffect::CreateBackgroundBlurEffect(); + RenderEffect blurEffect = BackgroundBlurEffect::New(); control.SetRenderEffect(blurEffect); RenderTaskList taskList = scene.GetRenderTaskList(); @@ -109,9 +109,9 @@ int UtcDaliRenderEffectActivateP02(void) control2.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f)); scene.Add(control2); - control2.SetRenderEffect(blurEffect); // Clone effect + control2.SetRenderEffect(blurEffect); taskList = scene.GetRenderTaskList(); - DALI_TEST_EQUALS(7u, taskList.GetTaskCount(), TEST_LOCATION); + DALI_TEST_EQUALS(4u, taskList.GetTaskCount(), TEST_LOCATION); END_TEST; } @@ -129,7 +129,7 @@ int UtcDaliRenderEffectDeactivateP(void) scene.Add(control); uint32_t count = control.GetRendererCount(); - control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control.SetRenderEffect(BackgroundBlurEffect::New()); RenderTaskList taskList = scene.GetRenderTaskList(); DALI_TEST_EQUALS(4u, taskList.GetTaskCount(), TEST_LOCATION); @@ -175,7 +175,7 @@ int UtcDaliRenderEffectActivateDeactivateInplace(void) control.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f)); scene.Add(control); - RenderEffect blurEffect = RenderEffect::CreateBackgroundBlurEffect(); + RenderEffect blurEffect = BackgroundBlurEffect::New(); control.SetRenderEffect(blurEffect); RenderTaskList taskList = scene.GetRenderTaskList(); @@ -202,8 +202,7 @@ int UtcDaliRenderEffectReassign(void) control.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f)); scene.Add(control); - RenderEffect blurEffect = RenderEffect::CreateBackgroundBlurEffect(); - control.SetRenderEffect(blurEffect); + RenderEffect blurEffect = BackgroundBlurEffect::New(); control.SetRenderEffect(blurEffect); // Duplicate actions will be ignored control.SetRenderEffect(blurEffect); // Duplicate actions will be ignored control.SetRenderEffect(blurEffect); // Duplicate actions will be ignored @@ -222,7 +221,7 @@ int UtcDaliRenderEffectResize(void) Control control = Control::New(); control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); scene.Add(control); - control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control.SetRenderEffect(BackgroundBlurEffect::New()); application.SendNotification(); application.Render(); @@ -252,7 +251,7 @@ int UtcDaliRenderEffectSynchronizeControlCornerRadius(void) blackDimmerMap.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 0.20f); blackDimmerMap.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::Type::RELATIVE); blackDimmerMap.Insert(Toolkit::DevelVisual::Property::CORNER_SQUARENESS, 0.3f); - RenderEffect effect = RenderEffect::CreateBackgroundBlurEffect(); + RenderEffect effect = BackgroundBlurEffect::New(0.4f, 40); Control control = Control::New(); DALI_TEST_CHECK(control.GetRendererCount() == 0u); @@ -305,7 +304,7 @@ int UtcDaliRenderEffectInvalidTargetSize(void) control.SetProperty(Actor::Property::SIZE_WIDTH, maxTextureSize + 1000.0f); control.SetProperty(Actor::Property::SIZE_HEIGHT, maxTextureSize + 1000.0f); scene.Add(control); - control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect(0.4f, 40)); + control.SetRenderEffect(BackgroundBlurEffect::New(0.4f, 40)); application.SendNotification(); application.Render(); @@ -335,7 +334,7 @@ int UtcDaliRenderEffectControlSceneOnAndSceneOff01(void) uint32_t count = control.GetRendererCount(); // Add render effect during scene off. - control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control.SetRenderEffect(BackgroundBlurEffect::New()); RenderTaskList taskList = scene.GetRenderTaskList(); @@ -390,7 +389,7 @@ int UtcDaliRenderEffectControlSceneOnAndSceneOff02(void) scene.Add(control); // Add render effect during scene on. - control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control.SetRenderEffect(BackgroundBlurEffect::New()); RenderTaskList taskList = scene.GetRenderTaskList(); @@ -441,7 +440,7 @@ int UtcDaliRenderEffectControlVisiblityChanged01(void) // Add render effect during invisible. control.SetProperty(Actor::Property::VISIBLE, false); - control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control.SetRenderEffect(BackgroundBlurEffect::New()); RenderTaskList taskList = scene.GetRenderTaskList(); @@ -506,7 +505,7 @@ int UtcDaliRenderEffectControlVisiblityChanged02(void) scene.Add(control); // Add render effect during scene on. - control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control.SetRenderEffect(BackgroundBlurEffect::New()); RenderTaskList taskList = scene.GetRenderTaskList(); @@ -556,7 +555,7 @@ int UtcDaliRenderEffectRenderTaskOrdering(void) tet_printf("render task cnt : %d\n", taskList.GetTaskCount()); // Add render effect during scene on. - control1.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control1.SetRenderEffect(BackgroundBlurEffect::New()); tet_printf("render task cnt after set : %d\n", taskList.GetTaskCount()); DALI_TEST_EQUALS(1, taskList.GetTaskCount(), TEST_LOCATION); @@ -595,7 +594,7 @@ int UtcDaliRenderEffectRenderTaskOrdering(void) tet_printf("render task cnt : %d\n", taskList.GetTaskCount()); // Add render effect during scene on. - control2.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control2.SetRenderEffect(BackgroundBlurEffect::New()); tet_printf("render task cnt after set : %d\n", taskList.GetTaskCount()); @@ -796,7 +795,7 @@ int UtcDaliRenderEffectReInitialize(void) scene.Add(control); // Add render effect during scene on. - control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control.SetRenderEffect(BackgroundBlurEffect::New()); application.SendNotification(); @@ -807,7 +806,7 @@ int UtcDaliRenderEffectReInitialize(void) tet_printf("order : %d\n", taskList.GetTask(taskList.GetTaskCount() - 1).GetOrderIndex()); DALI_TEST_EQUALS(INT32_MIN + 2, taskList.GetTask(taskList.GetTaskCount() - 1).GetOrderIndex(), TEST_LOCATION); - control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect()); + control.SetRenderEffect(BackgroundBlurEffect::New()); application.SendNotification(); @@ -833,7 +832,7 @@ int UtcDaliRenderEffectBlurOnce(void) scene.Add(control); // Add render effect during scene on. - control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect(0.5f, 20u, true)); + control.SetRenderEffect(BackgroundBlurEffect::New(0.5f, 20u, true)); application.SendNotification(); diff --git a/dali-toolkit/dali-toolkit.h b/dali-toolkit/dali-toolkit.h index d848256c17..2410ccea65 100644 --- a/dali-toolkit/dali-toolkit.h +++ b/dali-toolkit/dali-toolkit.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_H /* - * Copyright (c) 2024 Samsung Electronics Co., Ltd. + * Copyright (c) 2025 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. @@ -61,6 +61,7 @@ #include +#include #include #include diff --git a/dali-toolkit/internal/controls/render-effects/blur-effect-impl.cpp b/dali-toolkit/internal/controls/render-effects/blur-effect-impl.cpp index bae12308ff..17f83bbfaa 100644 --- a/dali-toolkit/internal/controls/render-effects/blur-effect-impl.cpp +++ b/dali-toolkit/internal/controls/render-effects/blur-effect-impl.cpp @@ -144,13 +144,6 @@ BlurEffectImplPtr BlurEffectImpl::New(float downscaleFactor, uint32_t blurRadius return handle; } -RenderEffectImplPtr BlurEffectImpl::Clone() const -{ - BlurEffectImplPtr blurEffectImpl = new BlurEffectImpl(mDownscaleFactor, mPixelRadius, mBlurOnce, mIsBackground); - blurEffectImpl->Initialize(); - return RenderEffectImplPtr(blurEffectImpl); -} - OffScreenRenderable::Type BlurEffectImpl::GetOffScreenRenderableType() { return mSkipBlur ? OffScreenRenderable::NONE : OffScreenRenderable::BACKWARD; @@ -186,16 +179,6 @@ void BlurEffectImpl::OnInitialize() return; } - // Create CameraActors - { - mRenderDownsampledCamera = CameraActor::New(); - mRenderDownsampledCamera.SetInvertYAxis(true); - mRenderDownsampledCamera.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); - mRenderDownsampledCamera.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); - mRenderDownsampledCamera.SetType(Dali::Camera::FREE_LOOK); - mInternalRoot.Add(mRenderDownsampledCamera); - } - // Calculate bell curve width { const float epsilon = 1e-2f / (mDownscaledPixelRadius * 2); @@ -267,6 +250,15 @@ void BlurEffectImpl::OnActivate() uint32_t downsampledHeight = std::max(static_cast(size.height * mDownscaleFactor), 1u); // Set size + if(!mRenderDownsampledCamera) + { + mRenderDownsampledCamera = CameraActor::New(); + mRenderDownsampledCamera.SetInvertYAxis(true); + mRenderDownsampledCamera.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + mRenderDownsampledCamera.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + mRenderDownsampledCamera.SetType(Dali::Camera::FREE_LOOK); + mInternalRoot.Add(mRenderDownsampledCamera); + } mRenderDownsampledCamera.SetPerspectiveProjection(Size(downsampledWidth, downsampledHeight)); mHorizontalBlurActor.SetProperty(Actor::Property::SIZE, Vector2(downsampledWidth, downsampledHeight)); diff --git a/dali-toolkit/internal/controls/render-effects/blur-effect-impl.h b/dali-toolkit/internal/controls/render-effects/blur-effect-impl.h index 952f896bd8..5040805c06 100644 --- a/dali-toolkit/internal/controls/render-effects/blur-effect-impl.h +++ b/dali-toolkit/internal/controls/render-effects/blur-effect-impl.h @@ -30,6 +30,7 @@ // INTERNAL INCLUDES #include +#include namespace Dali { @@ -69,11 +70,6 @@ public: */ static BlurEffectImplPtr New(float downscaleFactor, uint32_t blurRadius, bool blurOnce, bool isBackground); - /** - * @copydoc Toolkit::Intenral::RenderEffectImpl::Clone - */ - RenderEffectImplPtr Clone() const override; - /** * @copydoc Toolkit::Internal::RenderEffectImpl::GetOffScreenRenderableType */ @@ -212,6 +208,19 @@ private: bool mIsBackground : 1; }; } // namespace Internal + +inline Toolkit::Internal::BlurEffectImpl& GetImplementation(Toolkit::BackgroundBlurEffect& obj) +{ + BaseObject& handle = obj.GetBaseObject(); + return static_cast(handle); +} + +inline const Toolkit::Internal::BlurEffectImpl& GetImplementation(const Toolkit::BackgroundBlurEffect& obj) +{ + const BaseObject& handle = obj.GetBaseObject(); + return static_cast(handle); +} + } // namespace Toolkit } // namespace Dali diff --git a/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.cpp b/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.cpp index 23217b524c..1978fbd6b0 100644 --- a/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.cpp +++ b/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.cpp @@ -54,12 +54,6 @@ void OffScreenRenderingImpl::SetType(DevelControl::OffScreenRenderingType type) } } -RenderEffectImplPtr OffScreenRenderingImpl::Clone() const -{ - DALI_LOG_ERROR("Cloning offscreen rendering is not allowed.\n"); - return RenderEffectImplPtr(); -} - OffScreenRenderable::Type OffScreenRenderingImpl::GetOffScreenRenderableType() { return OffScreenRenderable::Type::FORWARD; diff --git a/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.h b/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.h index 3e986aa869..29cd2c0de8 100644 --- a/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.h +++ b/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.h @@ -59,8 +59,6 @@ public: */ void SetType(DevelControl::OffScreenRenderingType type); - // @copydoc Dali::Toolkit::Internal::RenderEffectImpl::Clone - RenderEffectImplPtr Clone() const override; // @copydoc Dali::Toolkit::Internal::RenderEffectImpl::GetOffScreenRenderableType OffScreenRenderable::Type GetOffScreenRenderableType() override; // @copydoc Dali::Toolkit::Internal::RenderEffectImpl::GetOffScreenRenderTasks diff --git a/dali-toolkit/internal/controls/render-effects/render-effect-impl.cpp b/dali-toolkit/internal/controls/render-effects/render-effect-impl.cpp index 9c85cb1ee9..3c77f68f56 100644 --- a/dali-toolkit/internal/controls/render-effects/render-effect-impl.cpp +++ b/dali-toolkit/internal/controls/render-effects/render-effect-impl.cpp @@ -125,15 +125,6 @@ bool RenderEffectImpl::IsActivated() const void RenderEffectImpl::Initialize() { - if(!mCamera) - { - mCamera = CameraActor::New(); - mCamera.SetInvertYAxis(true); - mCamera.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); - mCamera.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); - mCamera.SetType(Dali::Camera::FREE_LOOK); - } - if(!mRenderer) { mRenderer = CreateRenderer(SHADER_RENDER_EFFECT_VERT, SHADER_RENDER_EFFECT_FRAG); @@ -191,8 +182,15 @@ void RenderEffectImpl::Activate() } mPlacementSceneHolder = sceneHolder; - Vector2 size = GetTargetSize(); - mCamera.SetPerspectiveProjection(size); + if(!mCamera) + { + mCamera = CameraActor::New(); + mCamera.SetInvertYAxis(true); + mCamera.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + mCamera.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + mCamera.SetType(Dali::Camera::FREE_LOOK); + } + mCamera.SetPerspectiveProjection(GetTargetSize()); ownerControl.Add(mCamera); // Activate logic for subclass. @@ -225,7 +223,10 @@ void RenderEffectImpl::Deactivate() // Deactivate logic for subclass. OnDeactivate(); - mCamera.Unparent(); + if(mCamera) + { + mCamera.Unparent(); + } } } diff --git a/dali-toolkit/internal/controls/render-effects/render-effect-impl.h b/dali-toolkit/internal/controls/render-effects/render-effect-impl.h index acd1b946bd..d352cbebf0 100644 --- a/dali-toolkit/internal/controls/render-effects/render-effect-impl.h +++ b/dali-toolkit/internal/controls/render-effects/render-effect-impl.h @@ -62,12 +62,6 @@ public: */ void SetCornerConstants(Property::Map map); - /** - * @brief Clones current instance. - * @return Clone implementation - */ - virtual RenderEffectImplPtr Clone() const = 0; - /** * @brief Retrieves OffScreenRenderableType of this RenderEffect. * diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index 003f0e5013..e4a8ab85e1 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -171,21 +171,19 @@ void Control::ClearBackground() void Control::SetRenderEffect(Toolkit::RenderEffect effect) { + ClearRenderEffect(); + if(effect) { Internal::RenderEffectImpl* object = dynamic_cast(effect.GetObjectPtr()); - DALI_ASSERT_ALWAYS(object && "Not a valid RenderEffect set."); - - ClearRenderEffect(); - - RenderEffectImplPtr clone = object->Clone(); + DALI_ASSERT_ALWAYS(object && "Given render effect is not valid."); - SetOffScreenRenderableType(clone->GetOffScreenRenderableType()); + SetOffScreenRenderableType(object->GetOffScreenRenderableType()); Dali::Toolkit::Control ownerControl(GetOwner()); - clone->SetOwnerControl(ownerControl); + object->SetOwnerControl(ownerControl); - mImpl->mRenderEffect = clone; + mImpl->mRenderEffect = object; } else { diff --git a/dali-toolkit/public-api/controls/render-effects/background-blur-effect.cpp b/dali-toolkit/public-api/controls/render-effects/background-blur-effect.cpp new file mode 100644 index 0000000000..7fc9b52dd3 --- /dev/null +++ b/dali-toolkit/public-api/controls/render-effects/background-blur-effect.cpp @@ -0,0 +1,47 @@ + +/* + * Copyright (c) 2025 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. + * + */ +// CLASS HEADER +#include +// INTERNAL INCLUDES +#include +namespace Dali +{ +namespace Toolkit +{ +BackgroundBlurEffect::BackgroundBlurEffect() = default; +BackgroundBlurEffect::BackgroundBlurEffect(const BackgroundBlurEffect& handle) +: RenderEffect(handle) +{ +} +BackgroundBlurEffect::BackgroundBlurEffect(Internal::BlurEffectImpl* blurEffectImpl) +: RenderEffect(blurEffectImpl) +{ +} +BackgroundBlurEffect::~BackgroundBlurEffect() = default; +BackgroundBlurEffect BackgroundBlurEffect::New() +{ + Internal::BlurEffectImplPtr internal = Internal::BlurEffectImpl::New(true); + return BackgroundBlurEffect(internal.Get()); +} +BackgroundBlurEffect BackgroundBlurEffect::New(float downscaleFactor, uint32_t blurRadius, bool blurOnce) +{ + Internal::BlurEffectImplPtr internal = Internal::BlurEffectImpl::New(downscaleFactor, blurRadius, blurOnce, true); + return BackgroundBlurEffect(internal.Get()); +} +} // namespace Toolkit +} // namespace Dali diff --git a/dali-toolkit/public-api/controls/render-effects/background-blur-effect.h b/dali-toolkit/public-api/controls/render-effects/background-blur-effect.h new file mode 100644 index 0000000000..6f675f309c --- /dev/null +++ b/dali-toolkit/public-api/controls/render-effects/background-blur-effect.h @@ -0,0 +1,95 @@ +#ifndef DALI_TOOLKIT_BACKGROUND_BLUR_EFFECT_H +#define DALI_TOOLKIT_BACKGROUND_BLUR_EFFECT_H +/* + * Copyright (c) 2025 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 +namespace Dali +{ +namespace Toolkit +{ +namespace Internal DALI_INTERNAL +{ +class BlurEffectImpl; +} // namespace DALI_INTERNAL +/** + * @brief BackgroundBlurEffect is a visual effect that blurs owner control's background. + * This class is a concrete class from RenderEffect interface. + * Add this effect to a control, clear manually to deactivate. + * + * Toolkit::Control control = Toolkit::Control::New(); + * parent.Add(control); + * control.SetRenderEffect(BackgroundBlurEffect::New()); // Activate + * ... + * control.ClearRenderEffect(); // Deactivate + * + * Note that tree hierarchy matters for BackgroundBlurEffect. You should determine "what is the background". + * Add() should preceed SetRenderEffect(), and the effect cannot have multiple owner controls. + * + * @SINCE_2_3.28 + */ +class DALI_TOOLKIT_API BackgroundBlurEffect : public RenderEffect +{ +public: + /** + * @brief Creates an initialized BackgroundBlurEffect, using default settings. The default settings are: + * + * downscaleFactor = 0.4f + * pixelRadius = 5u + * + * @SINCE_2_3.28 + * @return A handle to a newly allocated Dali resource + */ + static BackgroundBlurEffect New(); + /** + * @brief Creates an initialized BackgroundBlurEffect. + * @param[in] downscaleFactor This value should reside in the range [0.0, 1.0]. + * @param[in] blurRadius The radius of Gaussian kernel. + * @param[in] blurOnce Whether to blur once or always. Default is false(always). + * @SINCE_2_3.28 + * @return A handle to a newly allocated Dali resource + */ + static BackgroundBlurEffect New(float downscaleFactor, uint32_t blurRadius, bool blurOnce = false); + /** + * @brief Creates an uninitialized blur effect. + * @SINCE_2_3.28 + */ + BackgroundBlurEffect(); + /** + * @brief Copy constructor. + * @SINCE_2_3.28 + */ + BackgroundBlurEffect(const BackgroundBlurEffect& handle); + /** + * @brief Destructor + * @SINCE_2_3.28 + */ + ~BackgroundBlurEffect(); + +public: // Not intended for use by Application developers + ///@cond internal + /** + * @brief Creates a handle using the Toolkit::Internal implementation. + * @SINCE_2_3.28 + * @param[in] blurEffectImpl The UI Control implementation. + */ + explicit DALI_INTERNAL BackgroundBlurEffect(Internal::BlurEffectImpl* blurEffectImpl); + ///@endcond +}; +} // namespace Toolkit +} // namespace Dali +#endif //DALI_TOOLKIT_BACKGROUND_BLUR_EFFECT_H diff --git a/dali-toolkit/public-api/controls/render-effects/render-effect.cpp b/dali-toolkit/public-api/controls/render-effects/render-effect.cpp index 3dd0330f92..2884ce274d 100644 --- a/dali-toolkit/public-api/controls/render-effects/render-effect.cpp +++ b/dali-toolkit/public-api/controls/render-effects/render-effect.cpp @@ -19,7 +19,6 @@ #include // INTERNAL INCLUDES -#include #include namespace Dali @@ -36,16 +35,5 @@ RenderEffect::RenderEffect(Internal::RenderEffectImpl* renderEffectImpl) { } -RenderEffect RenderEffect::CreateBackgroundBlurEffect() -{ - Internal::BlurEffectImplPtr internal = Internal::BlurEffectImpl::New(true); - return RenderEffect(internal.Get()); -} - -RenderEffect RenderEffect::CreateBackgroundBlurEffect(float downscaleFactor, uint32_t blurRadius, bool blurOnce) -{ - Internal::BlurEffectImplPtr internal = Internal::BlurEffectImpl::New(downscaleFactor, blurRadius, blurOnce, true); - return RenderEffect(internal.Get()); -} } // namespace Toolkit } // namespace Dali diff --git a/dali-toolkit/public-api/controls/render-effects/render-effect.h b/dali-toolkit/public-api/controls/render-effects/render-effect.h index 57a11ccc8b..f7194c1006 100644 --- a/dali-toolkit/public-api/controls/render-effects/render-effect.h +++ b/dali-toolkit/public-api/controls/render-effects/render-effect.h @@ -70,21 +70,6 @@ public: */ RenderEffect(const RenderEffect& handle); - /** - * @brief Creates background blur effect with default parameters. - * @SINCE_2_4.1 - */ - static RenderEffect CreateBackgroundBlurEffect(); - - /** - * @brief Creates background blur effect. - * @param[in] downscaleFactor Input texture downscaler for better performance. - * @param[in] blurRadius Gaussian kernel size. - * @param[in] blurOnce Whether to perform blur once or always. Default is false(always). - * @SINCE_2_4.1 - */ - static RenderEffect CreateBackgroundBlurEffect(float downscaleFactor, uint32_t blurRadius, bool blurOnce = false); - public: // Not intended for Application developers ///@cond internal /** diff --git a/dali-toolkit/public-api/file.list b/dali-toolkit/public-api/file.list index 4e0acdd538..951ad525f5 100644 --- a/dali-toolkit/public-api/file.list +++ b/dali-toolkit/public-api/file.list @@ -15,6 +15,7 @@ SET( public_api_src_files ${public_api_src_dir}/controls/model3d-view/model3d-view.cpp ${public_api_src_dir}/controls/progress-bar/progress-bar.cpp ${public_api_src_dir}/controls/render-effects/render-effect.cpp + ${public_api_src_dir}/controls/render-effects/background-blur-effect.cpp ${public_api_src_dir}/controls/scrollable/item-view/default-item-layout.cpp ${public_api_src_dir}/controls/scrollable/item-view/item-layout.cpp ${public_api_src_dir}/controls/scrollable/item-view/item-view.cpp @@ -107,6 +108,7 @@ SET( public_api_progress_bar_header_files SET( public_api_render_effects_header_files ${public_api_src_dir}/controls/render-effects/render-effect.h + ${public_api_src_dir}/controls/render-effects/background-blur-effect.h ) SET( public_api_scrollable_header_files