Updating code formatting
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-ShaderEffects.cpp
1 /*
2  * Copyright (c) 2022 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 <dali-toolkit-test-suite-utils.h>
19 #include <dali-toolkit/dali-toolkit.h>
20 #include <stdlib.h>
21 #include <iostream>
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   ;
114   DALI_TEST_CHECK(hintsValue->Get(hints));
115   DALI_TEST_CHECK(hints == Shader::Hint::OUTPUT_IS_TRANSPARENT);
116
117   Actor actor = Actor::New();
118   Toolkit::DissolveEffectSetCentralLine(actor, Vector2::ONE, Vector2::ONE, 0.0f);
119   DALI_TEST_CHECK(actor.GetPropertyIndex("uPercentage") != Property::INVALID_INDEX);
120
121   END_TEST;
122 }
123
124 int UtcDaliCreateDissolveEffectHighPrecision(void)
125 {
126   return UtcDaliCreateDissolveEffect(true);
127 }
128
129 int UtcDaliCreateDissolveEffectMediumPrecision(void)
130 {
131   return UtcDaliCreateDissolveEffect(false);
132 }
133
134 int UtcDaliCreateDissolveEffect(void)
135 {
136   ToolkitTestApplication application;
137
138   Property::Map effect = Toolkit::CreateDistanceFieldEffect();
139   DALI_TEST_CHECK(!effect.Empty());
140
141   Property::Value* customShaderValue = effect.Find(Toolkit::Visual::Property::SHADER);
142   DALI_TEST_CHECK(customShaderValue);
143
144   Property::Map customShader;
145   DALI_TEST_CHECK(customShaderValue->Get(customShader));
146
147   Property::Value* vertexShaderValue = customShader.Find(Visual::Shader::Property::VERTEX_SHADER);
148   DALI_TEST_CHECK(!vertexShaderValue);
149
150   Property::Value* fragmentShaderValue = customShader.Find(Visual::Shader::Property::FRAGMENT_SHADER);
151   DALI_TEST_CHECK(fragmentShaderValue);
152
153   std::string fragmentShader;
154   DALI_TEST_CHECK(fragmentShaderValue->Get(fragmentShader));
155   DALI_TEST_CHECK(!fragmentShader.empty());
156
157   Property::Value* gridXValue = customShader.Find(Visual::Shader::Property::SUBDIVIDE_GRID_X);
158   DALI_TEST_CHECK(!gridXValue);
159
160   Property::Value* hintsValue = customShader.Find(Visual::Shader::Property::HINTS);
161   DALI_TEST_CHECK(hintsValue);
162
163   int hints;
164   ;
165   DALI_TEST_CHECK(hintsValue->Get(hints));
166   DALI_TEST_CHECK(hints == Shader::Hint::OUTPUT_IS_TRANSPARENT);
167
168   END_TEST;
169 }
170
171 int UtcDaliCreateImageRegionEffect(void)
172 {
173   ToolkitTestApplication application;
174
175   Property::Map effect = Toolkit::CreateImageRegionEffect();
176   DALI_TEST_CHECK(!effect.Empty());
177
178   Property::Value* customShaderValue = effect.Find(Toolkit::Visual::Property::SHADER);
179   DALI_TEST_CHECK(customShaderValue);
180
181   Property::Map customShader;
182   DALI_TEST_CHECK(customShaderValue->Get(customShader));
183
184   Property::Value* vertexShaderValue = customShader.Find(Visual::Shader::Property::VERTEX_SHADER);
185   DALI_TEST_CHECK(vertexShaderValue);
186
187   std::string vertexShader;
188   DALI_TEST_CHECK(vertexShaderValue->Get(vertexShader));
189   DALI_TEST_CHECK(!vertexShader.empty());
190
191   Property::Value* fragmentShaderValue = customShader.Find(Visual::Shader::Property::FRAGMENT_SHADER);
192   DALI_TEST_CHECK(!fragmentShaderValue);
193
194   Property::Value* gridXValue = customShader.Find(Visual::Shader::Property::SUBDIVIDE_GRID_X);
195   DALI_TEST_CHECK(!gridXValue);
196
197   Property::Value* gridYValue = customShader.Find(Visual::Shader::Property::SUBDIVIDE_GRID_Y);
198   DALI_TEST_CHECK(!gridYValue);
199
200   Property::Value* hintsValue = customShader.Find(Visual::Shader::Property::HINTS);
201   DALI_TEST_CHECK(!hintsValue);
202
203   END_TEST;
204 }
205
206 int UtcDaliCreateMotionBlurEffect(void)
207 {
208   ToolkitTestApplication application;
209
210   Property::Map effect = Toolkit::CreateMotionBlurEffect();
211   DALI_TEST_CHECK(!effect.Empty());
212
213   Property::Value* customShaderValue = effect.Find(Toolkit::Visual::Property::SHADER);
214   DALI_TEST_CHECK(customShaderValue);
215
216   Property::Map customShader;
217   DALI_TEST_CHECK(customShaderValue->Get(customShader));
218
219   Property::Value* vertexShaderValue = customShader.Find(Visual::Shader::Property::VERTEX_SHADER);
220   DALI_TEST_CHECK(vertexShaderValue);
221
222   std::string vertexShader;
223   DALI_TEST_CHECK(vertexShaderValue->Get(vertexShader));
224   DALI_TEST_CHECK(!vertexShader.empty());
225
226   Property::Value* fragmentShaderValue = customShader.Find(Visual::Shader::Property::FRAGMENT_SHADER);
227   DALI_TEST_CHECK(fragmentShaderValue);
228
229   std::string fragmentShader;
230   DALI_TEST_CHECK(fragmentShaderValue->Get(fragmentShader));
231   DALI_TEST_CHECK(!fragmentShader.empty());
232
233   Property::Value* gridXValue = customShader.Find(Visual::Shader::Property::SUBDIVIDE_GRID_X);
234   DALI_TEST_CHECK(gridXValue);
235
236   int gridX = 0;
237   DALI_TEST_CHECK(gridXValue->Get(gridX));
238   DALI_TEST_CHECK(gridX > 1);
239
240   Property::Value* gridYValue = customShader.Find(Visual::Shader::Property::SUBDIVIDE_GRID_Y);
241   DALI_TEST_CHECK(gridYValue);
242
243   int gridY = 0;
244   DALI_TEST_CHECK(gridYValue->Get(gridY));
245   DALI_TEST_CHECK(gridY > 1);
246
247   Property::Value* hintsValue = customShader.Find(Visual::Shader::Property::HINTS);
248   DALI_TEST_CHECK(hintsValue);
249
250   int hints;
251   ;
252   DALI_TEST_CHECK(hintsValue->Get(hints));
253   DALI_TEST_CHECK(hints == Shader::Hint::OUTPUT_IS_TRANSPARENT);
254
255   unsigned int sampleCount(4);
256   Actor        actor = Actor::New();
257   Toolkit::SetMotionBlurProperties(actor, sampleCount);
258   DALI_TEST_CHECK(actor.GetPropertyIndex("uBlurTexCoordScale") != Property::INVALID_INDEX);
259   DALI_TEST_CHECK(actor.GetPropertyIndex("uGeometryStretchFactor") != Property::INVALID_INDEX);
260   DALI_TEST_CHECK(actor.GetPropertyIndex("uSpeedScalingFactor") != Property::INVALID_INDEX);
261   DALI_TEST_CHECK(actor.GetPropertyIndex("uObjectFadeStart") != Property::INVALID_INDEX);
262   DALI_TEST_CHECK(actor.GetPropertyIndex("uObjectFadeEnd") != Property::INVALID_INDEX);
263   DALI_TEST_CHECK(actor.GetPropertyIndex("uAlphaScale") != Property::INVALID_INDEX);
264   DALI_TEST_CHECK(actor.GetPropertyIndex("uNumSamples") != Property::INVALID_INDEX);
265   DALI_TEST_CHECK(actor.GetPropertyIndex("uModelLastFrame") != Property::INVALID_INDEX);
266
267   END_TEST;
268 }
269
270 int UtcDaliCreateMotionStretchEffect(void)
271 {
272   ToolkitTestApplication application;
273
274   Property::Map effect = Toolkit::CreateMotionStretchEffect();
275   DALI_TEST_CHECK(!effect.Empty());
276
277   Property::Value* customShaderValue = effect.Find(Toolkit::Visual::Property::SHADER);
278   DALI_TEST_CHECK(customShaderValue);
279
280   Property::Map customShader;
281   DALI_TEST_CHECK(customShaderValue->Get(customShader));
282
283   Property::Value* vertexShaderValue = customShader.Find(Visual::Shader::Property::VERTEX_SHADER);
284   DALI_TEST_CHECK(vertexShaderValue);
285
286   std::string vertexShader;
287   DALI_TEST_CHECK(vertexShaderValue->Get(vertexShader));
288   DALI_TEST_CHECK(!vertexShader.empty());
289
290   Property::Value* fragmentShaderValue = customShader.Find(Visual::Shader::Property::FRAGMENT_SHADER);
291   DALI_TEST_CHECK(fragmentShaderValue);
292
293   std::string fragmentShader;
294   DALI_TEST_CHECK(fragmentShaderValue->Get(fragmentShader));
295   DALI_TEST_CHECK(!fragmentShader.empty());
296
297   Property::Value* gridXValue = customShader.Find(Visual::Shader::Property::SUBDIVIDE_GRID_X);
298   DALI_TEST_CHECK(gridXValue);
299
300   int gridX = 0;
301   DALI_TEST_CHECK(gridXValue->Get(gridX));
302   DALI_TEST_CHECK(gridX > 1);
303
304   Property::Value* gridYValue = customShader.Find(Visual::Shader::Property::SUBDIVIDE_GRID_Y);
305   DALI_TEST_CHECK(gridYValue);
306
307   int gridY = 0;
308   DALI_TEST_CHECK(gridYValue->Get(gridY));
309   DALI_TEST_CHECK(gridY > 1);
310
311   Property::Value* hintsValue = customShader.Find(Visual::Shader::Property::HINTS);
312   DALI_TEST_CHECK(hintsValue);
313
314   int hints;
315   ;
316   DALI_TEST_CHECK(hintsValue->Get(hints));
317   DALI_TEST_CHECK(hints == Shader::Hint::OUTPUT_IS_TRANSPARENT);
318
319   Actor actor = Actor::New();
320   Toolkit::SetMotionStretchProperties(actor);
321   DALI_TEST_CHECK(actor.GetPropertyIndex("uGeometryStretchFactor") != Property::INVALID_INDEX);
322   DALI_TEST_CHECK(actor.GetPropertyIndex("uSpeedScalingFactor") != Property::INVALID_INDEX);
323   DALI_TEST_CHECK(actor.GetPropertyIndex("uObjectFadeStart") != Property::INVALID_INDEX);
324   DALI_TEST_CHECK(actor.GetPropertyIndex("uObjectFadeEnd") != Property::INVALID_INDEX);
325   DALI_TEST_CHECK(actor.GetPropertyIndex("uAlphaScale") != Property::INVALID_INDEX);
326   DALI_TEST_CHECK(actor.GetPropertyIndex("uModelLastFrame") != Property::INVALID_INDEX);
327
328   END_TEST;
329 }