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