[dali_2.0.15] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-ShaderEffects.cpp
1 /*
2  * Copyright (c) 2017 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
18 #include <iostream>
19 #include <stdlib.h>
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
22
23 #include <dali-toolkit/devel-api/shader-effects/alpha-discard-effect.h>
24 #include <dali-toolkit/devel-api/shader-effects/dissolve-effect.h>
25 #include <dali-toolkit/devel-api/shader-effects/distance-field-effect.h>
26 #include <dali-toolkit/devel-api/shader-effects/image-region-effect.h>
27 #include <dali-toolkit/devel-api/shader-effects/motion-blur-effect.h>
28 #include <dali-toolkit/devel-api/shader-effects/motion-stretch-effect.h>
29
30 using namespace Dali;
31 using namespace Dali::Toolkit;
32
33 int UtcDaliCreateAlphaDiscardEffect(void)
34 {
35   ToolkitTestApplication application;
36
37   Property::Map effect = Toolkit::CreateAlphaDiscardEffect();
38   DALI_TEST_CHECK( !effect.Empty() );
39
40   Property::Value* customShaderValue = effect.Find( Toolkit::Visual::Property::SHADER );
41   DALI_TEST_CHECK( customShaderValue );
42
43   Property::Map customShader;
44   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
45
46   Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
47   DALI_TEST_CHECK( !vertexShaderValue );
48
49   Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
50   DALI_TEST_CHECK( fragmentShaderValue );
51
52   std::string fragmentShader;
53   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
54   DALI_TEST_CHECK( !fragmentShader.empty() );
55
56   Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
57   DALI_TEST_CHECK( !gridXValue );
58
59   Property::Value* gridYValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_Y );
60   DALI_TEST_CHECK( !gridYValue );
61
62   Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
63   DALI_TEST_CHECK( !hintsValue );
64
65   END_TEST;
66 }
67
68 int UtcDaliCreateDissolveEffect( bool highPrecision )
69 {
70   ToolkitTestApplication application;
71
72   Property::Map effect = Toolkit::CreateDissolveEffect( highPrecision );
73   DALI_TEST_CHECK( !effect.Empty() );
74
75   Property::Value* customShaderValue = effect.Find( Toolkit::Visual::Property::SHADER );
76   DALI_TEST_CHECK( customShaderValue );
77
78   Property::Map customShader;
79   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
80
81   Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
82   DALI_TEST_CHECK( vertexShaderValue );
83
84   std::string vertexShader;
85   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
86   DALI_TEST_CHECK( !vertexShader.empty() );
87
88   Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
89   DALI_TEST_CHECK( fragmentShaderValue );
90
91   std::string fragmentShader;
92   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
93   DALI_TEST_CHECK( !fragmentShader.empty() );
94
95   Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
96   DALI_TEST_CHECK( gridXValue );
97
98   int gridX = 0;
99   DALI_TEST_CHECK( gridXValue->Get( gridX ) );
100   DALI_TEST_CHECK( gridX > 1 );
101
102   Property::Value* gridYValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_Y );
103   DALI_TEST_CHECK( gridYValue );
104
105   int gridY = 0;
106   DALI_TEST_CHECK( gridYValue->Get( gridY ) );
107   DALI_TEST_CHECK( gridY > 1 );
108
109   Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
110   DALI_TEST_CHECK( hintsValue );
111
112   int hints;;
113   DALI_TEST_CHECK( hintsValue->Get( hints ) );
114   DALI_TEST_CHECK( hints == Shader::Hint::OUTPUT_IS_TRANSPARENT );
115
116   Actor actor = Actor::New();
117   Toolkit::DissolveEffectSetCentralLine( actor, Vector2::ONE, Vector2::ONE, 0.0f );
118   DALI_TEST_CHECK( actor.GetPropertyIndex( "uPercentage" ) != Property::INVALID_INDEX );
119
120   END_TEST;
121 }
122
123 int UtcDaliCreateDissolveEffectHighPrecision(void)
124 {
125   return UtcDaliCreateDissolveEffect(true);
126 }
127
128 int UtcDaliCreateDissolveEffectMediumPrecision(void)
129 {
130   return UtcDaliCreateDissolveEffect(false);
131 }
132
133 int UtcDaliCreateDissolveEffect(void)
134 {
135   ToolkitTestApplication application;
136
137   Property::Map effect = Toolkit::CreateDistanceFieldEffect();
138   DALI_TEST_CHECK( !effect.Empty() );
139
140   Property::Value* customShaderValue = effect.Find( Toolkit::Visual::Property::SHADER );
141   DALI_TEST_CHECK( customShaderValue );
142
143   Property::Map customShader;
144   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
145
146   Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
147   DALI_TEST_CHECK( !vertexShaderValue );
148
149   Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
150   DALI_TEST_CHECK( fragmentShaderValue );
151
152   std::string fragmentShader;
153   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
154   DALI_TEST_CHECK( !fragmentShader.empty() );
155
156   Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
157   DALI_TEST_CHECK( !gridXValue );
158
159   Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
160   DALI_TEST_CHECK( hintsValue );
161
162   int hints;;
163   DALI_TEST_CHECK( hintsValue->Get( hints ) );
164   DALI_TEST_CHECK( hints == Shader::Hint::OUTPUT_IS_TRANSPARENT );
165
166   END_TEST;
167 }
168
169 int UtcDaliCreateImageRegionEffect(void)
170 {
171   ToolkitTestApplication application;
172
173   Property::Map effect = Toolkit::CreateImageRegionEffect();
174   DALI_TEST_CHECK( !effect.Empty() );
175
176   Property::Value* customShaderValue = effect.Find( Toolkit::Visual::Property::SHADER );
177   DALI_TEST_CHECK( customShaderValue );
178
179   Property::Map customShader;
180   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
181
182   Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
183   DALI_TEST_CHECK( vertexShaderValue );
184
185   std::string vertexShader;
186   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
187   DALI_TEST_CHECK( !vertexShader.empty() );
188
189   Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
190   DALI_TEST_CHECK( !fragmentShaderValue );
191
192   Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
193   DALI_TEST_CHECK( !gridXValue );
194
195   Property::Value* gridYValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_Y );
196   DALI_TEST_CHECK( !gridYValue );
197
198   Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
199   DALI_TEST_CHECK( !hintsValue );
200
201   END_TEST;
202 }
203
204 int UtcDaliCreateMotionBlurEffect(void)
205 {
206   ToolkitTestApplication application;
207
208   Property::Map effect = Toolkit::CreateMotionBlurEffect();
209   DALI_TEST_CHECK( !effect.Empty() );
210
211   Property::Value* customShaderValue = effect.Find( Toolkit::Visual::Property::SHADER );
212   DALI_TEST_CHECK( customShaderValue );
213
214   Property::Map customShader;
215   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
216
217   Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
218   DALI_TEST_CHECK( vertexShaderValue );
219
220   std::string vertexShader;
221   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
222   DALI_TEST_CHECK( !vertexShader.empty() );
223
224   Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
225   DALI_TEST_CHECK( fragmentShaderValue );
226
227   std::string fragmentShader;
228   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
229   DALI_TEST_CHECK( !fragmentShader.empty() );
230
231   Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
232   DALI_TEST_CHECK( gridXValue );
233
234   int gridX = 0;
235   DALI_TEST_CHECK( gridXValue->Get( gridX ) );
236   DALI_TEST_CHECK( gridX > 1 );
237
238   Property::Value* gridYValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_Y );
239   DALI_TEST_CHECK( gridYValue );
240
241   int gridY = 0;
242   DALI_TEST_CHECK( gridYValue->Get( gridY ) );
243   DALI_TEST_CHECK( gridY > 1 );
244
245   Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
246   DALI_TEST_CHECK( hintsValue );
247
248   int hints;;
249   DALI_TEST_CHECK( hintsValue->Get( hints ) );
250   DALI_TEST_CHECK( hints == Shader::Hint::OUTPUT_IS_TRANSPARENT );
251
252   unsigned int sampleCount( 4 );
253   Actor actor = Actor::New();
254   Toolkit::SetMotionBlurProperties( actor, sampleCount );
255   DALI_TEST_CHECK( actor.GetPropertyIndex( "uBlurTexCoordScale" ) != Property::INVALID_INDEX );
256   DALI_TEST_CHECK( actor.GetPropertyIndex( "uGeometryStretchFactor" ) != Property::INVALID_INDEX );
257   DALI_TEST_CHECK( actor.GetPropertyIndex( "uSpeedScalingFactor" ) != Property::INVALID_INDEX );
258   DALI_TEST_CHECK( actor.GetPropertyIndex( "uObjectFadeStart" ) != Property::INVALID_INDEX );
259   DALI_TEST_CHECK( actor.GetPropertyIndex( "uObjectFadeEnd" ) != Property::INVALID_INDEX );
260   DALI_TEST_CHECK( actor.GetPropertyIndex( "uAlphaScale" ) != Property::INVALID_INDEX );
261   DALI_TEST_CHECK( actor.GetPropertyIndex( "uNumSamples" ) != Property::INVALID_INDEX );
262   DALI_TEST_CHECK( actor.GetPropertyIndex( "uModelLastFrame" ) != Property::INVALID_INDEX );
263
264   END_TEST;
265 }
266
267 int UtcDaliCreateMotionStretchEffect(void)
268 {
269   ToolkitTestApplication application;
270
271   Property::Map effect = Toolkit::CreateMotionStretchEffect();
272   DALI_TEST_CHECK( !effect.Empty() );
273
274   Property::Value* customShaderValue = effect.Find( Toolkit::Visual::Property::SHADER );
275   DALI_TEST_CHECK( customShaderValue );
276
277   Property::Map customShader;
278   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
279
280   Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
281   DALI_TEST_CHECK( vertexShaderValue );
282
283   std::string vertexShader;
284   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
285   DALI_TEST_CHECK( !vertexShader.empty() );
286
287   Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
288   DALI_TEST_CHECK( fragmentShaderValue );
289
290   std::string fragmentShader;
291   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
292   DALI_TEST_CHECK( !fragmentShader.empty() );
293
294   Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
295   DALI_TEST_CHECK( gridXValue );
296
297   int gridX = 0;
298   DALI_TEST_CHECK( gridXValue->Get( gridX ) );
299   DALI_TEST_CHECK( gridX > 1 );
300
301   Property::Value* gridYValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_Y );
302   DALI_TEST_CHECK( gridYValue );
303
304   int gridY = 0;
305   DALI_TEST_CHECK( gridYValue->Get( gridY ) );
306   DALI_TEST_CHECK( gridY > 1 );
307
308   Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
309   DALI_TEST_CHECK( hintsValue );
310
311   int hints;;
312   DALI_TEST_CHECK( hintsValue->Get( hints ) );
313   DALI_TEST_CHECK( hints == Shader::Hint::OUTPUT_IS_TRANSPARENT );
314
315   Actor actor = Actor::New();
316   Toolkit::SetMotionStretchProperties( actor );
317   DALI_TEST_CHECK( actor.GetPropertyIndex( "uGeometryStretchFactor" ) != Property::INVALID_INDEX );
318   DALI_TEST_CHECK( actor.GetPropertyIndex( "uSpeedScalingFactor" ) != Property::INVALID_INDEX );
319   DALI_TEST_CHECK( actor.GetPropertyIndex( "uObjectFadeStart" ) != Property::INVALID_INDEX );
320   DALI_TEST_CHECK( actor.GetPropertyIndex( "uObjectFadeEnd" ) != Property::INVALID_INDEX );
321   DALI_TEST_CHECK( actor.GetPropertyIndex( "uAlphaScale" ) != Property::INVALID_INDEX );
322   DALI_TEST_CHECK( actor.GetPropertyIndex( "uModelLastFrame" ) != Property::INVALID_INDEX );
323
324   END_TEST;
325 }