2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali-toolkit-test-suite-utils.h>
20 #include <toolkit-timer.h>
21 #include <toolkit-event-thread-callback.h>
22 #include <dali/devel-api/images/nine-patch-image.h>
23 #include <dali/devel-api/object/handle-devel.h>
24 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
25 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
26 #include <dali-toolkit/devel-api/controls/control-devel.h>
27 #include <dali-toolkit/dali-toolkit.h>
28 #include "dummy-control.h"
31 using namespace Dali::Toolkit;
33 void dali_image_visual_startup(void)
35 test_return_value = TET_UNDEF;
38 void dali_image_visual_cleanup(void)
40 test_return_value = TET_PASS;
45 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
46 const char* TEST_LARGE_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/tbcol.png";
47 const char* TEST_SMALL_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/icon-edit.png";
48 const char* TEST_REMOTE_IMAGE_FILE_NAME = "https://www.tizen.org/sites/all/themes/tizen_theme/logo.png";
49 const char* TEST_INVALID_FILE_NAME = TEST_RESOURCE_DIR "/invalid.jpg";
50 const char* TEST_REMOTE_INVALID_FILE_NAME = "https://www.tizen.org/invalid.png";
51 const char* TEST_MASK_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/mask.png";
55 Actor CreateActorWithImageVisual(const Property::Map& map)
57 VisualFactory factory = VisualFactory::Get();
58 DummyControl actor = DummyControl::New();
59 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
60 Visual::Base visual = factory.CreateVisual( map );
61 DALI_TEST_CHECK( visual );
62 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
63 actor.SetSize( 200.f, 200.f );
64 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
68 void TestVisualRender( ToolkitTestApplication& application,
71 std::size_t expectedSamplers = 0,
72 ImageDimensions imageDimensions = ImageDimensions(),
73 Integration::ResourcePointer resourcePtr = Integration::ResourcePointer())
75 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
76 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
80 // set the image size, for test case, this needs to be set before loading started
81 application.GetPlatform().SetClosestImageSize( Vector2(imageDimensions.GetWidth(), imageDimensions.GetHeight()) );
84 actor.SetSize( 200.f, 200.f );
85 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
87 Stage::GetCurrent().Add( actor );
89 application.SendNotification(); // Send messages to update
90 application.Render(); // process update and render
91 application.SendNotification(); // process any signals to event
95 DALI_TEST_EQUALS( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceSynchronouslyFunc ), true, TEST_LOCATION);
98 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
101 static void TestMixColor( Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor )
104 visual.CreatePropertyMap(map);
105 Property::Value* value = map.Find( mixColorIndex );
106 DALI_TEST_CHECK( value );
108 DALI_TEST_CHECK( value->Get( mixColor1 ) );
109 DALI_TEST_EQUALS( mixColor1, Vector3(testColor), 0.001, TEST_LOCATION );
111 value = map.Find( Visual::Property::MIX_COLOR );
112 DALI_TEST_CHECK( value );
114 DALI_TEST_CHECK( value->Get( mixColor2 ) );
115 DALI_TEST_EQUALS( mixColor2, testColor, 0.001, TEST_LOCATION );
117 value = map.Find( Visual::Property::OPACITY );
118 DALI_TEST_CHECK( value );
120 DALI_TEST_CHECK( value->Get( opacity ) );
121 DALI_TEST_EQUALS( opacity, testColor.a, 0.001, TEST_LOCATION );
126 int UtcDaliImageVisualPropertyMap(void)
128 ToolkitTestApplication application;
129 tet_infoline( "Request image visual with a Property::Map" );
131 VisualFactory factory = VisualFactory::Get();
132 DALI_TEST_CHECK( factory );
134 Property::Map propertyMap;
135 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
136 propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME );
138 Visual::Base visual = factory.CreateVisual( propertyMap );
139 DALI_TEST_CHECK( visual );
141 // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
142 // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
144 TestGlAbstraction& gl = application.GetGlAbstraction();
145 TraceCallStack& textureTrace = gl.GetTextureTrace();
146 textureTrace.Enable(true);
148 DummyControl actor = DummyControl::New();
149 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
150 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
152 actor.SetSize( 200.f, 200.f );
153 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
155 Stage::GetCurrent().Add( actor );
156 application.SendNotification();
157 application.Render();
159 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
161 application.SendNotification();
162 application.Render();
164 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
166 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
168 Stage::GetCurrent().Remove( actor );
169 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
175 int UtcDaliImageVisualRemoteImageLoad(void)
177 ToolkitTestApplication application;
178 tet_infoline( "Request remote image visual with a Property::Map" );
180 VisualFactory factory = VisualFactory::Get();
181 DALI_TEST_CHECK( factory );
183 Property::Map propertyMap;
184 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
185 propertyMap.Insert( ImageVisual::Property::URL, TEST_REMOTE_IMAGE_FILE_NAME );
187 Visual::Base visual = factory.CreateVisual( propertyMap );
188 DALI_TEST_CHECK( visual );
190 TestGlAbstraction& gl = application.GetGlAbstraction();
191 TraceCallStack& textureTrace = gl.GetTextureTrace();
192 textureTrace.Enable(true);
194 DummyControl actor = DummyControl::New();
195 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
196 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
198 actor.SetSize( 200.f, 200.f );
199 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
201 Stage::GetCurrent().Add( actor );
202 application.SendNotification();
204 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
206 application.SendNotification();
207 application.Render();
209 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
210 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
212 Stage::GetCurrent().Remove( actor );
213 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
218 int UtcDaliImageVisualTextureReuse1(void)
220 ToolkitTestApplication application;
221 tet_infoline( "Request remote image visual with a Property::Map; request a second visual with the same property map - should reuse texture" );
223 Property::Map propertyMap;
224 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
225 propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME );
227 TestGlAbstraction& gl = application.GetGlAbstraction();
228 TraceCallStack& textureTrace = gl.GetTextureTrace();
229 textureTrace.Enable(true);
230 TraceCallStack& drawTrace = gl.GetDrawTrace();
231 drawTrace.Enable(true);
233 Actor actor = CreateActorWithImageVisual( propertyMap );
234 Stage::GetCurrent().Add( actor );
235 application.SendNotification();
237 // Wait for image to load
238 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
240 application.SendNotification();
241 application.Render();
243 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
244 DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
245 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
246 DALI_TEST_EQUALS( drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION );
247 textureTrace.Reset();
250 Actor actor2 = CreateActorWithImageVisual( propertyMap );
251 Stage::GetCurrent().Add(actor2);
253 application.SendNotification(); // Send messages to update
254 application.Render(); // process update and render
255 application.SendNotification(); // process any signals to event
257 DALI_TEST_EQUALS( actor2.GetRendererCount(), 1u, TEST_LOCATION );
259 tet_infoline("Test that 2 draw calls occur with no new texture gens/binds, i.e. both\n"
260 "draw calls use the same texture as the previous draw call\n" );
262 DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION );
263 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawArrays"), 2, TEST_LOCATION );
264 DALI_TEST_EQUALS( textureTrace.CountMethod("BindTexture"), 0, TEST_LOCATION );
266 tet_infoline("Test that removing 1 actor doesn't delete the texture\n");
268 Stage::GetCurrent().Remove( actor );
269 application.SendNotification();
270 application.Render();
272 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
273 DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 0, TEST_LOCATION );
275 tet_infoline("Test that removing last actor does delete the texture\n");
277 Stage::GetCurrent().Remove( actor2 );
278 application.SendNotification();
279 application.Render();
281 DALI_TEST_CHECK( actor2.GetRendererCount() == 0u );
282 DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION );
288 int UtcDaliImageVisualTextureReuse2(void)
290 ToolkitTestApplication application;
291 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" );
293 Property::Map propertyMap;
294 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
295 propertyMap.Insert( ImageVisual::Property::URL, TEST_REMOTE_IMAGE_FILE_NAME );
297 TestGlAbstraction& gl = application.GetGlAbstraction();
298 TraceCallStack& textureTrace = gl.GetTextureTrace();
299 textureTrace.Enable(true);
300 TraceCallStack& drawTrace = gl.GetDrawTrace();
301 drawTrace.Enable(true);
303 Actor actor = CreateActorWithImageVisual( propertyMap );
304 Stage::GetCurrent().Add( actor );
305 application.SendNotification();
307 // Wait for image to load
308 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
310 application.SendNotification();
311 application.Render();
313 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
314 DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
315 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
316 DALI_TEST_EQUALS( drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION );
317 textureTrace.Reset();
320 propertyMap.Insert( ImageVisual::Property::SAMPLING_MODE, Dali::SamplingMode::NEAREST );
321 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 100 );
322 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 100 );
323 Actor actor2 = CreateActorWithImageVisual( propertyMap );
324 Stage::GetCurrent().Add(actor2);
326 application.SendNotification();
328 // Wait for image to load
329 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
331 application.SendNotification();
332 application.Render();
334 DALI_TEST_EQUALS( actor2.GetRendererCount(), 1u, TEST_LOCATION );
336 tet_infoline("Test that 2 draw calls occur with 1 new texture gen/bind, i.e. both "
337 "renderers are using different textures\n" );
339 DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
340 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawArrays"), 2, TEST_LOCATION );
341 TraceCallStack::NamedParams tex1;
342 tex1["texture"] = "1";
343 TraceCallStack::NamedParams tex2;
344 tex1["texture"] = "2";
345 DALI_TEST_EQUALS( textureTrace.FindMethodAndParams("BindTexture", tex1), true, TEST_LOCATION );
346 DALI_TEST_EQUALS( textureTrace.FindMethodAndParams("BindTexture", tex2), true, TEST_LOCATION );
348 tet_infoline("Test that removing 1 actor deletes it's texture\n");
350 Stage::GetCurrent().Remove( actor );
351 application.SendNotification();
352 application.Render();
354 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
355 DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 1, TEST_LOCATION );
357 tet_infoline("Test that removing last actor deletes it's texture\n");
359 Stage::GetCurrent().Remove( actor2 );
360 application.SendNotification();
361 application.Render();
363 DALI_TEST_CHECK( actor2.GetRendererCount() == 0u );
364 DALI_TEST_EQUALS( textureTrace.CountMethod("DeleteTextures"), 2, TEST_LOCATION );
370 int UtcDaliImageVisualImageHandle(void)
372 ToolkitTestApplication application;
373 tet_infoline( "Request image visual with an image handle" );
375 VisualFactory factory = VisualFactory::Get();
376 DALI_TEST_CHECK( factory );
378 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
379 Visual::Base visual = factory.CreateVisual( image );
381 // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
382 // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
385 const int height=513;
387 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD );
388 bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, width, height,width, height );
390 TestGlAbstraction& gl = application.GetGlAbstraction();
391 TraceCallStack& textureTrace = gl.GetTextureTrace();
392 textureTrace.Enable(true);
394 DummyControl actor = DummyControl::New();
395 TestVisualRender( application, actor, visual, 1u,
396 ImageDimensions(width, height),
397 Integration::ResourcePointer(bitmap) );
399 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
403 int UtcDaliImageVisualCustomWrapModePixelArea(void)
405 ToolkitTestApplication application;
406 tet_infoline( "Request image visual with a Property::Map, test custom wrap mode and pixel area with atlasing" );
408 VisualFactory factory = VisualFactory::Get();
409 DALI_TEST_CHECK( factory );
411 // Test wrap mode with atlasing. Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
414 const Vector4 pixelArea(-0.5f, -0.5f, 2.f, 2.f);
416 Property::Map propertyMap;
417 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
418 propertyMap.Insert( ImageVisual::Property::URL, TEST_SMALL_IMAGE_FILE_NAME );
419 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, width );
420 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, height );
421 propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, true );
422 propertyMap.Insert( ImageVisual::Property::PIXEL_AREA, pixelArea );
423 propertyMap.Insert( ImageVisual::Property::WRAP_MODE_U, WrapMode::MIRRORED_REPEAT );
424 propertyMap.Insert( ImageVisual::Property::WRAP_MODE_V, WrapMode::REPEAT );
425 propertyMap.Insert( ImageVisual::Property::ATLASING, true );
427 Visual::Base visual = factory.CreateVisual( propertyMap );
428 DALI_TEST_CHECK( visual );
430 TestGlAbstraction& gl = application.GetGlAbstraction();
431 TraceCallStack& textureTrace = gl.GetTextureTrace();
432 textureTrace.Enable(true);
433 TraceCallStack& texParameterTrace = gl.GetTexParameterTrace();
434 texParameterTrace.Enable( true );
436 DummyControl actor = DummyControl::New();
437 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
438 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
439 actor.SetSize(2000, 2000);
440 actor.SetParentOrigin(ParentOrigin::CENTER);
441 Stage::GetCurrent().Add( actor );
444 application.SendNotification();
445 application.Render();
447 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
449 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
451 // WITH atlasing, the wrapping is handled manually in shader, so the following gl function should not be called
452 std::stringstream out;
453 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_MIRRORED_REPEAT;
454 DALI_TEST_CHECK( !texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) );
456 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_T << ", " << GL_REPEAT;
457 DALI_TEST_CHECK( !texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) );
459 // test the uniforms which used to handle the wrap mode
460 Renderer renderer = actor.GetRendererAt( 0u );
461 DALI_TEST_CHECK( renderer );
463 Property::Value pixelAreaValue = renderer.GetProperty( renderer.GetPropertyIndex( "pixelArea" ) );
464 DALI_TEST_EQUALS( pixelAreaValue.Get<Vector4>(), pixelArea, TEST_LOCATION );
465 Vector4 pixelAreaUniform;
466 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "pixelArea", pixelAreaUniform ) );
467 DALI_TEST_EQUALS( pixelArea, pixelAreaUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION );
469 Property::Value wrapModeValue = renderer.GetProperty( renderer.GetPropertyIndex( "wrapMode" ) );
470 Vector2 wrapMode( WrapMode::MIRRORED_REPEAT-1, WrapMode::REPEAT-1 );
471 DALI_TEST_EQUALS( wrapModeValue.Get<Vector2>(), wrapMode, TEST_LOCATION );
472 Vector2 wrapModeUniform;
473 DALI_TEST_CHECK( gl.GetUniformValue<Vector2>( "wrapMode", wrapModeUniform ) );
474 DALI_TEST_EQUALS( wrapMode, wrapModeUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION );
477 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
482 int UtcDaliImageVisualCustomWrapModeNoAtlas(void)
484 ToolkitTestApplication application;
485 tet_infoline( "Request image visual with a Property::Map, test custom wrap mode and pixel area without atlasing" );
487 VisualFactory factory = VisualFactory::Get();
488 DALI_TEST_CHECK( factory );
490 // Test wrap mode without atlasing. Image with a size bigger than 512*512 will NOT be uploaded as a part of the atlas.
492 const int height=600;
493 const Vector4 pixelArea(-0.5f, -0.5f, 2.f, 2.f);
495 Property::Map propertyMap;
496 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
497 propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME );
498 propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, width );
499 propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, height );
500 propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, true );
501 propertyMap.Insert( ImageVisual::Property::PIXEL_AREA, pixelArea );
502 propertyMap.Insert( ImageVisual::Property::WRAP_MODE_U, WrapMode::MIRRORED_REPEAT );
503 propertyMap.Insert( ImageVisual::Property::WRAP_MODE_V, WrapMode::REPEAT );
505 Visual::Base visual = factory.CreateVisual( propertyMap );
506 DALI_TEST_CHECK( visual );
508 TestGlAbstraction& gl = application.GetGlAbstraction();
509 TraceCallStack& textureTrace = gl.GetTextureTrace();
510 textureTrace.Enable(true);
511 TraceCallStack& texParameterTrace = gl.GetTexParameterTrace();
512 texParameterTrace.Enable( true );
514 DummyControl actor = DummyControl::New();
515 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
516 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
517 actor.SetSize(2000, 2000);
518 actor.SetParentOrigin(ParentOrigin::CENTER);
519 Stage::GetCurrent().Add( actor );
522 application.SendNotification();
523 application.Render();
525 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
527 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
529 // WITHOUT atlasing, the wrapping is handled by setting gl texture parameters
530 std::stringstream out;
531 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_MIRRORED_REPEAT;
532 DALI_TEST_CHECK( texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) );
534 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_T << ", " << GL_REPEAT;
535 DALI_TEST_CHECK( texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) );
537 // test the uniforms which used to handle the wrap mode
538 Renderer renderer = actor.GetRendererAt( 0u );
539 DALI_TEST_CHECK( renderer );
541 Property::Value pixelAreaValue = renderer.GetProperty( renderer.GetPropertyIndex( "pixelArea" ) );
542 DALI_TEST_EQUALS( pixelAreaValue.Get<Vector4>(), pixelArea, TEST_LOCATION );
543 Vector4 pixelAreaUniform;
544 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "pixelArea", pixelAreaUniform ) );
545 DALI_TEST_EQUALS( pixelArea, pixelAreaUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION );
547 Property::Index wrapModeIndex = renderer.GetPropertyIndex( "wrapMode" );
548 DALI_TEST_CHECK(wrapModeIndex == Property::INVALID_INDEX);
551 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
556 int UtcDaliImageVisualAnimateMixColor(void)
558 ToolkitTestApplication application;
559 tet_infoline( "Animate mix color" );
561 application.GetPlatform().SetClosestImageSize( Vector2(100, 100) );
563 VisualFactory factory = VisualFactory::Get();
564 Property::Map propertyMap;
565 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
566 propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
567 propertyMap.Insert("mixColor", Color::BLUE);
568 propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true);
569 Visual::Base visual = factory.CreateVisual( propertyMap );
571 DummyControl actor = DummyControl::New(true);
572 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
573 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
575 actor.SetSize(2000, 2000);
576 actor.SetParentOrigin(ParentOrigin::CENTER);
577 actor.SetColor(Color::BLACK);
578 Stage::GetCurrent().Add(actor);
580 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
582 Renderer renderer = actor.GetRendererAt(0);
583 Property::Index index = DevelHandle::GetPropertyIndex( renderer, Visual::Property::MIX_COLOR );
584 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
585 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
587 tet_infoline("Test that the renderer has the mixColor property");
588 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
590 const Vector4 TARGET_MIX_COLOR( 1.0f, 0.0f, 0.0f, 0.5f );
593 map["target"] = "testVisual";
594 map["property"] = "mixColor";
595 map["initialValue"] = Color::MAGENTA;
596 map["targetValue"] = TARGET_MIX_COLOR;
597 map["animator"] = Property::Map()
598 .Add("alphaFunction", "LINEAR")
599 .Add("timePeriod", Property::Map()
601 .Add("duration", 4.0f));
603 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
605 Animation animation = dummyImpl.CreateTransition( transition );
607 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
608 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
610 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
613 application.SendNotification();
614 application.Render(0); // Ensure animation starts
615 application.Render(2000u); // Halfway point
616 Vector4 testColor(1.0f, 0.0f, 0.5f, 0.75f );
618 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, 1.0f )), true, TEST_LOCATION );
619 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor)), true, TEST_LOCATION );
620 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", testColor.a), true, TEST_LOCATION );
622 application.Render(2000u); // Halfway point between blue and white
624 DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION );
625 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Color::WHITE ), true, TEST_LOCATION );
626 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR)), true, TEST_LOCATION );
627 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", TARGET_MIX_COLOR.a), true, TEST_LOCATION );
629 TestMixColor( visual, Visual::Property::MIX_COLOR, TARGET_MIX_COLOR );
631 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
632 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
637 int UtcDaliImageVisualAnimateOpacity(void)
639 ToolkitTestApplication application;
640 tet_infoline( "Animate image visual opacity" );
642 application.GetPlatform().SetClosestImageSize( Vector2(100, 100) );
644 VisualFactory factory = VisualFactory::Get();
645 Property::Map propertyMap;
646 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
647 propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
648 propertyMap.Insert("opacity", 0.5f);
649 propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true);
650 Visual::Base visual = factory.CreateVisual( propertyMap );
652 DummyControl actor = DummyControl::New(true);
653 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
654 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
656 actor.SetSize(2000, 2000);
657 actor.SetParentOrigin(ParentOrigin::CENTER);
658 actor.SetColor(Color::BLACK);
659 Stage::GetCurrent().Add(actor);
661 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
663 Renderer renderer = actor.GetRendererAt(0);
664 tet_infoline("Test that the renderer has the opacity property");
665 Property::Index index = DevelHandle::GetPropertyIndex( renderer, Visual::Property::OPACITY );
666 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
669 Property::Value blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
670 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
673 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." );
676 map["target"] = "testVisual";
677 map["property"] = "opacity";
678 map["targetValue"] = 1.0f;
679 map["animator"] = Property::Map()
680 .Add("alphaFunction", "LINEAR")
681 .Add("timePeriod", Property::Map()
683 .Add("duration", 4.0f));
685 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
686 Animation animation = dummyImpl.CreateTransition( transition );
689 application.SendNotification();
690 application.Render(0); // Ensure animation starts
691 application.Render(2000u); // Halfway point through animation
692 application.SendNotification(); // Handle any signals
694 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", 0.75f), true, TEST_LOCATION );
696 application.Render(2001u); // end
697 application.SendNotification(); // ensure animation finished signal is sent
699 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", 1.0f), true, TEST_LOCATION );
701 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
702 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION );
707 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." );
710 map["target"] = "testVisual";
711 map["property"] = Visual::Property::OPACITY;
712 map["targetValue"] = 0.1f;
713 map["animator"] = Property::Map()
714 .Add("alphaFunction", "LINEAR")
715 .Add("timePeriod", Property::Map()
717 .Add("duration", 4.0f));
719 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
720 Animation animation = dummyImpl.CreateTransition( transition );
723 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
724 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
726 application.SendNotification();
727 application.Render(0); // Ensure animation starts
728 application.Render(2000u); // Halfway point
729 application.SendNotification();
731 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", 0.55f), true, TEST_LOCATION );
733 application.Render(2016u); // end
734 application.SendNotification();
736 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("opacity", 0.1f), true, TEST_LOCATION );
738 blendModeValue = renderer.GetProperty( Renderer::Property::BLEND_MODE );
739 DALI_TEST_EQUALS( blendModeValue.Get<int>(), (int)BlendMode::ON, TEST_LOCATION );
746 int UtcDaliImageVisualAnimatePixelArea(void)
748 ToolkitTestApplication application;
749 tet_infoline( "ImageVisual animate pixel area" );
751 application.GetPlatform().SetClosestImageSize( Vector2(100, 100) );
753 VisualFactory factory = VisualFactory::Get();
754 Property::Map propertyMap;
755 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
756 propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
757 propertyMap.Insert("mixColor", Color::BLUE);
758 propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, true);
759 Visual::Base visual = factory.CreateVisual( propertyMap );
761 DummyControl actor = DummyControl::New(true);
762 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
763 dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
765 actor.SetSize(2000, 2000);
766 actor.SetParentOrigin(ParentOrigin::CENTER);
767 actor.SetColor(Color::BLACK);
768 Stage::GetCurrent().Add(actor);
770 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
772 Renderer renderer = actor.GetRendererAt(0);
773 Property::Index index = DevelHandle::GetPropertyIndex( renderer, Visual::Property::MIX_COLOR );
775 tet_infoline("Test that the renderer has the mixColor property");
776 DALI_TEST_CHECK( index != Property::INVALID_INDEX );
778 // TransitionData only takes string keys
780 map["target"] = "testVisual";
781 map["property"] = "pixelArea";
782 map["initialValue"] = Vector4( 0,0,0,1 );
783 map["targetValue"] = Vector4( 0,0,1,1 ); // Animate width from zero to full
784 map["animator"] = Property::Map()
785 .Add("alphaFunction", "LINEAR")
786 .Add("timePeriod", Property::Map()
788 .Add("duration", 4.0f));
790 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
792 Animation animation = dummyImpl.CreateTransition( transition );
793 animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
796 application.SendNotification();
797 application.Render(0); // Ensure animation starts
798 application.Render(2000u); // Halfway point
800 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("pixelArea", Vector4(0.0f, 0.0f, 0.5f, 1.0f )), true, TEST_LOCATION );
802 application.Render(2000u); // End of animation
804 DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("pixelArea", Vector4( 0.0f, 0.0f, 1.0f, 1.0f )), true, TEST_LOCATION );
809 int UtcDaliImageVisualTextureCancelRemoteLoad(void)
811 ToolkitTestApplication application;
812 tet_infoline( "Request remote image visual, then destroy visual to cancel load" );
814 Property::Map propertyMap;
815 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
816 propertyMap.Insert( ImageVisual::Property::URL, TEST_REMOTE_IMAGE_FILE_NAME );
818 TestGlAbstraction& gl = application.GetGlAbstraction();
819 TraceCallStack& textureTrace = gl.GetTextureTrace();
820 textureTrace.Enable(true);
821 TraceCallStack& drawTrace = gl.GetDrawTrace();
822 drawTrace.Enable(true);
824 Actor actor = CreateActorWithImageVisual( propertyMap );
825 Stage::GetCurrent().Add( actor );
826 application.SendNotification();
828 Stage::GetCurrent().Remove( actor );
829 application.SendNotification();
831 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
832 DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), false, TEST_LOCATION );
833 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), false, TEST_LOCATION );
834 DALI_TEST_EQUALS( drawTrace.FindMethod("DrawArrays"), false, TEST_LOCATION );
839 int UtcDaliImageVisualTextureCancelAsyncLoad(void)
841 ToolkitTestApplication application;
842 tet_infoline( "Load image asynchronosly, cancel loading, then load again" );
844 VisualFactory factory = VisualFactory::Get();
845 DALI_TEST_CHECK( factory );
847 Property::Map propertyMap;
848 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
849 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
851 Visual::Base visual = factory.CreateVisual( propertyMap );
852 DALI_TEST_CHECK( visual );
854 TestGlAbstraction& gl = application.GetGlAbstraction();
855 TraceCallStack& textureTrace = gl.GetTextureTrace();
856 textureTrace.Enable( true );
857 TraceCallStack& drawTrace = gl.GetDrawTrace();
858 drawTrace.Enable( true );
860 DummyControl actor = DummyControl::New();
861 DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
862 dummyImpl.RegisterVisual( Control::Property::BACKGROUND, visual );
864 Stage::GetCurrent().Add( actor );
867 Stage::GetCurrent().Remove( actor );
869 Stage::GetCurrent().Add( actor );
871 // Create another visual with the same image
872 visual = factory.CreateVisual( propertyMap );
873 DALI_TEST_CHECK( visual );
875 dummyImpl.RegisterVisual( Control::Property::BACKGROUND, visual );
877 application.SendNotification();
878 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
880 application.SendNotification();
881 application.Render();
883 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
884 DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
885 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
886 DALI_TEST_EQUALS( drawTrace.FindMethod("DrawArrays"), true, TEST_LOCATION );
891 int UtcDaliImageVisualSetInvalidAsyncImage(void)
893 ToolkitTestApplication application;
894 tet_infoline( "Request image visual with invalid images - should draw broken.png" );
896 VisualFactory factory = VisualFactory::Get();
897 DALI_TEST_CHECK( factory );
899 Property::Map propertyMap;
900 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
901 propertyMap.Insert( ImageVisual::Property::URL, TEST_INVALID_FILE_NAME );
903 Visual::Base visual = factory.CreateVisual( propertyMap );
904 DALI_TEST_CHECK( visual );
906 TestGlAbstraction& gl = application.GetGlAbstraction();
907 TraceCallStack& textureTrace = gl.GetTextureTrace();
908 textureTrace.Enable(true);
910 DummyControl actor = DummyControl::New();
911 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
912 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
914 actor.SetSize( 200.f, 200.f );
915 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
917 Stage::GetCurrent().Add( actor );
919 application.SendNotification();
920 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
922 application.SendNotification();
923 application.Render();
925 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
926 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
928 Stage::GetCurrent().Remove( actor );
929 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
934 int UtcDaliImageVisualSetInvalidSyncImage(void)
936 ToolkitTestApplication application;
937 tet_infoline( "Request image visual with invalid images - should draw broken.png" );
939 VisualFactory factory = VisualFactory::Get();
940 DALI_TEST_CHECK( factory );
942 Property::Map propertyMap;
943 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
944 propertyMap.Insert( ImageVisual::Property::URL, TEST_INVALID_FILE_NAME );
945 propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, true );
947 Visual::Base visual = factory.CreateVisual( propertyMap );
948 DALI_TEST_CHECK( visual );
950 TestGlAbstraction& gl = application.GetGlAbstraction();
951 TraceCallStack& textureTrace = gl.GetTextureTrace();
952 textureTrace.Enable(true);
954 DummyControl actor = DummyControl::New();
955 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
956 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
958 actor.SetSize( 200.f, 200.f );
959 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
961 Stage::GetCurrent().Add( actor );
963 application.SendNotification();
964 application.Render();
966 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
967 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
969 Stage::GetCurrent().Remove( actor );
970 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
975 int UtcDaliImageVisualSetInvalidRemoteImage(void)
977 ToolkitTestApplication application;
978 tet_infoline( "Request image visual with invalid images - should draw broken.png" );
980 VisualFactory factory = VisualFactory::Get();
981 DALI_TEST_CHECK( factory );
983 // Local invalid file, asynchronous loading
984 Property::Map propertyMap;
985 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
986 propertyMap.Insert( ImageVisual::Property::URL, TEST_REMOTE_INVALID_FILE_NAME );
988 Visual::Base visual = factory.CreateVisual( propertyMap );
989 DALI_TEST_CHECK( visual );
991 TestGlAbstraction& gl = application.GetGlAbstraction();
992 TraceCallStack& textureTrace = gl.GetTextureTrace();
993 textureTrace.Enable(true);
995 DummyControl actor = DummyControl::New();
996 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
997 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
999 actor.SetSize( 200.f, 200.f );
1000 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
1002 Stage::GetCurrent().Add( actor );
1004 application.SendNotification();
1005 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1007 application.SendNotification();
1008 application.Render();
1010 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
1011 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1013 Stage::GetCurrent().Remove( actor );
1014 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
1019 int UtcDaliImageVisualAlphaMask(void)
1021 ToolkitTestApplication application;
1022 tet_infoline( "Request image visual with a Property::Map containing an Alpha mask" );
1024 VisualFactory factory = VisualFactory::Get();
1025 DALI_TEST_CHECK( factory );
1027 Property::Map propertyMap;
1028 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
1029 propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME );
1030 propertyMap.Insert( ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME );
1032 Visual::Base visual = factory.CreateVisual( propertyMap );
1033 DALI_TEST_CHECK( visual );
1035 Property::Map testMap;
1036 visual.CreatePropertyMap(testMap);
1037 DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL),Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION );
1039 // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
1040 // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
1042 TestGlAbstraction& gl = application.GetGlAbstraction();
1043 TraceCallStack& textureTrace = gl.GetTextureTrace();
1044 textureTrace.Enable(true);
1046 DummyControl actor = DummyControl::New();
1047 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1048 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
1050 actor.SetSize( 200.f, 200.f );
1051 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
1052 DALI_TEST_EQUALS( actor.IsResourceReady(), false, TEST_LOCATION );
1054 Stage::GetCurrent().Add( actor );
1055 application.SendNotification();
1056 application.Render();
1058 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1060 application.SendNotification();
1061 application.Render();
1063 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
1064 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1065 DALI_TEST_EQUALS( actor.IsResourceReady(), true, TEST_LOCATION );
1070 int UtcDaliImageVisualRemoteAlphaMask(void)
1072 ToolkitTestApplication application;
1073 tet_infoline( "Request image visual with a Property::Map containing an Alpha mask" );
1075 VisualFactory factory = VisualFactory::Get();
1076 DALI_TEST_CHECK( factory );
1078 const std::string MASK_IMAGE = TEST_REMOTE_IMAGE_FILE_NAME;
1080 Property::Map propertyMap;
1081 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
1082 propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
1083 propertyMap.Insert( "alphaMaskUrl", MASK_IMAGE );
1085 Visual::Base visual = factory.CreateVisual( propertyMap );
1086 DALI_TEST_CHECK( visual );
1088 Property::Map testMap;
1089 visual.CreatePropertyMap(testMap);
1090 DALI_TEST_EQUALS(*testMap.Find(ImageVisual::Property::ALPHA_MASK_URL),Property::Value(MASK_IMAGE), TEST_LOCATION );
1092 // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
1093 // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
1095 TestGlAbstraction& gl = application.GetGlAbstraction();
1096 TraceCallStack& textureTrace = gl.GetTextureTrace();
1097 textureTrace.Enable(true);
1099 DummyControl actor = DummyControl::New();
1100 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1101 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
1102 DALI_TEST_EQUALS( actor.IsResourceReady(), false, TEST_LOCATION );
1104 actor.SetSize( 200.f, 200.f );
1105 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
1107 Stage::GetCurrent().Add( actor );
1108 application.SendNotification();
1109 application.Render();
1111 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1113 application.SendNotification();
1114 application.Render();
1116 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
1117 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1118 DALI_TEST_EQUALS( actor.IsResourceReady(), true, TEST_LOCATION );
1124 int UtcDaliImageVisualAlphaMaskCrop(void)
1126 ToolkitTestApplication application;
1127 tet_infoline( "Request image visual with an Alpha mask and scale/cropping" );
1129 VisualFactory factory = VisualFactory::Get();
1130 DALI_TEST_CHECK( factory );
1132 Property::Map propertyMap;
1133 propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::IMAGE );
1134 propertyMap.Insert( ImageVisual::Property::URL, TEST_LARGE_IMAGE_FILE_NAME );
1135 propertyMap.Insert( ImageVisual::Property::ALPHA_MASK_URL, TEST_MASK_IMAGE_FILE_NAME );
1136 propertyMap.Insert( ImageVisual::Property::MASK_CONTENT_SCALE, 1.6f );
1137 propertyMap.Insert( ImageVisual::Property::CROP_TO_MASK, true );
1139 Visual::Base visual = factory.CreateVisual( propertyMap );
1140 DALI_TEST_CHECK( visual );
1142 Property::Map testMap;
1143 visual.CreatePropertyMap(testMap);
1144 DALI_TEST_EQUALS( *testMap.Find(ImageVisual::Property::ALPHA_MASK_URL),Property::Value(TEST_MASK_IMAGE_FILE_NAME), TEST_LOCATION );
1145 DALI_TEST_EQUALS( *testMap.Find(ImageVisual::Property::MASK_CONTENT_SCALE), Property::Value(1.6f), TEST_LOCATION );
1146 DALI_TEST_EQUALS( *testMap.Find(ImageVisual::Property::CROP_TO_MASK),Property::Value(true), TEST_LOCATION );
1148 // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
1149 // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
1151 TestGlAbstraction& gl = application.GetGlAbstraction();
1152 TraceCallStack& textureTrace = gl.GetTextureTrace();
1153 textureTrace.Enable(true);
1155 DummyControl actor = DummyControl::New();
1156 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1157 dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
1159 actor.SetSize( 200.f, 200.f );
1160 DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
1161 DALI_TEST_EQUALS( actor.IsResourceReady(), false, TEST_LOCATION );
1163 Stage::GetCurrent().Add( actor );
1164 application.SendNotification();
1165 application.Render();
1167 DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1169 application.SendNotification();
1170 application.Render();
1173 visual.GetNaturalSize(size);
1175 DALI_TEST_EQUALS( size, Vector2( 100.0f, 100.0f ), 0.001f, TEST_LOCATION );
1176 DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
1177 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1178 DALI_TEST_EQUALS( actor.IsResourceReady(), true, TEST_LOCATION );