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);
60 RendererFactory newFactory2(factory);
61 DALI_TEST_CHECK(factory == newFactory2);
66 int UtcDaliRendererFactoryGetColorRenderer(void)
68 ToolkitTestApplication application;
69 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer" );
71 RendererFactory factory = RendererFactory::Get();
72 DALI_TEST_CHECK( factory );
74 Property::Map propertyMap;
75 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
76 propertyMap.Insert("renderer-type", "color-renderer");
77 propertyMap.Insert("blend-color", testColor);
79 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
80 DALI_TEST_CHECK( controlRenderer );
82 Actor actor = Actor::New();
83 actor.SetSize(200.f, 200.f);
84 Stage::GetCurrent().Add( actor );
85 controlRenderer.SetSize(Vector2(200.f, 200.f));
86 controlRenderer.SetOnStage( actor );
88 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
90 TestGlAbstraction& gl = application.GetGlAbstraction();
92 application.SendNotification();
93 application.Render(0);
95 Vector4 actualValue(Vector4::ZERO);
96 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
97 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
99 Stage::GetCurrent().Remove( actor );
100 controlRenderer.SetOffStage( actor );
101 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
106 int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
108 ToolkitTestApplication application;
109 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
111 RendererFactory factory = RendererFactory::Get();
112 DALI_TEST_CHECK( factory );
114 Property::Map propertyMap;
115 propertyMap.Insert("renderer-type", "gradient-renderer");
117 Vector2 start(-1.f, -1.f);
118 Vector2 end(1.f, 1.f);
119 propertyMap.Insert("gradient-start-position", start);
120 propertyMap.Insert("gradient-end-position", end);
121 propertyMap.Insert("gradient-spread-method", "repeat");
123 Property::Array stopOffsets;
124 stopOffsets.PushBack( 0.2f );
125 stopOffsets.PushBack( 0.8f );
126 propertyMap.Insert("gradient-stop-offset", stopOffsets);
128 Property::Array stopColors;
129 stopColors.PushBack( Color::RED );
130 stopColors.PushBack( Color::GREEN );
131 propertyMap.Insert("gradient-stop-color", stopColors);
133 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
134 DALI_TEST_CHECK( controlRenderer );
136 Actor actor = Actor::New();
137 Vector2 size(200.f, 200.f);
139 Stage::GetCurrent().Add( actor );
140 controlRenderer.SetOnStage( actor );
141 controlRenderer.SetSize(size);
143 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
145 // A lookup texture is generated and pass to shader as sampler
146 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
148 application.SendNotification();
149 application.Render(0);
151 Stage::GetCurrent().Remove( actor );
152 controlRenderer.SetOffStage( actor );
153 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
158 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
160 ToolkitTestApplication application;
161 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
163 RendererFactory factory = RendererFactory::Get();
164 DALI_TEST_CHECK( factory );
166 Property::Map propertyMap;
167 propertyMap.Insert("renderer-type", "gradient-renderer");
169 Vector2 center(100.f, 100.f);
170 float radius = 100.f;
171 propertyMap.Insert("gradient-units", "user-space");
172 propertyMap.Insert("gradient-center", center);
173 propertyMap.Insert("gradient-radius", radius);
175 Property::Array stopOffsets;
176 stopOffsets.PushBack( 0.0f );
177 stopOffsets.PushBack( 1.f );
178 propertyMap.Insert("gradient-stop-offset", stopOffsets);
180 Property::Array stopColors;
181 stopColors.PushBack( Color::RED );
182 stopColors.PushBack( Color::GREEN );
183 propertyMap.Insert("gradient-stop-color", stopColors);
185 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
186 DALI_TEST_CHECK( controlRenderer );
188 Actor actor = Actor::New();
189 Vector2 size(200.f, 200.f);
191 Stage::GetCurrent().Add( actor );
192 controlRenderer.SetSize(size);
193 controlRenderer.SetOnStage( actor );
195 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
197 // A lookup texture is generated and pass to shader as sampler
198 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
200 TestGlAbstraction& gl = application.GetGlAbstraction();
201 application.SendNotification();
202 application.Render(0);
204 Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
205 alignMatrix.Invert();
207 Matrix3 actualValue( Matrix3::IDENTITY );
208 DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
209 DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
211 Stage::GetCurrent().Remove( actor );
212 controlRenderer.SetOffStage( actor );
213 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );