abd8a27d6a55bd94de90758bdeb5d6bbbf2cd325
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-RendererFactory.cpp
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #include <iostream>
18 #include <stdlib.h>
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>
24
25 using namespace Dali;
26 using namespace Dali::Toolkit;
27
28 void dali_renderer_factory_startup(void)
29 {
30   test_return_value = TET_UNDEF;
31 }
32
33 void dali_renderer_factory_cleanup(void)
34 {
35   test_return_value = TET_PASS;
36 }
37
38 int UtcDaliRendererFactoryGet(void)
39 {
40   ToolkitTestApplication application;
41   tet_infoline( "UtcDaliRendererFactory" );
42
43   //Register type
44   TypeInfo type;
45   type = TypeRegistry::Get().GetTypeInfo( "RendererFactory" );
46   DALI_TEST_CHECK( type );
47   BaseHandle handle = type.CreateInstance();
48   DALI_TEST_CHECK( handle );
49
50   RendererFactory factory;
51   factory = RendererFactory::Get();
52   DALI_TEST_CHECK( factory );
53
54   RendererFactory newFactory = RendererFactory::Get();
55   DALI_TEST_CHECK( newFactory );
56
57   // Check that renderer factory is a singleton
58   DALI_TEST_CHECK(factory == newFactory);
59
60   END_TEST;
61 }
62
63 int UtcDaliRendererFactoryCopyAndAssignment(void)
64 {
65   ToolkitTestApplication application;
66   tet_infoline( "UtcDaliRendererFactoryCopyAndAssignment" );
67   RendererFactory factory = RendererFactory::Get();
68
69   RendererFactory factoryCopy( factory );
70   DALI_TEST_CHECK(factory == factoryCopy);
71
72   RendererFactory emptyFactory;
73   RendererFactory emptyFactoryCopy( emptyFactory );
74   DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy);
75
76   RendererFactory factoryEquals;
77   factoryEquals = factory;
78   DALI_TEST_CHECK(factory == factoryEquals);
79
80   RendererFactory emptyFactoryEquals;
81   emptyFactoryEquals = emptyFactory;
82   DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals );
83
84   //self assignment
85   factory = factory;
86   DALI_TEST_CHECK( factory = factoryCopy );
87
88   END_TEST;
89 }
90
91 int UtcDaliRendererFactoryGetColorRenderer(void)
92 {
93   ToolkitTestApplication application;
94   tet_infoline( "UtcDaliRendererFactoryGetColorRenderer" );
95
96   RendererFactory factory = RendererFactory::Get();
97   DALI_TEST_CHECK( factory );
98
99   Property::Map propertyMap;
100   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
101   propertyMap.Insert("renderer-type", "color-renderer");
102   propertyMap.Insert("blend-color", testColor);
103
104   ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
105   DALI_TEST_CHECK( controlRenderer );
106
107   Actor actor = Actor::New();
108   actor.SetSize(200.f, 200.f);
109   Stage::GetCurrent().Add( actor );
110   controlRenderer.SetSize(Vector2(200.f, 200.f));
111   controlRenderer.SetOnStage( actor );
112
113   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
114
115   TestGlAbstraction& gl = application.GetGlAbstraction();
116
117   application.SendNotification();
118   application.Render(0);
119
120   Vector4 actualValue(Vector4::ZERO);
121   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
122   DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
123
124   END_TEST;
125 }
126
127 int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
128 {
129   ToolkitTestApplication application;
130   tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
131
132   RendererFactory factory = RendererFactory::Get();
133   DALI_TEST_CHECK( factory );
134
135   Property::Map propertyMap;
136   propertyMap.Insert("renderer-type", "gradient-renderer");
137
138   Vector2 start(-1.f, -1.f);
139   Vector2 end(1.f, 1.f);
140   propertyMap.Insert("gradient-start-position", start);
141   propertyMap.Insert("gradient-end-position", end);
142   propertyMap.Insert("gradient-spread-method", "repeat");
143
144   Property::Array stopOffsets;
145   stopOffsets.PushBack( 0.2f );
146   stopOffsets.PushBack( 0.8f );
147   propertyMap.Insert("gradient-stop-offset", stopOffsets);
148
149   Property::Array stopColors;
150   stopColors.PushBack( Color::RED );
151   stopColors.PushBack( Color::GREEN );
152   propertyMap.Insert("gradient-stop-color", stopColors);
153
154   ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
155   DALI_TEST_CHECK( controlRenderer );
156
157   Actor actor = Actor::New();
158   Vector2 size(200.f, 200.f);
159   actor.SetSize(size);
160   Stage::GetCurrent().Add( actor );
161   controlRenderer.SetOnStage( actor );
162   controlRenderer.SetSize(size);
163
164   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
165
166   // A lookup texture is generated and pass to shader as sampler
167   DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
168
169   application.SendNotification();
170   application.Render(0);
171
172   END_TEST;
173 }
174
175 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
176 {
177   ToolkitTestApplication application;
178   tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
179
180   RendererFactory factory = RendererFactory::Get();
181   DALI_TEST_CHECK( factory );
182
183   Property::Map propertyMap;
184   propertyMap.Insert("renderer-type", "gradient-renderer");
185
186   Vector2 center(100.f, 100.f);
187   float radius = 100.f;
188   propertyMap.Insert("gradient-units", "user-space");
189   propertyMap.Insert("gradient-center", center);
190   propertyMap.Insert("gradient-radius", radius);
191
192   Property::Array stopOffsets;
193   stopOffsets.PushBack( 0.0f );
194   stopOffsets.PushBack( 1.f );
195   propertyMap.Insert("gradient-stop-offset", stopOffsets);
196
197   Property::Array stopColors;
198   stopColors.PushBack( Color::RED );
199   stopColors.PushBack( Color::GREEN );
200   propertyMap.Insert("gradient-stop-color", stopColors);
201
202   ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
203   DALI_TEST_CHECK( controlRenderer );
204
205   Actor actor = Actor::New();
206   Vector2 size(200.f, 200.f);
207   actor.SetSize(size);
208   Stage::GetCurrent().Add( actor );
209   controlRenderer.SetSize(size);
210   controlRenderer.SetOnStage( actor );
211
212   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
213
214   // A lookup texture is generated and pass to shader as sampler
215   DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
216
217   TestGlAbstraction& gl = application.GetGlAbstraction();
218   application.SendNotification();
219   application.Render(0);
220
221   Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
222   alignMatrix.Invert();
223
224   Matrix3 actualValue( Matrix3::IDENTITY );
225   DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
226   DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
227
228   END_TEST;
229 }