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";
34 void dali_renderer_factory_startup(void)
36 test_return_value = TET_UNDEF;
39 void dali_renderer_factory_cleanup(void)
41 test_return_value = TET_PASS;
44 int UtcDaliRendererFactoryGet(void)
46 ToolkitTestApplication application;
47 tet_infoline( "UtcDaliRendererFactory" );
51 type = TypeRegistry::Get().GetTypeInfo( "RendererFactory" );
52 DALI_TEST_CHECK( type );
53 BaseHandle handle = type.CreateInstance();
54 DALI_TEST_CHECK( handle );
56 RendererFactory factory;
57 factory = RendererFactory::Get();
58 DALI_TEST_CHECK( factory );
60 RendererFactory newFactory = RendererFactory::Get();
61 DALI_TEST_CHECK( newFactory );
63 // Check that renderer factory is a singleton
64 DALI_TEST_CHECK(factory == newFactory);
69 int UtcDaliRendererFactoryCopyAndAssignment(void)
71 ToolkitTestApplication application;
72 tet_infoline( "UtcDaliRendererFactoryCopyAndAssignment" );
73 RendererFactory factory = RendererFactory::Get();
75 RendererFactory factoryCopy( factory );
76 DALI_TEST_CHECK(factory == factoryCopy);
78 RendererFactory emptyFactory;
79 RendererFactory emptyFactoryCopy( emptyFactory );
80 DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy);
82 RendererFactory factoryEquals;
83 factoryEquals = factory;
84 DALI_TEST_CHECK(factory == factoryEquals);
86 RendererFactory emptyFactoryEquals;
87 emptyFactoryEquals = emptyFactory;
88 DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals );
92 DALI_TEST_CHECK( factory = factoryCopy );
97 int UtcDaliRendererFactoryGetColorRenderer1(void)
99 ToolkitTestApplication application;
100 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer1: Request color renderer with a Property::Map" );
102 RendererFactory factory = RendererFactory::Get();
103 DALI_TEST_CHECK( factory );
105 Property::Map propertyMap;
106 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
107 propertyMap.Insert("renderer-type", "color-renderer");
108 propertyMap.Insert("blend-color", testColor);
110 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
111 DALI_TEST_CHECK( controlRenderer );
113 Actor actor = Actor::New();
114 actor.SetSize(200.f, 200.f);
115 Stage::GetCurrent().Add( actor );
116 controlRenderer.SetSize(Vector2(200.f, 200.f));
117 controlRenderer.SetOnStage( actor );
119 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
121 TestGlAbstraction& gl = application.GetGlAbstraction();
123 application.SendNotification();
124 application.Render(0);
126 Vector4 actualValue(Vector4::ZERO);
127 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
128 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
133 int UtcDaliRendererFactoryGetColorRenderer2(void)
135 ToolkitTestApplication application;
136 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer2: Request color renderer with a Vector4" );
138 RendererFactory factory = RendererFactory::Get();
139 DALI_TEST_CHECK( factory );
141 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
142 ControlRenderer controlRenderer = factory.GetControlRenderer(testColor);
143 DALI_TEST_CHECK( controlRenderer );
145 Actor actor = Actor::New();
146 actor.SetSize(200.f, 200.f);
147 Stage::GetCurrent().Add( actor );
148 controlRenderer.SetSize(Vector2(200.f, 200.f));
149 controlRenderer.SetOnStage( actor );
151 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
153 TestGlAbstraction& gl = application.GetGlAbstraction();
155 application.SendNotification();
156 application.Render(0);
158 Vector4 actualValue(Vector4::ZERO);
159 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
160 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
165 int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
167 ToolkitTestApplication application;
168 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
170 RendererFactory factory = RendererFactory::Get();
171 DALI_TEST_CHECK( factory );
173 Property::Map propertyMap;
174 propertyMap.Insert("renderer-type", "gradient-renderer");
176 Vector2 start(-1.f, -1.f);
177 Vector2 end(1.f, 1.f);
178 propertyMap.Insert("gradient-start-position", start);
179 propertyMap.Insert("gradient-end-position", end);
180 propertyMap.Insert("gradient-spread-method", "repeat");
182 Property::Array stopOffsets;
183 stopOffsets.PushBack( 0.2f );
184 stopOffsets.PushBack( 0.8f );
185 propertyMap.Insert("gradient-stop-offset", stopOffsets);
187 Property::Array stopColors;
188 stopColors.PushBack( Color::RED );
189 stopColors.PushBack( Color::GREEN );
190 propertyMap.Insert("gradient-stop-color", stopColors);
192 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
193 DALI_TEST_CHECK( controlRenderer );
195 Actor actor = Actor::New();
196 Vector2 size(200.f, 200.f);
198 Stage::GetCurrent().Add( actor );
199 controlRenderer.SetOnStage( actor );
200 controlRenderer.SetSize(size);
202 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
204 // A lookup texture is generated and pass to shader as sampler
205 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
207 application.SendNotification();
208 application.Render(0);
213 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
215 ToolkitTestApplication application;
216 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
218 RendererFactory factory = RendererFactory::Get();
219 DALI_TEST_CHECK( factory );
221 Property::Map propertyMap;
222 propertyMap.Insert("renderer-type", "gradient-renderer");
224 Vector2 center(100.f, 100.f);
225 float radius = 100.f;
226 propertyMap.Insert("gradient-units", "user-space");
227 propertyMap.Insert("gradient-center", center);
228 propertyMap.Insert("gradient-radius", radius);
230 Property::Array stopOffsets;
231 stopOffsets.PushBack( 0.0f );
232 stopOffsets.PushBack( 1.f );
233 propertyMap.Insert("gradient-stop-offset", stopOffsets);
235 Property::Array stopColors;
236 stopColors.PushBack( Color::RED );
237 stopColors.PushBack( Color::GREEN );
238 propertyMap.Insert("gradient-stop-color", stopColors);
240 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
241 DALI_TEST_CHECK( controlRenderer );
243 Actor actor = Actor::New();
244 Vector2 size(200.f, 200.f);
246 Stage::GetCurrent().Add( actor );
247 controlRenderer.SetSize(size);
248 controlRenderer.SetOnStage( actor );
250 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
252 // A lookup texture is generated and pass to shader as sampler
253 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
255 TestGlAbstraction& gl = application.GetGlAbstraction();
256 application.SendNotification();
257 application.Render(0);
259 Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
260 alignMatrix.Invert();
262 Matrix3 actualValue( Matrix3::IDENTITY );
263 DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
264 DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
269 int UtcDaliRendererFactoryGetImageRenderer1(void)
271 ToolkitTestApplication application;
272 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer1: Request image renderer with a Property::Map" );
274 RendererFactory factory = RendererFactory::Get();
275 DALI_TEST_CHECK( factory );
277 Property::Map propertyMap;
278 propertyMap.Insert( "renderer-type", "image-renderer" );
279 propertyMap.Insert( "image-url", TEST_IMAGE_FILE_NAME );
281 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
282 DALI_TEST_CHECK( controlRenderer );
284 Actor actor = Actor::New();
285 actor.SetSize( 200.f, 200.f );
286 Stage::GetCurrent().Add( actor );
287 controlRenderer.SetSize( Vector2(200.f, 200.f) );
288 controlRenderer.SetOnStage( actor );
290 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
291 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
293 TestGlAbstraction& gl = application.GetGlAbstraction();
294 application.SendNotification();
295 application.Render();
297 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
300 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
303 application.Render();
304 application.SendNotification();
306 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
308 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
310 int textureUnit = -1;
311 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
312 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
317 int UtcDaliRendererFactoryGetImageRenderer2(void)
319 ToolkitTestApplication application;
320 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer2: Request image renderer with an image handle" );
322 RendererFactory factory = RendererFactory::Get();
323 DALI_TEST_CHECK( factory );
325 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
326 ControlRenderer controlRenderer = factory.GetControlRenderer( image );
328 Actor actor = Actor::New();
329 actor.SetSize( 200.f, 200.f );
330 Stage::GetCurrent().Add( actor );
331 controlRenderer.SetSize( Vector2(200.f, 200.f) );
332 controlRenderer.SetOnStage( actor );
334 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
335 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
337 TestGlAbstraction& gl = application.GetGlAbstraction();
338 application.SendNotification();
339 application.Render();
341 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
344 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
347 application.Render();
348 application.SendNotification();
350 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
352 int textureUnit = -1;
353 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
354 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
359 int UtcDaliRendererFactoryResetRenderer1(void)
361 ToolkitTestApplication application;
362 tet_infoline( "UtcDaliRendererFactoryResetRenderer1" );
364 Actor actor = Actor::New();
365 actor.SetSize(200.f, 200.f);
366 Stage::GetCurrent().Add( actor );
368 RendererFactory factory = RendererFactory::Get();
369 DALI_TEST_CHECK( factory );
371 ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED );
372 DALI_TEST_CHECK( controlRenderer );
373 controlRenderer.SetSize(Vector2(200.f, 200.f));
374 controlRenderer.SetOnStage( actor );
375 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
377 TestGlAbstraction& gl = application.GetGlAbstraction();
378 application.SendNotification();
379 application.Render(0);
380 Vector4 actualValue(Vector4::ZERO);
381 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
382 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
384 bool isNewRenderer = factory.ResetRenderer( controlRenderer, Color::GREEN );
385 DALI_TEST_CHECK( !isNewRenderer );
386 application.SendNotification();
387 application.Render(0);
388 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
389 DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
391 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
392 isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
393 DALI_TEST_CHECK( isNewRenderer );
395 Actor actor2 = Actor::New();
396 actor2.SetSize(200.f, 200.f);
397 Stage::GetCurrent().Add( actor2 );
398 controlRenderer.SetSize(Vector2(200.f, 200.f));
399 controlRenderer.SetOnStage( actor2 );
400 application.SendNotification();
401 application.Render(0);
402 Image samplerImage = actor2.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
403 DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
408 int UtcDaliRendererFactoryResetRenderer2(void)
410 ToolkitTestApplication application;
411 tet_infoline( "UtcDaliRendererFactoryResetRenderer2" );
413 Actor actor = Actor::New();
414 actor.SetSize(200.f, 200.f);
415 Stage::GetCurrent().Add( actor );
416 RendererFactory factory = RendererFactory::Get();
417 DALI_TEST_CHECK( factory );
419 Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME);
420 ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage );
421 DALI_TEST_CHECK( controlRenderer );
422 controlRenderer.SetSize(Vector2(200.f, 200.f));
423 controlRenderer.SetOnStage( actor );
424 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
426 application.SendNotification();
427 application.Render(0);
428 Image samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
429 DALI_TEST_CHECK( ResourceImage::DownCast( samplerImage ) );
431 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
432 bool isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
433 DALI_TEST_CHECK( !isNewRenderer );
434 application.SendNotification();
435 application.Render(0);
436 samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
437 DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
439 isNewRenderer = factory.ResetRenderer( controlRenderer, Color::RED );
440 DALI_TEST_CHECK( isNewRenderer );
442 Actor actor2 = Actor::New();
443 actor2.SetSize(200.f, 200.f);
444 Stage::GetCurrent().Add( actor2 );
445 controlRenderer.SetSize(Vector2(200.f, 200.f));
446 controlRenderer.SetOnStage( actor2 );
447 TestGlAbstraction& gl = application.GetGlAbstraction();
448 application.SendNotification();
449 application.Render(0);
450 Vector4 actualValue(Vector4::ZERO);
451 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
452 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );