Make GaussianBlurView do relayout and clear color by transparent 98/322898/3
authorSeungho Baek <sbsh.baek@samsung.com>
Thu, 17 Apr 2025 09:18:19 +0000 (18:18 +0900)
committerSeungho Baek <sbsh.baek@samsung.com>
Thu, 17 Apr 2025 12:10:06 +0000 (21:10 +0900)
Change-Id: I8b87d5ff63dd3fb8490444547d59ac9a0ef307bf
Signed-off-by: Seungho Baek <sbsh.baek@samsung.com>
automated-tests/src/dali-toolkit/utc-Dali-GaussianBlurView.cpp
dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp

index fee0114beec90e8580462b60197261aa0343488d..56c92dec4a6d7dc52c1ed5b0de549694b6ee6d00 100644 (file)
@@ -214,21 +214,21 @@ int UtcDaliGaussianBlurActivateDeactivateRepeat(void)
   application.SendNotification();
   application.Render(20);
 
-  DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 4, TEST_LOCATION);
+  DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 8, TEST_LOCATION);
 
   view.Deactivate();
 
   application.SendNotification();
   application.Render(20);
 
-  DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 4, TEST_LOCATION);
+  DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 8, TEST_LOCATION);
 
   view.Activate();
 
   application.SendNotification();
   application.Render(20);
 
-  DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 8, TEST_LOCATION);
+  DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 12, TEST_LOCATION);
   END_TEST;
 }
 
@@ -317,14 +317,14 @@ int UtcDaliGaussianBlurActivateOnce2(void)
   application.SendNotification();
   application.Render(20);
 
-  DALI_TEST_CHECK(gl.GetLastGenTextureId() == 4);
+  DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 8, TEST_LOCATION);
 
   view.ActivateOnce();
 
   application.SendNotification();
   application.Render(20);
 
-  DALI_TEST_CHECK(gl.GetLastGenTextureId() == 8);
+  DALI_TEST_EQUALS(gl.GetLastGenTextureId(), 12, TEST_LOCATION);
 
   END_TEST;
 }
index b358e8cbabd2126e3611f3c6314953064c18e4fa..1866d0d7b3b017b848215216d15f360703a9273a 100644 (file)
@@ -112,7 +112,7 @@ inline float CalculateGaussianWeight(float localOffset, float sigma)
 } // namespace
 
 GaussianBlurView::GaussianBlurView()
-: Control(ControlBehaviour(DISABLE_SIZE_NEGOTIATION | DISABLE_STYLE_CHANGE_SIGNALS)),
+: Control(ControlBehaviour(DISABLE_STYLE_CHANGE_SIGNALS)),
   mPixelRadius(GAUSSIAN_BLUR_VIEW_DEFAULT_NUM_SAMPLES),
   mBellCurveWidth(GAUSSIAN_BLUR_VIEW_DEFAULT_BLUR_BELL_CURVE_WIDTH),
   mPixelFormat(GAUSSIAN_BLUR_VIEW_DEFAULT_RENDER_TARGET_PIXEL_FORMAT),
@@ -122,7 +122,7 @@ GaussianBlurView::GaussianBlurView()
   mDownsampledHeight(0.0f),
   mBlurUserImage(false),
   mRenderOnce(false),
-  mBackgroundColor(Color::BLACK),
+  mBackgroundColor(Color::TRANSPARENT),
   mTargetSize(Vector2::ZERO),
   mLastSize(Vector2::ZERO),
   mChildrenRoot(Actor::New()),
@@ -138,7 +138,7 @@ GaussianBlurView::GaussianBlurView(const unsigned int  numSamples,
                                    const float         downsampleWidthScale,
                                    const float         downsampleHeightScale,
                                    bool                blurUserImage)
-: Control(ControlBehaviour(DISABLE_SIZE_NEGOTIATION | DISABLE_STYLE_CHANGE_SIGNALS)),
+: Control(ControlBehaviour(DISABLE_STYLE_CHANGE_SIGNALS)),
   mPixelRadius(numSamples),
   mBellCurveWidth(blurBellCurveWidth),
   mPixelFormat(renderTargetPixelFormat),
@@ -148,7 +148,7 @@ GaussianBlurView::GaussianBlurView(const unsigned int  numSamples,
   mDownsampledHeight(0.0f),
   mBlurUserImage(blurUserImage),
   mRenderOnce(false),
-  mBackgroundColor(Color::BLACK),
+  mBackgroundColor(Color::TRANSPARENT),
   mTargetSize(Vector2::ZERO),
   mLastSize(Vector2::ZERO),
   mChildrenRoot(Actor::New()),
@@ -260,12 +260,14 @@ void GaussianBlurView::OnInitialize()
   mHorizontalBlurActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
 
   Renderer renderer = CreateRenderer(BASIC_VERTEX_SOURCE, fragmentSource.c_str());
+  renderer.SetProperty(Dali::Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, true);
   mHorizontalBlurActor.AddRenderer(renderer);
 
   // Create an actor for performing a vertical blur on the texture
   mVerticalBlurActor = Actor::New();
   mVerticalBlurActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
   renderer = CreateRenderer(BASIC_VERTEX_SOURCE, fragmentSource.c_str());
+  renderer.SetProperty(Dali::Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, true);
   mVerticalBlurActor.AddRenderer(renderer);
 
   // Register a property that the user can control to fade the blur in / out via the GaussianBlurView object
@@ -279,6 +281,7 @@ void GaussianBlurView::OnInitialize()
     mCompositingActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
     mCompositingActor.SetProperty(Actor::Property::OPACITY, GAUSSIAN_BLUR_VIEW_DEFAULT_BLUR_STRENGTH); // ensure alpha is enabled for this object and set default value
     renderer = CreateRenderer(BASIC_VERTEX_SOURCE, BASIC_FRAGMENT_SOURCE);
+    renderer.SetProperty(Dali::Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, true);
     mCompositingActor.AddRenderer(renderer);
 
     Constraint blurStrengthConstraint = Constraint::New<float>(mCompositingActor, Actor::Property::COLOR_ALPHA, EqualToConstraint());
@@ -289,6 +292,7 @@ void GaussianBlurView::OnInitialize()
     mTargetActor = Actor::New();
     mTargetActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
     renderer = CreateRenderer(BASIC_VERTEX_SOURCE, BASIC_FRAGMENT_SOURCE);
+    renderer.SetProperty(Dali::Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, true);
     mTargetActor.AddRenderer(renderer);
 
     //////////////////////////////////////////////////////
@@ -503,7 +507,8 @@ void GaussianBlurView::CreateRenderTasks()
     mCompositeTask.SetSourceActor(mCompositingActor);
     mCompositeTask.SetExclusive(true);
     mCompositeTask.SetInputEnabled(false);
-
+    mCompositeTask.SetClearEnabled(true);
+    mCompositeTask.SetClearColor(mBackgroundColor);
     mCompositeTask.SetCameraActor(mRenderFullSizeCamera);
     mCompositeTask.SetFrameBuffer(mBlurResultFrameBuffer);