(BlurEffect) Clear base input texture as scene holder backround 21/316421/10
authorEunki, Hong <eunkiki.hong@samsung.com>
Wed, 21 Aug 2024 06:37:29 +0000 (15:37 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Fri, 30 Aug 2024 05:40:44 +0000 (14:40 +0900)
If we try to blur translucent object, the background of captured texture
was always be black.

And also, The result of capture was not be cleared after every frames.

Due to this kind of problem, let we always call glClear before each blur started.

Change-Id: Ib4c8449a7a57d78b1dbe001a393c11b7abe04201
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-toolkit/internal/controls/render-effects/blur-effect-impl.cpp

index 52ea850107dd5ea7d4143642da352eeb849b6c1b..807be26e06e386decd3fbc3f43cb681a777d52f8 100644 (file)
@@ -230,6 +230,10 @@ void BlurEffectImpl::OnActivate()
   mSourceRenderTask.SetInputEnabled(false);
   mSourceRenderTask.SetExclusive(false);
 
+  // Clear inputBackgroundTexture as scene holder background.
+  mSourceRenderTask.SetClearEnabled(true);
+  mSourceRenderTask.SetClearColor(sceneHolder.GetBackgroundColor());
+
   // Blur tasks
   SetRendererTexture(mHorizontalBlurActor.GetRendererAt(0), mInputBackgroundFrameBuffer);
   mHorizontalBlurTask = taskList.CreateTask();
@@ -240,6 +244,10 @@ void BlurEffectImpl::OnActivate()
   mHorizontalBlurTask.SetCameraActor(mRenderDownsampledCamera);
   mHorizontalBlurTask.SetFrameBuffer(mTemporaryFrameBuffer);
 
+  // Clear temporaryTexture as Transparent.
+  mHorizontalBlurTask.SetClearEnabled(true);
+  mHorizontalBlurTask.SetClearColor(Color::TRANSPARENT);
+
   SetRendererTexture(mVerticalBlurActor.GetRendererAt(0), mTemporaryFrameBuffer);
   mVerticalBlurTask = taskList.CreateTask();
   mVerticalBlurTask.SetSourceActor(mVerticalBlurActor);
@@ -249,6 +257,10 @@ void BlurEffectImpl::OnActivate()
   mVerticalBlurTask.SetCameraActor(mRenderDownsampledCamera);
   mVerticalBlurTask.SetFrameBuffer(mSourceFrameBuffer);
 
+  // Clear sourceTexture as Transparent.
+  mVerticalBlurTask.SetClearEnabled(true);
+  mVerticalBlurTask.SetClearColor(Color::TRANSPARENT);
+
   // Inject output to control
   Renderer renderer = GetTargetRenderer();
   if(mIsBackground)