From f52e1560139d8b38f846be2125b0125a726ed979 Mon Sep 17 00:00:00 2001 From: David Steele Date: Tue, 8 Nov 2016 17:16:27 +0000 Subject: [PATCH] Disabling EmbossFilter now removes all render tasks. Ensured all render tasks of EmbossFilter are removed when disabling the filter. There should be no render tasks lying around, and they all get re-created if the filter is re-enabled. Fixed effects-view to ensure that AllocateResources actually allocates following a Disable, Enable pair. Change-Id: I2172530b451ed86ce43cf944a90efd27f8f631fc Signed-off-by: David Steele --- .../src/dali-toolkit/utc-Dali-EffectsView.cpp | 63 ++++++++++++++++++++++ .../controls/effects-view/effects-view-impl.cpp | 1 + dali-toolkit/internal/filters/emboss-filter.cpp | 5 ++ 3 files changed, 69 insertions(+) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-EffectsView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-EffectsView.cpp index 09b51f2..c80e25a 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-EffectsView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-EffectsView.cpp @@ -124,6 +124,69 @@ int UtcDaliEffectsViewAddRemove(void) END_TEST; } + +int UtcDaliEffectsViewAddRemoveEmboss(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliEffectsViewAddRemoveEmboss"); + + tet_infoline("Checking number of render tasks = 1"); + application.SendNotification(); + application.Render(); + Stage stage = Stage::GetCurrent(); + DALI_TEST_EQUALS( stage.GetRenderTaskList().GetTaskCount(), 1, TEST_LOCATION ); + + tet_infoline("Create effects view"); + + EffectsView view = EffectsView::New( EffectsView::EMBOSS ); + Vector3 offsetSet( 2.f, 3.f, 4.f ); + Vector4 colorSet( 0.2f, 0.3f, 0.4f, 0.5f ); + view.SetProperty( EffectsView::Property::EFFECT_OFFSET, offsetSet); + view.SetProperty( EffectsView::Property::EFFECT_COLOR, colorSet); + Vector3 offsetAnimate( 4.f, 6.f, 8.f ); + float durationSeconds(0.05f); + Animation animation = Animation::New( durationSeconds ); + animation.AnimateTo( Property(view,EffectsView::Property::EFFECT_OFFSET ), offsetAnimate ); + animation.Play(); + + DALI_TEST_CHECK( view ); + + Actor actor = Actor::New(); + actor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); + DALI_TEST_CHECK( !actor.OnStage() ); + + view.SetParentOrigin(ParentOrigin::CENTER); + + view.Add(actor); + view.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); + + stage.Add(view); + + DALI_TEST_CHECK( actor.OnStage() ); + + application.SendNotification(); + application.Render(); + + tet_infoline("Removing view from stage disables view"); + stage.Remove(view); + + tet_infoline("Checking number of render tasks = 1"); + DALI_TEST_EQUALS( stage.GetRenderTaskList().GetTaskCount(), 1, TEST_LOCATION ); + + tet_infoline("Adding view to stage again re-enables view"); + stage.Add(view); + + tet_infoline("Removing view from stage disables view"); + DALI_TEST_GREATER( stage.GetRenderTaskList().GetTaskCount(), 1u, TEST_LOCATION ); + stage.Remove(view); + view.Reset(); + + tet_infoline("Checking number of render tasks = 1"); + DALI_TEST_EQUALS( stage.GetRenderTaskList().GetTaskCount(), 1, TEST_LOCATION ); + + END_TEST; +} + int UtcDaliEffectsViewGetTypeP(void) { ToolkitTestApplication application; diff --git a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp index 24f82bc..0b207e4 100644 --- a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp +++ b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp @@ -214,6 +214,7 @@ void EffectsView::Disable() // stop render tasks processing // Note: render target resources are automatically freed since we set the Image::Unused flag RemoveRenderTasks(); + mLastSize = Vector2::ZERO; // Ensure resources are reallocated on subsequent enable mEnabled = false; } diff --git a/dali-toolkit/internal/filters/emboss-filter.cpp b/dali-toolkit/internal/filters/emboss-filter.cpp index 849e81b..6fe082d 100644 --- a/dali-toolkit/internal/filters/emboss-filter.cpp +++ b/dali-toolkit/internal/filters/emboss-filter.cpp @@ -181,6 +181,11 @@ void EmbossFilter::Disable() taskList.RemoveTask(mRenderTaskForEmboss2); } + if( mRenderTaskForOutput ) + { + taskList.RemoveTask( mRenderTaskForOutput ); + } + mRootActor.Reset(); } } -- 2.7.4