X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-ImageVisual.cpp;h=2bfef0abe57a89966cad6b67c59f631da7c7904c;hp=78792d9ea2ffee9c54ab8e68e43eb2fa357e3f3f;hb=959f0134ef092cda808d6b810708bc21c95cd7d6;hpb=9b1300733bb67e51e234ce719cef36c484e4091a diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ImageVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ImageVisual.cpp index 78792d9..2bfef0a 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageVisual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageVisual.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -14,19 +14,28 @@ * limitations under the License. */ -#include #include +#include #include + #include -#include + +#include #include -#include +#include + +#include +#include +#include #include #include -#include #include -#include +#include +#include + #include "dummy-control.h" +#include "test-encoded-image-buffer.h" +#include "test-native-image-source.h" using namespace Dali; using namespace Dali::Toolkit; @@ -43,23 +52,27 @@ void dali_image_visual_cleanup(void) namespace { -const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg"; -const char* TEST_BROKEN_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/a-random-nonimage.jpg"; -const char* TEST_LARGE_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/tbcol.png"; -const char* TEST_SMALL_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/icon-edit.png"; -const char* TEST_REMOTE_IMAGE_FILE_NAME = "https://www.tizen.org/sites/all/themes/tizen_theme/logo.png"; -const char* TEST_INVALID_FILE_NAME = TEST_RESOURCE_DIR "/invalid.jpg"; +const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg"; +const char* TEST_BROKEN_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/a-random-nonimage.jpg"; +const char* TEST_LARGE_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/tbcol.png"; +const char* TEST_SMALL_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/icon-edit.png"; +const char* TEST_REMOTE_IMAGE_FILE_NAME = "https://www.tizen.org/sites/all/themes/tizen_theme/logo.png"; +const char* TEST_INVALID_FILE_NAME = TEST_RESOURCE_DIR "/invalid.jpg"; const char* TEST_REMOTE_INVALID_FILE_NAME = "https://www.tizen.org/invalid.png"; -const char* TEST_MASK_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/mask.png"; -const char* TEST_ROTATED_IMAGE = TEST_RESOURCE_DIR "/keyboard-Landscape.jpg"; +const char* TEST_MASK_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/mask.png"; +const char* TEST_ROTATED_IMAGE = TEST_RESOURCE_DIR "/keyboard-Landscape.jpg"; +const char* TEST_YUV420_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1-yuv420.jpg"; +const char* TEST_N_PATCH_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/heartsframe.9.png"; +constexpr auto LOAD_IMAGE_YUV_PLANES_ENV = "DALI_LOAD_IMAGE_YUV_PLANES"; +constexpr auto ENABLE_DECODE_JPEG_TO_YUV_420_ENV = "DALI_ENABLE_DECODE_JPEG_TO_YUV_420"; -bool gResourceReadySignalFired = false; -std::vector gReadyIds = {}; -void ResourceReadySignal( Control control ) +bool gResourceReadySignalFired = false; +std::vector gReadyIds = {}; +void ResourceReadySignal(Control control) { gResourceReadySignalFired = true; - gReadyIds.push_back(control.GetProperty< int >( Actor::Property::ID )); + gReadyIds.push_back(control.GetProperty(Actor::Property::ID)); } void ClearReadyIds() { @@ -68,351 +81,611 @@ void ClearReadyIds() Actor CreateActorWithImageVisual(const Property::Map& map) { - VisualFactory factory = VisualFactory::Get(); - DummyControl actor = DummyControl::New(); + VisualFactory factory = VisualFactory::Get(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - Visual::Base visual = factory.CreateVisual( map ); - DALI_TEST_CHECK( visual ); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + Visual::Base visual = factory.CreateVisual(map); + DALI_TEST_CHECK(visual); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); return actor; } - -Visual::Base CreateVisualWithPolicy( const char* url, Property::Index key, const Property::Value& value ) +Visual::Base CreateVisualWithPolicy(const char* url, Property::Index key, const Property::Value& value) { VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; - propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, url ); - propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 ); - propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 ); - propertyMap.Insert( key , value ); + propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, url); + propertyMap.Insert(ImageVisual::Property::DESIRED_WIDTH, 20); + propertyMap.Insert(ImageVisual::Property::DESIRED_HEIGHT, 30); + propertyMap.Insert(key, value); - return factory.CreateVisual( propertyMap ); + return factory.CreateVisual(propertyMap); } } // namespace -void TestVisualRender( ToolkitTestApplication& application, - DummyControl& actor, - Visual::Base& visual, - std::size_t expectedSamplers = 0, - ImageDimensions imageDimensions = ImageDimensions(), - Integration::ResourcePointer resourcePtr = Integration::ResourcePointer()) +void TestVisualRender(ToolkitTestApplication& application, + DummyControl& actor, + Visual::Base& visual, + std::size_t expectedSamplers = 0, + ImageDimensions imageDimensions = ImageDimensions(), + Integration::ResourcePointer resourcePtr = Integration::ResourcePointer()) { DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); - if( resourcePtr ) + if(resourcePtr) { // set the image size, for test case, this needs to be set before loading started - application.GetPlatform().SetClosestImageSize( Vector2(imageDimensions.GetWidth(), imageDimensions.GetHeight()) ); + application.GetPlatform().SetClosestImageSize(Vector2(imageDimensions.GetWidth(), imageDimensions.GetHeight())); } - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); application.SendNotification(); // Send messages to update application.Render(); // process update and render application.SendNotification(); // process any signals to event - if( resourcePtr ) + if(resourcePtr) { - DALI_TEST_EQUALS( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceSynchronouslyFunc ), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceSynchronouslyFunc), true, TEST_LOCATION); } - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); } -static void TestMixColor( Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor ) +static void TestMixColor(Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor) { Property::Map map; visual.CreatePropertyMap(map); - Property::Value* value = map.Find( mixColorIndex ); - DALI_TEST_CHECK( value ); + Property::Value* value = map.Find(mixColorIndex); + DALI_TEST_CHECK(value); Vector3 mixColor1; - DALI_TEST_CHECK( value->Get( mixColor1 ) ); - DALI_TEST_EQUALS( mixColor1, Vector3(testColor), 0.001, TEST_LOCATION ); + DALI_TEST_CHECK(value->Get(mixColor1)); + DALI_TEST_EQUALS(mixColor1, Vector3(testColor), 0.001, TEST_LOCATION); - value = map.Find( Visual::Property::MIX_COLOR ); - DALI_TEST_CHECK( value ); + value = map.Find(Visual::Property::MIX_COLOR); + DALI_TEST_CHECK(value); Vector4 mixColor2; - DALI_TEST_CHECK( value->Get( mixColor2 ) ); - DALI_TEST_EQUALS( mixColor2, testColor, 0.001, TEST_LOCATION ); + DALI_TEST_CHECK(value->Get(mixColor2)); + DALI_TEST_EQUALS(mixColor2, testColor, 0.001, TEST_LOCATION); - value = map.Find( Visual::Property::OPACITY ); - DALI_TEST_CHECK( value ); + value = map.Find(Visual::Property::OPACITY); + DALI_TEST_CHECK(value); float opacity; - DALI_TEST_CHECK( value->Get( opacity ) ); - DALI_TEST_EQUALS( opacity, testColor.a, 0.001, TEST_LOCATION ); + DALI_TEST_CHECK(value->Get(opacity)); + DALI_TEST_EQUALS(opacity, testColor.a, 0.001, TEST_LOCATION); } - - int UtcDaliImageVisualPropertyMap(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with a Property::Map" ); + tet_infoline("Request image visual with a Property::Map"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); - factory.SetPreMultiplyOnLoad( true ); + DALI_TEST_CHECK(factory); + factory.SetPreMultiplyOnLoad(true); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - auto renderer = actor.GetRendererAt(0); - auto preMultipliedIndex = renderer.GetPropertyIndex( "preMultipliedAlpha" ); - DALI_TEST_CHECK( preMultipliedIndex != Property::INVALID_INDEX ); - auto preMultipliedAlpha = renderer.GetProperty( preMultipliedIndex ); - auto preMultipliedAlpha2 = renderer.GetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA ); - DALI_TEST_EQUALS( preMultipliedAlpha, 1.0f, TEST_LOCATION ); - DALI_TEST_EQUALS( preMultipliedAlpha2, true, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + auto renderer = actor.GetRendererAt(0); + auto preMultipliedIndex = renderer.GetPropertyIndex("preMultipliedAlpha"); + DALI_TEST_CHECK(preMultipliedIndex != Property::INVALID_INDEX); + auto preMultipliedAlpha = renderer.GetProperty(preMultipliedIndex); + auto preMultipliedAlpha2 = renderer.GetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA); + DALI_TEST_EQUALS(preMultipliedAlpha, 1.0f, TEST_LOCATION); + DALI_TEST_EQUALS(preMultipliedAlpha2, true, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); - Stage::GetCurrent().Remove( actor ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + application.GetScene().Remove(actor); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); END_TEST; } - int UtcDaliImageVisualNoPremultipliedAlpha01(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual without pre-multiplied alpha" ); + tet_infoline("Request image visual without pre-multiplied alpha"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); - factory.SetPreMultiplyOnLoad( false ); + DALI_TEST_CHECK(factory); + factory.SetPreMultiplyOnLoad(false); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - auto renderer = actor.GetRendererAt(0); - auto preMultipliedIndex = renderer.GetPropertyIndex( "preMultipliedAlpha" ); - DALI_TEST_CHECK( preMultipliedIndex != Property::INVALID_INDEX ); - auto preMultipliedAlpha = renderer.GetProperty( preMultipliedIndex ); - auto preMultipliedAlpha2 = renderer.GetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + auto renderer = actor.GetRendererAt(0); + auto preMultipliedIndex = renderer.GetPropertyIndex("preMultipliedAlpha"); + DALI_TEST_CHECK(preMultipliedIndex != Property::INVALID_INDEX); + auto preMultipliedAlpha = renderer.GetProperty(preMultipliedIndex); + auto preMultipliedAlpha2 = renderer.GetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA); - DALI_TEST_EQUALS( preMultipliedAlpha, false, TEST_LOCATION ); - DALI_TEST_EQUALS( preMultipliedAlpha2, false, TEST_LOCATION ); + DALI_TEST_EQUALS(preMultipliedAlpha, false, TEST_LOCATION); + DALI_TEST_EQUALS(preMultipliedAlpha2, false, TEST_LOCATION); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); - Stage::GetCurrent().Remove( actor ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + application.GetScene().Remove(actor); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); END_TEST; } - int UtcDaliImageVisualNoPremultipliedAlpha02(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with no alpha channel" ); + tet_infoline("Request image visual with no alpha channel"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - auto renderer = actor.GetRendererAt(0); - auto preMultipliedIndex = renderer.GetPropertyIndex( "preMultipliedAlpha" ); - DALI_TEST_CHECK( preMultipliedIndex != Property::INVALID_INDEX ); - auto preMultipliedAlpha = renderer.GetProperty( preMultipliedIndex ); - auto preMultipliedAlpha2 = renderer.GetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + auto renderer = actor.GetRendererAt(0); + auto preMultipliedIndex = renderer.GetPropertyIndex("preMultipliedAlpha"); + DALI_TEST_CHECK(preMultipliedIndex != Property::INVALID_INDEX); + auto preMultipliedAlpha = renderer.GetProperty(preMultipliedIndex); + auto preMultipliedAlpha2 = renderer.GetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA); - DALI_TEST_EQUALS( preMultipliedAlpha, false, TEST_LOCATION ); - DALI_TEST_EQUALS( preMultipliedAlpha2, false, TEST_LOCATION ); + DALI_TEST_EQUALS(preMultipliedAlpha, false, TEST_LOCATION); + DALI_TEST_EQUALS(preMultipliedAlpha2, false, TEST_LOCATION); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); - int srcFactorRgb = renderer.GetProperty( Renderer::Property::BLEND_FACTOR_SRC_RGB ); - int destFactorRgb = renderer.GetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB ); - int srcFactorAlpha = renderer.GetProperty( Renderer::Property::BLEND_FACTOR_SRC_ALPHA ); - int destFactorAlpha = renderer.GetProperty( Renderer::Property::BLEND_FACTOR_DEST_ALPHA ); - DALI_TEST_CHECK( srcFactorRgb == BlendFactor::SRC_ALPHA ); - DALI_TEST_CHECK( destFactorRgb == BlendFactor::ONE_MINUS_SRC_ALPHA ); - DALI_TEST_CHECK( srcFactorAlpha == BlendFactor::ONE ); - DALI_TEST_CHECK( destFactorAlpha == BlendFactor::ONE_MINUS_SRC_ALPHA ); + int srcFactorRgb = renderer.GetProperty(Renderer::Property::BLEND_FACTOR_SRC_RGB); + int destFactorRgb = renderer.GetProperty(Renderer::Property::BLEND_FACTOR_DEST_RGB); + int srcFactorAlpha = renderer.GetProperty(Renderer::Property::BLEND_FACTOR_SRC_ALPHA); + int destFactorAlpha = renderer.GetProperty(Renderer::Property::BLEND_FACTOR_DEST_ALPHA); + DALI_TEST_CHECK(srcFactorRgb == BlendFactor::SRC_ALPHA); + DALI_TEST_CHECK(destFactorRgb == BlendFactor::ONE_MINUS_SRC_ALPHA); + DALI_TEST_CHECK(srcFactorAlpha == BlendFactor::ONE); + DALI_TEST_CHECK(destFactorAlpha == BlendFactor::ONE_MINUS_SRC_ALPHA); textureTrace.Reset(); // Make a new visual with the same image - Visual::Base newVisual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( newVisual ); + Visual::Base newVisual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(newVisual); // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. - DummyControl newActor = DummyControl::New(); - DummyControlImpl& newDummyImpl = static_cast< DummyControlImpl& >( newActor.GetImplementation() ); - newDummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, newVisual ); + DummyControl newActor = DummyControl::New(); + DummyControlImpl& newDummyImpl = static_cast(newActor.GetImplementation()); + newDummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, newVisual); - newActor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( newActor.GetRendererCount(), 0u, TEST_LOCATION ); + newActor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(newActor.GetRendererCount(), 0u, TEST_LOCATION); - Stage::GetCurrent().Add( newActor ); + application.GetScene().Add(newActor); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( newActor.GetRendererCount(), 1u, TEST_LOCATION ); - auto newRenderer = newActor.GetRendererAt( 0 ); - preMultipliedIndex = newRenderer.GetPropertyIndex( "preMultipliedAlpha" ); - DALI_TEST_CHECK( preMultipliedIndex != Property::INVALID_INDEX ); - preMultipliedAlpha = newRenderer.GetProperty< bool >( preMultipliedIndex ); - preMultipliedAlpha2 = newRenderer.GetProperty< bool >( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA ); + DALI_TEST_EQUALS(newActor.GetRendererCount(), 1u, TEST_LOCATION); + auto newRenderer = newActor.GetRendererAt(0); + preMultipliedIndex = newRenderer.GetPropertyIndex("preMultipliedAlpha"); + DALI_TEST_CHECK(preMultipliedIndex != Property::INVALID_INDEX); + preMultipliedAlpha = newRenderer.GetProperty(preMultipliedIndex); + preMultipliedAlpha2 = newRenderer.GetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA); - DALI_TEST_EQUALS( preMultipliedAlpha, false, TEST_LOCATION ); - DALI_TEST_EQUALS( preMultipliedAlpha2, false, TEST_LOCATION ); + DALI_TEST_EQUALS(preMultipliedAlpha, false, TEST_LOCATION); + DALI_TEST_EQUALS(preMultipliedAlpha2, false, TEST_LOCATION); - srcFactorRgb = newRenderer.GetProperty( Renderer::Property::BLEND_FACTOR_SRC_RGB ); - destFactorRgb = newRenderer.GetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB ); - srcFactorAlpha = newRenderer.GetProperty( Renderer::Property::BLEND_FACTOR_SRC_ALPHA ); - destFactorAlpha = newRenderer.GetProperty( Renderer::Property::BLEND_FACTOR_DEST_ALPHA ); - DALI_TEST_CHECK( srcFactorRgb == BlendFactor::SRC_ALPHA ); - DALI_TEST_CHECK( destFactorRgb == BlendFactor::ONE_MINUS_SRC_ALPHA ); - DALI_TEST_CHECK( srcFactorAlpha == BlendFactor::ONE ); - DALI_TEST_CHECK( destFactorAlpha == BlendFactor::ONE_MINUS_SRC_ALPHA ); + srcFactorRgb = newRenderer.GetProperty(Renderer::Property::BLEND_FACTOR_SRC_RGB); + destFactorRgb = newRenderer.GetProperty(Renderer::Property::BLEND_FACTOR_DEST_RGB); + srcFactorAlpha = newRenderer.GetProperty(Renderer::Property::BLEND_FACTOR_SRC_ALPHA); + destFactorAlpha = newRenderer.GetProperty(Renderer::Property::BLEND_FACTOR_DEST_ALPHA); + DALI_TEST_CHECK(srcFactorRgb == BlendFactor::SRC_ALPHA); + DALI_TEST_CHECK(destFactorRgb == BlendFactor::ONE_MINUS_SRC_ALPHA); + DALI_TEST_CHECK(srcFactorAlpha == BlendFactor::ONE); + DALI_TEST_CHECK(destFactorAlpha == BlendFactor::ONE_MINUS_SRC_ALPHA); - Stage::GetCurrent().Remove( actor ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + application.GetScene().Remove(actor); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); END_TEST; } - int UtcDaliImageVisualRemoteImageLoad(void) { ToolkitTestApplication application; - tet_infoline( "Request remote image visual with a Property::Map" ); + tet_infoline("Request remote image visual with a Property::Map"); + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_REMOTE_IMAGE_FILE_NAME); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + + application.GetScene().Add(actor); + application.SendNotification(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + + application.GetScene().Remove(actor); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + + END_TEST; +} + +int UtcDaliImageVisualWithNativeImage(void) +{ + ToolkitTestApplication application; + tet_infoline("Use Native Image as url"); + + NativeImageSourcePtr nativeImageSource = NativeImageSource::New(500, 500, NativeImageSource::COLOR_DEPTH_DEFAULT); + ImageUrl imageUrl = Dali::Toolkit::Image::GenerateUrl(nativeImageSource); + std::string url = imageUrl.GetUrl(); + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, url); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + + application.GetScene().Add(actor); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + + Renderer renderer = actor.GetRendererAt(0); + Shader shader = renderer.GetShader(); + + Property::Value value = shader.GetProperty(Shader::Property::PROGRAM); + DALI_TEST_CHECK(value.GetType() == Property::MAP); + const Property::Map* outMap = value.GetMap(); + std::string fragmentShader = (*outMap)["fragment"].Get(); + + const char* fragmentPrefix = Dali::NativeImageSourceTest::GetCustomFragmentPrefix(); + size_t pos = fragmentShader.find(fragmentPrefix); + + DALI_TEST_EQUALS(pos != std::string::npos, true, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliImageVisualWithNativeImageCustomShader(void) +{ + ToolkitTestApplication application; + tet_infoline("Use Native Image as url and Use custom shader"); + + NativeImageSourcePtr nativeImageSource = NativeImageSource::New(500, 500, NativeImageSource::COLOR_DEPTH_DEFAULT); + ImageUrl imageUrl = Dali::Toolkit::Image::GenerateUrl(nativeImageSource); + std::string url = imageUrl.GetUrl(); + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + Property::Map propertyMap; + Property::Map shaderMap; + const std::string customVertexShaderSource = "Foobar"; + const std::string customFragmentShaderSource = "Foobar"; + shaderMap[Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = customFragmentShaderSource; + shaderMap[Toolkit::Visual::Shader::Property::VERTEX_SHADER] = customVertexShaderSource; + + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(Toolkit::Visual::Property::SHADER, shaderMap); + propertyMap.Insert(ImageVisual::Property::URL, url); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + + application.GetScene().Add(actor); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + + application.SendNotification(); + application.Render(16); + + Renderer renderer = actor.GetRendererAt(0); + Shader shader = renderer.GetShader(); + + Property::Value value = shader.GetProperty(Shader::Property::PROGRAM); + DALI_TEST_CHECK(value.GetType() == Property::MAP); + const Property::Map* outMap = value.GetMap(); + std::string fragmentShaderSource = (*outMap)["fragment"].Get(); + std::string vertexShaderSource = (*outMap)["vertex"].Get(); + + // Compare vertex shader is equal + DALI_TEST_EQUALS(customVertexShaderSource, vertexShaderSource, TEST_LOCATION); + + // Check fragment shader changed + const char* fragmentPrefix = Dali::NativeImageSourceTest::GetCustomFragmentPrefix(); + size_t pos = fragmentShaderSource.find(fragmentPrefix); + + DALI_TEST_EQUALS(pos != std::string::npos, true, TEST_LOCATION); + + DALI_TEST_EQUALS(std::string(fragmentPrefix) + customFragmentShaderSource, fragmentShaderSource, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliImageVisualWithNativeImageRemoved(void) +{ + ToolkitTestApplication application; + tet_infoline("Use Native Image as url"); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + NativeImageSourcePtr nativeImageSource = NativeImageSource::New(500, 500, NativeImageSource::COLOR_DEPTH_DEFAULT); + ImageUrl imageUrl = Dali::Toolkit::Image::GenerateUrl(nativeImageSource); + std::string url = imageUrl.GetUrl(); + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, url); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + + application.GetScene().Add(actor); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); + + tet_infoline("No delete texture because reference count is not zero"); + imageUrl.Reset(); + application.GetScene().Remove(actor); + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); + + tet_infoline("Delete texture because reference count is zero"); + visual.Reset(); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliImageVisualWithEncodedImageBuffer(void) +{ + ToolkitTestApplication application; + tet_infoline("Use Encoded Image Buffer as url"); + + EncodedImageBuffer rawBuffer = ConvertFileToEncodedImageBuffer(TEST_LARGE_IMAGE_FILE_NAME); + ImageUrl url = Dali::Toolkit::Image::GenerateUrl(rawBuffer); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_REMOTE_IMAGE_FILE_NAME ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, url.GetUrl()); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + + application.GetScene().Add(actor); + application.SendNotification(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + application.GetScene().Remove(actor); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + + END_TEST; +} + +int UtcDaliImageVisualWithEncodedImageBufferRemoved(void) +{ + ToolkitTestApplication application; + tet_infoline("Use Encoded Image Buffer as url"); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + EncodedImageBuffer rawBuffer = ConvertFileToEncodedImageBuffer(TEST_LARGE_IMAGE_FILE_NAME); + ImageUrl imageUrl = Dali::Toolkit::Image::GenerateUrl(rawBuffer); + std::string url = imageUrl.GetUrl(); + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, url); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); application.SendNotification(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + // Wait for decode buffer and make texture. + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); + + tet_infoline("Delete texture because there is no actor to use decoded texture"); + imageUrl.Reset(); + application.GetScene().Remove(actor); + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL); + application.SendNotification(); + application.Render(); - Stage::GetCurrent().Remove( actor ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION); END_TEST; } @@ -420,231 +693,237 @@ int UtcDaliImageVisualRemoteImageLoad(void) int UtcDaliImageVisualTextureReuse1(void) { ToolkitTestApplication application; - tet_infoline( "Request remote image visual with a Property::Map; request a second visual with the same property map - should reuse texture" ); + tet_infoline("Request remote image visual with a Property::Map; request a second visual with the same property map - should reuse texture"); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DETACHED ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DETACHED); - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); TraceCallStack& drawTrace = gl.GetDrawTrace(); drawTrace.Enable(true); - Actor actor = CreateActorWithImageVisual( propertyMap ); - Stage::GetCurrent().Add( actor ); + Actor actor = CreateActorWithImageVisual(propertyMap); + application.GetScene().Add(actor); application.SendNotification(); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + DALI_TEST_EQUALS(drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION); textureTrace.Reset(); drawTrace.Reset(); - Actor actor2 = CreateActorWithImageVisual( propertyMap ); - Stage::GetCurrent().Add(actor2); + Actor actor2 = CreateActorWithImageVisual(propertyMap); + application.GetScene().Add(actor2); application.SendNotification(); // Send messages to update application.Render(); // process update and render application.SendNotification(); // process any signals to event - DALI_TEST_EQUALS( actor2.GetRendererCount(), 1u, TEST_LOCATION ); - - tet_infoline("Test that 2 draw calls occur with no new texture gens/binds, i.e. both\n" - "draw calls use the same texture as the previous draw call\n" ); + DALI_TEST_EQUALS(actor2.GetRendererCount(), 1u, TEST_LOCATION); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); - DALI_TEST_EQUALS( drawTrace.CountMethod("DrawArrays"), 2, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.CountMethod("BindTexture"), 0, TEST_LOCATION ); + // Testing for texture re-use in gl side is not relevant - we are not using actual graphics + // backend here, but test graphics backend. + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); + DALI_TEST_EQUALS(drawTrace.CountMethod("DrawArrays"), 2, TEST_LOCATION); tet_infoline("Test that removing 1 actor doesn't delete the texture\n"); - Stage::GetCurrent().Remove( actor ); + application.GetScene().Remove(actor); application.SendNotification(); application.Render(); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION ); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); tet_infoline("Test that removing last actor does delete the texture\n"); - Stage::GetCurrent().Remove( actor2 ); // Detaches remaining ImageVisual + application.GetScene().Remove(actor2); // Detaches remaining ImageVisual application.SendNotification(); application.Render(); - DALI_TEST_CHECK( actor2.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION ); + DALI_TEST_CHECK(actor2.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION); END_TEST; } - int UtcDaliImageVisualTextureReuse2(void) { ToolkitTestApplication application; - tet_infoline( "Request remote image visual with a Property::Map; request a second visual with the same url but different property map - should create new texture" ); + tet_infoline("Request remote image visual with a Property::Map; request a second visual with the same url but different property map - should create new texture"); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_REMOTE_IMAGE_FILE_NAME ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_REMOTE_IMAGE_FILE_NAME); - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); TraceCallStack& drawTrace = gl.GetDrawTrace(); drawTrace.Enable(true); - Actor actor = CreateActorWithImageVisual( propertyMap ); - Stage::GetCurrent().Add( actor ); + Actor actor = CreateActorWithImageVisual(propertyMap); + application.GetScene().Add(actor); application.SendNotification(); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + DALI_TEST_EQUALS(drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION); textureTrace.Reset(); drawTrace.Reset(); - propertyMap.Insert( ImageVisual::Property::SAMPLING_MODE, Dali::SamplingMode::NEAREST ); - propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 100 ); - propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 100 ); - Actor actor2 = CreateActorWithImageVisual( propertyMap ); - Stage::GetCurrent().Add(actor2); + propertyMap.Insert(ImageVisual::Property::SAMPLING_MODE, Dali::SamplingMode::NEAREST); + propertyMap.Insert(ImageVisual::Property::DESIRED_WIDTH, 100); + propertyMap.Insert(ImageVisual::Property::DESIRED_HEIGHT, 100); + Actor actor2 = CreateActorWithImageVisual(propertyMap); + application.GetScene().Add(actor2); application.SendNotification(); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor2.GetRendererCount(), 1u, TEST_LOCATION ); + DALI_TEST_EQUALS(actor2.GetRendererCount(), 1u, TEST_LOCATION); - tet_infoline("Test that 2 draw calls occur with 1 new texture gen/bind, i.e. both " - "renderers are using different textures\n" ); + tet_infoline( + "Test that 2 draw calls occur with 1 new texture gen/bind, i.e. both " + "renderers are using different textures\n"); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( drawTrace.CountMethod("DrawArrays"), 2, TEST_LOCATION ); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); + DALI_TEST_EQUALS(drawTrace.CountMethod("DrawArrays"), 2, TEST_LOCATION); TraceCallStack::NamedParams tex1; - tex1["texture"] = "1"; + tex1["texture"] << 1; TraceCallStack::NamedParams tex2; - tex1["texture"] = "2"; - DALI_TEST_EQUALS( textureTrace.FindMethodAndParams("BindTexture", tex1), true, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethodAndParams("BindTexture", tex2), true, TEST_LOCATION ); + tex2["texture"] << 2; + DALI_TEST_EQUALS(textureTrace.FindMethodAndParams("BindTexture", tex1), true, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethodAndParams("BindTexture", tex2), true, TEST_LOCATION); tet_infoline("Test that removing 1 actor deletes it's texture\n"); - Stage::GetCurrent().Remove( actor ); + application.GetScene().Remove(actor); application.SendNotification(); application.Render(); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION ); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION); tet_infoline("Test that removing last actor deletes it's texture\n"); - Stage::GetCurrent().Remove( actor2 ); + application.GetScene().Remove(actor2); application.SendNotification(); application.Render(); - DALI_TEST_CHECK( actor2.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 2, TEST_LOCATION ); + DALI_TEST_CHECK(actor2.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 2, TEST_LOCATION); END_TEST; } - int UtcDaliImageVisualCustomWrapModePixelArea(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with a Property::Map, test custom wrap mode and pixel area with atlasing" ); + tet_infoline("Request image visual with a Property::Map, test custom wrap mode and pixel area with atlasing"); + + static std::vector customUniforms = + { + UniformData("pixelArea", Property::Type::VECTOR4), + UniformData("wrapMode", Property::Type::VECTOR2), + }; + + TestGraphicsController& graphics = application.GetGraphicsController(); + graphics.AddCustomUniforms(customUniforms); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); // Test wrap mode with atlasing. Image with a size smaller than 512*512 will be uploaded as a part of the atlas. - const int width=34; - const int height=34; + const int width = 34; + const int height = 34; const Vector4 pixelArea(-0.5f, -0.5f, 2.f, 2.f); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_SMALL_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, width ); - propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, height ); - propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, true ); - propertyMap.Insert( ImageVisual::Property::PIXEL_AREA, pixelArea ); - propertyMap.Insert( ImageVisual::Property::WRAP_MODE_U, WrapMode::MIRRORED_REPEAT ); - propertyMap.Insert( ImageVisual::Property::WRAP_MODE_V, WrapMode::REPEAT ); - propertyMap.Insert( ImageVisual::Property::ATLASING, true ); - - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); - - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_SMALL_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::DESIRED_WIDTH, width); + propertyMap.Insert(ImageVisual::Property::DESIRED_HEIGHT, height); + propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); + propertyMap.Insert(ImageVisual::Property::PIXEL_AREA, pixelArea); + propertyMap.Insert(ImageVisual::Property::WRAP_MODE_U, WrapMode::MIRRORED_REPEAT); + propertyMap.Insert(ImageVisual::Property::WRAP_MODE_V, WrapMode::REPEAT); + propertyMap.Insert(ImageVisual::Property::ATLASING, true); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); TraceCallStack& texParameterTrace = gl.GetTexParameterTrace(); - texParameterTrace.Enable( true ); + texParameterTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); - actor.SetProperty( Actor::Property::SIZE, Vector2(2000, 2000) ); - actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER); - Stage::GetCurrent().Add( actor ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + actor.SetProperty(Actor::Property::SIZE, Vector2(2000, 2000)); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + application.GetScene().Add(actor); // loading started application.SendNotification(); application.Render(); - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + DALI_TEST_CHECK(actor.GetRendererCount() == 1u); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); // WITH atlasing, the wrapping is handled manually in shader, so the following gl function should not be called std::stringstream out; - out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_MIRRORED_REPEAT; - DALI_TEST_CHECK( !texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) ); + out << std::hex << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_MIRRORED_REPEAT; + DALI_TEST_CHECK(!texParameterTrace.FindMethodAndParams("TexParameteri", out.str())); out.str(""); - out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_T << ", " << GL_REPEAT; - DALI_TEST_CHECK( !texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) ); + out << std::hex << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_T << ", " << GL_REPEAT; + DALI_TEST_CHECK(!texParameterTrace.FindMethodAndParams("TexParameteri", out.str())); // test the uniforms which used to handle the wrap mode - Renderer renderer = actor.GetRendererAt( 0u ); - DALI_TEST_CHECK( renderer ); + Renderer renderer = actor.GetRendererAt(0u); + DALI_TEST_CHECK(renderer); - Property::Value pixelAreaValue = renderer.GetProperty( renderer.GetPropertyIndex( "pixelArea" ) ); - DALI_TEST_EQUALS( pixelAreaValue.Get(), pixelArea, TEST_LOCATION ); + Property::Value pixelAreaValue = renderer.GetProperty(renderer.GetPropertyIndex("pixelArea")); + DALI_TEST_EQUALS(pixelAreaValue.Get(), pixelArea, TEST_LOCATION); Vector4 pixelAreaUniform; - DALI_TEST_CHECK( gl.GetUniformValue( "pixelArea", pixelAreaUniform ) ); - DALI_TEST_EQUALS( pixelArea, pixelAreaUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION ); + DALI_TEST_CHECK(gl.GetUniformValue("pixelArea", pixelAreaUniform)); + DALI_TEST_EQUALS(pixelArea, pixelAreaUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION); - Property::Value wrapModeValue = renderer.GetProperty( renderer.GetPropertyIndex( "wrapMode" ) ); - Vector2 wrapMode( WrapMode::MIRRORED_REPEAT-1, WrapMode::REPEAT-1 ); - DALI_TEST_EQUALS( wrapModeValue.Get(), wrapMode, TEST_LOCATION ); + Property::Value wrapModeValue = renderer.GetProperty(renderer.GetPropertyIndex("wrapMode")); + Vector2 wrapMode(WrapMode::MIRRORED_REPEAT - 1, WrapMode::REPEAT - 1); + DALI_TEST_EQUALS(wrapModeValue.Get(), wrapMode, TEST_LOCATION); Vector2 wrapModeUniform; - DALI_TEST_CHECK( gl.GetUniformValue( "wrapMode", wrapModeUniform ) ); - DALI_TEST_EQUALS( wrapMode, wrapModeUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION ); + DALI_TEST_CHECK(gl.GetUniformValue("wrapMode", wrapModeUniform)); + DALI_TEST_EQUALS(wrapMode, wrapModeUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION); - actor.Unparent( ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + actor.Unparent(); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); END_TEST; } @@ -652,73 +931,84 @@ int UtcDaliImageVisualCustomWrapModePixelArea(void) int UtcDaliImageVisualCustomWrapModeNoAtlas(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with a Property::Map, test custom wrap mode and pixel area without atlasing" ); + tet_infoline("Request image visual with a Property::Map, test custom wrap mode and pixel area without atlasing"); + + static std::vector customUniforms = + { + UniformData("pixelArea", Property::Type::VECTOR4), + }; + + TestGraphicsController& graphics = application.GetGraphicsController(); + graphics.AddCustomUniforms(customUniforms); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); // Test wrap mode without atlasing. Image with a size bigger than 512*512 will NOT be uploaded as a part of the atlas. - const int width=600; - const int height=600; + const int width = 600; + const int height = 600; const Vector4 pixelArea(-0.5f, -0.5f, 2.f, 2.f); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, width ); - propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, height ); - propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, true ); - propertyMap.Insert( ImageVisual::Property::PIXEL_AREA, pixelArea ); - propertyMap.Insert( ImageVisual::Property::WRAP_MODE_U, WrapMode::MIRRORED_REPEAT ); - propertyMap.Insert( ImageVisual::Property::WRAP_MODE_V, WrapMode::REPEAT ); - - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); - - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::DESIRED_WIDTH, width); + propertyMap.Insert(ImageVisual::Property::DESIRED_HEIGHT, height); + propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); + propertyMap.Insert(ImageVisual::Property::PIXEL_AREA, pixelArea); + propertyMap.Insert(ImageVisual::Property::WRAP_MODE_U, WrapMode::MIRRORED_REPEAT); + propertyMap.Insert(ImageVisual::Property::WRAP_MODE_V, WrapMode::REPEAT); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); + textureTrace.EnableLogging(true); TraceCallStack& texParameterTrace = gl.GetTexParameterTrace(); - texParameterTrace.Enable( true ); + texParameterTrace.Enable(true); + texParameterTrace.EnableLogging(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); - actor.SetProperty( Actor::Property::SIZE, Vector2(2000, 2000) ); - actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER); - Stage::GetCurrent().Add( actor ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + actor.SetProperty(Actor::Property::SIZE, Vector2(2000, 2000)); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + application.GetScene().Add(actor); // loading started application.SendNotification(); application.Render(); + application.SendNotification(); - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + DALI_TEST_CHECK(actor.GetRendererCount() == 1u); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); // WITHOUT atlasing, the wrapping is handled by setting gl texture parameters std::stringstream out; - out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_MIRRORED_REPEAT; - DALI_TEST_CHECK( texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) ); + out << std::hex << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_MIRRORED_REPEAT; + DALI_TEST_CHECK(texParameterTrace.FindMethodAndParams("TexParameteri", out.str())); out.str(""); - out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_T << ", " << GL_REPEAT; - DALI_TEST_CHECK( texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) ); + out << std::hex << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_T << ", " << GL_REPEAT; + DALI_TEST_CHECK(texParameterTrace.FindMethodAndParams("TexParameteri", out.str())); // test the uniforms which used to handle the wrap mode - Renderer renderer = actor.GetRendererAt( 0u ); - DALI_TEST_CHECK( renderer ); + Renderer renderer = actor.GetRendererAt(0u); + DALI_TEST_CHECK(renderer); - Property::Value pixelAreaValue = renderer.GetProperty( renderer.GetPropertyIndex( "pixelArea" ) ); - DALI_TEST_EQUALS( pixelAreaValue.Get(), pixelArea, TEST_LOCATION ); + Property::Value pixelAreaValue = renderer.GetProperty(renderer.GetPropertyIndex("pixelArea")); + DALI_TEST_EQUALS(pixelAreaValue.Get(), pixelArea, TEST_LOCATION); Vector4 pixelAreaUniform; - DALI_TEST_CHECK( gl.GetUniformValue( "pixelArea", pixelAreaUniform ) ); - DALI_TEST_EQUALS( pixelArea, pixelAreaUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION ); + DALI_TEST_CHECK(gl.GetUniformValue("pixelArea", pixelAreaUniform)); + DALI_TEST_EQUALS(pixelArea, pixelAreaUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION); - Property::Index wrapModeIndex = renderer.GetPropertyIndex( "wrapMode" ); + Property::Index wrapModeIndex = renderer.GetPropertyIndex("wrapMode"); DALI_TEST_CHECK(wrapModeIndex == Property::INVALID_INDEX); actor.Unparent(); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); END_TEST; } @@ -726,79 +1016,96 @@ int UtcDaliImageVisualCustomWrapModeNoAtlas(void) int UtcDaliImageVisualAnimateMixColor(void) { ToolkitTestApplication application; - tet_infoline( "Animate mix color" ); + tet_infoline("Animate mix color"); + + static std::vector customUniforms = + { + UniformData("mixColor", Property::Type::VECTOR3), + }; - application.GetPlatform().SetClosestImageSize( Vector2(100, 100) ); + TestGraphicsController& graphics = application.GetGraphicsController(); + graphics.AddCustomUniforms(customUniforms); + + application.GetPlatform().SetClosestImageSize(Vector2(100, 100)); VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; - propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); - propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); + propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME); propertyMap.Insert("mixColor", Color::BLUE); propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); - Visual::Base visual = factory.CreateVisual( propertyMap ); + Visual::Base visual = factory.CreateVisual(propertyMap); - DummyControl actor = DummyControl::New(true); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2(2000, 2000) ); - actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER); - actor.SetProperty( Actor::Property::COLOR,Color::BLACK); - Stage::GetCurrent().Add(actor); + actor.SetProperty(Actor::Property::SIZE, Vector2(2000, 2000)); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + actor.SetProperty(Actor::Property::COLOR, Color::BLACK); + application.GetScene().Add(actor); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); Renderer renderer = actor.GetRendererAt(0); - Property::Index index = DevelHandle::GetPropertyIndex( renderer, Visual::Property::MIX_COLOR ); - Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); - DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::AUTO, TEST_LOCATION ); - tet_infoline("Test that the renderer has the mixColor property"); - DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + // @todo Should we add API to make this code work again? + // Property::Index index = renderer.GetPropertyIndex( Visual::Property::MIX_COLOR ); - const Vector4 TARGET_MIX_COLOR( 1.0f, 0.0f, 0.0f, 0.5f ); + Property::Value blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE); + DALI_TEST_EQUALS(blendModeValue.Get(), (int)BlendMode::AUTO, TEST_LOCATION); + + const Vector4 TARGET_MIX_COLOR(1.0f, 0.0f, 0.0f, 0.5f); Property::Map map; - map["target"] = "testVisual"; - map["property"] = "mixColor"; + map["target"] = "testVisual"; + map["property"] = "mixColor"; map["initialValue"] = Color::MAGENTA; - map["targetValue"] = TARGET_MIX_COLOR; - map["animator"] = Property::Map() - .Add("alphaFunction", "LINEAR") - .Add("timePeriod", Property::Map() - .Add("delay", 0.0f) - .Add("duration", 4.0f)); - - Dali::Toolkit::TransitionData transition = TransitionData::New( map ); + map["targetValue"] = TARGET_MIX_COLOR; + map["animator"] = Property::Map() + .Add("alphaFunction", "LINEAR") + .Add("timePeriod", Property::Map().Add("delay", 0.0f).Add("duration", 4.0f)); - Animation animation = dummyImpl.CreateTransition( transition ); + Dali::Toolkit::TransitionData transition = TransitionData::New(map); - blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); - DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::ON, TEST_LOCATION ); + Animation animation = dummyImpl.CreateTransition(transition); - animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE ); + animation.AnimateTo(Property(actor, Actor::Property::COLOR), Color::WHITE); animation.Play(); + TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); + glAbstraction.EnableEnableDisableCallTrace(true); + TraceCallStack& glEnableStack = glAbstraction.GetEnableDisableTrace(); + std::ostringstream blendStr; + blendStr << std::hex << GL_BLEND; + application.SendNotification(); - application.Render(0); // Ensure animation starts + application.Render(0); // Ensure animation starts application.Render(2000u); // Halfway point - Vector3 testColor( 1.0f, 0.0f, 0.5f ); + Vector3 testColor(1.0f, 0.0f, 0.5f); // uColor.a should be actor's alpha * mixColor.a. - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue( "uColor", Vector4( 0.5f, 0.5f, 0.5f, 0.75f ) ), true, TEST_LOCATION ); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue( "mixColor", testColor ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("uColor", Vector4(0.5f, 0.5f, 0.5f, 0.75f)), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("mixColor", testColor), true, TEST_LOCATION); - application.Render(2000u); // Halfway point between blue and white + DALI_TEST_CHECK(glEnableStack.FindMethodAndParams("Enable", blendStr.str())); - DALI_TEST_EQUALS( actor.GetCurrentProperty< Vector4 >( Actor::Property::COLOR ), Color::WHITE, TEST_LOCATION ); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue( "uColor", Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ), true, TEST_LOCATION ); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue( "mixColor", Vector3( TARGET_MIX_COLOR ) ), true, TEST_LOCATION ); + glEnableStack.Reset(); - TestMixColor( visual, Visual::Property::MIX_COLOR, TARGET_MIX_COLOR ); + application.SendNotification(); + application.Render(2000u); - blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); - DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::ON, TEST_LOCATION ); + application.SendNotification(); + application.Render(); + application.SendNotification(); + + DALI_TEST_EQUALS(actor.GetCurrentProperty(Actor::Property::COLOR), Color::WHITE, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("uColor", Vector4(1.0f, 1.0f, 1.0f, 0.5f)), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("mixColor", Vector3(TARGET_MIX_COLOR)), true, TEST_LOCATION); + + // (Don't test for caching of capabilities, toolkit uses Test graphics backend, not actual backend) + + TestMixColor(visual, Visual::Property::MIX_COLOR, TARGET_MIX_COLOR); END_TEST; } @@ -806,89 +1113,92 @@ int UtcDaliImageVisualAnimateMixColor(void) int UtcDaliImageVisualAnimateOpacity(void) { ToolkitTestApplication application; - tet_infoline( "Animate image visual opacity" ); + tet_infoline("Animate image visual opacity"); - application.GetPlatform().SetClosestImageSize( Vector2(100, 100) ); + application.GetPlatform().SetClosestImageSize(Vector2(100, 100)); VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; - propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); - propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); + propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME); propertyMap.Insert("opacity", 0.5f); propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); - Visual::Base visual = factory.CreateVisual( propertyMap ); + Visual::Base visual = factory.CreateVisual(propertyMap); - DummyControl actor = DummyControl::New(true); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2(2000, 2000) ); - actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER); - actor.SetProperty( Actor::Property::COLOR,Color::BLACK); - Stage::GetCurrent().Add(actor); + actor.SetProperty(Actor::Property::SIZE, Vector2(2000, 2000)); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + actor.SetProperty(Actor::Property::COLOR, Color::BLACK); + application.GetScene().Add(actor); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); - Renderer renderer = actor.GetRendererAt(0); - Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); - DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::ON, TEST_LOCATION ); + TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); + glAbstraction.EnableEnableDisableCallTrace(true); + TraceCallStack& glEnableStack = glAbstraction.GetEnableDisableTrace(); + std::ostringstream blendStr; + blendStr << std::hex << GL_BLEND; + + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK(glEnableStack.FindMethodAndParams("Enable", blendStr.str())); { - tet_infoline( "Test that the opacity can be increased to full via animation, and that the blend mode is set appropriately at the start and end of the animation." ); + tet_infoline("Test that the opacity can be increased to full via animation, and that the blend mode is set appropriately at the start and end of the animation."); Property::Map map; - map["target"] = "testVisual"; - map["property"] = "opacity"; + map["target"] = "testVisual"; + map["property"] = "opacity"; map["targetValue"] = 1.0f; - map["animator"] = Property::Map() - .Add("alphaFunction", "LINEAR") - .Add("timePeriod", Property::Map() - .Add("delay", 0.0f) - .Add("duration", 4.0f)); - - Dali::Toolkit::TransitionData transition = TransitionData::New( map ); - Animation animation = dummyImpl.CreateTransition( transition ); + map["animator"] = Property::Map() + .Add("alphaFunction", "LINEAR") + .Add("timePeriod", Property::Map().Add("delay", 0.0f).Add("duration", 4.0f)); + + Dali::Toolkit::TransitionData transition = TransitionData::New(map); + Animation animation = dummyImpl.CreateTransition(transition); animation.Play(); + glEnableStack.Reset(); + application.SendNotification(); - application.Render(0); // Ensure animation starts - application.Render(2000u); // Halfway point through animation + application.Render(0); // Ensure animation starts + application.Render(2000u); // Halfway point through animation application.SendNotification(); // Handle any signals Vector4 color; - DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", color ) ); - DALI_TEST_EQUALS( color.a, 0.75f, TEST_LOCATION ); + DALI_TEST_CHECK(application.GetGlAbstraction().GetUniformValue("uColor", color)); + DALI_TEST_EQUALS(color.a, 0.75f, TEST_LOCATION); - application.Render(2001u); // end + application.Render(2001u); // end application.SendNotification(); // ensure animation finished signal is sent - DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", color ) ); - DALI_TEST_EQUALS( color.a, 1.0f, TEST_LOCATION ); + DALI_TEST_CHECK(application.GetGlAbstraction().GetUniformValue("uColor", color)); + DALI_TEST_EQUALS(color.a, 1.0f, TEST_LOCATION); - blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); - DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::AUTO, TEST_LOCATION ); + // (Don't test for caching of capabilities, toolkit uses Test graphics backend, not actual backend) + DALI_TEST_CHECK(glEnableStack.FindMethodAndParams("Disable", blendStr.str())); } - { - tet_infoline( "Test that the opacity can be reduced via animation, and that the blend mode is set appropriately at the start and end of the animation." ); + tet_infoline("Test that the opacity can be reduced via animation, and that the blend mode is set appropriately at the start and end of the animation."); Property::Map map; - map["target"] = "testVisual"; - map["property"] = Visual::Property::OPACITY; + map["target"] = "testVisual"; + map["property"] = Visual::Property::OPACITY; map["targetValue"] = 0.1f; - map["animator"] = Property::Map() - .Add("alphaFunction", "LINEAR") - .Add("timePeriod", Property::Map() - .Add("delay", 0.0f) - .Add("duration", 4.0f)); - - Dali::Toolkit::TransitionData transition = TransitionData::New( map ); - Animation animation = dummyImpl.CreateTransition( transition ); + map["animator"] = Property::Map() + .Add("alphaFunction", "LINEAR") + .Add("timePeriod", Property::Map().Add("delay", 0.0f).Add("duration", 4.0f)); + + Dali::Toolkit::TransitionData transition = TransitionData::New(map); + Animation animation = dummyImpl.CreateTransition(transition); animation.Play(); - blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); - DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::ON, TEST_LOCATION ); + glEnableStack.Reset(); application.SendNotification(); application.Render(0); // Ensure animation starts @@ -896,171 +1206,180 @@ int UtcDaliImageVisualAnimateOpacity(void) application.SendNotification(); Vector4 color; - DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", color ) ); - DALI_TEST_EQUALS( color.a, 0.55f, TEST_LOCATION ); + DALI_TEST_CHECK(application.GetGlAbstraction().GetUniformValue("uColor", color)); + DALI_TEST_EQUALS(color.a, 0.55f, TEST_LOCATION); + + DALI_TEST_CHECK(glEnableStack.FindMethodAndParams("Enable", blendStr.str())); + + glEnableStack.Reset(); application.Render(2016u); // end application.SendNotification(); - DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", color ) ); - DALI_TEST_EQUALS( color.a, 0.1f, TEST_LOCATION ); + DALI_TEST_CHECK(application.GetGlAbstraction().GetUniformValue("uColor", color)); + DALI_TEST_EQUALS(color.a, 0.1f, TEST_LOCATION); - blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); - DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::ON, TEST_LOCATION ); + // (Don't test for caching of capabilities, toolkit uses Test graphics backend, not actual backend) + DALI_TEST_CHECK(!glEnableStack.FindMethodAndParams("Disable", blendStr.str())); } - END_TEST; } - - int UtcDaliImageVisualAnimateOpacity02(void) { ToolkitTestApplication application; - tet_infoline( "Animate image visual opacity" ); + tet_infoline("Animate image visual opacity"); - application.GetPlatform().SetClosestImageSize( Vector2(100, 100) ); + application.GetPlatform().SetClosestImageSize(Vector2(100, 100)); VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; - propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); - propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); + propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME); propertyMap.Insert("opacity", 0.5f); propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); - Visual::Base visual = factory.CreateVisual( propertyMap ); + Visual::Base visual = factory.CreateVisual(propertyMap); - DummyControl actor = DummyControl::New(true); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2(2000, 2000) ); - actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER); - actor.SetProperty( Actor::Property::COLOR,Color::BLACK); + actor.SetProperty(Actor::Property::SIZE, Vector2(2000, 2000)); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + actor.SetProperty(Actor::Property::COLOR, Color::BLACK); - tet_infoline( "Test that the opacity doesn't animate when actor not staged" ); + tet_infoline("Test that the opacity doesn't animate when actor not staged"); Property::Array array; Property::Map map; - map["target"] = "testVisual"; - map["property"] = "opacity"; + map["target"] = "testVisual"; + map["property"] = "opacity"; map["initialValue"] = 0.0f; - map["targetValue"] = 1.0f; - map["animator"] = Property::Map() - .Add("alphaFunction", "LINEAR") - .Add("timePeriod", Property::Map() - .Add("delay", 0.0f) - .Add("duration", 4.0f)); + map["targetValue"] = 1.0f; + map["animator"] = Property::Map() + .Add("alphaFunction", "LINEAR") + .Add("timePeriod", Property::Map().Add("delay", 0.0f).Add("duration", 4.0f)); Property::Map map2; - map2["target"] = "testVisual"; - map2["property"] = "size"; + map2["target"] = "testVisual"; + map2["property"] = "size"; map2["targetValue"] = Vector2(1.0f, 1.0f); - array.Add( map ).Add(map2); + array.Add(map).Add(map2); - Dali::Toolkit::TransitionData transition = TransitionData::New( array ); - Animation animation = dummyImpl.CreateTransition( transition ); + Dali::Toolkit::TransitionData transition = TransitionData::New(array); + Animation animation = dummyImpl.CreateTransition(transition); - Stage::GetCurrent().Add(actor); + application.GetScene().Add(actor); application.SendNotification(); - application.Render(0); // Ensure animation starts + application.Render(0); // Ensure animation starts - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); - Renderer renderer = actor.GetRendererAt(0); - Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); - DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::AUTO, TEST_LOCATION ); + Renderer renderer = actor.GetRendererAt(0); + Property::Value blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE); + DALI_TEST_EQUALS(blendModeValue.Get(), (int)BlendMode::AUTO, TEST_LOCATION); - animation = dummyImpl.CreateTransition( transition ); + animation = dummyImpl.CreateTransition(transition); animation.Play(); + TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); + glAbstraction.EnableEnableDisableCallTrace(true); + TraceCallStack& glEnableStack = glAbstraction.GetEnableDisableTrace(); + std::ostringstream blendStr; + blendStr << std::hex << GL_BLEND; + application.SendNotification(); - application.Render(0); // Ensure animation starts - application.Render(2000u); // Halfway point through animation + application.Render(0); // Ensure animation starts + application.Render(2000u); // Halfway point through animation application.SendNotification(); // Handle any signals - blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); - DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::ON, TEST_LOCATION ); + DALI_TEST_CHECK(glEnableStack.FindMethodAndParams("Enable", blendStr.str())); Vector4 color; - DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", color ) ); - DALI_TEST_EQUALS( color.a, 0.5f, TEST_LOCATION ); + DALI_TEST_CHECK(application.GetGlAbstraction().GetUniformValue("uColor", color)); + DALI_TEST_EQUALS(color.a, 0.5f, TEST_LOCATION); + + glEnableStack.Reset(); - application.Render(2001u); // end + application.Render(2001u); // end application.SendNotification(); // ensure animation finished signal is sent - DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue< Vector4 >( "uColor", color ) ); - DALI_TEST_EQUALS( color.a, 1.0f, TEST_LOCATION ); + DALI_TEST_CHECK(application.GetGlAbstraction().GetUniformValue("uColor", color)); + DALI_TEST_EQUALS(color.a, 1.0f, TEST_LOCATION); - blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE ); - DALI_TEST_EQUALS( blendModeValue.Get(), (int)BlendMode::AUTO, TEST_LOCATION ); + DALI_TEST_CHECK(glEnableStack.FindMethodAndParams("Disable", blendStr.str())); END_TEST; } - - int UtcDaliImageVisualAnimatePixelArea(void) { ToolkitTestApplication application; - tet_infoline( "ImageVisual animate pixel area" ); + tet_infoline("ImageVisual animate pixel area"); + + static std::vector customUniforms = + { + UniformData("pixelArea", Property::Type::VECTOR4), + }; + + TestGraphicsController& graphics = application.GetGraphicsController(); + graphics.AddCustomUniforms(customUniforms); - application.GetPlatform().SetClosestImageSize( Vector2(100, 100) ); + application.GetPlatform().SetClosestImageSize(Vector2(100, 100)); VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; - propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); - propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); + propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME); propertyMap.Insert("mixColor", Color::BLUE); propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); - Visual::Base visual = factory.CreateVisual( propertyMap ); + Visual::Base visual = factory.CreateVisual(propertyMap); - DummyControl actor = DummyControl::New(true); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2(2000, 2000) ); - actor.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER); - actor.SetProperty( Actor::Property::COLOR,Color::BLACK); - Stage::GetCurrent().Add(actor); + actor.SetProperty(Actor::Property::SIZE, Vector2(2000, 2000)); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + actor.SetProperty(Actor::Property::COLOR, Color::BLACK); + application.GetScene().Add(actor); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); Renderer renderer = actor.GetRendererAt(0); - Property::Index index = DevelHandle::GetPropertyIndex( renderer, Visual::Property::MIX_COLOR ); - - tet_infoline("Test that the renderer has the mixColor property"); - DALI_TEST_CHECK( index != Property::INVALID_INDEX ); + // @todo Implement this feature? + //Property::Index index = renderer.GetPropertyIndex( Visual::Property::MIX_COLOR ); + //tet_infoline("Test that the renderer has the mixColor property"); + //DALI_TEST_CHECK( index != Property::INVALID_INDEX ); // TransitionData only takes string keys Property::Map map; - map["target"] = "testVisual"; - map["property"] = "pixelArea"; - map["initialValue"] = Vector4( 0,0,0,1 ); - map["targetValue"] = Vector4( 0,0,1,1 ); // Animate width from zero to full - map["animator"] = Property::Map() - .Add("alphaFunction", "LINEAR") - .Add("timePeriod", Property::Map() - .Add("delay", 0.0f) - .Add("duration", 4.0f)); - - Dali::Toolkit::TransitionData transition = TransitionData::New( map ); - - Animation animation = dummyImpl.CreateTransition( transition ); - animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE ); + map["target"] = "testVisual"; + map["property"] = "pixelArea"; + map["initialValue"] = Vector4(0, 0, 0, 1); + map["targetValue"] = Vector4(0, 0, 1, 1); // Animate width from zero to full + map["animator"] = Property::Map() + .Add("alphaFunction", "LINEAR") + .Add("timePeriod", Property::Map().Add("delay", 0.0f).Add("duration", 4.0f)); + + Dali::Toolkit::TransitionData transition = TransitionData::New(map); + + Animation animation = dummyImpl.CreateTransition(transition); + animation.AnimateTo(Property(actor, Actor::Property::COLOR), Color::WHITE); animation.Play(); application.SendNotification(); application.Render(0); // Ensure animation starts application.Render(2000u); // Halfway point - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("pixelArea", Vector4(0.0f, 0.0f, 0.5f, 1.0f )), true, TEST_LOCATION ); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("pixelArea", Vector4(0.0f, 0.0f, 0.5f, 1.0f)), true, TEST_LOCATION); application.Render(2000u); // End of animation - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue("pixelArea", Vector4( 0.0f, 0.0f, 1.0f, 1.0f )), true, TEST_LOCATION ); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("pixelArea", Vector4(0.0f, 0.0f, 1.0f, 1.0f)), true, TEST_LOCATION); END_TEST; } @@ -1068,29 +1387,29 @@ int UtcDaliImageVisualAnimatePixelArea(void) int UtcDaliImageVisualTextureCancelRemoteLoad(void) { ToolkitTestApplication application; - tet_infoline( "Request remote image visual, then destroy visual to cancel load" ); + tet_infoline("Request remote image visual, then destroy visual to cancel load"); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_REMOTE_IMAGE_FILE_NAME ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_REMOTE_IMAGE_FILE_NAME); - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); TraceCallStack& drawTrace = gl.GetDrawTrace(); drawTrace.Enable(true); - Actor actor = CreateActorWithImageVisual( propertyMap ); - Stage::GetCurrent().Add( actor ); + Actor actor = CreateActorWithImageVisual(propertyMap); + application.GetScene().Add(actor); application.SendNotification(); - Stage::GetCurrent().Remove( actor ); + application.GetScene().Remove(actor); application.SendNotification(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), false, TEST_LOCATION ); - DALI_TEST_EQUALS( drawTrace.FindMethod("DrawArrays"), false, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), false, TEST_LOCATION); + DALI_TEST_EQUALS(drawTrace.FindMethod("DrawArrays"), false, TEST_LOCATION); END_TEST; } @@ -1098,51 +1417,51 @@ int UtcDaliImageVisualTextureCancelRemoteLoad(void) int UtcDaliImageVisualTextureCancelAsyncLoad(void) { ToolkitTestApplication application; - tet_infoline( "Load image asynchronosly, cancel loading, then load again" ); + tet_infoline("Load image asynchronously, cancel loading, then load again"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); - textureTrace.Enable( true ); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); TraceCallStack& drawTrace = gl.GetDrawTrace(); - drawTrace.Enable( true ); + drawTrace.Enable(true); - DummyControl actor = DummyControl::New(); - DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() ); - dummyImpl.RegisterVisual( Control::Property::BACKGROUND, visual ); + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::Property::BACKGROUND, visual); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); // Cancel loading - Stage::GetCurrent().Remove( actor ); + application.GetScene().Remove(actor); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); // Create another visual with the same image - visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); - dummyImpl.RegisterVisual( Control::Property::BACKGROUND, visual ); + dummyImpl.RegisterVisual(Control::Property::BACKGROUND, visual); application.SendNotification(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + DALI_TEST_EQUALS(drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION); END_TEST; } @@ -1150,42 +1469,42 @@ int UtcDaliImageVisualTextureCancelAsyncLoad(void) int UtcDaliImageVisualSetInvalidAsyncImage(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with invalid images - should draw broken.png" ); + tet_infoline("Request image visual with invalid images - should draw broken.png"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_INVALID_FILE_NAME ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_INVALID_FILE_NAME); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); application.SendNotification(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); - Stage::GetCurrent().Remove( actor ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + application.GetScene().Remove(actor); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); END_TEST; } @@ -1193,40 +1512,45 @@ int UtcDaliImageVisualSetInvalidAsyncImage(void) int UtcDaliImageVisualSetInvalidSyncImage(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with invalid images - should draw broken.png" ); + tet_infoline("Request image visual with invalid images - should draw broken.png"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_INVALID_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, true ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_INVALID_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + // Check resource status + Visual::ResourceStatus status = actor.GetVisualResourceStatus(Control::CONTROL_PROPERTY_END_INDEX + 1); + DALI_TEST_EQUALS(status, Visual::ResourceStatus::FAILED, TEST_LOCATION); - Stage::GetCurrent().Remove( actor ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + // The broken image should be shown. + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + + application.GetScene().Remove(actor); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); END_TEST; } @@ -1234,150 +1558,329 @@ int UtcDaliImageVisualSetInvalidSyncImage(void) int UtcDaliImageVisualSetInvalidRemoteImage(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with invalid images - should draw broken.png" ); + tet_infoline("Request image visual with invalid images - should draw broken.png"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); // Local invalid file, asynchronous loading Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_REMOTE_INVALID_FILE_NAME ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_REMOTE_INVALID_FILE_NAME); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + + application.GetScene().Add(actor); + + application.SendNotification(); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + + application.GetScene().Remove(actor); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + + END_TEST; +} + +int UtcDaliImageVisualAlphaMask01(void) +{ + ToolkitTestApplication application; + tet_infoline("Request image visual with a Property::Map containing an Alpha mask"); + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + Property::Map testMap; + visual.CreatePropertyMap(testMap); + DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL), Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION); + + // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. + // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), false, TEST_LOCATION); + + application.GetScene().Add(actor); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), true, TEST_LOCATION); + + dummyImpl.UnregisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliImageVisualAlphaMask02(void) +{ + ToolkitTestApplication application; + tet_infoline("Request image visual with a Property::Map containing an Alpha mask for GPU"); + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME); + propertyMap.Insert(DevelImageVisual::Property::MASKING_TYPE, DevelImageVisual::MaskingType::MASKING_ON_RENDERING); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + Property::Map testMap; + visual.CreatePropertyMap(testMap); + DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL), Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION); + DALI_TEST_EQUALS(*testMap.Find(DevelImageVisual::Property::MASKING_TYPE), Property::Value(DevelImageVisual::MaskingType::MASKING_ON_RENDERING), TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. + // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), false, TEST_LOCATION); + + application.GetScene().Add(actor); application.SendNotification(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + application.Render(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + Renderer renderer = actor.GetRendererAt(0u); + TextureSet textures = renderer.GetTextures(); + DALI_TEST_CHECK(textures); + DALI_TEST_EQUALS(textures.GetTextureCount(), 2u, TEST_LOCATION); + + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), true, TEST_LOCATION); - Stage::GetCurrent().Remove( actor ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + dummyImpl.UnregisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); END_TEST; } -int UtcDaliImageVisualAlphaMask(void) +int UtcDaliImageVisualAlphaMask03(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with a Property::Map containing an Alpha mask" ); + tet_infoline("Request image visual with a Property::Map containing an Alpha mask for GPU with fail case"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, "dummy_path"); + propertyMap.Insert(DevelImageVisual::Property::MASKING_TYPE, DevelImageVisual::MaskingType::MASKING_ON_RENDERING); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); Property::Map testMap; visual.CreatePropertyMap(testMap); - DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL),Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION ); // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); - DALI_TEST_EQUALS( actor.IsResourceReady(), false, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), false, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 3 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( actor.IsResourceReady(), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + Renderer renderer = actor.GetRendererAt(0u); + TextureSet textures = renderer.GetTextures(); + DALI_TEST_CHECK(textures); + DALI_TEST_EQUALS(textures.GetTextureCount(), 1u, TEST_LOCATION); - dummyImpl.UnregisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1 ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), true, TEST_LOCATION); + + dummyImpl.UnregisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); END_TEST; } -int UtcDaliImageVisualSynchronousLoadAlphaMask(void) +int UtcDaliImageVisualSynchronousLoadAlphaMask01(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with a Property::Map containing an Alpha mask with synchronous loading" ); + tet_infoline("Request image visual with a Property::Map containing an Alpha mask with synchronous loading"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, true ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); Property::Map testMap; visual.CreatePropertyMap(testMap); - DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL),Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION ); + DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL), Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION); // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); - DALI_TEST_EQUALS( actor.IsResourceReady(), false, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), false, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); // Do not wait for any EventThreadTrigger in synchronous alpha mask. application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( actor.IsResourceReady(), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), true, TEST_LOCATION); - dummyImpl.UnregisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1 ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + dummyImpl.UnregisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliImageVisualSynchronousLoadAlphaMask02(void) +{ + ToolkitTestApplication application; + tet_infoline("Request image visual with a Property::Map containing an Alpha mask for GPU with synchronous loading"); + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); + propertyMap.Insert(DevelImageVisual::Property::MASKING_TYPE, DevelImageVisual::MaskingType::MASKING_ON_RENDERING); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + Property::Map testMap; + visual.CreatePropertyMap(testMap); + DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL), Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION); + + // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. + // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), false, TEST_LOCATION); + + application.GetScene().Add(actor); + + // Do not wait for any EventThreadTrigger in synchronous alpha mask. + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + Renderer renderer = actor.GetRendererAt(0u); + TextureSet textures = renderer.GetTextures(); + DALI_TEST_CHECK(textures); + DALI_TEST_EQUALS(textures.GetTextureCount(), 2u, TEST_LOCATION); + + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), true, TEST_LOCATION); + + dummyImpl.UnregisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); END_TEST; } @@ -1385,54 +1888,54 @@ int UtcDaliImageVisualSynchronousLoadAlphaMask(void) int UtcDaliImageVisualRemoteAlphaMask(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with a Property::Map containing an Alpha mask" ); + tet_infoline("Request image visual with a Property::Map containing an Alpha mask"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); const std::string MASK_IMAGE = TEST_REMOTE_IMAGE_FILE_NAME; Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::ALPHA_MASK_URL, MASK_IMAGE ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, MASK_IMAGE); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); Property::Map testMap; visual.CreatePropertyMap(testMap); - DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL),Property::Value(MASK_IMAGE), TEST_LOCATION ); + DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL), Property::Value(MASK_IMAGE), TEST_LOCATION); // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); - DALI_TEST_EQUALS( actor.IsResourceReady(), false, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.IsResourceReady(), false, TEST_LOCATION); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 3 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( actor.IsResourceReady(), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), true, TEST_LOCATION); END_TEST; } @@ -1440,47 +1943,47 @@ int UtcDaliImageVisualRemoteAlphaMask(void) int UtcDaliImageVisualAlphaMaskCrop(void) { ToolkitTestApplication application; - tet_infoline( "Request image visual with an Alpha mask and scale/cropping" ); + tet_infoline("Request image visual with an Alpha mask and scale/cropping"); VisualFactory factory = VisualFactory::Get(); - DALI_TEST_CHECK( factory ); + DALI_TEST_CHECK(factory); Property::Map propertyMap; - propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::MASK_CONTENT_SCALE, 1.6f ); - propertyMap.Insert( ImageVisual::Property::CROP_TO_MASK, true ); + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::MASK_CONTENT_SCALE, 1.6f); + propertyMap.Insert(ImageVisual::Property::CROP_TO_MASK, true); - Visual::Base visual = factory.CreateVisual( propertyMap ); - DALI_TEST_CHECK( visual ); + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); Property::Map testMap; visual.CreatePropertyMap(testMap); - DALI_TEST_EQUALS( *testMap.Find(ImageVisual::Property::ALPHA_MASK_URL),Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION ); - DALI_TEST_EQUALS( *testMap.Find(ImageVisual::Property::MASK_CONTENT_SCALE), Property::Value(1.6f), TEST_LOCATION ); - DALI_TEST_EQUALS( *testMap.Find(ImageVisual::Property::CROP_TO_MASK),Property::Value(true), TEST_LOCATION ); + DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL), Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION); + DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::MASK_CONTENT_SCALE), Property::Value(1.6f), TEST_LOCATION); + DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::CROP_TO_MASK), Property::Value(true), TEST_LOCATION); // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. // Image with a size smaller than 512*512 will be uploaded as a part of the atlas. - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - DummyControl actor = DummyControl::New(); + DummyControl actor = DummyControl::New(); DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual ); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); - actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); - DALI_TEST_EQUALS( actor.IsResourceReady(), false, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), false, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 3 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION); application.SendNotification(); application.Render(); @@ -1488,10 +1991,10 @@ int UtcDaliImageVisualAlphaMaskCrop(void) Vector2 size; visual.GetNaturalSize(size); - DALI_TEST_EQUALS( size, Vector2( 100.0f, 100.0f ), 0.001f, TEST_LOCATION ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( actor.IsResourceReady(), true, TEST_LOCATION ); + DALI_TEST_EQUALS(size, Vector2(100.0f, 100.0f), 0.001f, TEST_LOCATION); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), true, TEST_LOCATION); END_TEST; } @@ -1499,49 +2002,49 @@ int UtcDaliImageVisualAlphaMaskCrop(void) int UtcDaliImageVisualReleasePolicy01(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualReleasePolicy01 Detached Policy, disabling visual with this policy deletes texture" ); + tet_infoline("UtcDaliImageVisualReleasePolicy01 Detached Policy, disabling visual with this policy deletes texture"); - Visual::Base imageVisual = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DETACHED ); - DALI_TEST_CHECK( imageVisual ); + Visual::Base imageVisual = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DETACHED); + DALI_TEST_CHECK(imageVisual); // Set up debug trace - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Register visual with control and ensure it has the only handle" ); - DummyControl actor = DummyControl::New(true); + tet_infoline("Register visual with control and ensure it has the only handle"); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); imageVisual.Reset(); - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); application.SendNotification(); application.Render(0); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(0); // Test renderer and texture created - tet_infoline( "Confirm texture created" ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); + tet_infoline("Confirm texture created"); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); - tet_infoline( "Disable visual causing the texture to be deleted" ); - dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false ); + tet_infoline("Disable visual causing the texture to be deleted"); + dummyImpl.EnableVisual(DummyControl::Property::TEST_VISUAL, false); application.SendNotification(); application.Render(0); // Test renderer and textures removed. - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION ); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION); END_TEST; } @@ -1549,51 +2052,50 @@ int UtcDaliImageVisualReleasePolicy01(void) int UtcDaliImageVisualReleasePolicy02(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualReleasePolicy02 Destroyed Policy, Texture should be deleted when visual destroyed" ); + tet_infoline("UtcDaliImageVisualReleasePolicy02 Destroyed Policy, Texture should be deleted when visual destroyed"); - Visual::Base imageVisual = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DESTROYED ); - DALI_TEST_CHECK( imageVisual ); + Visual::Base imageVisual = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DESTROYED); + DALI_TEST_CHECK(imageVisual); // Setup debug trace - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Register visual with control and ensure it has the only handle" ); - DummyControl actor = DummyControl::New(true); + tet_infoline("Register visual with control and ensure it has the only handle"); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); application.SendNotification(); application.Render(0); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(0); // Test renderer and texture created - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); - - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - tet_infoline( "Destroy visual by UnRegistering visual with control, check renderer is destroyed" ); - dummyImpl.UnregisterVisual( DummyControl::Property::TEST_VISUAL ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + DALI_TEST_CHECK(actor.GetRendererCount() == 1u); + tet_infoline("Destroy visual by UnRegistering visual with control, check renderer is destroyed"); + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); application.SendNotification(); application.Render(); // Test texture removed after visual destroyed. - tet_infoline( "Ensure texture is deleted after visual destroyed" ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION ); + tet_infoline("Ensure texture is deleted after visual destroyed"); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION); END_TEST; } @@ -1601,48 +2103,48 @@ int UtcDaliImageVisualReleasePolicy02(void) int UtcDaliImageVisualReleasePolicy03(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualReleasePolicy03 Never Policy, texture should not be deleted after visual destroyed" ); + tet_infoline("UtcDaliImageVisualReleasePolicy03 Never Policy, texture should not be deleted after visual destroyed"); - Visual::Base imageVisual = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::NEVER ); - DALI_TEST_CHECK( imageVisual ); + Visual::Base imageVisual = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::NEVER); + DALI_TEST_CHECK(imageVisual); - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Register visual with control and ensure it has the only handle" ); - DummyControl actor = DummyControl::New(true); + tet_infoline("Register visual with control and ensure it has the only handle"); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); application.SendNotification(); application.Render(0); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(0); // Test renderer and texture created - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); - tet_infoline( "Destroy visual by UnRegistering visual with control, check renderer is destroyed" ); - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - dummyImpl.UnregisterVisual( DummyControl::Property::TEST_VISUAL ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + tet_infoline("Destroy visual by UnRegistering visual with control, check renderer is destroyed"); + DALI_TEST_CHECK(actor.GetRendererCount() == 1u); + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); application.SendNotification(); application.Render(); - tet_infoline( "Ensure texture is not deleted as policy is set to NEVER" ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION ); + tet_infoline("Ensure texture is not deleted as policy is set to NEVER"); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); END_TEST; } @@ -1650,64 +2152,64 @@ int UtcDaliImageVisualReleasePolicy03(void) int UtcDaliImageVisualReleasePolicy04(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualReleasePolicy04 Two visuals with different policies sharing a texture" ); + tet_infoline("UtcDaliImageVisualReleasePolicy04 Two visuals with different policies sharing a texture"); - tet_infoline( "Create first visual with Never release policy" ); - Visual::Base imageVisualNever = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::NEVER ); + tet_infoline("Create first visual with Never release policy"); + Visual::Base imageVisualNever = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::NEVER); - tet_infoline( "Create second visual with Destroyed release policy"); - Visual::Base imageVisualDestroyed = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DESTROYED ); + tet_infoline("Create second visual with Destroyed release policy"); + Visual::Base imageVisualDestroyed = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DESTROYED); // Set up trace debug - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Register visuals with control and ensure it has the only handles" ); - DummyControl actor = DummyControl::New(true); + tet_infoline("Register visuals with control and ensure it has the only handles"); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisualNever ); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, imageVisualDestroyed ); - imageVisualNever.Reset(); // reduce ref count so only the control keeps the visual alive. + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisualNever); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL2, imageVisualDestroyed); + imageVisualNever.Reset(); // reduce ref count so only the control keeps the visual alive. imageVisualDestroyed.Reset(); // reduce ref count so only the control keeps the visual alive. - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); // Test initially zero renderers application.SendNotification(); application.Render(0); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(0); - tet_infoline( "Ensure a texture is created, shared amongst both visuals. Each visual has its own renderer" ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 2u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); + tet_infoline("Ensure a texture is created, shared amongst both visuals. Each visual has its own renderer"); + DALI_TEST_EQUALS(actor.GetRendererCount(), 2u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); // Test renderer removed when visual destroyed - DALI_TEST_CHECK( actor.GetRendererCount() == 2u ); - dummyImpl.UnregisterVisual( DummyControl::Property::TEST_VISUAL2 ); // TEST_VISUAL2 no longer requires the texture as release policy DESTROYED - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + DALI_TEST_CHECK(actor.GetRendererCount() == 2u); + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL2); // TEST_VISUAL2 no longer requires the texture as release policy DESTROYED + DALI_TEST_CHECK(actor.GetRendererCount() == 1u); application.SendNotification(); application.Render(); // Test texture was not deleted as TEST_VISUAL release policy is NEVER so it is still required. - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION ); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); - dummyImpl.UnregisterVisual( DummyControl::Property::TEST_VISUAL ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); application.SendNotification(); application.Render(); - tet_infoline( "Ensure a texture is not deleted as second visual used the NEVER release policy" ); + tet_infoline("Ensure a texture is not deleted as second visual used the NEVER release policy"); // Test texture was not deleted as TEST_VISUAL release policy is NEVER so it is still required. - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION ); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); END_TEST; } @@ -1715,24 +2217,24 @@ int UtcDaliImageVisualReleasePolicy04(void) int UtcDaliImageVisualReleasePolicy05(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualReleasePolicy05 Testing settung by string currents correct enum" ); + tet_infoline("UtcDaliImageVisualReleasePolicy05 Testing settung by string currents correct enum"); VisualFactory factory = VisualFactory::Get(); Property::Map propertyMapNeverReleasePolicy; - propertyMapNeverReleasePolicy.Insert( Visual::Property::TYPE, Visual::IMAGE ); - propertyMapNeverReleasePolicy.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); - propertyMapNeverReleasePolicy.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 ); - propertyMapNeverReleasePolicy.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 ); - propertyMapNeverReleasePolicy.Insert( "releasePolicy" , "never" ); + propertyMapNeverReleasePolicy.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMapNeverReleasePolicy.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME); + propertyMapNeverReleasePolicy.Insert(ImageVisual::Property::DESIRED_WIDTH, 20); + propertyMapNeverReleasePolicy.Insert(ImageVisual::Property::DESIRED_HEIGHT, 30); + propertyMapNeverReleasePolicy.Insert("releasePolicy", "never"); - Visual::Base imageVisualNever = factory.CreateVisual( propertyMapNeverReleasePolicy ); + Visual::Base imageVisualNever = factory.CreateVisual(propertyMapNeverReleasePolicy); Property::Map resultMap; - imageVisualNever.CreatePropertyMap( resultMap ); - DALI_TEST_CHECK( ! resultMap.Empty() ); + imageVisualNever.CreatePropertyMap(resultMap); + DALI_TEST_CHECK(!resultMap.Empty()); - DALI_TEST_EQUALS( ( resultMap.Find( ImageVisual::Property::RELEASE_POLICY ) )->Get(), (int)ImageVisual::ReleasePolicy::NEVER, TEST_LOCATION ); + DALI_TEST_EQUALS((resultMap.Find(ImageVisual::Property::RELEASE_POLICY))->Get(), (int)ImageVisual::ReleasePolicy::NEVER, TEST_LOCATION); END_TEST; } @@ -1740,58 +2242,58 @@ int UtcDaliImageVisualReleasePolicy05(void) int UtcDaliImageVisualReleasePolicy06(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualReleasePolicy06 Never Policy, texture should not be affected by Disabling and Enabling visual" ); + tet_infoline("UtcDaliImageVisualReleasePolicy06 Never Policy, texture should not be affected by Disabling and Enabling visual"); - Visual::Base imageVisual= CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::NEVER ); - DALI_TEST_CHECK( imageVisual ); + Visual::Base imageVisual = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::NEVER); + DALI_TEST_CHECK(imageVisual); - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Register visual with control and ensure it has the only handle" ); - DummyControl actor = DummyControl::New(true); + tet_infoline("Register visual with control and ensure it has the only handle"); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); application.SendNotification(); application.Render(0); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(0); // Test renderer and texture created - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); textureTrace.Reset(); - tet_infoline( "Disable Visual and check texture not affected" ); - dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false ); + tet_infoline("Disable Visual and check texture not affected"); + dummyImpl.EnableVisual(DummyControl::Property::TEST_VISUAL, false); application.SendNotification(); application.Render(0); - tet_infoline( "Check renderer is destroyed when visual off stage" ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); + tet_infoline("Check renderer is destroyed when visual off stage"); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); textureTrace.Reset(); - tet_infoline( "Re-enable Visual and check texture not affected" ); - dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, true ); + tet_infoline("Re-enable Visual and check texture not affected"); + dummyImpl.EnableVisual(DummyControl::Property::TEST_VISUAL, true); application.SendNotification(); application.Render(0); - tet_infoline( "Check texture not affected and renderer is destroyed when visual off stage" ); - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); + tet_infoline("Check texture not affected and renderer is destroyed when visual off stage"); + DALI_TEST_CHECK(actor.GetRendererCount() == 1u); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); END_TEST; } @@ -1799,64 +2301,203 @@ int UtcDaliImageVisualReleasePolicy06(void) int UtcDaliImageVisualReleasePolicy07(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualReleasePolicy07 Two visuals with different policies sharing a texture DETACHED and DESTROYED" ); + tet_infoline("UtcDaliImageVisualReleasePolicy07 Two visuals with different policies sharing a texture DETACHED and DESTROYED"); - tet_infoline( "Create first visual with DESTROYED release policy" ); - Visual::Base imageVisualDestroyed = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DESTROYED ); + tet_infoline("Create first visual with DESTROYED release policy"); + Visual::Base imageVisualDestroyed = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DESTROYED); - - tet_infoline( "Create second visual with DETACHED release policy"); - Visual::Base imageVisualDetached = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DETACHED ); + tet_infoline("Create second visual with DETACHED release policy"); + Visual::Base imageVisualDetached = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DETACHED); // Set up trace debug - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Register visuals with control and ensure it has the only handles" ); - DummyControl actor = DummyControl::New(true); + tet_infoline("Register visuals with control and ensure it has the only handles"); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisualDestroyed ); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, imageVisualDetached ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisualDestroyed); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL2, imageVisualDetached); imageVisualDestroyed.Reset(); // reduce ref count so only the control keeps the visual alive. - imageVisualDetached.Reset(); // reduce ref count so only the control keeps the visual alive. + imageVisualDetached.Reset(); // reduce ref count so only the control keeps the visual alive. - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); // Test initially zero renderers application.SendNotification(); application.Render(0); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(0); - tet_infoline( "Ensure a texture is created, shared amongst both visuals. Each visual has its own renderer" ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 2u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); + tet_infoline("Ensure a texture is created, shared amongst both visuals. Each visual has its own renderer"); + DALI_TEST_EQUALS(actor.GetRendererCount(), 2u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); // Test renderer removed when visual destroyed - DALI_TEST_CHECK( actor.GetRendererCount() == 2u ); - dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL2, false ); // TEST_VISUAL2 no longer requires the texture as release policy DETACHED - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); + DALI_TEST_CHECK(actor.GetRendererCount() == 2u); + dummyImpl.EnableVisual(DummyControl::Property::TEST_VISUAL2, false); // TEST_VISUAL2 no longer requires the texture as release policy DETACHED + DALI_TEST_CHECK(actor.GetRendererCount() == 1u); application.SendNotification(); application.Render(); // Test texture was not deleted as TEST_VISUAL release policy is DESTROYED and is still required. - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION ); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); + + dummyImpl.EnableVisual(DummyControl::Property::TEST_VISUAL, false); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + application.SendNotification(); + application.Render(); + + tet_infoline("Ensure a texture is not deleted as second visual used the DESTROYED release policy"); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliImageVisualReleasePolicy08(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliImageVisualReleasePolicy08 Ensure TextureSet is same after detach/attach on stage when texture used the DESTROYED release policy"); + + tet_infoline("Create first visual with DESTROYED release policy"); + Visual::Base imageVisualDestroyed = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DESTROYED); + + // Set up trace debug + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + tet_infoline("Register visuals with control and ensure it has the only handles"); + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisualDestroyed); + imageVisualDestroyed.Reset(); // reduce ref count so only the control keeps the visual alive. + + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + + // Test initially zero renderers + application.SendNotification(); + application.Render(0); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); + textureTrace.Reset(); + + application.GetScene().Add(actor); + + // Wait for image to load + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(0); + tet_infoline("Ensure a texture is created"); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); + textureTrace.Reset(); + + // Ensure TextureSet is same after detach/attach on stage when texture used the DESTROYED release policy + // 1. Get TextureSet + TextureSet textureSetBefore = actor.GetRendererAt(0u).GetTextures(); + + // 2.Remove actor from stage. In this case, renderer also is deleted. + tet_infoline("Remove actor from stage"); + application.GetScene().Remove(actor); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + application.SendNotification(); + application.Render(); + + tet_infoline("Ensure a texture is not deleted as visual used the DESTROYED release policy"); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION); + textureTrace.Reset(); + + // 3.Add actor in stage. In this case, renderer is created. + tet_infoline("Add actor in stage"); + application.GetScene().Add(actor); + DALI_TEST_CHECK(actor.GetRendererCount() == 1u); + application.SendNotification(); + application.Render(); + tet_infoline("Ensure a texture is not created again"); + DALI_TEST_EQUALS(textureTrace.CountMethod("GenTextures"), 0, TEST_LOCATION); + textureTrace.Reset(); + + // 4.Compare Texture with before and after. textureSet need to be same because release policy is the DESTROYED. + tet_infoline("Ensure a textureSet is not deleted because it is used the DESTROYED release policy"); + TextureSet textureSetAfter = actor.GetRendererAt(0u).GetTextures(); + DALI_TEST_CHECK(textureSetBefore == textureSetAfter); + textureSetBefore.Reset(); + textureSetAfter.Reset(); + + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliImageVisualReleasePolicy09(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliImageVisualReleasePolicy09 Destroyed Policy with N-Patch, Texture should be deleted when visual destroyed"); + + Property::Map propertyMapNPatchReleasePolicy; + propertyMapNPatchReleasePolicy.Insert(Visual::Property::TYPE, Visual::N_PATCH); + propertyMapNPatchReleasePolicy.Insert(ImageVisual::Property::URL, TEST_N_PATCH_IMAGE_FILE_NAME); + propertyMapNPatchReleasePolicy.Insert(DevelImageVisual::Property::AUXILIARY_IMAGE, TEST_MASK_IMAGE_FILE_NAME); + propertyMapNPatchReleasePolicy.Insert(DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, 0.9f); + propertyMapNPatchReleasePolicy.Insert(ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::DESTROYED); + + VisualFactory factory = VisualFactory::Get(); + Visual::Base imageVisual = factory.CreateVisual(propertyMapNPatchReleasePolicy); + DALI_TEST_CHECK(imageVisual); + + // Setup debug trace + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + tet_infoline("Register visual with control and ensure it has the only handle"); + DummyControl actor = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); + imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. + + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + + application.SendNotification(); + application.Render(0); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); - dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL, false ); - DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); + application.GetScene().Add(actor); + + // Wait for image to load + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(0); + // Test renderer and texture created + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); + + DALI_TEST_CHECK(actor.GetRendererCount() == 1u); + tet_infoline("Destroy visual by UnRegistering visual with control, check renderer is destroyed"); + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); application.SendNotification(); application.Render(); - tet_infoline( "Ensure a texture is not deleted as second visual used the DESTROYED release policy" ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION ); + // Test texture removed after visual destroyed. + tet_infoline("Ensure texture is deleted after visual destroyed"); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 2, TEST_LOCATION); END_TEST; } @@ -1864,66 +2505,66 @@ int UtcDaliImageVisualReleasePolicy07(void) int UtcDaliImageVisualLoadPolicy01(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualLoadPolicy01 Load a visual image before attaching to stage" ); + tet_infoline("UtcDaliImageVisualLoadPolicy01 Load a visual image before attaching to stage"); // Set up trace debug - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Create visual with IMMEDIATE load policy" ); + tet_infoline("Create visual with IMMEDIATE load policy"); VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; - propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME ); - propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 ); - propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 ); - propertyMap.Insert( "loadPolicy" , ImageVisual::LoadPolicy::IMMEDIATE ); + propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::DESIRED_WIDTH, 20); + propertyMap.Insert(ImageVisual::Property::DESIRED_HEIGHT, 30); + propertyMap.Insert("loadPolicy", ImageVisual::LoadPolicy::IMMEDIATE); - Visual::Base imageVisual = factory.CreateVisual( propertyMap ); + Visual::Base imageVisual = factory.CreateVisual(propertyMap); Property::Map resultMap; - imageVisual.CreatePropertyMap( resultMap ); - DALI_TEST_CHECK( ! resultMap.Empty() ); - DALI_TEST_EQUALS( ( resultMap.Find( ImageVisual::Property::LOAD_POLICY ) )->Get(), (int)ImageVisual::LoadPolicy::IMMEDIATE, TEST_LOCATION ); + imageVisual.CreatePropertyMap(resultMap); + DALI_TEST_CHECK(!resultMap.Empty()); + DALI_TEST_EQUALS((resultMap.Find(ImageVisual::Property::LOAD_POLICY))->Get(), (int)ImageVisual::LoadPolicy::IMMEDIATE, TEST_LOCATION); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); // Ensure texture has been uploaded application.SendNotification(); application.Render(); - tet_infoline( "Ensure texture loading starts after visual created" ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); + tet_infoline("Ensure texture loading starts after visual created"); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); textureTrace.Reset(); - tet_infoline( "Register visuals with control and ensure it has the only handles" ); - DummyControl actor = DummyControl::New(true); + tet_infoline("Register visuals with control and ensure it has the only handles"); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); - Stage::GetCurrent().Add( actor ); - tet_infoline( "Ensure nothing triggers another load as texure already loaded" ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + application.GetScene().Add(actor); + tet_infoline("Ensure nothing triggers another load as texure already loaded"); const unsigned int TIME_OUT_3_SECONDS = 3; - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1, TIME_OUT_3_SECONDS ), false, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, TIME_OUT_3_SECONDS), false, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); // Ensure texture is deleted when no longer needed (ref count was correct ) - dummyImpl.UnregisterVisual( DummyControl::Property::TEST_VISUAL ); + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION); END_TEST; } @@ -1931,53 +2572,53 @@ int UtcDaliImageVisualLoadPolicy01(void) int UtcDaliImageVisualLoadPolicy02(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualLoadPolicy01 Load a visual image only after attached to stage" ); + tet_infoline("UtcDaliImageVisualLoadPolicy01 Load a visual image only after attached to stage"); // Set up trace debug - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Create visual with IMMEDIATE load policy" ); - Visual::Base imageVisual = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::ATTACHED ); + tet_infoline("Create visual with IMMEDIATE load policy"); + Visual::Base imageVisual = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::ATTACHED); const unsigned int TIME_OUT_3_SECONDS = 3; - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1, TIME_OUT_3_SECONDS ), false, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, TIME_OUT_3_SECONDS), false, TEST_LOCATION); // Act on meeage queue even although nothing expected to load application.SendNotification(); application.Render(); - tet_infoline( "Ensure texture is not generated yet" ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION ); + tet_infoline("Ensure texture is not generated yet"); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION); textureTrace.Reset(); - tet_infoline( "Register visuals with control and ensure it has the only handles" ); - DummyControl actor = DummyControl::New(true); + tet_infoline("Register visuals with control and ensure it has the only handles"); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); - Stage::GetCurrent().Add( actor ); - tet_infoline( "Allow image time to load" ); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + application.GetScene().Add(actor); + tet_infoline("Allow image time to load"); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - tet_infoline( "Ensure texture generated and renderer created" ); - DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); + tet_infoline("Ensure texture generated and renderer created"); + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); // Ensure texture is delete when no longer needed - dummyImpl.UnregisterVisual( DummyControl::Property::TEST_VISUAL ); + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); - DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION ); + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION); END_TEST; } @@ -1985,36 +2626,36 @@ int UtcDaliImageVisualLoadPolicy02(void) int UtcDaliImageVisualLoadPolicy03(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualLoadPolicy03 Load a visual image and receive ResourceReady Signal when loaded" ); + tet_infoline("UtcDaliImageVisualLoadPolicy03 Load a visual image and receive ResourceReady Signal when loaded"); - const bool VISUAL_NOT_ENABLED( false ); // Instead of just passing 'false' into an API. + const bool VISUAL_NOT_ENABLED(false); // Instead of just passing 'false' into an API. // Set up trace debug - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Create a control and connect to resource ready signal without adding to stage" ); + tet_infoline("Create a control and connect to resource ready signal without adding to stage"); DummyControl actor = DummyControl::New(true); - actor.ResourceReadySignal().Connect( &ResourceReadySignal); + actor.ResourceReadySignal().Connect(&ResourceReadySignal); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); - tet_infoline( "Create visual with IMMEDIATE load policy" ); - Visual::Base imageVisual = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::IMMEDIATE ); + tet_infoline("Create visual with IMMEDIATE load policy"); + Visual::Base imageVisual = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::IMMEDIATE); - tet_infoline( "Registering visual allows control to get a signal once loaded even if visual not enabled( not staged )" ); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual, VISUAL_NOT_ENABLED ); + tet_infoline("Registering visual allows control to get a signal once loaded even if visual not enabled( not staged )"); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual, VISUAL_NOT_ENABLED); imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. - tet_infoline( "Allow image time to load resource" ); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + tet_infoline("Allow image time to load resource"); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); // Ensure texture has been uploaded - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); + DALI_TEST_EQUALS(gResourceReadySignalFired, true, TEST_LOCATION); END_TEST; } @@ -2022,52 +2663,52 @@ int UtcDaliImageVisualLoadPolicy03(void) int UtcDaliImageVisualLoadPolicy04(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualLoadPolicy04 First part Load a visual image before attaching to stage"); - tet_infoline( "Second part, Reuse the same image in aonther control and check resource ready signal fired" ); + tet_infoline("UtcDaliImageVisualLoadPolicy04 First part Load a visual image before attaching to stage"); + tet_infoline("Second part, Reuse the same image in aonther control and check resource ready signal fired"); - const bool VISUAL_NOT_ENABLED( false ); // Instead of just passing false into an API. + const bool VISUAL_NOT_ENABLED(false); // Instead of just passing false into an API. // Set up trace debug - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Create a control and connect to resource ready signal" ); + tet_infoline("Create a control and connect to resource ready signal"); DummyControl actor = DummyControl::New(true); - actor.ResourceReadySignal().Connect( &ResourceReadySignal); + actor.ResourceReadySignal().Connect(&ResourceReadySignal); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); - tet_infoline( "Create visual with IMMEDIATE load policy" ); - Visual::Base imageVisual = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::IMMEDIATE ); + tet_infoline("Create visual with IMMEDIATE load policy"); + Visual::Base imageVisual = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::IMMEDIATE); - tet_infoline( "Registering visual allows control to get a signal once loaded even if visual not enabled( staged )" ); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual, VISUAL_NOT_ENABLED ); + tet_infoline("Registering visual allows control to get a signal once loaded even if visual not enabled( staged )"); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual, VISUAL_NOT_ENABLED); imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. - tet_infoline( "Allow image time to load" ); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + tet_infoline("Allow image time to load"); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - tet_infoline( "Testing texture is loaded and resource ready signal fired" ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + tet_infoline("Testing texture is loaded and resource ready signal fired"); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); + DALI_TEST_EQUALS(gResourceReadySignalFired, true, TEST_LOCATION); - tet_infoline( "Original control correctly signalled, now testing for signal with new Control reusing the image" ); + tet_infoline("Original control correctly signalled, now testing for signal with new Control reusing the image"); - gResourceReadySignalFired = false; // Reset signal check ready for testing next Control - Visual::Base imageVisual2 = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::IMMEDIATE ); - DummyControl actor2 = DummyControl::New(true); - Impl::DummyControl& dummyImpl2 = static_cast(actor.GetImplementation()); - actor2.ResourceReadySignal().Connect( &ResourceReadySignal); + gResourceReadySignalFired = false; // Reset signal check ready for testing next Control + Visual::Base imageVisual2 = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::IMMEDIATE); + DummyControl actor2 = DummyControl::New(true); + Impl::DummyControl& dummyImpl2 = static_cast(actor.GetImplementation()); + actor2.ResourceReadySignal().Connect(&ResourceReadySignal); - tet_infoline( "Registering visual this should trigger the loading signal as is already image loaded for previous control" ); - dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual2 ); + tet_infoline("Registering visual this should trigger the loading signal as is already image loaded for previous control"); + dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual2); imageVisual2.Reset(); // reduce ref count so only the control keeps the visual alive. - actor2.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 0 ), true, TEST_LOCATION ); // Not expecting any further loading as texture is being reused. - DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + actor2.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(0), true, TEST_LOCATION); // Not expecting any further loading as texture is being reused. + DALI_TEST_EQUALS(gResourceReadySignalFired, true, TEST_LOCATION); END_TEST; } @@ -2075,109 +2716,108 @@ int UtcDaliImageVisualLoadPolicy04(void) int UtcDaliImageVisualLoadPolicy05(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualLoadPolicy05 LoadPolicy::ATTACHED (default) First part Load a visual image before attaching to stage"); - tet_infoline( "Second part, Reuse the same image in aonther control and check resource ready signal fired" ); + tet_infoline("UtcDaliImageVisualLoadPolicy05 LoadPolicy::ATTACHED (default) First part Load a visual image before attaching to stage"); + tet_infoline("Second part, Reuse the same image in aonther control and check resource ready signal fired"); // Set up trace debug - TestGlAbstraction& gl = application.GetGlAbstraction(); - TraceCallStack& textureTrace = gl.GetTextureTrace(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); textureTrace.Enable(true); - tet_infoline( "Create a control and connect to resource ready signal" ); + tet_infoline("Create a control and connect to resource ready signal"); DummyControl actor = DummyControl::New(true); - actor.ResourceReadySignal().Connect( &ResourceReadySignal); + actor.ResourceReadySignal().Connect(&ResourceReadySignal); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); - Stage::GetCurrent().Add( actor ); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + application.GetScene().Add(actor); - tet_infoline( "Create visual with ATTACHED load policy" ); - Visual::Base imageVisual = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::ATTACHED ); + tet_infoline("Create visual with ATTACHED load policy"); + Visual::Base imageVisual = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::ATTACHED); - tet_infoline( "Registering visual allows control to get a signal once loaded" ); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + tet_infoline("Registering visual allows control to get a signal once loaded"); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); imageVisual.Reset(); // reduce ref count so only the control keeps the visual alive. - tet_infoline( "Allow image time to load" ); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + tet_infoline("Allow image time to load"); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - tet_infoline( "Testing texture is loaded and resource ready signal fired" ); - DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION ); - DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + tet_infoline("Testing texture is loaded and resource ready signal fired"); + DALI_TEST_EQUALS(textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION); + DALI_TEST_EQUALS(gResourceReadySignalFired, true, TEST_LOCATION); - tet_infoline( "Original control correctly signalled, now testing for signal with new Control reusing the image" ); + tet_infoline("Original control correctly signalled, now testing for signal with new Control reusing the image"); - gResourceReadySignalFired = false; // Reset signal check ready for testing next Control - Visual::Base imageVisual2 = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::ATTACHED ); - DummyControl actor2 = DummyControl::New(true); - Impl::DummyControl& dummyImpl2 = static_cast(actor.GetImplementation()); - actor2.ResourceReadySignal().Connect( &ResourceReadySignal); + gResourceReadySignalFired = false; // Reset signal check ready for testing next Control + Visual::Base imageVisual2 = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::ATTACHED); + DummyControl actor2 = DummyControl::New(true); + Impl::DummyControl& dummyImpl2 = static_cast(actor.GetImplementation()); + actor2.ResourceReadySignal().Connect(&ResourceReadySignal); - tet_infoline( "Registering visual this should trigger the loading signal as is already image loaded for previous control" ); - dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual2 ); + tet_infoline("Registering visual this should trigger the loading signal as is already image loaded for previous control"); + dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual2); imageVisual2.Reset(); // reduce ref count so only the control keeps the visual alive. - actor2.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 0 ), true, TEST_LOCATION ); // Not expecting any further loading as texture is being reused. - DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + actor2.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(0), true, TEST_LOCATION); // Not expecting any further loading as texture is being reused. + DALI_TEST_EQUALS(gResourceReadySignalFired, true, TEST_LOCATION); END_TEST; } - int UtcDaliImageVisualOrientationCorrection(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualOrientationCorrection Enabling OrientationCorrection should rotate an image with exif (90deg) orientation data with requested" ); + tet_infoline("UtcDaliImageVisualOrientationCorrection Enabling OrientationCorrection should rotate an image with exif (90deg) orientation data with requested"); VisualFactory factory = VisualFactory::Get(); - tet_infoline( "Create visual with Orientation correction set OFF" ); + tet_infoline("Create visual with Orientation correction set OFF"); Property::Map propertyMap; - propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_ROTATED_IMAGE ); - propertyMap.Insert( "orientationCorrection", false ); - Visual::Base imageVisual = factory.CreateVisual( propertyMap ); + propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_ROTATED_IMAGE); + propertyMap.Insert("orientationCorrection", false); + Visual::Base imageVisual = factory.CreateVisual(propertyMap); - tet_infoline( "Create control for visual, need to loaded it" ); - DummyControl actor = DummyControl::New(true); + tet_infoline("Create control for visual, need to loaded it"); + DummyControl actor = DummyControl::New(true); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - Stage::GetCurrent().Add( actor ); + application.GetScene().Add(actor); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); Vector2 originalImageSize; - tet_infoline( "Get size of original visual to compare later with rotated image" ); - imageVisual.GetNaturalSize( originalImageSize ); - DALI_TEST_GREATER( originalImageSize.width, originalImageSize.height, TEST_LOCATION ); // Width and Height must be different for this test. - imageVisual.Reset(); // remove handle so can unregister it and remove from cache - dummyImpl.UnregisterVisual( DummyControl::Property::TEST_VISUAL ); + tet_infoline("Get size of original visual to compare later with rotated image"); + imageVisual.GetNaturalSize(originalImageSize); + DALI_TEST_GREATER(originalImageSize.width, originalImageSize.height, TEST_LOCATION); // Width and Height must be different for this test. + imageVisual.Reset(); // remove handle so can unregister it and remove from cache + dummyImpl.UnregisterVisual(DummyControl::Property::TEST_VISUAL); application.SendNotification(); application.Render(); - tet_infoline( "Create visual with Orientation correction set ON " ); + tet_infoline("Create visual with Orientation correction set ON "); propertyMap.Clear(); - propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE ); - propertyMap.Insert( ImageVisual::Property::URL, TEST_ROTATED_IMAGE ); - propertyMap.Insert( ImageVisual::Property::ORIENTATION_CORRECTION, true ); - imageVisual = factory.CreateVisual( propertyMap ); + propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_ROTATED_IMAGE); + propertyMap.Insert(ImageVisual::Property::ORIENTATION_CORRECTION, true); + imageVisual = factory.CreateVisual(propertyMap); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); // Wait for image to load - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); Vector2 rotatedImageSize; - imageVisual.GetNaturalSize( rotatedImageSize ); - tet_infoline( "Confirm that visual has rotated" ); - DALI_TEST_EQUALS( originalImageSize.width, rotatedImageSize.height , TEST_LOCATION ); - DALI_TEST_EQUALS( originalImageSize.height, rotatedImageSize.width , TEST_LOCATION ); + imageVisual.GetNaturalSize(rotatedImageSize); + tet_infoline("Confirm that visual has rotated"); + DALI_TEST_EQUALS(originalImageSize.width, rotatedImageSize.height, TEST_LOCATION); + DALI_TEST_EQUALS(originalImageSize.height, rotatedImageSize.width, TEST_LOCATION); Property::Map resultMap; - imageVisual.CreatePropertyMap( resultMap ); + imageVisual.CreatePropertyMap(resultMap); // check the Property::ORIENTATION_CORRECTION value from the returned map - Property::Value* typeValue = resultMap.Find( ImageVisual::Property::ORIENTATION_CORRECTION, Property::BOOLEAN ); - DALI_TEST_EQUALS( typeValue->Get(), true, TEST_LOCATION ); + Property::Value* typeValue = resultMap.Find(ImageVisual::Property::ORIENTATION_CORRECTION, Property::BOOLEAN); + DALI_TEST_EQUALS(typeValue->Get(), true, TEST_LOCATION); END_TEST; } @@ -2185,100 +2825,99 @@ int UtcDaliImageVisualOrientationCorrection(void) int UtcDaliImageVisualCustomShader(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualCustomShader Test custom shader" ); + tet_infoline("UtcDaliImageVisualCustomShader Test custom shader"); - VisualFactory factory = VisualFactory::Get(); - Property::Map properties; - Property::Map shader; - const std::string vertexShader = "Foobar"; - const std::string fragmentShader = "Foobar"; + VisualFactory factory = VisualFactory::Get(); + Property::Map properties; + Property::Map shader; + const std::string vertexShader = "Foobar"; + const std::string fragmentShader = "Foobar"; shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader; - shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader; + shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader; - properties[Visual::Property::TYPE] = Visual::IMAGE; - properties[Visual::Property::SHADER] = shader; + properties[Visual::Property::TYPE] = Visual::IMAGE; + properties[Visual::Property::SHADER] = shader; properties[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME; - Visual::Base visual = factory.CreateVisual( properties ); + Visual::Base visual = factory.CreateVisual(properties); // trigger creation through setting on stage - DummyControl dummy = DummyControl::New( true ); - Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummy.GetImplementation() ); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual ); + DummyControl dummy = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummy.GetImplementation()); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual); - dummy.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); - dummy.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); - Stage::GetCurrent().Add( dummy ); + dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + application.GetScene().Add(dummy); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); - Renderer renderer = dummy.GetRendererAt( 0 ); - Shader shader2 = renderer.GetShader(); - Property::Value value = shader2.GetProperty( Shader::Property::PROGRAM ); - Property::Map* map = value.GetMap(); - DALI_TEST_CHECK( map ); + Renderer renderer = dummy.GetRendererAt(0); + Shader shader2 = renderer.GetShader(); + Property::Value value = shader2.GetProperty(Shader::Property::PROGRAM); + Property::Map* map = value.GetMap(); + DALI_TEST_CHECK(map); - Property::Value* fragment = map->Find( "fragment" ); // fragment key name from shader-impl.cpp - DALI_TEST_EQUALS( fragmentShader, fragment->Get< std::string >(), TEST_LOCATION ); + Property::Value* fragment = map->Find("fragment"); // fragment key name from shader-impl.cpp + DALI_TEST_EQUALS(fragmentShader, fragment->Get(), TEST_LOCATION); - Property::Value* vertex = map->Find( "vertex" ); // vertex key name from shader-impl.cpp - DALI_TEST_EQUALS( vertexShader, vertex->Get< std::string >(), TEST_LOCATION ); + Property::Value* vertex = map->Find("vertex"); // vertex key name from shader-impl.cpp + DALI_TEST_EQUALS(vertexShader, vertex->Get(), TEST_LOCATION); shader.Clear(); shader[Visual::Shader::Property::HINTS] = Shader::Hint::OUTPUT_IS_TRANSPARENT; - properties[Visual::Property::SHADER] = shader; + properties[Visual::Property::SHADER] = shader; - Visual::Base visual1 = factory.CreateVisual( properties ); + Visual::Base visual1 = factory.CreateVisual(properties); // trigger creation through setting on stage - DummyControl dummy1 = DummyControl::New( true ); - Impl::DummyControl& dummyImpl1 = static_cast< Impl::DummyControl& >( dummy1.GetImplementation() ); - dummyImpl1.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual1 ); - dummy1.SetProperty( Actor::Property::SIZE, Vector2( 200, 200 ) ); - dummy1.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); - Stage::GetCurrent().Add( dummy1 ); + DummyControl dummy1 = DummyControl::New(true); + Impl::DummyControl& dummyImpl1 = static_cast(dummy1.GetImplementation()); + dummyImpl1.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual1); + dummy1.SetProperty(Actor::Property::SIZE, Vector2(200, 200)); + dummy1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + application.GetScene().Add(dummy1); TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); - glAbstraction.EnableEnableDisableCallTrace( true ); + glAbstraction.EnableEnableDisableCallTrace(true); application.SendNotification(); application.Render(); - TraceCallStack& glEnableStack = glAbstraction.GetEnableDisableTrace(); + TraceCallStack& glEnableStack = glAbstraction.GetEnableDisableTrace(); std::ostringstream blendStr; - blendStr << GL_BLEND; - DALI_TEST_CHECK( glEnableStack.FindMethodAndParams( "Enable", blendStr.str().c_str() ) ); + blendStr << std::hex << GL_BLEND; + DALI_TEST_CHECK(glEnableStack.FindMethodAndParams("Enable", blendStr.str())); END_TEST; } - -void ResourceReadyLoadNext( Control control ) +void ResourceReadyLoadNext(Control control) { static int callNumber = 0; gResourceReadySignalFired = true; - gReadyIds.push_back(control.GetProperty< int >( Actor::Property::ID )); + gReadyIds.push_back(control.GetProperty(Actor::Property::ID)); - if( callNumber == 0 ) + if(callNumber == 0) { - DALI_TEST_EQUALS( control.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL), Toolkit::Visual::ResourceStatus::FAILED, TEST_LOCATION ); + DALI_TEST_EQUALS(control.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL), Toolkit::Visual::ResourceStatus::FAILED, TEST_LOCATION); - tet_infoline( "Create visual with loaded image from within the signal handler" ); - VisualFactory factory = VisualFactory::Get(); - Visual::Base imageVisual = factory.CreateVisual( TEST_IMAGE_FILE_NAME, ImageDimensions{20,30} ); + tet_infoline("Create visual with loaded image from within the signal handler"); + VisualFactory factory = VisualFactory::Get(); + Visual::Base imageVisual = factory.CreateVisual(TEST_IMAGE_FILE_NAME, ImageDimensions{20, 30}); Impl::DummyControl& controlImpl = static_cast(control.GetImplementation()); - controlImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual ); // This should trigger another signal. + controlImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); // This should trigger another signal. callNumber = 1; } else { - tet_infoline( "3rd signal called" ); + tet_infoline("3rd signal called"); DALI_TEST_CHECK(true); } } @@ -2286,66 +2925,192 @@ void ResourceReadyLoadNext( Control control ) int UtcDaliImageVisualLoadReady01(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliImageVisualLoadReady01"); - tet_infoline( "First part: Load an image visual for one resource, then another image visual for a second resource."); - tet_infoline( "Second part, In the ready signal for the second image visual, add a 3rd visual with the first URL" ); - tet_infoline( "Should get a ready signal for all three visuals"); + tet_infoline("UtcDaliImageVisualLoadReady01"); + tet_infoline("First part: Load an image visual for one resource, then another image visual for a second resource."); + tet_infoline("Second part, In the ready signal for the second image visual, add a 3rd visual with the first URL"); + tet_infoline("Should get a ready signal for all three visuals"); ClearReadyIds(); - tet_infoline( "Create a control and connect to resource ready signal" ); - DummyControl actor = DummyControl::New(true); - int actor1Id = actor.GetProperty< int >( Actor::Property::ID ); - actor.ResourceReadySignal().Connect( &ResourceReadySignal); + tet_infoline("Create a control and connect to resource ready signal"); + DummyControl actor = DummyControl::New(true); + int actor1Id = actor.GetProperty(Actor::Property::ID); + actor.ResourceReadySignal().Connect(&ResourceReadySignal); Impl::DummyControl& dummyImpl = static_cast(actor.GetImplementation()); - actor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); - Stage::GetCurrent().Add(actor); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + application.GetScene().Add(actor); - tet_infoline( "Create visual with IMMEDIATE load policy" ); - Visual::Base imageVisual1 = CreateVisualWithPolicy( TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::IMMEDIATE ); + tet_infoline("Create visual with IMMEDIATE load policy"); + Visual::Base imageVisual1 = CreateVisualWithPolicy(TEST_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::IMMEDIATE); - tet_infoline( "Registering visual allows control to get a signal once loaded even if visual not enabled( staged )" ); - dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual1 ); + tet_infoline("Registering visual allows control to get a signal once loaded even if visual not enabled( staged )"); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual1); - - tet_infoline( "Allow image time to load" ); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + tet_infoline("Allow image time to load"); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); application.SendNotification(); application.Render(); - tet_infoline( "Testing texture is loaded and resource ready signal fired" ); - DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); - DALI_TEST_EQUALS( gReadyIds[0], actor1Id, TEST_LOCATION ); - + tet_infoline("Testing texture is loaded and resource ready signal fired"); + DALI_TEST_EQUALS(gResourceReadySignalFired, true, TEST_LOCATION); + DALI_TEST_EQUALS(gReadyIds[0], actor1Id, TEST_LOCATION); - tet_infoline( "Original control correctly signalled, now testing failing image" ); + tet_infoline("Original control correctly signalled, now testing failing image"); gResourceReadySignalFired = false; // Reset signal check ready for testing next Control ClearReadyIds(); - Visual::Base imageVisual2 = CreateVisualWithPolicy( TEST_BROKEN_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::IMMEDIATE ); + Visual::Base imageVisual2 = CreateVisualWithPolicy(TEST_BROKEN_IMAGE_FILE_NAME, ImageVisual::Property::LOAD_POLICY, ImageVisual::LoadPolicy::IMMEDIATE); - DummyControl actor2 = DummyControl::New(true); - int actor2Id = actor2.GetProperty< int >( Actor::Property::ID ); + DummyControl actor2 = DummyControl::New(true); + int actor2Id = actor2.GetProperty(Actor::Property::ID); Impl::DummyControl& dummyImpl2 = static_cast(actor2.GetImplementation()); - actor2.ResourceReadySignal().Connect( &ResourceReadyLoadNext); + actor2.ResourceReadySignal().Connect(&ResourceReadyLoadNext); - tet_infoline( "Registering visual this should trigger the ready signal when the image fails to load" ); - dummyImpl2.RegisterVisual( DummyControl::Property::TEST_VISUAL, imageVisual2 ); + tet_infoline("Registering visual this should trigger the ready signal when the image fails to load"); + dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual2); - actor2.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) ); - Stage::GetCurrent().Add(actor2); + actor2.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + application.GetScene().Add(actor2); - tet_infoline( "Wait for loading thread to finish"); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); - DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + tet_infoline("Wait for loading thread to finish"); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + DALI_TEST_EQUALS(gResourceReadySignalFired, true, TEST_LOCATION); - DALI_TEST_EQUALS( gReadyIds[0], actor2Id, TEST_LOCATION); + DALI_TEST_EQUALS(gReadyIds[0], actor2Id, TEST_LOCATION); - tet_infoline( "Check for 3rd signal"); + tet_infoline("Check for 3rd signal"); application.SendNotification(); - DALI_TEST_EQUALS( gReadyIds.size(), 2, TEST_LOCATION ); - DALI_TEST_EQUALS( gReadyIds[1], actor2Id, TEST_LOCATION); + DALI_TEST_EQUALS(gReadyIds.size(), 2, TEST_LOCATION); + DALI_TEST_EQUALS(gReadyIds[1], actor2Id, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliImageVisualLoadImagePlanes01(void) +{ + EnvironmentVariable::SetTestEnvironmentVariable(LOAD_IMAGE_YUV_PLANES_ENV, "1"); + EnvironmentVariable::SetTestEnvironmentVariable(ENABLE_DECODE_JPEG_TO_YUV_420_ENV, "1"); + + ToolkitTestApplication application; + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_YUV420_IMAGE_FILE_NAME); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + application.GetScene().Add(actor); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), true, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.CountMethod("GenTextures"), 3, TEST_LOCATION); + + Renderer renderer = actor.GetRendererAt(0); + auto preMultipliedAlpha = renderer.GetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA); + DALI_TEST_EQUALS(preMultipliedAlpha, false, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliImageVisualLoadImagePlanes02(void) +{ + EnvironmentVariable::SetTestEnvironmentVariable(LOAD_IMAGE_YUV_PLANES_ENV, "1"); + EnvironmentVariable::SetTestEnvironmentVariable(ENABLE_DECODE_JPEG_TO_YUV_420_ENV, "1"); + + ToolkitTestApplication application; + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + // Alpha masking case - not support yuv planes + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_YUV420_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + application.GetScene().Add(actor); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), true, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.CountMethod("GenTextures"), 1, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliImageVisualLoadImagePlanes03(void) +{ + EnvironmentVariable::SetTestEnvironmentVariable(LOAD_IMAGE_YUV_PLANES_ENV, "1"); + EnvironmentVariable::SetTestEnvironmentVariable(ENABLE_DECODE_JPEG_TO_YUV_420_ENV, "1"); + + ToolkitTestApplication application; + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_YUV420_IMAGE_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f)); + application.GetScene().Add(actor); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(actor.IsResourceReady(), true, TEST_LOCATION); + DALI_TEST_EQUALS(textureTrace.CountMethod("GenTextures"), 3, TEST_LOCATION); END_TEST; }