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 UtcDaliRendererFactoryGetLinearGradientRenderer(void)
290 ToolkitTestApplication application;
291 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
293 RendererFactory factory = RendererFactory::Get();
294 DALI_TEST_CHECK( factory );
296 Property::Map propertyMap;
297 propertyMap.Insert("renderer-type", "gradient-renderer");
299 Vector2 start(-1.f, -1.f);
300 Vector2 end(1.f, 1.f);
301 propertyMap.Insert("gradient-start-position", start);
302 propertyMap.Insert("gradient-end-position", end);
303 propertyMap.Insert("gradient-spread-method", "repeat");
305 Property::Array stopOffsets;
306 stopOffsets.PushBack( 0.2f );
307 stopOffsets.PushBack( 0.8f );
308 propertyMap.Insert("gradient-stop-offset", stopOffsets);
310 Property::Array stopColors;
311 stopColors.PushBack( Color::RED );
312 stopColors.PushBack( Color::GREEN );
313 propertyMap.Insert("gradient-stop-color", stopColors);
315 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
316 DALI_TEST_CHECK( controlRenderer );
318 Actor actor = Actor::New();
319 Vector2 size(200.f, 200.f);
321 Stage::GetCurrent().Add( actor );
322 controlRenderer.SetOnStage( actor );
323 controlRenderer.SetSize(size);
325 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
327 // A lookup texture is generated and pass to shader as sampler
328 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
330 application.SendNotification();
331 application.Render(0);
336 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
338 ToolkitTestApplication application;
339 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
341 RendererFactory factory = RendererFactory::Get();
342 DALI_TEST_CHECK( factory );
344 Property::Map propertyMap;
345 propertyMap.Insert("renderer-type", "gradient-renderer");
347 Vector2 center(100.f, 100.f);
348 float radius = 100.f;
349 propertyMap.Insert("gradient-units", "user-space");
350 propertyMap.Insert("gradient-center", center);
351 propertyMap.Insert("gradient-radius", radius);
353 Property::Array stopOffsets;
354 stopOffsets.PushBack( 0.0f );
355 stopOffsets.PushBack( 1.f );
356 propertyMap.Insert("gradient-stop-offset", stopOffsets);
358 Property::Array stopColors;
359 stopColors.PushBack( Color::RED );
360 stopColors.PushBack( Color::GREEN );
361 propertyMap.Insert("gradient-stop-color", stopColors);
363 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
364 DALI_TEST_CHECK( controlRenderer );
366 Actor actor = Actor::New();
367 Vector2 size(200.f, 200.f);
369 Stage::GetCurrent().Add( actor );
370 controlRenderer.SetSize(size);
371 controlRenderer.SetOnStage( actor );
373 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
375 // A lookup texture is generated and pass to shader as sampler
376 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
378 TestGlAbstraction& gl = application.GetGlAbstraction();
379 application.SendNotification();
380 application.Render(0);
382 Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
383 alignMatrix.Invert();
385 Matrix3 actualValue( Matrix3::IDENTITY );
386 DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
387 DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
392 int UtcDaliRendererFactoryGetImageRenderer1(void)
394 ToolkitTestApplication application;
395 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer1: Request image renderer with a Property::Map" );
397 RendererFactory factory = RendererFactory::Get();
398 DALI_TEST_CHECK( factory );
400 Property::Map propertyMap;
401 propertyMap.Insert( "renderer-type", "image-renderer" );
402 propertyMap.Insert( "image-url", TEST_IMAGE_FILE_NAME );
404 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
405 DALI_TEST_CHECK( controlRenderer );
407 Actor actor = Actor::New();
408 actor.SetSize( 200.f, 200.f );
409 Stage::GetCurrent().Add( actor );
410 controlRenderer.SetSize( Vector2(200.f, 200.f) );
411 controlRenderer.SetOnStage( actor );
413 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
414 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
416 TestGlAbstraction& gl = application.GetGlAbstraction();
417 application.SendNotification();
418 application.Render();
420 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
423 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
426 application.Render();
427 application.SendNotification();
429 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
431 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
433 int textureUnit = -1;
434 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
435 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
440 int UtcDaliRendererFactoryGetImageRenderer2(void)
442 ToolkitTestApplication application;
443 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer2: Request image renderer with an image handle" );
445 RendererFactory factory = RendererFactory::Get();
446 DALI_TEST_CHECK( factory );
448 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
449 ControlRenderer controlRenderer = factory.GetControlRenderer( image );
451 Actor actor = Actor::New();
452 actor.SetSize( 200.f, 200.f );
453 Stage::GetCurrent().Add( actor );
454 controlRenderer.SetSize( Vector2(200.f, 200.f) );
455 controlRenderer.SetOnStage( actor );
457 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
458 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
460 TestGlAbstraction& gl = application.GetGlAbstraction();
461 application.SendNotification();
462 application.Render();
464 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
467 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
470 application.Render();
471 application.SendNotification();
473 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
475 int textureUnit = -1;
476 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
477 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
482 int UtcDaliRendererFactoryGetNPatchRenderer1(void)
484 ToolkitTestApplication application;
485 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer1: Request n-patch renderer with a Property::Map" );
487 RendererFactory factory = RendererFactory::Get();
488 DALI_TEST_CHECK( factory );
490 const unsigned int ninePatchImageHeight = 18;
491 const unsigned int ninePatchImageWidth = 28;
492 const Vector4 requiredStretchBorder( 3, 4, 5, 6 );
493 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, requiredStretchBorder );
495 Property::Map propertyMap;
496 propertyMap.Insert( "renderer-type", "n-patch-renderer" );
497 propertyMap.Insert( "image-url", TEST_NPATCH_FILE_NAME );
499 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
500 DALI_TEST_CHECK( controlRenderer );
502 Actor actor = Actor::New();
503 actor.SetSize( 200.f, 200.f );
504 Stage::GetCurrent().Add( actor );
505 controlRenderer.SetSize( Vector2(200.f, 200.f) );
506 controlRenderer.SetOnStage( actor );
508 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
509 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
511 TestGlAbstraction& gl = application.GetGlAbstraction();
512 application.SendNotification();
513 application.Render();
515 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
518 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, ninePatchResource );
521 application.Render();
522 application.SendNotification();
524 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
526 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
528 int textureUnit = -1;
529 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
530 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
535 int UtcDaliRendererFactoryGetNPatchRenderer2(void)
537 ToolkitTestApplication application;
538 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer2: Request n-patch renderer with an image url" );
540 RendererFactory factory = RendererFactory::Get();
541 DALI_TEST_CHECK( factory );
543 const unsigned int ninePatchImageHeight = 18;
544 const unsigned int ninePatchImageWidth = 28;
545 const Vector4 requiredStretchBorder( 3, 4, 5, 6 );
546 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, requiredStretchBorder );
548 ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
549 DALI_TEST_CHECK( controlRenderer );
551 Actor actor = Actor::New();
552 actor.SetSize( 200.f, 200.f );
553 Stage::GetCurrent().Add( actor );
554 controlRenderer.SetSize( Vector2(200.f, 200.f) );
555 controlRenderer.SetOnStage( actor );
557 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
558 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
560 TestGlAbstraction& gl = application.GetGlAbstraction();
561 application.SendNotification();
562 application.Render();
564 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
567 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, ninePatchResource );
570 application.Render();
571 application.SendNotification();
573 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
575 int textureUnit = -1;
576 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
577 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
582 int UtcDaliRendererFactoryGetNPatchRendererN1(void)
584 //This should still load but display an error image
586 ToolkitTestApplication application;
587 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid image url" );
589 RendererFactory factory = RendererFactory::Get();
590 DALI_TEST_CHECK( factory );
592 ControlRenderer controlRenderer = factory.GetControlRenderer( "ERROR.9.jpg" );
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 int textureUnit = -1;
609 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
610 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
615 int UtcDaliRendererFactoryGetNPatchRendererN2(void)
617 //This should still load but display an error image
619 ToolkitTestApplication application;
620 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid Property::Map" );
622 RendererFactory factory = RendererFactory::Get();
623 DALI_TEST_CHECK( factory );
625 Property::Map propertyMap;
626 propertyMap.Insert( "renderer-type", "n-patch-renderer" );
627 propertyMap.Insert( "image-url", 111 );
629 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
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 int textureUnit = -1;
646 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
647 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
652 int UtcDaliRendererFactoryResetRenderer1(void)
654 ToolkitTestApplication application;
655 tet_infoline( "UtcDaliRendererFactoryResetRenderer1" );
657 Actor actor = Actor::New();
658 actor.SetSize(200.f, 200.f);
659 Stage::GetCurrent().Add( actor );
661 RendererFactory factory = RendererFactory::Get();
662 DALI_TEST_CHECK( factory );
664 ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED );
665 DALI_TEST_CHECK( controlRenderer );
666 controlRenderer.SetSize(Vector2(200.f, 200.f));
667 controlRenderer.SetOnStage( actor );
668 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
670 TestGlAbstraction& gl = application.GetGlAbstraction();
671 application.SendNotification();
672 application.Render(0);
673 Vector4 actualValue(Vector4::ZERO);
674 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
675 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
677 bool isNewRenderer = factory.ResetRenderer( controlRenderer, Color::GREEN );
678 DALI_TEST_CHECK( !isNewRenderer );
679 application.SendNotification();
680 application.Render(0);
681 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
682 DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
684 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
685 isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
686 DALI_TEST_CHECK( isNewRenderer );
688 Actor actor2 = Actor::New();
689 actor2.SetSize(200.f, 200.f);
690 Stage::GetCurrent().Add( actor2 );
691 controlRenderer.SetSize(Vector2(200.f, 200.f));
692 controlRenderer.SetOnStage( actor2 );
693 application.SendNotification();
694 application.Render(0);
695 Image samplerImage = actor2.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
696 DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
701 int UtcDaliRendererFactoryResetRenderer2(void)
703 ToolkitTestApplication application;
704 tet_infoline( "UtcDaliRendererFactoryResetRenderer2" );
706 Actor actor = Actor::New();
707 actor.SetSize(200.f, 200.f);
708 Stage::GetCurrent().Add( actor );
709 RendererFactory factory = RendererFactory::Get();
710 DALI_TEST_CHECK( factory );
712 Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME);
713 ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage );
714 DALI_TEST_CHECK( controlRenderer );
715 controlRenderer.SetSize(Vector2(200.f, 200.f));
716 controlRenderer.SetOnStage( actor );
717 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
719 application.SendNotification();
720 application.Render(0);
721 Image samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
722 DALI_TEST_CHECK( ResourceImage::DownCast( samplerImage ) );
724 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
725 bool isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
726 DALI_TEST_CHECK( !isNewRenderer );
727 application.SendNotification();
728 application.Render(0);
729 samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
730 DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
732 isNewRenderer = factory.ResetRenderer( controlRenderer, Color::RED );
733 DALI_TEST_CHECK( isNewRenderer );
735 Actor actor2 = Actor::New();
736 actor2.SetSize(200.f, 200.f);
737 Stage::GetCurrent().Add( actor2 );
738 controlRenderer.SetSize(Vector2(200.f, 200.f));
739 controlRenderer.SetOnStage( actor2 );
740 TestGlAbstraction& gl = application.GetGlAbstraction();
741 application.SendNotification();
742 application.Render(0);
743 Vector4 actualValue(Vector4::ZERO);
744 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
745 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );