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;
28 void dali_renderer_factory_startup(void)
30 test_return_value = TET_UNDEF;
33 void dali_renderer_factory_cleanup(void)
35 test_return_value = TET_PASS;
38 int UtcDaliRendererFactoryGet(void)
40 ToolkitTestApplication application;
41 tet_infoline( "UtcDaliRendererFactory" );
45 type = TypeRegistry::Get().GetTypeInfo( "RendererFactory" );
46 DALI_TEST_CHECK( type );
47 BaseHandle handle = type.CreateInstance();
48 DALI_TEST_CHECK( handle );
50 RendererFactory factory;
51 factory = RendererFactory::Get();
52 DALI_TEST_CHECK( factory );
54 RendererFactory newFactory = RendererFactory::Get();
55 DALI_TEST_CHECK( newFactory );
57 // Check that renderer factory is a singleton
58 DALI_TEST_CHECK(factory == newFactory);
63 int UtcDaliRendererFactoryCopyAndAssignment(void)
65 ToolkitTestApplication application;
66 tet_infoline( "UtcDaliRendererFactoryCopyAndAssignment" );
67 RendererFactory factory = RendererFactory::Get();
69 RendererFactory factoryCopy( factory );
70 DALI_TEST_CHECK(factory == factoryCopy);
72 RendererFactory emptyFactory;
73 RendererFactory emptyFactoryCopy( emptyFactory );
74 DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy);
76 RendererFactory factoryEquals;
77 factoryEquals = factory;
78 DALI_TEST_CHECK(factory == factoryEquals);
80 RendererFactory emptyFactoryEquals;
81 emptyFactoryEquals = emptyFactory;
82 DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals );
86 DALI_TEST_CHECK( factory = factoryCopy );
91 int UtcDaliRendererFactoryGetColorRenderer(void)
93 ToolkitTestApplication application;
94 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer" );
96 RendererFactory factory = RendererFactory::Get();
97 DALI_TEST_CHECK( factory );
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);
104 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
105 DALI_TEST_CHECK( controlRenderer );
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 );
113 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
115 TestGlAbstraction& gl = application.GetGlAbstraction();
117 application.SendNotification();
118 application.Render(0);
120 Vector4 actualValue(Vector4::ZERO);
121 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
122 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
127 int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
129 ToolkitTestApplication application;
130 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
132 RendererFactory factory = RendererFactory::Get();
133 DALI_TEST_CHECK( factory );
135 Property::Map propertyMap;
136 propertyMap.Insert("renderer-type", "gradient-renderer");
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");
144 Property::Array stopOffsets;
145 stopOffsets.PushBack( 0.2f );
146 stopOffsets.PushBack( 0.8f );
147 propertyMap.Insert("gradient-stop-offset", stopOffsets);
149 Property::Array stopColors;
150 stopColors.PushBack( Color::RED );
151 stopColors.PushBack( Color::GREEN );
152 propertyMap.Insert("gradient-stop-color", stopColors);
154 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
155 DALI_TEST_CHECK( controlRenderer );
157 Actor actor = Actor::New();
158 Vector2 size(200.f, 200.f);
160 Stage::GetCurrent().Add( actor );
161 controlRenderer.SetOnStage( actor );
162 controlRenderer.SetSize(size);
164 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
166 // A lookup texture is generated and pass to shader as sampler
167 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
169 application.SendNotification();
170 application.Render(0);
175 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
177 ToolkitTestApplication application;
178 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
180 RendererFactory factory = RendererFactory::Get();
181 DALI_TEST_CHECK( factory );
183 Property::Map propertyMap;
184 propertyMap.Insert("renderer-type", "gradient-renderer");
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);
192 Property::Array stopOffsets;
193 stopOffsets.PushBack( 0.0f );
194 stopOffsets.PushBack( 1.f );
195 propertyMap.Insert("gradient-stop-offset", stopOffsets);
197 Property::Array stopColors;
198 stopColors.PushBack( Color::RED );
199 stopColors.PushBack( Color::GREEN );
200 propertyMap.Insert("gradient-stop-color", stopColors);
202 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
203 DALI_TEST_CHECK( controlRenderer );
205 Actor actor = Actor::New();
206 Vector2 size(200.f, 200.f);
208 Stage::GetCurrent().Add( actor );
209 controlRenderer.SetSize(size);
210 controlRenderer.SetOnStage( actor );
212 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
214 // A lookup texture is generated and pass to shader as sampler
215 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
217 TestGlAbstraction& gl = application.GetGlAbstraction();
218 application.SendNotification();
219 application.Render(0);
221 Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
222 alignMatrix.Invert();
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 );