[dali_1.1.8] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-ShaderEffects.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
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/bendy-effect.h>
25 #include <dali-toolkit/devel-api/shader-effects/blind-effect.h>
26 #include <dali-toolkit/devel-api/shader-effects/bouncing-effect.h>
27 #include <dali-toolkit/devel-api/shader-effects/carousel-effect.h>
28 #include <dali-toolkit/devel-api/shader-effects/displacement-effect.h>
29 #include <dali-toolkit/devel-api/shader-effects/dissolve-effect.h>
30 #include <dali-toolkit/devel-api/shader-effects/dissolve-local-effect.h>
31 #include <dali-toolkit/devel-api/shader-effects/distance-field-effect.h>
32 #include <dali-toolkit/devel-api/shader-effects/image-region-effect.h>
33 #include <dali-toolkit/devel-api/shader-effects/iris-effect.h>
34 #include <dali-toolkit/devel-api/shader-effects/mask-effect.h>
35 #include <dali-toolkit/devel-api/shader-effects/mirror-effect.h>
36 #include <dali-toolkit/devel-api/shader-effects/motion-blur-effect.h>
37 #include <dali-toolkit/devel-api/shader-effects/motion-stretch-effect.h>
38 #include <dali-toolkit/devel-api/shader-effects/nine-patch-mask-effect.h>
39 #include <dali-toolkit/devel-api/shader-effects/overlay-effect.h>
40 #include <dali-toolkit/devel-api/shader-effects/quadratic-bezier.h>
41 #include <dali-toolkit/devel-api/shader-effects/ripple-effect.h>
42 #include <dali-toolkit/devel-api/shader-effects/ripple2d-effect.h>
43 #include <dali-toolkit/devel-api/shader-effects/shear-effect.h>
44 #include <dali-toolkit/devel-api/shader-effects/soft-button-effect.h>
45 #include <dali-toolkit/devel-api/shader-effects/spot-effect.h>
46 #include <dali-toolkit/devel-api/shader-effects/square-dissolve-effect.h>
47 #include <dali-toolkit/devel-api/shader-effects/swirl-effect.h>
48
49 using namespace Dali;
50
51 int UtcDaliCreateAlphaDiscardEffect(void)
52 {
53   ToolkitTestApplication application;
54
55   ShaderEffect effect = Toolkit::CreateAlphaDiscardEffect();
56   DALI_TEST_CHECK( effect );
57
58   END_TEST;
59 }
60
61 int UtcDaliCreateBendyEffect(void)
62 {
63   ToolkitTestApplication application;
64
65   ShaderEffect effect = Toolkit::CreateBendyEffect();
66   DALI_TEST_CHECK( effect );
67
68   END_TEST;
69 }
70
71 int UtcDaliCreateBlindEffect(void)
72 {
73   ToolkitTestApplication application;
74
75   ShaderEffect effect = Toolkit::CreateBlindEffect();
76   DALI_TEST_CHECK( effect );
77
78   END_TEST;
79 }
80
81 int UtcDaliCreateBouncingEffect(void)
82 {
83   ToolkitTestApplication application;
84
85   Vector4 color(1.0f,1.0f,1.0f,1.0f);
86
87   ShaderEffect effect = Toolkit::CreateBouncingEffect(color);
88   DALI_TEST_CHECK( effect );
89
90   Property::Value value = effect.GetProperty( effect.GetPropertyIndex("uAssignedColor"));
91   DALI_TEST_EQUALS( value.Get<Vector4>(), color, TEST_LOCATION );
92
93   END_TEST;
94 }
95
96 int UtcDaliCreateCarouselEffect(void)
97 {
98   ToolkitTestApplication application;
99
100   ShaderEffect effect = Toolkit::CreateCarouselEffect();
101   DALI_TEST_CHECK( effect );
102
103   END_TEST;
104 }
105
106 int UtcDaliCreateDisplacementEffectDisplaced(void)
107 {
108   ToolkitTestApplication application;
109
110   ShaderEffect effect = Toolkit::CreateDisplacementEffect(Toolkit::DISPLACEMENT_EFFECT_DISPLACED);
111   DALI_TEST_CHECK( effect );
112
113   END_TEST;
114 }
115
116 int UtcDaliCreateDisplacementEffectFixed(void)
117 {
118   ToolkitTestApplication application;
119
120   ShaderEffect effect = Toolkit::CreateDisplacementEffect(Toolkit::DISPLACEMENT_EFFECT_FIXED);
121   DALI_TEST_CHECK( effect );
122
123   END_TEST;
124 }
125
126 int UtcDaliCreateDissolveEffect( bool highPrecision )
127 {
128   ToolkitTestApplication application;
129
130   Property::Map effect = Toolkit::CreateDissolveEffect( highPrecision );
131   DALI_TEST_CHECK( !effect.Empty() );
132
133   Property::Value* customShaderValue = effect.Find( "shader" );
134   DALI_TEST_CHECK( customShaderValue );
135
136   Property::Map customShader;
137   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
138
139   Property::Value* vertexShaderValue = customShader.Find( "vertex-shader" );
140   DALI_TEST_CHECK( vertexShaderValue );
141
142   std::string vertexShader;
143   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
144   DALI_TEST_CHECK( !vertexShader.empty() );
145
146   Property::Value* fragmentShaderValue = customShader.Find( "fragment-shader" );
147   DALI_TEST_CHECK( fragmentShaderValue );
148
149   std::string fragmentShader;
150   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
151   DALI_TEST_CHECK( !fragmentShader.empty() );
152
153   Property::Value* gridXValue = customShader.Find( "subdivide-grid-x" );
154   DALI_TEST_CHECK( gridXValue );
155
156   int gridX = 0;
157   DALI_TEST_CHECK( gridXValue->Get( gridX ) );
158   DALI_TEST_CHECK( gridX > 1 );
159
160   Property::Value* gridYValue = customShader.Find( "subdivide-grid-y" );
161   DALI_TEST_CHECK( gridYValue );
162
163   int gridY = 0;
164   DALI_TEST_CHECK( gridYValue->Get( gridY ) );
165   DALI_TEST_CHECK( gridY > 1 );
166
167   Property::Value* hintsValue = customShader.Find( "hints" );
168   DALI_TEST_CHECK( hintsValue );
169
170   std::string hints;
171   DALI_TEST_CHECK( hintsValue->Get( hints ) );
172   DALI_TEST_CHECK( hints == "output-is-transparent" );
173
174   Actor actor = Actor::New();
175   Toolkit::DissolveEffectSetCentralLine( actor, Vector2::ONE, Vector2::ONE, 0.0f );
176   DALI_TEST_CHECK( actor.GetPropertyIndex( "uPercentage" ) != Property::INVALID_INDEX );
177
178   END_TEST;
179 }
180
181 int UtcDaliCreateDissolveEffectHighPrecision(void)
182 {
183   return UtcDaliCreateDissolveEffect(true);
184 }
185
186 int UtcDaliCreateDissolveEffectMediumPrecision(void)
187 {
188   return UtcDaliCreateDissolveEffect(false);
189 }
190
191 int UtcDaliCreateDissolveLocalEffect(void)
192 {
193   ToolkitTestApplication application;
194
195   ShaderEffect effect = Toolkit::CreateDissolveLocalEffect(0);
196   DALI_TEST_CHECK( effect );
197
198   END_TEST;
199 }
200
201 int UtcDaliCreateDissolveEffect(void)
202 {
203   ToolkitTestApplication application;
204
205   Property::Map effect = Toolkit::CreateDistanceFieldEffect();
206   DALI_TEST_CHECK( !effect.Empty() );
207
208   Property::Value* customShaderValue = effect.Find( "shader" );
209   DALI_TEST_CHECK( customShaderValue );
210
211   Property::Map customShader;
212   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
213
214   Property::Value* vertexShaderValue = customShader.Find( "vertex-shader" );
215   DALI_TEST_CHECK( !vertexShaderValue );
216
217   Property::Value* fragmentShaderValue = customShader.Find( "fragment-shader" );
218   DALI_TEST_CHECK( fragmentShaderValue );
219
220   std::string fragmentShader;
221   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
222   DALI_TEST_CHECK( !fragmentShader.empty() );
223
224   Property::Value* gridXValue = customShader.Find( "subdivide-grid-x" );
225   DALI_TEST_CHECK( !gridXValue );
226
227   Property::Value* hintsValue = customShader.Find( "hints" );
228   DALI_TEST_CHECK( hintsValue );
229
230   std::string hints;
231   DALI_TEST_CHECK( hintsValue->Get( hints ) );
232   DALI_TEST_CHECK( hints == "output-is-transparent" );
233
234   END_TEST;
235 }
236
237 int UtcDaliCreateImageRegionEffect(void)
238 {
239   ToolkitTestApplication application;
240
241   ShaderEffect effect = Toolkit::CreateImageRegionEffect();
242   DALI_TEST_CHECK( effect );
243
244   END_TEST;
245 }
246
247 int UtcDaliCreateIrisEffect(void)
248 {
249   ToolkitTestApplication application;
250
251   ShaderEffect effect = Toolkit::CreateIrisEffect();
252   DALI_TEST_CHECK( effect );
253
254   END_TEST;
255 }
256
257 int UtcDaliCreateMaskEffect(void)
258 {
259   ToolkitTestApplication application;
260
261   BufferImage image = CreateBufferImage();
262   ShaderEffect effect = Toolkit::CreateMaskEffect(image);
263   DALI_TEST_CHECK( effect );
264
265   END_TEST;
266 }
267
268 int UtcDaliCreateMirrorEffect(void)
269 {
270   ToolkitTestApplication application;
271
272   BufferImage image = CreateBufferImage();
273   ShaderEffect effect = Toolkit::CreateMirrorEffect();
274   DALI_TEST_CHECK( effect );
275
276   END_TEST;
277 }
278
279 int UtcDaliCreateMotionBlurEffect(void)
280 {
281   ToolkitTestApplication application;
282
283   Property::Map effect = Toolkit::CreateMotionBlurEffect();
284   DALI_TEST_CHECK( !effect.Empty() );
285
286   Property::Value* customShaderValue = effect.Find( "shader" );
287   DALI_TEST_CHECK( customShaderValue );
288
289   Property::Map customShader;
290   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
291
292   Property::Value* vertexShaderValue = customShader.Find( "vertex-shader" );
293   DALI_TEST_CHECK( vertexShaderValue );
294
295   std::string vertexShader;
296   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
297   DALI_TEST_CHECK( !vertexShader.empty() );
298
299   Property::Value* fragmentShaderValue = customShader.Find( "fragment-shader" );
300   DALI_TEST_CHECK( fragmentShaderValue );
301
302   std::string fragmentShader;
303   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
304   DALI_TEST_CHECK( !fragmentShader.empty() );
305
306   Property::Value* gridXValue = customShader.Find( "subdivide-grid-x" );
307   DALI_TEST_CHECK( gridXValue );
308
309   int gridX = 0;
310   DALI_TEST_CHECK( gridXValue->Get( gridX ) );
311   DALI_TEST_CHECK( gridX > 1 );
312
313   Property::Value* gridYValue = customShader.Find( "subdivide-grid-y" );
314   DALI_TEST_CHECK( gridYValue );
315
316   int gridY = 0;
317   DALI_TEST_CHECK( gridYValue->Get( gridY ) );
318   DALI_TEST_CHECK( gridY > 1 );
319
320   Property::Value* hintsValue = customShader.Find( "hints" );
321   DALI_TEST_CHECK( hintsValue );
322
323   std::string hints;
324   DALI_TEST_CHECK( hintsValue->Get( hints ) );
325   DALI_TEST_CHECK( hints == "output-is-transparent" );
326
327   unsigned int sampleCount( 4 );
328   Actor actor = Actor::New();
329   Toolkit::SetMotionBlurProperties( actor, sampleCount );
330   DALI_TEST_CHECK( actor.GetPropertyIndex( "uBlurTexCoordScale" ) != Property::INVALID_INDEX );
331   DALI_TEST_CHECK( actor.GetPropertyIndex( "uGeometryStretchFactor" ) != Property::INVALID_INDEX );
332   DALI_TEST_CHECK( actor.GetPropertyIndex( "uSpeedScalingFactor" ) != Property::INVALID_INDEX );
333   DALI_TEST_CHECK( actor.GetPropertyIndex( "uObjectFadeStart" ) != Property::INVALID_INDEX );
334   DALI_TEST_CHECK( actor.GetPropertyIndex( "uObjectFadeEnd" ) != Property::INVALID_INDEX );
335   DALI_TEST_CHECK( actor.GetPropertyIndex( "uAlphaScale" ) != Property::INVALID_INDEX );
336   DALI_TEST_CHECK( actor.GetPropertyIndex( "uNumSamples" ) != Property::INVALID_INDEX );
337   DALI_TEST_CHECK( actor.GetPropertyIndex( "uModelLastFrame" ) != Property::INVALID_INDEX );
338
339   END_TEST;
340 }
341
342 int UtcDaliCreateMotionStretchEffect(void)
343 {
344   ToolkitTestApplication application;
345
346   Property::Map effect = Toolkit::CreateMotionStretchEffect();
347   DALI_TEST_CHECK( !effect.Empty() );
348
349   Property::Value* customShaderValue = effect.Find( "shader" );
350   DALI_TEST_CHECK( customShaderValue );
351
352   Property::Map customShader;
353   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
354
355   Property::Value* vertexShaderValue = customShader.Find( "vertex-shader" );
356   DALI_TEST_CHECK( vertexShaderValue );
357
358   std::string vertexShader;
359   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
360   DALI_TEST_CHECK( !vertexShader.empty() );
361
362   Property::Value* fragmentShaderValue = customShader.Find( "fragment-shader" );
363   DALI_TEST_CHECK( fragmentShaderValue );
364
365   std::string fragmentShader;
366   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
367   DALI_TEST_CHECK( !fragmentShader.empty() );
368
369   Property::Value* gridXValue = customShader.Find( "subdivide-grid-x" );
370   DALI_TEST_CHECK( gridXValue );
371
372   int gridX = 0;
373   DALI_TEST_CHECK( gridXValue->Get( gridX ) );
374   DALI_TEST_CHECK( gridX > 1 );
375
376   Property::Value* gridYValue = customShader.Find( "subdivide-grid-y" );
377   DALI_TEST_CHECK( gridYValue );
378
379   int gridY = 0;
380   DALI_TEST_CHECK( gridYValue->Get( gridY ) );
381   DALI_TEST_CHECK( gridY > 1 );
382
383   Property::Value* hintsValue = customShader.Find( "hints" );
384   DALI_TEST_CHECK( hintsValue );
385
386   std::string hints;
387   DALI_TEST_CHECK( hintsValue->Get( hints ) );
388   DALI_TEST_CHECK( hints == "output-is-transparent" );
389
390   Actor actor = Actor::New();
391   Toolkit::SetMotionStretchProperties( actor );
392   DALI_TEST_CHECK( actor.GetPropertyIndex( "uGeometryStretchFactor" ) != Property::INVALID_INDEX );
393   DALI_TEST_CHECK( actor.GetPropertyIndex( "uSpeedScalingFactor" ) != Property::INVALID_INDEX );
394   DALI_TEST_CHECK( actor.GetPropertyIndex( "uObjectFadeStart" ) != Property::INVALID_INDEX );
395   DALI_TEST_CHECK( actor.GetPropertyIndex( "uObjectFadeEnd" ) != Property::INVALID_INDEX );
396   DALI_TEST_CHECK( actor.GetPropertyIndex( "uAlphaScale" ) != Property::INVALID_INDEX );
397   DALI_TEST_CHECK( actor.GetPropertyIndex( "uModelLastFrame" ) != Property::INVALID_INDEX );
398
399   END_TEST;
400 }
401
402 int UtcDaliCreateOverlayEffect(void)
403 {
404   ToolkitTestApplication application;
405
406   BufferImage image = CreateBufferImage();
407   ShaderEffect effect = Toolkit::CreateOverlayEffect(image);
408   DALI_TEST_CHECK( effect );
409
410   END_TEST;
411 }
412
413 int UtcDaliCreateQuadraticBezier(void)
414 {
415   ToolkitTestApplication application;
416
417   ShaderEffect effect = Toolkit::CreateQuadraticBezier(3,false);
418   DALI_TEST_CHECK( effect );
419
420   END_TEST;
421 }
422
423 int UtcDaliCreateQuadraticBezierFilled(void)
424 {
425   ToolkitTestApplication application;
426
427   ShaderEffect effect = Toolkit::CreateQuadraticBezier(3,true);
428   DALI_TEST_CHECK( effect );
429
430   END_TEST;
431 }
432
433 int UtcDaliCreateRipple2DEffect(void)
434 {
435   ToolkitTestApplication application;
436
437   ShaderEffect effect = Toolkit::CreateRipple2DEffect();
438   DALI_TEST_CHECK( effect );
439
440   END_TEST;
441 }
442
443 int UtcDaliCreateRippleEffect(void)
444 {
445   ToolkitTestApplication application;
446
447   ShaderEffect effect = Toolkit::CreateRippleEffect();
448   DALI_TEST_CHECK( effect );
449
450   END_TEST;
451 }
452
453 int UtcDaliCreateShearEffect(void)
454 {
455   ToolkitTestApplication application;
456
457   ShaderEffect effect = Toolkit::CreateShearEffect();
458   DALI_TEST_CHECK( effect );
459
460   END_TEST;
461 }
462
463 int UtcDaliSoftButtonEffectElliptical(void)
464 {
465   ToolkitTestApplication application;
466
467   ShaderEffect effect = Toolkit::CreateSoftButtonEffect(Toolkit::SOFT_BUTTON_ELLIPTICAL);
468   DALI_TEST_CHECK( effect );
469
470   END_TEST;
471 }
472
473 int UtcDaliSoftButtonEffectRectangular(void)
474 {
475   ToolkitTestApplication application;
476
477   ShaderEffect effect = Toolkit::CreateSoftButtonEffect(Toolkit::SOFT_BUTTON_RECTANGULAR);
478   DALI_TEST_CHECK( effect );
479
480   END_TEST;
481 }
482
483 int UtcDaliSoftButtonEffectFixed(void)
484 {
485   ToolkitTestApplication application;
486
487   ShaderEffect effect = Toolkit::CreateSoftButtonEffect(Toolkit::SOFT_BUTTON_FIXED);
488   DALI_TEST_CHECK( effect );
489
490   END_TEST;
491 }
492
493 int UtcDaliCreateSpotEffect(void)
494 {
495   ToolkitTestApplication application;
496
497   ShaderEffect effect = Toolkit::CreateSpotEffect();
498   DALI_TEST_CHECK( effect );
499
500   END_TEST;
501 }
502
503 int UtcDaliCreateSquareDissolveEffect(void)
504 {
505   ToolkitTestApplication application;
506
507   ShaderEffect effect = Toolkit::CreateSquareDissolveEffect();
508   DALI_TEST_CHECK( effect );
509
510   END_TEST;
511 }
512
513 int UtcDaliSwirlEffect(void)
514 {
515   ToolkitTestApplication application;
516
517   ShaderEffect effect = Toolkit::CreateSwirlEffect(false);
518   DALI_TEST_CHECK( effect );
519
520   END_TEST;
521 }
522
523 int UtcDaliSwirlEffectWrap(void)
524 {
525   ToolkitTestApplication application;
526
527   ShaderEffect effect = Toolkit::CreateSwirlEffect(true);
528   DALI_TEST_CHECK( effect );
529
530   END_TEST;
531 }