To use ActivateOnce to blur child views 17/234017/3
authorSeungho, Baek <sbsh.baek@samsung.com>
Thu, 21 May 2020 06:03:02 +0000 (15:03 +0900)
committerSeungho, Baek <sbsh.baek@samsung.com>
Thu, 21 May 2020 07:36:53 +0000 (16:36 +0900)
Change-Id: Idf5997e7b9e06a617752bd31ea0f6dcd6cee34e8
Signed-off-by: Seungho, Baek <sbsh.baek@samsung.com>
automated-tests/src/dali-toolkit/utc-Dali-GaussianBlurView.cpp
dali-toolkit/devel-api/controls/gaussian-blur-view/gaussian-blur-view.h
dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp

index 170a17c..afc6aee 100644 (file)
@@ -269,10 +269,10 @@ int UtcDaliGaussianBlurViewSetGetRenderTarget(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
-int UtcDaliGaussianBlurViewActivateOnce(void)
+int UtcDaliGaussianBlurViewActivateOnce1(void)
 {
   ToolkitTestApplication application;
 {
   ToolkitTestApplication application;
-  tet_infoline("UtcDaliGaussianBlurActivateOnce");
+  tet_infoline("UtcDaliGaussianBlurActivateOnce1");
 
   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New(5, 1.5f, Pixel::RGB888, 0.5f, 0.5f, true);
   DALI_TEST_CHECK( view );
 
   Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New(5, 1.5f, Pixel::RGB888, 0.5f, 0.5f, true);
   DALI_TEST_CHECK( view );
@@ -293,6 +293,39 @@ int UtcDaliGaussianBlurViewActivateOnce(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
+// Positive test case for a method
+int UtcDaliGaussianBlurActivateOnce2(void)
+{
+  ToolkitTestApplication application;
+  TestGlAbstraction& gl = application.GetGlAbstraction();
+  TraceCallStack& textureTrace = gl.GetTextureTrace();
+  textureTrace.Enable(true);
+  tet_infoline("UtcDaliGaussianBlurActivateOnce2");
+
+  Toolkit::GaussianBlurView view = Toolkit::GaussianBlurView::New();
+  DALI_TEST_CHECK( view );
+
+  view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
+  view.SetSize(Stage::GetCurrent().GetSize());
+  view.Add(Actor::New());
+  Stage::GetCurrent().Add(view);
+  view.ActivateOnce();
+
+  application.SendNotification();
+  application.Render(20);
+
+  DALI_TEST_CHECK( gl.GetLastGenTextureId() == 3 );
+
+  view.ActivateOnce();
+
+  application.SendNotification();
+  application.Render(20);
+
+  DALI_TEST_CHECK( gl.GetLastGenTextureId() == 6 );
+
+  END_TEST;
+}
+
 int UtcDaliGaussianBlurViewFinishedSignalN(void)
 {
   ToolkitTestApplication application;
 int UtcDaliGaussianBlurViewFinishedSignalN(void)
 {
   ToolkitTestApplication application;
index 9b7824c..49b0205 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_GAUSSIAN_BLUR_EFFECT_H
 
 /*
 #define DALI_TOOLKIT_GAUSSIAN_BLUR_EFFECT_H
 
 /*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -226,7 +226,6 @@ public:
    * @brief Render the GaussianBlurView once.
    *
    * Must be called after you Add() it to the stage.
    * @brief Render the GaussianBlurView once.
    *
    * Must be called after you Add() it to the stage.
-   * Only works with a gaussian blur view created with blurUserImage = true.
    * Listen to the Finished signal to determine when the rendering has completed.
    * @SINCE_1_0.0
    */
    * Listen to the Finished signal to determine when the rendering has completed.
    * @SINCE_1_0.0
    */
index 1b47c68..c4d744e 100644 (file)
@@ -466,6 +466,11 @@ void GaussianBlurView::CreateRenderTasks()
 
     mRenderChildrenTask.SetCameraActor(mRenderFullSizeCamera);
     mRenderChildrenTask.SetFrameBuffer( mRenderTargetForRenderingChildren );
 
     mRenderChildrenTask.SetCameraActor(mRenderFullSizeCamera);
     mRenderChildrenTask.SetFrameBuffer( mRenderTargetForRenderingChildren );
+
+    if( mRenderOnce )
+    {
+      mRenderChildrenTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
+    }
   }
 
   // perform a horizontal blur targeting the second buffer
   }
 
   // perform a horizontal blur targeting the second buffer
@@ -477,7 +482,7 @@ void GaussianBlurView::CreateRenderTasks()
   mHorizBlurTask.SetClearColor( mBackgroundColor );
   mHorizBlurTask.SetCameraActor(mRenderDownsampledCamera);
   mHorizBlurTask.SetFrameBuffer( mRenderTarget2 );
   mHorizBlurTask.SetClearColor( mBackgroundColor );
   mHorizBlurTask.SetCameraActor(mRenderDownsampledCamera);
   mHorizBlurTask.SetFrameBuffer( mRenderTarget2 );
-  if( mRenderOnce && mBlurUserImage )
+  if( mRenderOnce || ( mRenderOnce && mBlurUserImage ) )
   {
     mHorizBlurTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
   }
   {
     mHorizBlurTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
   }
@@ -498,7 +503,7 @@ void GaussianBlurView::CreateRenderTasks()
   {
     mVertBlurTask.SetFrameBuffer( mRenderTarget1 );
   }
   {
     mVertBlurTask.SetFrameBuffer( mRenderTarget1 );
   }
-  if( mRenderOnce && mBlurUserImage )
+  if( mRenderOnce || ( mRenderOnce && mBlurUserImage ) )
   {
     mVertBlurTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
     mVertBlurTask.FinishedSignal().Connect( this, &GaussianBlurView::OnRenderTaskFinished );
   {
     mVertBlurTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
     mVertBlurTask.FinishedSignal().Connect( this, &GaussianBlurView::OnRenderTaskFinished );
@@ -514,6 +519,11 @@ void GaussianBlurView::CreateRenderTasks()
 
     mCompositeTask.SetCameraActor(mRenderFullSizeCamera);
     mCompositeTask.SetFrameBuffer( mRenderTargetForRenderingChildren );
 
     mCompositeTask.SetCameraActor(mRenderFullSizeCamera);
     mCompositeTask.SetFrameBuffer( mRenderTargetForRenderingChildren );
+
+    if( mRenderOnce )
+    {
+      mCompositeTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
+    }
   }
 }
 
   }
 }
 
@@ -541,7 +551,7 @@ void GaussianBlurView::Activate()
 
 void GaussianBlurView::ActivateOnce()
 {
 
 void GaussianBlurView::ActivateOnce()
 {
-  DALI_ASSERT_ALWAYS(mBlurUserImage); // Only works with blurring image mode.
+  Deactivate();
   mRenderOnce = true;
   Activate();
 }
   mRenderOnce = true;
   Activate();
 }