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 );
288 int UtcDaliRendererFactoryGetBorderRenderer1(void)
290 ToolkitTestApplication application;
291 tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer1: Request border renderer with a Property::Map" );
293 RendererFactory factory = RendererFactory::Get();
294 DALI_TEST_CHECK( factory );
296 Property::Map propertyMap;
297 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
298 float testSize = 5.f;
299 propertyMap.Insert("renderer-type", "border-renderer");
300 propertyMap.Insert("border-color", testColor);
301 propertyMap.Insert("border-size", testSize);
303 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
304 DALI_TEST_CHECK( controlRenderer );
306 Actor actor = Actor::New();
307 actor.SetSize(200.f, 200.f);
308 Stage::GetCurrent().Add( actor );
309 controlRenderer.SetSize(Vector2(200.f, 200.f));
310 controlRenderer.SetOnStage( actor );
312 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
314 TestGlAbstraction& gl = application.GetGlAbstraction();
316 application.SendNotification();
317 application.Render(0);
319 Vector4 actualColor(Vector4::ZERO);
320 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBorderColor", actualColor ) );
321 DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
323 float actualSize = 0.f;
324 DALI_TEST_CHECK( gl.GetUniformValue<float>( "uBorderSize", actualSize ) );
325 DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
330 int UtcDaliRendererFactoryGetBorderRenderer2(void)
332 ToolkitTestApplication application;
333 tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer2: Request border renderer with a borderSize and a borderColor" );
335 RendererFactory factory = RendererFactory::Get();
336 DALI_TEST_CHECK( factory );
338 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
339 float testSize = 5.f;
341 ControlRenderer controlRenderer = factory.GetControlRenderer(testSize, testColor);
342 DALI_TEST_CHECK( controlRenderer );
344 Actor actor = Actor::New();
345 actor.SetSize(200.f, 200.f);
346 Stage::GetCurrent().Add( actor );
347 controlRenderer.SetSize(Vector2(200.f, 200.f));
348 controlRenderer.SetOnStage( actor );
350 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
352 TestGlAbstraction& gl = application.GetGlAbstraction();
354 application.SendNotification();
355 application.Render(0);
357 Vector4 actualColor(Vector4::ZERO);
358 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBorderColor", actualColor ) );
359 DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
361 float actualSize = 0.f;
362 DALI_TEST_CHECK( gl.GetUniformValue<float>( "uBorderSize", actualSize ) );
363 DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
369 int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
371 ToolkitTestApplication application;
372 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
374 RendererFactory factory = RendererFactory::Get();
375 DALI_TEST_CHECK( factory );
377 Property::Map propertyMap;
378 propertyMap.Insert("renderer-type", "gradient-renderer");
380 Vector2 start(-1.f, -1.f);
381 Vector2 end(1.f, 1.f);
382 propertyMap.Insert("gradient-start-position", start);
383 propertyMap.Insert("gradient-end-position", end);
384 propertyMap.Insert("gradient-spread-method", "repeat");
386 Property::Array stopOffsets;
387 stopOffsets.PushBack( 0.2f );
388 stopOffsets.PushBack( 0.8f );
389 propertyMap.Insert("gradient-stop-offset", stopOffsets);
391 Property::Array stopColors;
392 stopColors.PushBack( Color::RED );
393 stopColors.PushBack( Color::GREEN );
394 propertyMap.Insert("gradient-stop-color", stopColors);
396 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
397 DALI_TEST_CHECK( controlRenderer );
399 Actor actor = Actor::New();
400 Vector2 size(200.f, 200.f);
402 Stage::GetCurrent().Add( actor );
403 controlRenderer.SetOnStage( actor );
404 controlRenderer.SetSize(size);
406 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
408 // A lookup texture is generated and pass to shader as sampler
409 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
411 application.SendNotification();
412 application.Render(0);
417 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
419 ToolkitTestApplication application;
420 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
422 RendererFactory factory = RendererFactory::Get();
423 DALI_TEST_CHECK( factory );
425 Property::Map propertyMap;
426 propertyMap.Insert("renderer-type", "gradient-renderer");
428 Vector2 center(100.f, 100.f);
429 float radius = 100.f;
430 propertyMap.Insert("gradient-units", "user-space");
431 propertyMap.Insert("gradient-center", center);
432 propertyMap.Insert("gradient-radius", radius);
434 Property::Array stopOffsets;
435 stopOffsets.PushBack( 0.0f );
436 stopOffsets.PushBack( 1.f );
437 propertyMap.Insert("gradient-stop-offset", stopOffsets);
439 Property::Array stopColors;
440 stopColors.PushBack( Color::RED );
441 stopColors.PushBack( Color::GREEN );
442 propertyMap.Insert("gradient-stop-color", stopColors);
444 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
445 DALI_TEST_CHECK( controlRenderer );
447 Actor actor = Actor::New();
448 Vector2 size(200.f, 200.f);
450 Stage::GetCurrent().Add( actor );
451 controlRenderer.SetSize(size);
452 controlRenderer.SetOnStage( actor );
454 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
456 // A lookup texture is generated and pass to shader as sampler
457 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
459 TestGlAbstraction& gl = application.GetGlAbstraction();
460 application.SendNotification();
461 application.Render(0);
463 Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
464 alignMatrix.Invert();
466 Matrix3 actualValue( Matrix3::IDENTITY );
467 DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
468 DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
473 int UtcDaliRendererFactoryGetImageRenderer1(void)
475 ToolkitTestApplication application;
476 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer1: Request image renderer with a Property::Map" );
478 RendererFactory factory = RendererFactory::Get();
479 DALI_TEST_CHECK( factory );
481 Property::Map propertyMap;
482 propertyMap.Insert( "renderer-type", "image-renderer" );
483 propertyMap.Insert( "image-url", TEST_IMAGE_FILE_NAME );
485 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
486 DALI_TEST_CHECK( controlRenderer );
488 Actor actor = Actor::New();
489 actor.SetSize( 200.f, 200.f );
490 Stage::GetCurrent().Add( actor );
491 controlRenderer.SetSize( Vector2(200.f, 200.f) );
492 controlRenderer.SetOnStage( actor );
494 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
495 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
497 TestGlAbstraction& gl = application.GetGlAbstraction();
498 application.SendNotification();
499 application.Render();
501 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
504 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
507 application.Render();
508 application.SendNotification();
510 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
512 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
514 int textureUnit = -1;
515 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
516 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
521 int UtcDaliRendererFactoryGetImageRenderer2(void)
523 ToolkitTestApplication application;
524 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer2: Request image renderer with an image handle" );
526 RendererFactory factory = RendererFactory::Get();
527 DALI_TEST_CHECK( factory );
529 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
530 ControlRenderer controlRenderer = factory.GetControlRenderer( image );
532 Actor actor = Actor::New();
533 actor.SetSize( 200.f, 200.f );
534 Stage::GetCurrent().Add( actor );
535 controlRenderer.SetSize( Vector2(200.f, 200.f) );
536 controlRenderer.SetOnStage( actor );
538 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
539 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
541 TestGlAbstraction& gl = application.GetGlAbstraction();
542 application.SendNotification();
543 application.Render();
545 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
548 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
551 application.Render();
552 application.SendNotification();
554 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
556 int textureUnit = -1;
557 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
558 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
563 int UtcDaliRendererFactoryGetNPatchRenderer1(void)
565 ToolkitTestApplication application;
566 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer1: Request n-patch renderer with a Property::Map" );
568 RendererFactory factory = RendererFactory::Get();
569 DALI_TEST_CHECK( factory );
571 const unsigned int ninePatchImageHeight = 18;
572 const unsigned int ninePatchImageWidth = 28;
573 const Vector4 requiredStretchBorder( 3, 4, 5, 6 );
574 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, requiredStretchBorder );
576 Property::Map propertyMap;
577 propertyMap.Insert( "renderer-type", "n-patch-renderer" );
578 propertyMap.Insert( "image-url", TEST_NPATCH_FILE_NAME );
580 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
581 DALI_TEST_CHECK( controlRenderer );
583 Actor actor = Actor::New();
584 actor.SetSize( 200.f, 200.f );
585 Stage::GetCurrent().Add( actor );
586 controlRenderer.SetSize( Vector2(200.f, 200.f) );
587 controlRenderer.SetOnStage( actor );
589 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
590 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
592 TestGlAbstraction& gl = application.GetGlAbstraction();
593 application.SendNotification();
594 application.Render();
596 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
599 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, ninePatchResource );
602 application.Render();
603 application.SendNotification();
605 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
607 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
609 int textureUnit = -1;
610 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
611 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
616 int UtcDaliRendererFactoryGetNPatchRenderer2(void)
618 ToolkitTestApplication application;
619 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer2: Request n-patch renderer with an image url" );
621 RendererFactory factory = RendererFactory::Get();
622 DALI_TEST_CHECK( factory );
624 const unsigned int ninePatchImageHeight = 18;
625 const unsigned int ninePatchImageWidth = 28;
626 const Vector4 requiredStretchBorder( 3, 4, 5, 6 );
627 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, requiredStretchBorder );
629 ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
630 DALI_TEST_CHECK( controlRenderer );
632 Actor actor = Actor::New();
633 actor.SetSize( 200.f, 200.f );
634 Stage::GetCurrent().Add( actor );
635 controlRenderer.SetSize( Vector2(200.f, 200.f) );
636 controlRenderer.SetOnStage( actor );
638 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
639 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
641 TestGlAbstraction& gl = application.GetGlAbstraction();
642 application.SendNotification();
643 application.Render();
645 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
648 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, ninePatchResource );
651 application.Render();
652 application.SendNotification();
654 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
656 int textureUnit = -1;
657 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
658 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
663 int UtcDaliRendererFactoryGetNPatchRendererN1(void)
665 //This should still load but display an error image
667 ToolkitTestApplication application;
668 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid image url" );
670 RendererFactory factory = RendererFactory::Get();
671 DALI_TEST_CHECK( factory );
673 ControlRenderer controlRenderer = factory.GetControlRenderer( "ERROR.9.jpg" );
674 DALI_TEST_CHECK( controlRenderer );
676 Actor actor = Actor::New();
677 actor.SetSize( 200.f, 200.f );
678 Stage::GetCurrent().Add( actor );
679 controlRenderer.SetSize( Vector2(200.f, 200.f) );
680 controlRenderer.SetOnStage( actor );
682 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
683 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
685 TestGlAbstraction& gl = application.GetGlAbstraction();
686 application.SendNotification();
687 application.Render();
689 int textureUnit = -1;
690 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
691 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
696 int UtcDaliRendererFactoryGetNPatchRendererN2(void)
698 //This should still load but display an error image
700 ToolkitTestApplication application;
701 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid Property::Map" );
703 RendererFactory factory = RendererFactory::Get();
704 DALI_TEST_CHECK( factory );
706 Property::Map propertyMap;
707 propertyMap.Insert( "renderer-type", "n-patch-renderer" );
708 propertyMap.Insert( "image-url", 111 );
710 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
711 DALI_TEST_CHECK( controlRenderer );
713 Actor actor = Actor::New();
714 actor.SetSize( 200.f, 200.f );
715 Stage::GetCurrent().Add( actor );
716 controlRenderer.SetSize( Vector2(200.f, 200.f) );
717 controlRenderer.SetOnStage( actor );
719 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
720 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
722 TestGlAbstraction& gl = application.GetGlAbstraction();
723 application.SendNotification();
724 application.Render();
726 int textureUnit = -1;
727 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
728 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
733 int UtcDaliRendererFactoryResetRenderer1(void)
735 ToolkitTestApplication application;
736 tet_infoline( "UtcDaliRendererFactoryResetRenderer1" );
738 Actor actor = Actor::New();
739 actor.SetSize(200.f, 200.f);
740 Stage::GetCurrent().Add( actor );
742 RendererFactory factory = RendererFactory::Get();
743 DALI_TEST_CHECK( factory );
745 ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED );
746 DALI_TEST_CHECK( controlRenderer );
747 controlRenderer.SetSize(Vector2(200.f, 200.f));
748 controlRenderer.SetOnStage( actor );
749 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
751 TestGlAbstraction& gl = application.GetGlAbstraction();
752 application.SendNotification();
753 application.Render(0);
754 Vector4 actualValue(Vector4::ZERO);
755 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
756 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
758 bool isNewRenderer = factory.ResetRenderer( controlRenderer, Color::GREEN );
759 DALI_TEST_CHECK( !isNewRenderer );
760 application.SendNotification();
761 application.Render(0);
762 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
763 DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
765 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
766 isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
767 DALI_TEST_CHECK( isNewRenderer );
769 Actor actor2 = Actor::New();
770 actor2.SetSize(200.f, 200.f);
771 Stage::GetCurrent().Add( actor2 );
772 controlRenderer.SetSize(Vector2(200.f, 200.f));
773 controlRenderer.SetOnStage( actor2 );
774 application.SendNotification();
775 application.Render(0);
776 Image samplerImage = actor2.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
777 DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
782 int UtcDaliRendererFactoryResetRenderer2(void)
784 ToolkitTestApplication application;
785 tet_infoline( "UtcDaliRendererFactoryResetRenderer2" );
787 Actor actor = Actor::New();
788 actor.SetSize(200.f, 200.f);
789 Stage::GetCurrent().Add( actor );
790 RendererFactory factory = RendererFactory::Get();
791 DALI_TEST_CHECK( factory );
793 Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME);
794 ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage );
795 DALI_TEST_CHECK( controlRenderer );
796 controlRenderer.SetSize(Vector2(200.f, 200.f));
797 controlRenderer.SetOnStage( actor );
798 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
800 application.SendNotification();
801 application.Render(0);
802 Image samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
803 DALI_TEST_CHECK( ResourceImage::DownCast( samplerImage ) );
805 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
806 bool isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
807 DALI_TEST_CHECK( !isNewRenderer );
808 application.SendNotification();
809 application.Render(0);
810 samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
811 DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
813 isNewRenderer = factory.ResetRenderer( controlRenderer, Color::RED );
814 DALI_TEST_CHECK( isNewRenderer );
816 Actor actor2 = Actor::New();
817 actor2.SetSize(200.f, 200.f);
818 Stage::GetCurrent().Add( actor2 );
819 controlRenderer.SetSize(Vector2(200.f, 200.f));
820 controlRenderer.SetOnStage( actor2 );
821 TestGlAbstraction& gl = application.GetGlAbstraction();
822 application.SendNotification();
823 application.Render(0);
824 Vector4 actualValue(Vector4::ZERO);
825 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
826 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );