Fix npatch visual auxiliary bug
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-GlViewDirectRendering.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 <unistd.h>
19 #include <thread>
20
21 #include <dali-toolkit-test-suite-utils.h>
22
23 #include <dali-toolkit/dali-toolkit.h>
24 #include <dali-toolkit/public-api/controls/gl-view/gl-view.h>
25 #include <dali/devel-api/adaptor-framework/window-devel.h>
26
27 using namespace Dali;
28 using namespace Dali::Toolkit;
29
30 // Positive test case for a method
31 int UtcDaliGlViewDirectRenderingNew(void)
32 {
33   ToolkitTestApplication application;
34   tet_infoline(" UtcDaliGlViewDirectRenderingNew");
35   GlView view = GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGBA8888);
36   DALI_TEST_CHECK(view);
37
38   auto mode1 = view.GetBackendMode();
39
40   DALI_TEST_EQUALS(mode1, GlView::BackendMode::DIRECT_RENDERING, TEST_LOCATION);
41
42   GlView view2 = GlView::New(GlView::BackendMode::EGL_IMAGE_OFFSCREEN_RENDERING, GlView::ColorFormat::RGBA8888);
43   DALI_TEST_CHECK(view2);
44
45   auto mode2 = view2.GetBackendMode();
46   DALI_TEST_EQUALS(mode2, GlView::BackendMode::EGL_IMAGE_OFFSCREEN_RENDERING, TEST_LOCATION);
47
48   END_TEST;
49 }
50
51 int UtcDaliGlViewDirectRenderingNewN(void)
52 {
53   ToolkitTestApplication application;
54   tet_infoline(" UtcDaliGlViewDirectRenderingNewN");
55   // Invalid backend mode
56   GlView view = GlView::New(GlView::BackendMode(11111), GlView::ColorFormat::RGBA8888);
57   DALI_TEST_CHECK(!view);
58
59   END_TEST;
60 }
61
62 // Positive test case for a method
63 int UtcDaliGlViewDirectRenderingDownCast(void)
64 {
65   ToolkitTestApplication application;
66   tet_infoline(" UtcDaliGlViewDirectRenderingDownCast");
67
68   GlView     view = GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
69   BaseHandle handle(view);
70
71   Toolkit::GlView view2 = Toolkit::GlView::DownCast(handle);
72   DALI_TEST_CHECK(view);
73   DALI_TEST_CHECK(view2);
74   DALI_TEST_CHECK(view == view2);
75   END_TEST;
76 }
77
78 int UtcDaliGlViewDirectRenderingCopyAndAssignment(void)
79 {
80   ToolkitTestApplication application;
81   tet_infoline("UtcDaliGlViewDirectRenderingCopyAndAssignment");
82
83   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
84   DALI_TEST_CHECK(view);
85
86   GlView copy(view);
87   DALI_TEST_CHECK(view == copy);
88
89   GlView assign;
90   DALI_TEST_CHECK(!assign);
91
92   assign = copy;
93   DALI_TEST_CHECK(assign == view);
94
95   END_TEST;
96 }
97
98 int UtcDaliGlViewDirectRenderingMoveAssignment(void)
99 {
100   ToolkitTestApplication application;
101   tet_infoline("UtcDaliGlViewDirectRenderingMoveAssignment");
102
103   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
104   DALI_TEST_EQUALS(1, view.GetBaseObject().ReferenceCount(), TEST_LOCATION);
105
106   GlView moved;
107   moved = std::move(view);
108   DALI_TEST_CHECK(moved);
109   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
110   DALI_TEST_CHECK(!view);
111
112   END_TEST;
113 }
114
115 int UtcDaliGlViewDirectRenderingSetGraphicsConfigGles20N(void)
116 {
117   ToolkitTestApplication application;
118   tet_infoline("UtcDaliGlViewDirectRenderingSetGraphicsConfigGles20");
119   GlView view;
120   try
121   {
122     view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
123     DALI_TEST_CHECK(false);
124   }
125   catch(...)
126   {
127     DALI_TEST_CHECK(true);
128   }
129   END_TEST;
130 }
131
132 int UtcDaliGlViewDirectRenderingSetGraphicsConfigGles30(void)
133 {
134   ToolkitTestApplication application;
135   tet_infoline("UtcDaliGlViewDirectRenderingSetGraphicsConfigGles30");
136   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
137
138   try
139   {
140     view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_3_0);
141     DALI_TEST_CHECK(true);
142   }
143   catch(...)
144   {
145     DALI_TEST_CHECK(false);
146   }
147   END_TEST;
148 }
149
150 int UtcDaliGlViewDirectRenderingRenderingMode(void)
151 {
152   ToolkitTestApplication application;
153   tet_infoline("UtcDaliGlViewDirectRenderingRenderingMode");
154   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
155
156   view.SetRenderingMode(GlView::RenderingMode::ON_DEMAND);
157
158   GlView::RenderingMode mode = view.GetRenderingMode();
159
160   DALI_TEST_EQUALS(GlView::RenderingMode::ON_DEMAND, mode, TEST_LOCATION);
161
162   END_TEST;
163 }
164
165 int UtcDaliGlViewDirectRenderingOnSizeSet(void)
166 {
167   ToolkitTestApplication application;
168   tet_infoline("UtcDaliGlViewDirectRenderingOnSizeSet");
169   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
170
171   application.GetScene().Add(view);
172
173   application.SendNotification();
174   application.Render();
175
176   Vector3 size(200.0f, 300.0f, 0.0f);
177   view.SetProperty(Actor::Property::SIZE, size);
178
179   application.SendNotification();
180   application.Render();
181
182   DALI_TEST_EQUALS(view.GetCurrentProperty<Vector3>(Actor::Property::SIZE), size, TEST_LOCATION);
183
184   END_TEST;
185 }
186
187 namespace DirectRenderingCode
188 {
189
190 // Internal callback function
191 void glInit(void)
192 {
193 }
194
195 int glRenderFrame(void)
196 {
197   static unsigned int retFlag = 0;
198   return retFlag++;
199 }
200
201 void glTerminate(void)
202 {
203 }
204
205 void resizeCB(Vector2 size)
206 {
207 }
208
209 }
210
211 int UtcDaliGlViewDirectRenderingRegisterGlCallbacksN(void)
212 {
213   ToolkitTestApplication application;
214   tet_infoline("UtcDaliGlViewDirectRenderingRegisterGlCallbacksN");
215   GlView view;
216
217   try
218   {
219     view.RegisterGlCallbacks(Dali::MakeCallback(DirectRenderingCode::glInit), Dali::MakeCallback(DirectRenderingCode::glRenderFrame), Dali::MakeCallback(DirectRenderingCode::glTerminate));
220     DALI_TEST_CHECK(false);
221   }
222   catch(...)
223   {
224     DALI_TEST_CHECK(true);
225   }
226   END_TEST;
227 }
228
229 int UtcDaliGlViewDirectRenderingSetResizeCallbackN(void)
230 {
231   ToolkitTestApplication application;
232   tet_infoline("UtcDaliGlViewDirectRenderingSetResizeCallback");
233   GlView view;
234
235   try
236   {
237     view.SetResizeCallback(Dali::MakeCallback(DirectRenderingCode::resizeCB));
238     DALI_TEST_CHECK(false);
239   }
240   catch(...)
241   {
242     DALI_TEST_CHECK(true);
243   }
244   END_TEST;
245 }
246
247 int UtcDaliGlViewDirectRenderingRenderOnce(void)
248 {
249   ToolkitTestApplication application;
250   tet_infoline("UtcDaliGlViewDirectRenderingRenderOnce");
251   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
252
253   try
254   {
255     view.RenderOnce();
256     DALI_TEST_CHECK(true);
257   }
258   catch(...)
259   {
260     DALI_TEST_CHECK(false);
261   }
262   END_TEST;
263 }
264
265 int UtcDaliGlViewDirectRenderingWindowVisibilityChanged(void)
266 {
267   ToolkitTestApplication application;
268   tet_infoline("UtcDaliGlViewDirectRenderingWindowVisibilityChanged");
269   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
270   application.GetScene().Add(view);
271   view.SetRenderingMode(GlView::RenderingMode::CONTINUOUS);
272   view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
273   view.RegisterGlCallbacks(Dali::MakeCallback(DirectRenderingCode::glInit), Dali::MakeCallback(DirectRenderingCode::glRenderFrame), Dali::MakeCallback(DirectRenderingCode::glTerminate));
274   view.SetResizeCallback(Dali::MakeCallback(DirectRenderingCode::resizeCB));
275
276   application.SendNotification();
277   application.Render();
278
279   Window window = DevelWindow::Get(view);
280   window.Hide();
281   application.SendNotification();
282   application.Render();
283
284   DALI_TEST_CHECK(true);
285   END_TEST;
286 }
287
288 int UtcDaliGlViewDirectRenderingOnScene(void)
289 {
290   ToolkitTestApplication application;
291
292   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
293
294   //Onscene
295   application.GetScene().Add(view);
296   view.SetRenderingMode(GlView::RenderingMode::CONTINUOUS);
297   view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
298   view.RegisterGlCallbacks(Dali::MakeCallback(DirectRenderingCode::glInit), Dali::MakeCallback(DirectRenderingCode::glRenderFrame), Dali::MakeCallback(DirectRenderingCode::glTerminate));
299
300   application.SendNotification();
301   application.Render();
302
303   //Offscene
304   application.GetScene().Remove(view);
305
306   application.SendNotification();
307   application.Render();
308
309   DALI_TEST_CHECK(true);
310   END_TEST;
311 }
312
313 int UtcDaliGlViewDirectRenderingControlVisibilityChanged(void)
314 {
315   ToolkitTestApplication application;
316
317   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
318   application.GetScene().Add(view);
319
320   application.SendNotification();
321   application.Render();
322
323   view.SetProperty(Actor::Property::VISIBLE, false);
324   application.SendNotification();
325   application.Render();
326   DALI_TEST_CHECK(view.GetCurrentProperty<bool>(Actor::Property::VISIBLE) == false);
327
328   view.SetProperty(Actor::Property::VISIBLE, true);
329   application.SendNotification();
330   application.Render();
331   DALI_TEST_CHECK(view.GetCurrentProperty<bool>(Actor::Property::VISIBLE) == true);
332
333   END_TEST;
334 }
335
336 int UtcDaliGlViewDirectRenderingResize(void)
337 {
338   ToolkitTestApplication application;
339   tet_infoline("UtcDaliGlViewDirectRenderingResize");
340   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
341
342   application.GetScene().Add(view);
343   view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
344   view.RegisterGlCallbacks(Dali::MakeCallback(DirectRenderingCode::glInit), Dali::MakeCallback(DirectRenderingCode::glRenderFrame), Dali::MakeCallback(DirectRenderingCode::glTerminate));
345   view.SetResizeCallback(Dali::MakeCallback(DirectRenderingCode::resizeCB));
346   view.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
347   view.SetProperty(Actor::Property::SIZE, Vector2(360.0f, 360.0f));
348
349   application.SendNotification();
350   application.Render();
351
352   //To GlViewRenderThread can recognize Resize signal the main thread have to sleep.
353   std::this_thread::sleep_for(std::chrono::milliseconds(100));
354
355   application.SendNotification();
356   application.Render();
357
358   DALI_TEST_CHECK(true);
359   END_TEST;
360 }
361
362 int UtcDaliGlViewDirectRenderingTerminateCallback(void)
363 {
364   ToolkitTestApplication application;
365   tet_infoline("UtcDaliGlViewDirectRenderingTerminateCallback");
366   GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
367
368   application.GetScene().Add(view);
369   view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
370   view.RegisterGlCallbacks(Dali::MakeCallback(DirectRenderingCode::glInit), Dali::MakeCallback(DirectRenderingCode::glRenderFrame), Dali::MakeCallback(DirectRenderingCode::glTerminate));
371   view.SetResizeCallback(Dali::MakeCallback(DirectRenderingCode::resizeCB));
372   view.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
373   view.SetProperty(Actor::Property::SIZE, Vector2(360.0f, 360.0f));
374
375   application.SendNotification();
376   application.Render();
377
378
379
380   //To GlViewRenderThread can recognize Resize signal the main thread have to sleep.
381   std::this_thread::sleep_for(std::chrono::milliseconds(100));
382
383   application.SendNotification();
384   application.Render();
385
386   DALI_TEST_CHECK(true);
387   END_TEST;
388 }