2 * Copyright (c) 2015 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 <dali/devel-api/rendering/renderer.h>
21 #include <dali/devel-api/rendering/material.h>
22 #include <dali/devel-api/rendering/shader.h>
23 #include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
26 using namespace Dali::Toolkit;
30 const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg";
31 const char* TEST_NPATCH_FILE_NAME = "gallery_image_01.9.jpg";
33 Integration::Bitmap* CreateBitmap( unsigned int imageWidth, unsigned int imageHeight, unsigned int initialColor, Pixel::Format pixelFormat )
35 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN );
36 Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight );
37 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
39 memset( pixbuffer, initialColor, imageHeight * imageWidth * bytesPerPixel );
44 void InitialiseRegionsToZeroAlpha( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, Pixel::Format pixelFormat )
46 PixelBuffer* pixbuffer = image->GetBuffer();
47 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
49 for( unsigned int row = 0; row < imageWidth; ++row )
51 unsigned int pixelOffset = row * bytesPerPixel;
52 pixbuffer[ pixelOffset + 3 ] = 0x00;
53 pixelOffset += ( imageHeight - 1 ) * imageWidth * bytesPerPixel;
54 pixbuffer[ pixelOffset + 3 ] = 0x00;
57 for ( unsigned int column = 0; column < imageHeight; ++column )
59 unsigned int pixelOffset = column * imageWidth * bytesPerPixel;
60 pixbuffer[ pixelOffset + 3 ] = 0x00;
61 pixelOffset += ( imageWidth -1 ) * bytesPerPixel;
62 pixbuffer[ pixelOffset + 3 ] = 0x00;
66 void AddStretchRegionsToImage( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, const Vector4& requiredStretchBorder, Pixel::Format pixelFormat )
68 PixelBuffer* pixbuffer = image->GetBuffer();
69 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
71 for( unsigned int column = requiredStretchBorder.x; column < imageWidth - requiredStretchBorder.z; ++column )
73 unsigned int pixelOffset = column * bytesPerPixel;
74 pixbuffer[ pixelOffset ] = 0x00;
75 pixbuffer[ pixelOffset + 1 ] = 0x00;
76 pixbuffer[ pixelOffset + 2 ] = 0x00;
77 pixbuffer[ pixelOffset + 3 ] = 0xFF;
80 for( unsigned int row = requiredStretchBorder.y; row < imageHeight - requiredStretchBorder.w; ++row )
82 unsigned int pixelOffset = row * imageWidth * bytesPerPixel;
83 pixbuffer[ pixelOffset ] = 0x00;
84 pixbuffer[ pixelOffset + 1 ] = 0x00;
85 pixbuffer[ pixelOffset + 2 ] = 0x00;
86 pixbuffer[ pixelOffset + 3 ] = 0xFF;
90 void AddChildRegionsToImage( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, const Vector4& requiredChildRegion, Pixel::Format pixelFormat )
92 PixelBuffer* pixbuffer = image->GetBuffer();
93 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
95 Integration::Bitmap::PackedPixelsProfile* srcProfile = image->GetPackedPixelsProfile();
96 unsigned int bufferStride = srcProfile->GetBufferStride();
98 // Add bottom child region
99 for( unsigned int column = requiredChildRegion.x; column < imageWidth - requiredChildRegion.z; ++column )
101 unsigned int pixelOffset = column * bytesPerPixel;
102 pixelOffset += ( imageHeight - 1 ) * bufferStride;
103 pixbuffer[ pixelOffset ] = 0x00;
104 pixbuffer[ pixelOffset + 1 ] = 0x00;
105 pixbuffer[ pixelOffset + 2 ] = 0x00;
106 pixbuffer[ pixelOffset + 3 ] = 0xFF;
109 // Add right child region
110 for ( unsigned int row = requiredChildRegion.y; row < imageHeight - requiredChildRegion.w; ++row )
112 unsigned int pixelOffset = row * bufferStride + ( imageWidth - 1 ) * bytesPerPixel;
113 pixbuffer[ pixelOffset ] = 0x00;
114 pixbuffer[ pixelOffset + 1 ] = 0x00;
115 pixbuffer[ pixelOffset + 2 ] = 0x00;
116 pixbuffer[ pixelOffset + 3 ] = 0xFF;
120 Integration::ResourcePointer CustomizeNinePatch( TestApplication& application,
121 unsigned int ninePatchImageWidth,
122 unsigned int ninePatchImageHeight,
123 const Vector4& requiredStretchBorder,
124 bool addChildRegion = false,
125 Vector4 requiredChildRegion = Vector4::ZERO )
127 TestPlatformAbstraction& platform = application.GetPlatform();
129 Pixel::Format pixelFormat = Pixel::RGBA8888;
131 tet_infoline("Create Bitmap");
132 platform.SetClosestImageSize(Vector2( ninePatchImageWidth, ninePatchImageHeight));
133 Integration::Bitmap* bitmap = CreateBitmap( ninePatchImageWidth, ninePatchImageHeight, 0xFF, pixelFormat );
135 tet_infoline("Clear border regions");
136 InitialiseRegionsToZeroAlpha( bitmap, ninePatchImageWidth, ninePatchImageHeight, pixelFormat );
138 tet_infoline("Add Stretch regions to Bitmap");
139 AddStretchRegionsToImage( bitmap, ninePatchImageWidth, ninePatchImageHeight, requiredStretchBorder, pixelFormat );
143 tet_infoline("Add Child regions to Bitmap");
144 AddChildRegionsToImage( bitmap, ninePatchImageWidth, ninePatchImageHeight, requiredChildRegion, pixelFormat );
147 tet_infoline("Getting resource");
148 Integration::ResourcePointer resourcePtr(bitmap);
149 platform.SetResourceLoaded( 0, Dali::Integration::ResourceBitmap, resourcePtr );
157 void dali_renderer_factory_startup(void)
159 test_return_value = TET_UNDEF;
162 void dali_renderer_factory_cleanup(void)
164 test_return_value = TET_PASS;
167 int UtcDaliRendererFactoryGet(void)
169 ToolkitTestApplication application;
170 tet_infoline( "UtcDaliRendererFactory" );
174 type = TypeRegistry::Get().GetTypeInfo( "RendererFactory" );
175 DALI_TEST_CHECK( type );
176 BaseHandle handle = type.CreateInstance();
177 DALI_TEST_CHECK( handle );
179 RendererFactory factory;
180 factory = RendererFactory::Get();
181 DALI_TEST_CHECK( factory );
183 RendererFactory newFactory = RendererFactory::Get();
184 DALI_TEST_CHECK( newFactory );
186 // Check that renderer factory is a singleton
187 DALI_TEST_CHECK(factory == newFactory);
192 int UtcDaliRendererFactoryCopyAndAssignment(void)
194 ToolkitTestApplication application;
195 tet_infoline( "UtcDaliRendererFactoryCopyAndAssignment" );
196 RendererFactory factory = RendererFactory::Get();
198 RendererFactory factoryCopy( factory );
199 DALI_TEST_CHECK(factory == factoryCopy);
201 RendererFactory emptyFactory;
202 RendererFactory emptyFactoryCopy( emptyFactory );
203 DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy);
205 RendererFactory factoryEquals;
206 factoryEquals = factory;
207 DALI_TEST_CHECK(factory == factoryEquals);
209 RendererFactory emptyFactoryEquals;
210 emptyFactoryEquals = emptyFactory;
211 DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals );
215 DALI_TEST_CHECK( factory = factoryCopy );
220 int UtcDaliRendererFactoryGetColorRenderer1(void)
222 ToolkitTestApplication application;
223 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer1: Request color renderer with a Property::Map" );
225 RendererFactory factory = RendererFactory::Get();
226 DALI_TEST_CHECK( factory );
228 Property::Map propertyMap;
229 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
230 propertyMap.Insert("renderer-type", "color-renderer");
231 propertyMap.Insert("blend-color", testColor);
233 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
234 DALI_TEST_CHECK( controlRenderer );
236 Actor actor = Actor::New();
237 actor.SetSize(200.f, 200.f);
238 Stage::GetCurrent().Add( actor );
239 controlRenderer.SetSize(Vector2(200.f, 200.f));
240 controlRenderer.SetOnStage( actor );
242 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
244 TestGlAbstraction& gl = application.GetGlAbstraction();
246 application.SendNotification();
247 application.Render(0);
249 Vector4 actualValue(Vector4::ZERO);
250 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
251 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
256 int UtcDaliRendererFactoryGetColorRenderer2(void)
258 ToolkitTestApplication application;
259 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer2: Request color renderer with a Vector4" );
261 RendererFactory factory = RendererFactory::Get();
262 DALI_TEST_CHECK( factory );
264 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
265 ControlRenderer controlRenderer = factory.GetControlRenderer(testColor);
266 DALI_TEST_CHECK( controlRenderer );
268 Actor actor = Actor::New();
269 actor.SetSize(200.f, 200.f);
270 Stage::GetCurrent().Add( actor );
271 controlRenderer.SetSize(Vector2(200.f, 200.f));
272 controlRenderer.SetOnStage( actor );
274 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
276 TestGlAbstraction& gl = application.GetGlAbstraction();
278 application.SendNotification();
279 application.Render(0);
281 Vector4 actualValue(Vector4::ZERO);
282 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
283 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
285 controlRenderer.SetOffStage( actor );
286 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
291 int UtcDaliRendererFactoryGetBorderRenderer1(void)
293 ToolkitTestApplication application;
294 tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer1: Request border renderer with a Property::Map" );
296 RendererFactory factory = RendererFactory::Get();
297 DALI_TEST_CHECK( factory );
299 Property::Map propertyMap;
300 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
301 float testSize = 5.f;
302 propertyMap.Insert("renderer-type", "border-renderer");
303 propertyMap.Insert("border-color", testColor);
304 propertyMap.Insert("border-size", testSize);
306 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
307 DALI_TEST_CHECK( controlRenderer );
309 Actor actor = Actor::New();
310 actor.SetSize(200.f, 200.f);
311 Stage::GetCurrent().Add( actor );
312 controlRenderer.SetSize(Vector2(200.f, 200.f));
313 controlRenderer.SetOnStage( actor );
315 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
317 TestGlAbstraction& gl = application.GetGlAbstraction();
319 application.SendNotification();
320 application.Render(0);
322 Vector4 actualColor(Vector4::ZERO);
323 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBorderColor", actualColor ) );
324 DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
326 float actualSize = 0.f;
327 DALI_TEST_CHECK( gl.GetUniformValue<float>( "uBorderSize", actualSize ) );
328 DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
330 controlRenderer.SetOffStage( actor );
331 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
336 int UtcDaliRendererFactoryGetBorderRenderer2(void)
338 ToolkitTestApplication application;
339 tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer2: Request border renderer with a borderSize and a borderColor" );
341 RendererFactory factory = RendererFactory::Get();
342 DALI_TEST_CHECK( factory );
344 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
345 float testSize = 5.f;
347 ControlRenderer controlRenderer = factory.GetControlRenderer(testSize, testColor);
348 DALI_TEST_CHECK( controlRenderer );
350 Actor actor = Actor::New();
351 actor.SetSize(200.f, 200.f);
352 Stage::GetCurrent().Add( actor );
353 controlRenderer.SetSize(Vector2(200.f, 200.f));
354 controlRenderer.SetOnStage( actor );
356 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
358 TestGlAbstraction& gl = application.GetGlAbstraction();
360 application.SendNotification();
361 application.Render(0);
363 Vector4 actualColor(Vector4::ZERO);
364 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBorderColor", actualColor ) );
365 DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
367 float actualSize = 0.f;
368 DALI_TEST_CHECK( gl.GetUniformValue<float>( "uBorderSize", actualSize ) );
369 DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
375 int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
377 ToolkitTestApplication application;
378 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
380 RendererFactory factory = RendererFactory::Get();
381 DALI_TEST_CHECK( factory );
383 Property::Map propertyMap;
384 propertyMap.Insert("renderer-type", "gradient-renderer");
386 Vector2 start(-1.f, -1.f);
387 Vector2 end(1.f, 1.f);
388 propertyMap.Insert("gradient-start-position", start);
389 propertyMap.Insert("gradient-end-position", end);
390 propertyMap.Insert("gradient-spread-method", "repeat");
392 Property::Array stopOffsets;
393 stopOffsets.PushBack( 0.2f );
394 stopOffsets.PushBack( 0.8f );
395 propertyMap.Insert("gradient-stop-offset", stopOffsets);
397 Property::Array stopColors;
398 stopColors.PushBack( Color::RED );
399 stopColors.PushBack( Color::GREEN );
400 propertyMap.Insert("gradient-stop-color", stopColors);
402 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
403 DALI_TEST_CHECK( controlRenderer );
405 Actor actor = Actor::New();
406 Vector2 size(200.f, 200.f);
408 Stage::GetCurrent().Add( actor );
409 controlRenderer.SetOnStage( actor );
410 controlRenderer.SetSize(size);
412 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
414 // A lookup texture is generated and pass to shader as sampler
415 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
417 application.SendNotification();
418 application.Render(0);
420 controlRenderer.SetOffStage( actor );
421 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
426 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
428 ToolkitTestApplication application;
429 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
431 RendererFactory factory = RendererFactory::Get();
432 DALI_TEST_CHECK( factory );
434 Property::Map propertyMap;
435 propertyMap.Insert("renderer-type", "gradient-renderer");
437 Vector2 center(100.f, 100.f);
438 float radius = 100.f;
439 propertyMap.Insert("gradient-units", "user-space");
440 propertyMap.Insert("gradient-center", center);
441 propertyMap.Insert("gradient-radius", radius);
443 Property::Array stopOffsets;
444 stopOffsets.PushBack( 0.0f );
445 stopOffsets.PushBack( 1.f );
446 propertyMap.Insert("gradient-stop-offset", stopOffsets);
448 Property::Array stopColors;
449 stopColors.PushBack( Color::RED );
450 stopColors.PushBack( Color::GREEN );
451 propertyMap.Insert("gradient-stop-color", stopColors);
453 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
454 DALI_TEST_CHECK( controlRenderer );
456 Actor actor = Actor::New();
457 Vector2 size(200.f, 200.f);
459 Stage::GetCurrent().Add( actor );
460 controlRenderer.SetSize(size);
461 controlRenderer.SetOnStage( actor );
463 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
465 // A lookup texture is generated and pass to shader as sampler
466 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
468 TestGlAbstraction& gl = application.GetGlAbstraction();
469 application.SendNotification();
470 application.Render(0);
472 Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
473 alignMatrix.Invert();
475 Matrix3 actualValue( Matrix3::IDENTITY );
476 DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
477 DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
482 int UtcDaliRendererFactoryGetImageRenderer1(void)
484 ToolkitTestApplication application;
485 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer1: Request image renderer with a Property::Map" );
487 RendererFactory factory = RendererFactory::Get();
488 DALI_TEST_CHECK( factory );
490 Property::Map propertyMap;
491 propertyMap.Insert( "renderer-type", "image-renderer" );
492 propertyMap.Insert( "image-url", TEST_IMAGE_FILE_NAME );
494 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
495 DALI_TEST_CHECK( controlRenderer );
497 Actor actor = Actor::New();
498 actor.SetSize( 200.f, 200.f );
499 Stage::GetCurrent().Add( actor );
500 controlRenderer.SetSize( Vector2(200.f, 200.f) );
501 controlRenderer.SetOnStage( actor );
503 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
504 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
506 TestGlAbstraction& gl = application.GetGlAbstraction();
507 application.SendNotification();
508 application.Render();
510 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
513 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
516 application.Render();
517 application.SendNotification();
519 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
521 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
523 int textureUnit = -1;
524 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
525 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
527 controlRenderer.SetOffStage( actor );
528 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
533 int UtcDaliRendererFactoryGetImageRenderer2(void)
535 ToolkitTestApplication application;
536 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer2: Request image renderer with an image handle" );
538 RendererFactory factory = RendererFactory::Get();
539 DALI_TEST_CHECK( factory );
541 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
542 ControlRenderer controlRenderer = factory.GetControlRenderer( image );
544 Actor actor = Actor::New();
545 actor.SetSize( 200.f, 200.f );
546 Stage::GetCurrent().Add( actor );
547 controlRenderer.SetSize( Vector2(200.f, 200.f) );
548 controlRenderer.SetOnStage( actor );
550 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
551 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
553 TestGlAbstraction& gl = application.GetGlAbstraction();
554 application.SendNotification();
555 application.Render();
557 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
560 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
563 application.Render();
564 application.SendNotification();
566 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
568 int textureUnit = -1;
569 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
570 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
575 int UtcDaliRendererFactoryGetNPatchRenderer1(void)
577 ToolkitTestApplication application;
578 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer1: Request n-patch renderer with a Property::Map" );
580 RendererFactory factory = RendererFactory::Get();
581 DALI_TEST_CHECK( factory );
583 const unsigned int ninePatchImageHeight = 18;
584 const unsigned int ninePatchImageWidth = 28;
585 const Vector4 requiredStretchBorder( 3, 4, 5, 6 );
586 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, requiredStretchBorder );
588 Property::Map propertyMap;
589 propertyMap.Insert( "renderer-type", "n-patch-renderer" );
590 propertyMap.Insert( "image-url", TEST_NPATCH_FILE_NAME );
592 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
593 DALI_TEST_CHECK( controlRenderer );
595 Actor actor = Actor::New();
596 actor.SetSize( 200.f, 200.f );
597 Stage::GetCurrent().Add( actor );
598 controlRenderer.SetSize( Vector2(200.f, 200.f) );
599 controlRenderer.SetOnStage( actor );
601 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
602 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
604 TestGlAbstraction& gl = application.GetGlAbstraction();
605 application.SendNotification();
606 application.Render();
608 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
611 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, ninePatchResource );
614 application.Render();
615 application.SendNotification();
617 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
619 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
621 int textureUnit = -1;
622 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
623 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
625 controlRenderer.SetOffStage( actor );
626 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
631 int UtcDaliRendererFactoryGetNPatchRenderer2(void)
633 ToolkitTestApplication application;
634 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer2: Request n-patch renderer with an image url" );
636 RendererFactory factory = RendererFactory::Get();
637 DALI_TEST_CHECK( factory );
639 const unsigned int ninePatchImageHeight = 18;
640 const unsigned int ninePatchImageWidth = 28;
641 const Vector4 requiredStretchBorder( 3, 4, 5, 6 );
642 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, requiredStretchBorder );
644 ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
645 DALI_TEST_CHECK( controlRenderer );
647 Actor actor = Actor::New();
648 actor.SetSize( 200.f, 200.f );
649 Stage::GetCurrent().Add( actor );
650 controlRenderer.SetSize( Vector2(200.f, 200.f) );
651 controlRenderer.SetOnStage( actor );
653 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
654 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
656 TestGlAbstraction& gl = application.GetGlAbstraction();
657 application.SendNotification();
658 application.Render();
660 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
663 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, ninePatchResource );
666 application.Render();
667 application.SendNotification();
669 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
671 int textureUnit = -1;
672 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
673 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
678 int UtcDaliRendererFactoryGetNPatchRendererN1(void)
680 //This should still load but display an error image
682 ToolkitTestApplication application;
683 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid image url" );
685 RendererFactory factory = RendererFactory::Get();
686 DALI_TEST_CHECK( factory );
688 ControlRenderer controlRenderer = factory.GetControlRenderer( "ERROR.9.jpg" );
689 DALI_TEST_CHECK( controlRenderer );
691 Actor actor = Actor::New();
692 actor.SetSize( 200.f, 200.f );
693 Stage::GetCurrent().Add( actor );
694 controlRenderer.SetSize( Vector2(200.f, 200.f) );
695 controlRenderer.SetOnStage( actor );
697 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
698 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
700 TestGlAbstraction& gl = application.GetGlAbstraction();
701 application.SendNotification();
702 application.Render();
704 int textureUnit = -1;
705 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
706 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
711 int UtcDaliRendererFactoryGetNPatchRendererN2(void)
713 //This should still load but display an error image
715 ToolkitTestApplication application;
716 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid Property::Map" );
718 RendererFactory factory = RendererFactory::Get();
719 DALI_TEST_CHECK( factory );
721 Property::Map propertyMap;
722 propertyMap.Insert( "renderer-type", "n-patch-renderer" );
723 propertyMap.Insert( "image-url", 111 );
725 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
726 DALI_TEST_CHECK( controlRenderer );
728 Actor actor = Actor::New();
729 actor.SetSize( 200.f, 200.f );
730 Stage::GetCurrent().Add( actor );
731 controlRenderer.SetSize( Vector2(200.f, 200.f) );
732 controlRenderer.SetOnStage( actor );
734 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
735 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
737 TestGlAbstraction& gl = application.GetGlAbstraction();
738 application.SendNotification();
739 application.Render();
741 int textureUnit = -1;
742 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
743 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
748 int UtcDaliRendererFactoryResetRenderer1(void)
750 ToolkitTestApplication application;
751 tet_infoline( "UtcDaliRendererFactoryResetRenderer1" );
753 Actor actor = Actor::New();
754 actor.SetSize(200.f, 200.f);
755 Stage::GetCurrent().Add( actor );
757 RendererFactory factory = RendererFactory::Get();
758 DALI_TEST_CHECK( factory );
760 ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED );
761 DALI_TEST_CHECK( controlRenderer );
762 controlRenderer.SetSize(Vector2(200.f, 200.f));
763 controlRenderer.SetOnStage( actor );
764 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
766 TestGlAbstraction& gl = application.GetGlAbstraction();
767 application.SendNotification();
768 application.Render(0);
769 Vector4 actualValue(Vector4::ZERO);
770 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
771 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
773 bool isNewRenderer = factory.ResetRenderer( controlRenderer, Color::GREEN );
774 DALI_TEST_CHECK( !isNewRenderer );
775 application.SendNotification();
776 application.Render(0);
777 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
778 DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
780 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
781 isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
782 DALI_TEST_CHECK( isNewRenderer );
784 Actor actor2 = Actor::New();
785 actor2.SetSize(200.f, 200.f);
786 Stage::GetCurrent().Add( actor2 );
787 controlRenderer.SetSize(Vector2(200.f, 200.f));
788 controlRenderer.SetOnStage( actor2 );
789 application.SendNotification();
790 application.Render(0);
791 Image samplerImage = actor2.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
792 DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
797 int UtcDaliRendererFactoryResetRenderer2(void)
799 ToolkitTestApplication application;
800 tet_infoline( "UtcDaliRendererFactoryResetRenderer2" );
802 Actor actor = Actor::New();
803 actor.SetSize(200.f, 200.f);
804 Stage::GetCurrent().Add( actor );
805 RendererFactory factory = RendererFactory::Get();
806 DALI_TEST_CHECK( factory );
808 Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME);
809 ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage );
810 DALI_TEST_CHECK( controlRenderer );
811 controlRenderer.SetSize(Vector2(200.f, 200.f));
812 controlRenderer.SetOnStage( actor );
813 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
815 application.SendNotification();
816 application.Render(0);
817 Image samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
818 DALI_TEST_CHECK( ResourceImage::DownCast( samplerImage ) );
820 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
821 bool isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
822 DALI_TEST_CHECK( !isNewRenderer );
823 application.SendNotification();
824 application.Render(0);
825 samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
826 DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
828 isNewRenderer = factory.ResetRenderer( controlRenderer, Color::RED );
829 DALI_TEST_CHECK( isNewRenderer );
831 Actor actor2 = Actor::New();
832 actor2.SetSize(200.f, 200.f);
833 Stage::GetCurrent().Add( actor2 );
834 controlRenderer.SetSize(Vector2(200.f, 200.f));
835 controlRenderer.SetOnStage( actor2 );
836 TestGlAbstraction& gl = application.GetGlAbstraction();
837 application.SendNotification();
838 application.Render(0);
839 Vector4 actualValue(Vector4::ZERO);
840 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
841 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );