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