2 * Copyright (c) 2022 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <dali-toolkit-test-suite-utils.h>
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>
28 using namespace Dali::Toolkit;
30 // Positive test case for a method
31 int UtcDaliGlViewDirectRenderingNew(void)
33 ToolkitTestApplication application;
34 tet_infoline(" UtcDaliGlViewDirectRenderingNew");
35 GlView view = GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGBA8888);
36 DALI_TEST_CHECK(view);
38 auto mode1 = view.GetBackendMode();
40 DALI_TEST_EQUALS(mode1, GlView::BackendMode::DIRECT_RENDERING, TEST_LOCATION);
42 GlView view2 = GlView::New(GlView::BackendMode::EGL_IMAGE_OFFSCREEN_RENDERING, GlView::ColorFormat::RGBA8888);
43 DALI_TEST_CHECK(view2);
45 auto mode2 = view2.GetBackendMode();
46 DALI_TEST_EQUALS(mode2, GlView::BackendMode::EGL_IMAGE_OFFSCREEN_RENDERING, TEST_LOCATION);
51 int UtcDaliGlViewDirectRenderingNewN(void)
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);
62 // Positive test case for a method
63 int UtcDaliGlViewDirectRenderingDownCast(void)
65 ToolkitTestApplication application;
66 tet_infoline(" UtcDaliGlViewDirectRenderingDownCast");
68 GlView view = GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
69 BaseHandle handle(view);
71 Toolkit::GlView view2 = Toolkit::GlView::DownCast(handle);
72 DALI_TEST_CHECK(view);
73 DALI_TEST_CHECK(view2);
74 DALI_TEST_CHECK(view == view2);
78 int UtcDaliGlViewDirectRenderingCopyAndAssignment(void)
80 ToolkitTestApplication application;
81 tet_infoline("UtcDaliGlViewDirectRenderingCopyAndAssignment");
83 GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
84 DALI_TEST_CHECK(view);
87 DALI_TEST_CHECK(view == copy);
90 DALI_TEST_CHECK(!assign);
93 DALI_TEST_CHECK(assign == view);
98 int UtcDaliGlViewDirectRenderingMoveAssignment(void)
100 ToolkitTestApplication application;
101 tet_infoline("UtcDaliGlViewDirectRenderingMoveAssignment");
103 GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
104 DALI_TEST_EQUALS(1, view.GetBaseObject().ReferenceCount(), TEST_LOCATION);
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);
115 int UtcDaliGlViewDirectRenderingSetGraphicsConfigGles20N(void)
117 ToolkitTestApplication application;
118 tet_infoline("UtcDaliGlViewDirectRenderingSetGraphicsConfigGles20");
122 view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
123 DALI_TEST_CHECK(false);
127 DALI_TEST_CHECK(true);
132 int UtcDaliGlViewDirectRenderingSetGraphicsConfigGles30(void)
134 ToolkitTestApplication application;
135 tet_infoline("UtcDaliGlViewDirectRenderingSetGraphicsConfigGles30");
136 GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
140 view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_3_0);
141 DALI_TEST_CHECK(true);
145 DALI_TEST_CHECK(false);
150 int UtcDaliGlViewDirectRenderingRenderingMode(void)
152 ToolkitTestApplication application;
153 tet_infoline("UtcDaliGlViewDirectRenderingRenderingMode");
154 GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
156 view.SetRenderingMode(GlView::RenderingMode::ON_DEMAND);
158 GlView::RenderingMode mode = view.GetRenderingMode();
160 DALI_TEST_EQUALS(GlView::RenderingMode::ON_DEMAND, mode, TEST_LOCATION);
165 int UtcDaliGlViewDirectRenderingOnSizeSet(void)
167 ToolkitTestApplication application;
168 tet_infoline("UtcDaliGlViewDirectRenderingOnSizeSet");
169 GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
171 application.GetScene().Add(view);
173 application.SendNotification();
174 application.Render();
176 Vector3 size(200.0f, 300.0f, 0.0f);
177 view.SetProperty(Actor::Property::SIZE, size);
179 application.SendNotification();
180 application.Render();
182 DALI_TEST_EQUALS(view.GetCurrentProperty<Vector3>(Actor::Property::SIZE), size, TEST_LOCATION);
187 namespace DirectRenderingCode
190 // Internal callback function
195 int glRenderFrame(void)
197 static unsigned int retFlag = 0;
201 void glTerminate(void)
205 void resizeCB(Vector2 size)
211 int UtcDaliGlViewDirectRenderingRegisterGlCallbacksN(void)
213 ToolkitTestApplication application;
214 tet_infoline("UtcDaliGlViewDirectRenderingRegisterGlCallbacksN");
219 view.RegisterGlCallbacks(Dali::MakeCallback(DirectRenderingCode::glInit), Dali::MakeCallback(DirectRenderingCode::glRenderFrame), Dali::MakeCallback(DirectRenderingCode::glTerminate));
220 DALI_TEST_CHECK(false);
224 DALI_TEST_CHECK(true);
229 int UtcDaliGlViewDirectRenderingSetResizeCallbackN(void)
231 ToolkitTestApplication application;
232 tet_infoline("UtcDaliGlViewDirectRenderingSetResizeCallback");
237 view.SetResizeCallback(Dali::MakeCallback(DirectRenderingCode::resizeCB));
238 DALI_TEST_CHECK(false);
242 DALI_TEST_CHECK(true);
247 int UtcDaliGlViewDirectRenderingRenderOnce(void)
249 ToolkitTestApplication application;
250 tet_infoline("UtcDaliGlViewDirectRenderingRenderOnce");
251 GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
256 DALI_TEST_CHECK(true);
260 DALI_TEST_CHECK(false);
265 int UtcDaliGlViewDirectRenderingWindowVisibilityChanged(void)
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));
276 application.SendNotification();
277 application.Render();
279 Window window = DevelWindow::Get(view);
281 application.SendNotification();
282 application.Render();
284 DALI_TEST_CHECK(true);
288 int UtcDaliGlViewDirectRenderingOnScene(void)
290 ToolkitTestApplication application;
292 GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
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));
300 application.SendNotification();
301 application.Render();
304 application.GetScene().Remove(view);
306 application.SendNotification();
307 application.Render();
309 DALI_TEST_CHECK(true);
313 int UtcDaliGlViewDirectRenderingControlVisibilityChanged(void)
315 ToolkitTestApplication application;
317 GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
318 application.GetScene().Add(view);
320 application.SendNotification();
321 application.Render();
323 view.SetProperty(Actor::Property::VISIBLE, false);
324 application.SendNotification();
325 application.Render();
326 DALI_TEST_CHECK(view.GetCurrentProperty<bool>(Actor::Property::VISIBLE) == false);
328 view.SetProperty(Actor::Property::VISIBLE, true);
329 application.SendNotification();
330 application.Render();
331 DALI_TEST_CHECK(view.GetCurrentProperty<bool>(Actor::Property::VISIBLE) == true);
336 int UtcDaliGlViewDirectRenderingResize(void)
338 ToolkitTestApplication application;
339 tet_infoline("UtcDaliGlViewDirectRenderingResize");
340 GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
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));
349 application.SendNotification();
350 application.Render();
352 //To GlViewRenderThread can recognize Resize signal the main thread have to sleep.
353 std::this_thread::sleep_for(std::chrono::milliseconds(100));
355 application.SendNotification();
356 application.Render();
358 DALI_TEST_CHECK(true);
362 int UtcDaliGlViewDirectRenderingTerminateCallback(void)
364 ToolkitTestApplication application;
365 tet_infoline("UtcDaliGlViewDirectRenderingTerminateCallback");
366 GlView view = Toolkit::GlView::New(GlView::BackendMode::DIRECT_RENDERING, GlView::ColorFormat::RGB888);
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));
375 application.SendNotification();
376 application.Render();
380 //To GlViewRenderThread can recognize Resize signal the main thread have to sleep.
381 std::this_thread::sleep_for(std::chrono::milliseconds(100));
383 application.SendNotification();
384 application.Render();
386 DALI_TEST_CHECK(true);