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 UtcDaliRendererFactoryGetColorRenderer(void)
99 ToolkitTestApplication application;
100 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer" );
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 UtcDaliRendererFactoryGetLinearGradientRenderer(void)
135 ToolkitTestApplication application;
136 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
138 RendererFactory factory = RendererFactory::Get();
139 DALI_TEST_CHECK( factory );
141 Property::Map propertyMap;
142 propertyMap.Insert("renderer-type", "gradient-renderer");
144 Vector2 start(-1.f, -1.f);
145 Vector2 end(1.f, 1.f);
146 propertyMap.Insert("gradient-start-position", start);
147 propertyMap.Insert("gradient-end-position", end);
148 propertyMap.Insert("gradient-spread-method", "repeat");
150 Property::Array stopOffsets;
151 stopOffsets.PushBack( 0.2f );
152 stopOffsets.PushBack( 0.8f );
153 propertyMap.Insert("gradient-stop-offset", stopOffsets);
155 Property::Array stopColors;
156 stopColors.PushBack( Color::RED );
157 stopColors.PushBack( Color::GREEN );
158 propertyMap.Insert("gradient-stop-color", stopColors);
160 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
161 DALI_TEST_CHECK( controlRenderer );
163 Actor actor = Actor::New();
164 Vector2 size(200.f, 200.f);
166 Stage::GetCurrent().Add( actor );
167 controlRenderer.SetOnStage( actor );
168 controlRenderer.SetSize(size);
170 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
172 // A lookup texture is generated and pass to shader as sampler
173 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
175 application.SendNotification();
176 application.Render(0);
181 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
183 ToolkitTestApplication application;
184 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
186 RendererFactory factory = RendererFactory::Get();
187 DALI_TEST_CHECK( factory );
189 Property::Map propertyMap;
190 propertyMap.Insert("renderer-type", "gradient-renderer");
192 Vector2 center(100.f, 100.f);
193 float radius = 100.f;
194 propertyMap.Insert("gradient-units", "user-space");
195 propertyMap.Insert("gradient-center", center);
196 propertyMap.Insert("gradient-radius", radius);
198 Property::Array stopOffsets;
199 stopOffsets.PushBack( 0.0f );
200 stopOffsets.PushBack( 1.f );
201 propertyMap.Insert("gradient-stop-offset", stopOffsets);
203 Property::Array stopColors;
204 stopColors.PushBack( Color::RED );
205 stopColors.PushBack( Color::GREEN );
206 propertyMap.Insert("gradient-stop-color", stopColors);
208 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
209 DALI_TEST_CHECK( controlRenderer );
211 Actor actor = Actor::New();
212 Vector2 size(200.f, 200.f);
214 Stage::GetCurrent().Add( actor );
215 controlRenderer.SetSize(size);
216 controlRenderer.SetOnStage( actor );
218 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
220 // A lookup texture is generated and pass to shader as sampler
221 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
223 TestGlAbstraction& gl = application.GetGlAbstraction();
224 application.SendNotification();
225 application.Render(0);
227 Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
228 alignMatrix.Invert();
230 Matrix3 actualValue( Matrix3::IDENTITY );
231 DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
232 DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
237 int UtcDaliRendererFactoryGetImageRenderer(void)
239 ToolkitTestApplication application;
240 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer" );
242 RendererFactory factory = RendererFactory::Get();
243 DALI_TEST_CHECK( factory );
245 Property::Map propertyMap;
246 propertyMap.Insert( "renderer-type", "image-renderer" );
247 propertyMap.Insert( "image-url", TEST_IMAGE_FILE_NAME );
249 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
250 DALI_TEST_CHECK( controlRenderer );
252 Actor actor = Actor::New();
253 actor.SetSize( 200.f, 200.f );
254 Stage::GetCurrent().Add( actor );
255 controlRenderer.SetSize( Vector2(200.f, 200.f) );
256 controlRenderer.SetOnStage( actor );
258 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
259 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
261 TestGlAbstraction& gl = application.GetGlAbstraction();
262 application.SendNotification();
263 application.Render();
265 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
268 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
271 application.Render();
272 application.SendNotification();
274 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
276 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
278 int textureUnit = -1;
279 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
280 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );