Fix error of trying to edit blurred result when blur was skipped 36/322936/4
authorjmm <j0064423.lee@samsung.com>
Fri, 18 Apr 2025 06:25:45 +0000 (15:25 +0900)
committerjmm <j0064423.lee@samsung.com>
Mon, 21 Apr 2025 06:34:01 +0000 (15:34 +0900)
Change-Id: I2d739f6965f253a6e16bcdaca34b930ea242ef98

automated-tests/src/dali-toolkit/utc-Dali-RenderEffect.cpp
dali-toolkit/internal/controls/render-effects/background-blur-effect-impl.cpp
dali-toolkit/internal/graphics/shaders/blur-effect.frag

index 01e7293e36e94b93934fdba49af9b6616a613a2f..56a98d57150289bbc38352cc590bc188922bce15 100644 (file)
@@ -1054,8 +1054,14 @@ int UtcDaliRenderEffectBlurStrengthAnimation(void)
   effect.SetBlurOnce(true);
   effect.AddBlurStrengthAnimation(animation, AlphaFunction::BuiltinFunction::EASE_IN, TimePeriod(0, durationSeconds), 0.0f, 1.0f);
   // animation will not be added but cannot check
+  animation.Clear();
   DALI_TEST_EQUALS(effect.GetBlurOnce(), true, TEST_LOCATION);
 
+  effect.SetBlurRadius(2u);
+  effect.AddBlurStrengthAnimation(animation, AlphaFunction::BuiltinFunction::EASE_IN, TimePeriod(0, durationSeconds), 0.0f, 1.0f);
+  // animation will not be added but cannot check
+  animation.Clear();
+
   END_TEST;
 }
 
@@ -1118,7 +1124,13 @@ int UtcDaliRenderEffectBlurOpacityAnimation(void)
   effect.SetBlurOnce(true);
   effect.AddBlurOpacityAnimation(animation, AlphaFunction::BuiltinFunction::EASE_IN, TimePeriod(0, durationSeconds), 0.0f, 1.0f);
   // animation will not be added but cannot check
+  animation.Clear();
   DALI_TEST_EQUALS(effect.GetBlurOnce(), true, TEST_LOCATION);
 
+  effect.SetBlurRadius(2u);
+  effect.AddBlurOpacityAnimation(animation, AlphaFunction::BuiltinFunction::EASE_IN, TimePeriod(0, durationSeconds), 0.0f, 1.0f);
+  // animation will not be added but cannot check
+  animation.Clear();
+
   END_TEST;
 }
index 77f79f1947e4d966268d4574dd946a702f79dce0..ec243e6a7d777097253f84aff01cc2c846969c2e 100644 (file)
@@ -182,7 +182,7 @@ void BackgroundBlurEffectImpl::SetBlurOnce(bool blurOnce)
 {
   mBlurOnce = blurOnce;
 
-  if(IsActivated()) // if false, no render task exists yet(nothing to do)
+  if(!mSkipBlur && IsActivated()) // if false, no render task exists yet(nothing to do)
   {
     if(mBlurOnce)
     {
@@ -210,7 +210,7 @@ void BackgroundBlurEffectImpl::SetBlurRadius(uint32_t blurRadius)
 {
   if(mBlurRadius != blurRadius)
   {
-    if(IsActivated())
+    if(!mSkipBlur && IsActivated())
     {
       OnDeactivate();
     }
@@ -228,7 +228,7 @@ void BackgroundBlurEffectImpl::SetBlurRadius(uint32_t blurRadius)
 
     OnInitialize();
 
-    if(IsActivated())
+    if(!mSkipBlur && IsActivated())
     {
       OnActivate();
     }
@@ -242,6 +242,11 @@ uint32_t BackgroundBlurEffectImpl::GetBlurRadius() const
 
 void BackgroundBlurEffectImpl::AddBlurStrengthAnimation(Animation& animation, AlphaFunction alphaFunction, TimePeriod timePeriod, float fromValue, float toValue)
 {
+  if(DALI_UNLIKELY(mSkipBlur))
+  {
+    DALI_LOG_ERROR("Blur radius is too small. Blur animation will be ignored.");
+    return;
+  }
   if(mBlurOnce)
   {
     DALI_LOG_ERROR("This blur effect is set to render only once, so the animation will be ignored. Call SetBlurOnce(false) to render it every frame.");
@@ -263,6 +268,11 @@ void BackgroundBlurEffectImpl::AddBlurStrengthAnimation(Animation& animation, Al
 
 void BackgroundBlurEffectImpl::AddBlurOpacityAnimation(Animation& animation, AlphaFunction alphaFunction, TimePeriod timePeriod, float fromValue, float toValue)
 {
+  if(DALI_UNLIKELY(mSkipBlur))
+  {
+    DALI_LOG_ERROR("Blur radius is too small. Blur animation will be ignored.");
+    return;
+  }
   if(mBlurOnce)
   {
     DALI_LOG_ERROR("This blur effect is set to render only once, so the animation will be ignored. Call SetBlurOnce(false) to render it every frame.");
index 8ddfe964b651cb81856b822aa6f6e2a2c857fc18..d16d6e06b199fd6cdbe5726187aa8b5502c8c4da 100644 (file)
@@ -21,6 +21,6 @@ void main()
   {
     col += (TEXTURE(sTexture, vTexCoord + uSampleOffsets[i] * uAnimationRatio) + TEXTURE(sTexture, vTexCoord - uSampleOffsets[i] * uAnimationRatio)) * uSampleWeights[i];
   }
-  col.w *= uOpacity;
+  col *= uOpacity;
   gl_FragColor = col;
 }