f1b6bd76c4f2803a673e21226fe723b9aa795eb7
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-scene3d / utc-Dali-SceneView.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-scene3d/public-api/controls/model/model.h>
24 #include <dali-scene3d/public-api/controls/scene-view/scene-view.h>
25
26 using namespace Dali;
27 using namespace Dali::Toolkit;
28
29 void scene_view_startup(void)
30 {
31   test_return_value = TET_UNDEF;
32 }
33
34 void scene_view_cleanup(void)
35 {
36   test_return_value = TET_PASS;
37 }
38
39 namespace
40 {
41 /**
42  * For the AnimatedCube.gltf and its Assets
43  * Donated by Norbert Nopper for glTF testing.
44  * Take from https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/AnimatedCube
45  */
46 const char* TEST_GLTF_FILE_NAME = TEST_RESOURCE_DIR "/AnimatedCube.gltf";
47
48 /**
49  * For the diffuse and specular cube map texture.
50  * These textures are based off version of Wave engine sample
51  * Take from https://github.com/WaveEngine/Samples
52  *
53  * Copyright (c) 2022 Wave Coorporation
54  *
55  * Permission is hereby granted, free of charge, to any person obtaining a copy
56  * of this software and associated documentation files (the "Software"), to
57  * deal in the Software without restriction, including without limitation the
58  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
59  * sell copies of the Software, and to permit persons to whom the Software is
60  * furnished to do so, subject to the following conditions:
61  *
62  * The above copyright notice and this permission notice shall be included in
63  * all copies or substantial portions of the Software.
64  *
65  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
66  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
67  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
68  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
69  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
70  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
71  * THE SOFTWARE.
72  */
73 const char* TEST_DIFFUSE_TEXTURE  = TEST_RESOURCE_DIR "/forest_irradiance.ktx";
74 const char* TEST_SPECULAR_TEXTURE = TEST_RESOURCE_DIR "/forest_radiance.ktx";
75
76 Dali::Texture GetDiffuseTexture(Dali::Scene3D::Model model)
77 {
78   Dali::Texture texture;
79
80   Actor meshActor = model.FindChildByName("AnimatedCube");
81   if(meshActor)
82   {
83     Renderer renderer = meshActor.GetRendererAt(0u);
84     if(renderer)
85     {
86       TextureSet textureSet = renderer.GetTextures();
87       if(textureSet.GetTextureCount() == 9u)
88       {
89         texture = textureSet.GetTexture(7u);
90       }
91     }
92   }
93
94   return texture;
95 }
96
97 Dali::Texture GetSpecularTexture(Dali::Scene3D::Model model)
98 {
99   Dali::Texture texture;
100
101   Actor meshActor = model.FindChildByName("AnimatedCube");
102   if(meshActor)
103   {
104     Renderer renderer = meshActor.GetRendererAt(0u);
105     if(renderer)
106     {
107       TextureSet textureSet = renderer.GetTextures();
108       if(textureSet.GetTextureCount() == 9u)
109       {
110         texture = textureSet.GetTexture(8u);
111       }
112     }
113   }
114
115   return texture;
116 }
117 } // namespace
118
119 // Negative test case for a method
120 int UtcDaliSceneViewUninitialized(void)
121 {
122   ToolkitTestApplication application;
123   tet_infoline("UtcDaliSceneViewUninitialized");
124
125   Scene3D::SceneView view;
126
127   try
128   {
129     // New() must be called to create a Model or it wont be valid.
130     Actor a = Actor::New();
131     view.Add(a);
132     DALI_TEST_CHECK(false);
133   }
134   catch(Dali::DaliException& e)
135   {
136     // Tests that a negative test of an assertion succeeds
137     DALI_TEST_PRINT_ASSERT(e);
138     DALI_TEST_CHECK(!view);
139   }
140   END_TEST;
141 }
142
143 // Positive test case for a method
144 int UtcDaliSceneViewNew(void)
145 {
146   ToolkitTestApplication application;
147   tet_infoline("UtcDaliSceneViewNew");
148
149   Scene3D::SceneView view = Scene3D::SceneView::New();
150   DALI_TEST_CHECK(view);
151   END_TEST;
152 }
153
154 // Positive test case for a method
155 int UtcDaliSceneViewDownCast(void)
156 {
157   ToolkitTestApplication application;
158   tet_infoline("UtcDaliSceneViewDownCast");
159
160   Scene3D::SceneView view = Scene3D::SceneView::New();
161   BaseHandle         handle(view);
162
163   Scene3D::SceneView sceneView = Scene3D::SceneView::DownCast(handle);
164   DALI_TEST_CHECK(view);
165   DALI_TEST_CHECK(sceneView);
166   DALI_TEST_CHECK(sceneView == view);
167   END_TEST;
168 }
169
170 int UtcDaliSceneViewTypeRegistry(void)
171 {
172   ToolkitTestApplication application;
173   tet_infoline("UtcDaliSceneViewTypeRegistry");
174
175   TypeRegistry typeRegistry = TypeRegistry::Get();
176   DALI_TEST_CHECK(typeRegistry);
177
178   TypeInfo typeInfo = typeRegistry.GetTypeInfo("SceneView");
179   DALI_TEST_CHECK(typeInfo);
180
181   BaseHandle handle = typeInfo.CreateInstance();
182   DALI_TEST_CHECK(handle);
183
184   Scene3D::SceneView model = Scene3D::SceneView::DownCast(handle);
185   DALI_TEST_CHECK(model);
186
187   END_TEST;
188 }
189
190 // Positive test case for a method
191 int UtcDaliSceneViewAddRemove(void)
192 {
193   ToolkitTestApplication application;
194   tet_infoline("UtcDaliSceneViewAddRemove");
195
196   Scene3D::SceneView view = Scene3D::SceneView::New();
197   DALI_TEST_CHECK(view);
198   DALI_TEST_EQUALS(1u, view.GetChildCount(), TEST_LOCATION);
199
200   Actor actor = Actor::New();
201
202   view.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
203   view.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
204   view.Add(actor);
205
206   DALI_TEST_EQUALS(1u, view.GetChildCount(), TEST_LOCATION);
207   Actor layer = view.GetChildAt(0u);
208
209   DALI_TEST_EQUALS(2u, layer.GetChildCount(), TEST_LOCATION);
210   DALI_TEST_EQUALS(actor, layer.GetChildAt(1u), TEST_LOCATION); // index 0u is default camera
211
212   view.Remove(actor);
213   DALI_TEST_EQUALS(1u, layer.GetChildCount(), TEST_LOCATION);
214   END_TEST;
215 }
216
217 int UtcDaliSceneViewCopyAndAssignment(void)
218 {
219   ToolkitTestApplication application;
220
221   Scene3D::SceneView view = Scene3D::SceneView::New();
222   DALI_TEST_CHECK(view);
223
224   Scene3D::SceneView copy(view);
225   DALI_TEST_CHECK(view == copy);
226
227   Scene3D::SceneView assign;
228   DALI_TEST_CHECK(!assign);
229
230   assign = copy;
231   DALI_TEST_CHECK(assign == view);
232
233   END_TEST;
234 }
235
236 int UtcDaliSceneViewMoveConstructor(void)
237 {
238   ToolkitTestApplication application;
239
240   Scene3D::SceneView view = Scene3D::SceneView::New();
241   DALI_TEST_EQUALS(1, view.GetBaseObject().ReferenceCount(), TEST_LOCATION);
242   view.SetProperty(Actor::Property::SENSITIVE, false);
243   DALI_TEST_CHECK(false == view.GetProperty<bool>(Actor::Property::SENSITIVE));
244
245   Scene3D::SceneView moved = std::move(view);
246   DALI_TEST_CHECK(moved);
247   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
248   DALI_TEST_CHECK(false == moved.GetProperty<bool>(Actor::Property::SENSITIVE));
249   DALI_TEST_CHECK(!view);
250
251   END_TEST;
252 }
253
254 int UtcDaliSceneViewMoveAssignment(void)
255 {
256   ToolkitTestApplication application;
257
258   Scene3D::SceneView view = Scene3D::SceneView::New();
259   DALI_TEST_EQUALS(1, view.GetBaseObject().ReferenceCount(), TEST_LOCATION);
260   view.SetProperty(Actor::Property::SENSITIVE, false);
261   DALI_TEST_CHECK(false == view.GetProperty<bool>(Actor::Property::SENSITIVE));
262
263   Scene3D::SceneView moved;
264   moved = std::move(view);
265   DALI_TEST_CHECK(moved);
266   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
267   DALI_TEST_CHECK(false == moved.GetProperty<bool>(Actor::Property::SENSITIVE));
268   DALI_TEST_CHECK(!view);
269
270   END_TEST;
271 }
272
273 int UtcDaliSceneViewOnScene01(void)
274 {
275   ToolkitTestApplication application;
276
277   Scene3D::SceneView view = Scene3D::SceneView::New();
278
279   DALI_TEST_EQUALS(1u, view.GetChildCount(), TEST_LOCATION);
280   Actor layer = view.GetChildAt(0u);
281
282   DALI_TEST_EQUALS(1u, layer.GetChildCount(), TEST_LOCATION);
283
284   application.GetScene().Add(view);
285
286   application.SendNotification();
287   application.Render();
288
289   // CameraActor is added on layer when on scene
290   DALI_TEST_EQUALS(1u, layer.GetChildCount(), TEST_LOCATION);
291
292   END_TEST;
293 }
294
295 int UtcDaliSceneViewOnScene02(void)
296 {
297   ToolkitTestApplication application;
298
299   uint32_t renderTaskCount = application.GetScene().GetRenderTaskList().GetTaskCount();
300   DALI_TEST_EQUALS(1u, renderTaskCount, TEST_LOCATION);
301
302   Scene3D::SceneView view = Scene3D::SceneView::New();
303
304   renderTaskCount = application.GetScene().GetRenderTaskList().GetTaskCount();
305   DALI_TEST_EQUALS(1u, renderTaskCount, TEST_LOCATION);
306
307   application.GetScene().Add(view);
308
309   application.SendNotification();
310   application.Render();
311
312
313   renderTaskCount = application.GetScene().GetRenderTaskList().GetTaskCount();
314   DALI_TEST_EQUALS(2u, renderTaskCount, TEST_LOCATION);
315
316   RenderTask  renderTask = application.GetScene().GetRenderTaskList().GetTask(1u);
317   CameraActor camera     = renderTask.GetCameraActor();
318
319   CameraActor defaultCamera = renderTask.GetCameraActor();
320   DALI_TEST_CHECK(defaultCamera);
321   DALI_TEST_EQUALS(camera, defaultCamera, TEST_LOCATION);
322   DALI_TEST_EQUALS(defaultCamera, view.GetSelectedCamera(), TEST_LOCATION);
323
324   END_TEST;
325 }
326
327 int UtcDaliSceneViewUserCamera(void)
328 {
329   ToolkitTestApplication application;
330
331   Scene3D::SceneView view = Scene3D::SceneView::New();
332   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
333
334   application.GetScene().Add(view);
335
336   application.SendNotification();
337   application.Render();
338
339   CameraActor defaultCamera = view.GetSelectedCamera();
340   CameraActor camera        = Dali::CameraActor::New();
341   camera.SetProperty(Dali::Actor::Property::NAME, "camera");
342   view.AddCamera(camera);
343   view.SelectCamera("camera");
344
345   DALI_TEST_NOT_EQUALS(defaultCamera, view.GetSelectedCamera(), 0.0f, TEST_LOCATION);
346   DALI_TEST_EQUALS(camera, view.GetSelectedCamera(), TEST_LOCATION);
347
348   camera.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
349   camera.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
350   camera.SetFieldOfView(0.5f);
351   camera.SetNearClippingPlane(1.0f);
352   camera.SetFarClippingPlane(5000.0f);
353   camera.SetProperty(Dali::Actor::Property::POSITION, Vector3(20, 30, 40));
354
355   float   fov            = camera[Dali::CameraActor::Property::FIELD_OF_VIEW];
356   float   nearPlain      = camera[Dali::CameraActor::Property::NEAR_PLANE_DISTANCE];
357   float   farPlain       = camera[Dali::CameraActor::Property::FAR_PLANE_DISTANCE];
358   Vector3 cameraPosition = camera[Dali::Actor::Property::POSITION];
359
360   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(400, 300));
361
362   DALI_TEST_EQUALS(fov, camera.GetProperty<float>(Dali::CameraActor::Property::FIELD_OF_VIEW), TEST_LOCATION);
363   DALI_TEST_EQUALS(nearPlain, camera.GetProperty<float>(Dali::CameraActor::Property::NEAR_PLANE_DISTANCE), TEST_LOCATION);
364   DALI_TEST_EQUALS(farPlain, camera.GetProperty<float>(Dali::CameraActor::Property::FAR_PLANE_DISTANCE), TEST_LOCATION);
365   DALI_TEST_EQUALS(cameraPosition, camera.GetProperty<Vector3>(Dali::Actor::Property::POSITION), TEST_LOCATION);
366
367   END_TEST;
368 }
369
370 int UtcDaliSceneViewAddRemoveCamera(void)
371 {
372   ToolkitTestApplication application;
373
374   Scene3D::SceneView view = Scene3D::SceneView::New();
375   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
376
377   application.GetScene().Add(view);
378
379   application.SendNotification();
380   application.Render();
381
382   CameraActor camera0 = view.GetSelectedCamera();
383   camera0.SetProperty(Dali::Actor::Property::NAME, "camera0");
384   CameraActor camera1 = Dali::CameraActor::New();
385   camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
386
387   DALI_TEST_EQUALS(1u, view.GetCameraCount(), TEST_LOCATION);
388   view.AddCamera(camera1);
389   DALI_TEST_EQUALS(2u, view.GetCameraCount(), TEST_LOCATION);
390
391   DALI_TEST_EQUALS(camera0, view.GetCamera(0), TEST_LOCATION);
392   DALI_TEST_EQUALS(camera0, view.GetCamera("camera0"), TEST_LOCATION);
393   DALI_TEST_EQUALS(camera1, view.GetCamera(1), TEST_LOCATION);
394   DALI_TEST_EQUALS(camera1, view.GetCamera("camera1"), TEST_LOCATION);
395
396   DALI_TEST_EQUALS(camera0, view.GetSelectedCamera(), TEST_LOCATION);
397   view.SelectCamera(1); // 0 -> 1
398   DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
399   view.SelectCamera("camera0"); // 1 -> 0
400   DALI_TEST_EQUALS(camera0, view.GetSelectedCamera(), TEST_LOCATION);
401   view.SelectCamera("camera1"); // 0 -> 1
402   DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
403   view.SelectCamera(0); // 1 -> 0
404   DALI_TEST_EQUALS(camera0, view.GetSelectedCamera(), TEST_LOCATION);
405
406   view.SelectCamera(1); // 0 -> 1
407   DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
408   DALI_TEST_EQUALS(2u, view.GetCameraCount(), TEST_LOCATION);
409   view.RemoveCamera(camera1); // 1 -> 0
410   DALI_TEST_EQUALS(camera0, view.GetSelectedCamera(), TEST_LOCATION);
411   DALI_TEST_EQUALS(1u, view.GetCameraCount(), TEST_LOCATION);
412
413   CameraActor defaultCamera = view.GetSelectedCamera();
414   DALI_TEST_CHECK(defaultCamera);
415   DALI_TEST_EQUALS(camera0, defaultCamera, TEST_LOCATION);
416   DALI_TEST_NOT_EQUALS(camera1, defaultCamera, 0.0f, TEST_LOCATION);
417   END_TEST;
418 }
419
420 int UtcDaliSceneViewImageBasedLight01(void)
421 {
422   ToolkitTestApplication application;
423
424   Scene3D::SceneView view = Scene3D::SceneView::New();
425   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
426
427   application.GetScene().Add(view);
428
429   application.SendNotification();
430   application.Render();
431
432   Scene3D::Model modelView1 = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
433   Scene3D::Model modelView2 = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
434   Scene3D::Model modelView3 = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
435   view.Add(modelView1);
436   view.Add(modelView2);
437
438   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView2), 0.0f, TEST_LOCATION);
439   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView2), 0.0f, TEST_LOCATION);
440   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView3), 0.0f, TEST_LOCATION);
441   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView3), 0.0f, TEST_LOCATION);
442
443   view.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
444
445   DALI_TEST_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView2), TEST_LOCATION);
446   DALI_TEST_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView2), TEST_LOCATION);
447   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView3), 0.0f, TEST_LOCATION);
448   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView3), 0.0f, TEST_LOCATION);
449
450   view.Add(modelView3);
451
452   DALI_TEST_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView3), TEST_LOCATION);
453   DALI_TEST_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView3), TEST_LOCATION);
454
455   view.Remove(modelView1);
456   view.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
457
458   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView2), 0.0f, TEST_LOCATION);
459   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView2), 0.0f, TEST_LOCATION);
460   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView3), 0.0f, TEST_LOCATION);
461   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView3), 0.0f, TEST_LOCATION);
462   DALI_TEST_EQUALS(GetDiffuseTexture(modelView2), GetDiffuseTexture(modelView3), TEST_LOCATION);
463   DALI_TEST_EQUALS(GetSpecularTexture(modelView2), GetSpecularTexture(modelView3), TEST_LOCATION);
464
465   END_TEST;
466 }
467
468 int UtcDaliSceneViewImageBasedLight02(void)
469 {
470   ToolkitTestApplication application;
471
472   Scene3D::SceneView view = Scene3D::SceneView::New();
473   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
474
475   application.GetScene().Add(view);
476
477   application.SendNotification();
478   application.Render();
479
480   Scene3D::Model modelView1 = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
481   view.Add(modelView1);
482
483   view.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
484   Dali::Texture diffuseTexture = GetDiffuseTexture(modelView1);
485   Dali::Texture specularTexture = GetSpecularTexture(modelView1);
486
487   modelView1.SetImageBasedLightSource(TEST_SPECULAR_TEXTURE, TEST_DIFFUSE_TEXTURE);
488   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), diffuseTexture, 0.0f, TEST_LOCATION);
489   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), specularTexture, 0.0f, TEST_LOCATION);
490   diffuseTexture = GetDiffuseTexture(modelView1);
491   specularTexture = GetSpecularTexture(modelView1);
492
493   // reset SceneView IBL
494   view.SetImageBasedLightSource("", "");
495   DALI_TEST_EQUALS(GetDiffuseTexture(modelView1), diffuseTexture, TEST_LOCATION);
496   DALI_TEST_EQUALS(GetSpecularTexture(modelView1), specularTexture, TEST_LOCATION);
497
498   modelView1.SetImageBasedLightSource("", "");
499   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), diffuseTexture, 0.0f, TEST_LOCATION);
500   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), specularTexture, 0.0f, TEST_LOCATION);
501
502   END_TEST;
503 }
504
505 int UtcDaliSceneViewImageBasedLight03(void)
506 {
507   ToolkitTestApplication application;
508
509   Scene3D::SceneView view = Scene3D::SceneView::New();
510   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
511
512   application.GetScene().Add(view);
513
514   application.SendNotification();
515   application.Render();
516
517   Scene3D::Model modelView1 = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
518   view.Add(modelView1);
519
520   modelView1.SetImageBasedLightSource(TEST_SPECULAR_TEXTURE, TEST_DIFFUSE_TEXTURE);
521   Dali::Texture diffuseTexture = GetDiffuseTexture(modelView1);
522   Dali::Texture specularTexture = GetSpecularTexture(modelView1);
523
524   view.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
525   DALI_TEST_EQUALS(GetDiffuseTexture(modelView1), diffuseTexture, TEST_LOCATION);
526   DALI_TEST_EQUALS(GetSpecularTexture(modelView1), specularTexture, TEST_LOCATION);
527
528   modelView1.SetImageBasedLightSource("", "");
529   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), diffuseTexture, 0.0f, TEST_LOCATION);
530   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), specularTexture, 0.0f, TEST_LOCATION);
531   diffuseTexture = GetDiffuseTexture(modelView1);
532   specularTexture = GetSpecularTexture(modelView1);
533
534   // reset SceneView IBL
535   view.SetImageBasedLightSource("", "");
536   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), diffuseTexture, 0.0f, TEST_LOCATION);
537   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), specularTexture, 0.0f, TEST_LOCATION);
538
539   END_TEST;
540 }
541
542 int UtcDaliSceneViewImageBasedFactor(void)
543 {
544   ToolkitTestApplication application;
545
546   Scene3D::SceneView view = Scene3D::SceneView::New();
547   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
548
549   application.GetScene().Add(view);
550
551   application.SendNotification();
552   application.Render();
553
554   Scene3D::Model modelView1 = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
555   view.Add(modelView1);
556
557   DALI_TEST_EQUALS(view.GetImageBasedLightScaleFactor(), 1.0f, TEST_LOCATION);
558   DALI_TEST_EQUALS(modelView1.GetImageBasedLightScaleFactor(), 1.0f, TEST_LOCATION);
559
560   view.SetImageBasedLightScaleFactor(0.5f);
561   DALI_TEST_EQUALS(view.GetImageBasedLightScaleFactor(), 0.5f, TEST_LOCATION);
562   DALI_TEST_EQUALS(modelView1.GetImageBasedLightScaleFactor(), 1.0f, TEST_LOCATION);
563   END_TEST;
564 }
565
566 int UtcDaliSceneViewUseFramebuffer01(void)
567 {
568   ToolkitTestApplication application;
569
570   Scene3D::SceneView view = Scene3D::SceneView::New();
571   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
572
573   application.GetScene().Add(view);
574
575   application.SendNotification();
576   application.Render();
577
578   bool useFramebuffer = view.IsUsingFramebuffer();
579   view.UseFramebuffer(true);
580   DALI_TEST_NOT_EQUALS(useFramebuffer, view.IsUsingFramebuffer(), 0.0f, TEST_LOCATION);
581
582   END_TEST;
583 }
584
585 int UtcDaliSceneViewUseFramebuffer02(void)
586 {
587   ToolkitTestApplication application;
588
589   Scene3D::SceneView view = Scene3D::SceneView::New();
590   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
591
592   application.GetScene().Add(view);
593
594   application.SendNotification();
595   application.Render();
596
597   RenderTask renderTask = application.GetScene().GetRenderTaskList().GetTask(1u);
598   DALI_TEST_CHECK(!renderTask.GetFrameBuffer());
599
600   view.UseFramebuffer(true);
601   DALI_TEST_CHECK(renderTask.GetFrameBuffer());
602
603   view.UseFramebuffer(false);
604   DALI_TEST_CHECK(!renderTask.GetFrameBuffer());
605
606   view.UseFramebuffer(true);
607   DALI_TEST_CHECK(renderTask.GetFrameBuffer());
608
609   END_TEST;
610 }
611
612 // For ResourceReady
613 namespace
614 {
615 static bool gOnRelayoutCallBackCalled = false;
616 void OnRelayoutCallback(Actor actor)
617 {
618   gOnRelayoutCallBackCalled = true;
619 }
620
621 static bool gResourceReadyCalled = false;
622 void OnResourceReady(Control control)
623 {
624   gResourceReadyCalled = true;
625 }
626 }
627
628 int UtcDaliSceneViewResourceReady(void)
629 {
630   ToolkitTestApplication application;
631
632   gOnRelayoutCallBackCalled = false;
633   gResourceReadyCalled = false;
634   Scene3D::SceneView view = Scene3D::SceneView::New();
635   view.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
636   view.OnRelayoutSignal().Connect(OnRelayoutCallback);
637   view.ResourceReadySignal().Connect(OnResourceReady);
638   // SceneView::IsResourceReady() returns true by default.
639   DALI_TEST_EQUALS(view.IsResourceReady(), true, TEST_LOCATION);
640
641   // Sanity check
642   DALI_TEST_CHECK(!gOnRelayoutCallBackCalled);
643   DALI_TEST_CHECK(!gResourceReadyCalled);
644
645   application.GetScene().Add(view);
646
647   application.SendNotification();
648   application.Render();
649
650   DALI_TEST_EQUALS(gOnRelayoutCallBackCalled, true, TEST_LOCATION);
651   DALI_TEST_EQUALS(view.IsResourceReady(), true, TEST_LOCATION);
652   DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
653
654   gOnRelayoutCallBackCalled = false;
655   gResourceReadyCalled = false;
656
657   view.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
658
659   application.SendNotification();
660   application.Render();
661
662   DALI_TEST_EQUALS(gOnRelayoutCallBackCalled, false, TEST_LOCATION);
663   DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
664
665   END_TEST;
666 }
667
668 int UtcDaliSceneViewSetSkybox(void)
669 {
670   ToolkitTestApplication application;
671
672   gResourceReadyCalled = false;
673   Scene3D::SceneView view = Scene3D::SceneView::New();
674   view.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
675   view.ResourceReadySignal().Connect(OnResourceReady);
676   // SceneView::IsResourceReady() returns true by default.
677   DALI_TEST_EQUALS(view.IsResourceReady(), true, TEST_LOCATION);
678
679   // Sanity check
680   DALI_TEST_CHECK(!gResourceReadyCalled);
681
682   application.GetScene().Add(view);
683
684   application.SendNotification();
685   application.Render();
686
687   DALI_TEST_EQUALS(view.IsResourceReady(), true, TEST_LOCATION);
688   DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
689
690   gResourceReadyCalled = false;
691
692   view.SetSkybox(TEST_SPECULAR_TEXTURE);
693
694   application.SendNotification();
695   application.Render();
696
697   DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
698
699   END_TEST;
700 }
701
702 int UtcDaliSceneViewSetSkyboxIntensity(void)
703 {
704   ToolkitTestApplication application;
705
706   Scene3D::SceneView view = Scene3D::SceneView::New();
707   view.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
708
709   float intensity = 0.5f;
710   DALI_TEST_EQUALS(view.GetSkyboxIntensity(), 1.0f, TEST_LOCATION);
711
712   view.SetSkyboxIntensity(intensity);
713   DALI_TEST_EQUALS(view.GetSkyboxIntensity(), intensity, TEST_LOCATION);
714
715   END_TEST;
716 }
717
718 int UtcDaliSceneViewSetSkyboxOrientation(void)
719 {
720   ToolkitTestApplication application;
721
722   Scene3D::SceneView view = Scene3D::SceneView::New();
723   view.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
724
725   Dali::Quaternion orientation = Dali::Quaternion(Radian(0.5f), Vector3::YAXIS);
726   view.SetSkyboxOrientation(orientation);
727   DALI_TEST_EQUALS(view.GetSkyboxOrientation(), orientation, TEST_LOCATION);
728
729   END_TEST;
730 }
731
732 int UtcDaliSceneViewCreateAndRemoveRenderTask(void)
733 {
734   ToolkitTestApplication application;
735   RenderTaskList taskList = application.GetScene().GetRenderTaskList();
736
737   uint32_t renderTaskCount = taskList.GetTaskCount();
738
739   Scene3D::SceneView view = Scene3D::SceneView::New();
740   view.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
741
742   DALI_TEST_EQUALS(renderTaskCount, application.GetScene().GetRenderTaskList().GetTaskCount(), TEST_LOCATION);
743
744   application.GetScene().Add(view);
745
746   DALI_TEST_EQUALS(renderTaskCount + 1, application.GetScene().GetRenderTaskList().GetTaskCount(), TEST_LOCATION);
747
748   view.Unparent();
749
750   DALI_TEST_EQUALS(renderTaskCount, application.GetScene().GetRenderTaskList().GetTaskCount(), TEST_LOCATION);
751
752   END_TEST;
753 }
754
755 int UtcDaliSceneViewColorMode(void)
756 {
757   ToolkitTestApplication application;
758
759   Scene3D::SceneView view = Scene3D::SceneView::New();
760   application.GetScene().Add(view);
761
762   DALI_TEST_EQUALS(view.GetChildAt(0u).GetProperty<int>(Dali::Actor::Property::COLOR_MODE), static_cast<int>(ColorMode::USE_OWN_MULTIPLY_PARENT_ALPHA), TEST_LOCATION);
763
764   view.UseFramebuffer(true);
765
766   DALI_TEST_EQUALS(view.GetChildAt(0u).GetProperty<int>(Dali::Actor::Property::COLOR_MODE), static_cast<int>(ColorMode::USE_OWN_COLOR), TEST_LOCATION);
767
768   view.UseFramebuffer(false);
769
770   DALI_TEST_EQUALS(view.GetChildAt(0u).GetProperty<int>(Dali::Actor::Property::COLOR_MODE), static_cast<int>(ColorMode::USE_OWN_MULTIPLY_PARENT_ALPHA), TEST_LOCATION);
771
772   END_TEST;
773 }