Add Set/Get ImageBasedLight ScaleFactor
[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-view/model-view.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::ModelView modelView)
77 {
78   Dali::Texture texture;
79
80   Actor meshActor = modelView.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() == 7u)
88       {
89         texture = textureSet.GetTexture(5u);
90       }
91     }
92   }
93
94   return texture;
95 }
96
97 Dali::Texture GetSpecularTexture(Dali::Scene3D::ModelView modelView)
98 {
99   Dali::Texture texture;
100
101   Actor meshActor = modelView.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() == 7u)
109       {
110         texture = textureSet.GetTexture(6u);
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 ModelView 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 modelView = Scene3D::SceneView::DownCast(handle);
185   DALI_TEST_CHECK(modelView);
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(2u, renderTaskCount, TEST_LOCATION);
306
307   RenderTask  renderTask = application.GetScene().GetRenderTaskList().GetTask(1u);
308   CameraActor camera     = renderTask.GetCameraActor();
309
310   application.GetScene().Add(view);
311
312   application.SendNotification();
313   application.Render();
314
315   CameraActor defaultCamera = renderTask.GetCameraActor();
316   DALI_TEST_CHECK(defaultCamera);
317   DALI_TEST_EQUALS(camera, defaultCamera, TEST_LOCATION);
318   DALI_TEST_EQUALS(defaultCamera, view.GetSelectedCamera(), TEST_LOCATION);
319
320   END_TEST;
321 }
322
323 int UtcDaliSceneViewUserCamera(void)
324 {
325   ToolkitTestApplication application;
326
327   Scene3D::SceneView view = Scene3D::SceneView::New();
328   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
329
330   application.GetScene().Add(view);
331
332   application.SendNotification();
333   application.Render();
334
335   CameraActor defaultCamera = view.GetSelectedCamera();
336   CameraActor camera        = Dali::CameraActor::New();
337   camera.SetProperty(Dali::Actor::Property::NAME, "camera");
338   view.AddCamera(camera);
339   view.SelectCamera("camera");
340
341   DALI_TEST_NOT_EQUALS(defaultCamera, view.GetSelectedCamera(), 0.0f, TEST_LOCATION);
342   DALI_TEST_EQUALS(camera, view.GetSelectedCamera(), TEST_LOCATION);
343
344   camera.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
345   camera.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
346   camera.SetFieldOfView(0.5f);
347   camera.SetNearClippingPlane(1.0f);
348   camera.SetFarClippingPlane(5000.0f);
349   camera.SetProperty(Dali::Actor::Property::POSITION, Vector3(20, 30, 40));
350
351   float   fov            = camera[Dali::CameraActor::Property::FIELD_OF_VIEW];
352   float   nearPlain      = camera[Dali::CameraActor::Property::NEAR_PLANE_DISTANCE];
353   float   farPlain       = camera[Dali::CameraActor::Property::FAR_PLANE_DISTANCE];
354   Vector3 cameraPosition = camera[Dali::Actor::Property::POSITION];
355
356   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(400, 300));
357
358   DALI_TEST_EQUALS(fov, camera.GetProperty<float>(Dali::CameraActor::Property::FIELD_OF_VIEW), TEST_LOCATION);
359   DALI_TEST_EQUALS(nearPlain, camera.GetProperty<float>(Dali::CameraActor::Property::NEAR_PLANE_DISTANCE), TEST_LOCATION);
360   DALI_TEST_EQUALS(farPlain, camera.GetProperty<float>(Dali::CameraActor::Property::FAR_PLANE_DISTANCE), TEST_LOCATION);
361   DALI_TEST_EQUALS(cameraPosition, camera.GetProperty<Vector3>(Dali::Actor::Property::POSITION), TEST_LOCATION);
362
363   END_TEST;
364 }
365
366 int UtcDaliSceneViewAddRemoveCamera(void)
367 {
368   ToolkitTestApplication application;
369
370   Scene3D::SceneView view = Scene3D::SceneView::New();
371   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
372
373   application.GetScene().Add(view);
374
375   application.SendNotification();
376   application.Render();
377
378   CameraActor camera0 = view.GetSelectedCamera();
379   camera0.SetProperty(Dali::Actor::Property::NAME, "camera0");
380   CameraActor camera1 = Dali::CameraActor::New();
381   camera1.SetProperty(Dali::Actor::Property::NAME, "camera1");
382
383   DALI_TEST_EQUALS(1u, view.GetCameraCount(), TEST_LOCATION);
384   view.AddCamera(camera1);
385   DALI_TEST_EQUALS(2u, view.GetCameraCount(), TEST_LOCATION);
386
387   DALI_TEST_EQUALS(camera0, view.GetCamera(0), TEST_LOCATION);
388   DALI_TEST_EQUALS(camera0, view.GetCamera("camera0"), TEST_LOCATION);
389   DALI_TEST_EQUALS(camera1, view.GetCamera(1), TEST_LOCATION);
390   DALI_TEST_EQUALS(camera1, view.GetCamera("camera1"), TEST_LOCATION);
391
392   DALI_TEST_EQUALS(camera0, view.GetSelectedCamera(), TEST_LOCATION);
393   view.SelectCamera(1); // 0 -> 1
394   DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
395   view.SelectCamera("camera0"); // 1 -> 0
396   DALI_TEST_EQUALS(camera0, view.GetSelectedCamera(), TEST_LOCATION);
397   view.SelectCamera("camera1"); // 0 -> 1
398   DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
399   view.SelectCamera(0); // 1 -> 0
400   DALI_TEST_EQUALS(camera0, view.GetSelectedCamera(), TEST_LOCATION);
401
402   view.SelectCamera(1); // 0 -> 1
403   DALI_TEST_EQUALS(camera1, view.GetSelectedCamera(), TEST_LOCATION);
404   DALI_TEST_EQUALS(2u, view.GetCameraCount(), TEST_LOCATION);
405   view.RemoveCamera(camera1); // 1 -> 0
406   DALI_TEST_EQUALS(camera0, view.GetSelectedCamera(), TEST_LOCATION);
407   DALI_TEST_EQUALS(1u, view.GetCameraCount(), TEST_LOCATION);
408
409   CameraActor defaultCamera = view.GetSelectedCamera();
410   DALI_TEST_CHECK(defaultCamera);
411   DALI_TEST_EQUALS(camera0, defaultCamera, TEST_LOCATION);
412   DALI_TEST_NOT_EQUALS(camera1, defaultCamera, 0.0f, TEST_LOCATION);
413   END_TEST;
414 }
415
416 int UtcDaliSceneViewImageBasedLight(void)
417 {
418   ToolkitTestApplication application;
419
420   Scene3D::SceneView view = Scene3D::SceneView::New();
421   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
422
423   application.GetScene().Add(view);
424
425   application.SendNotification();
426   application.Render();
427
428   Scene3D::ModelView modelView1 = Scene3D::ModelView::New(TEST_GLTF_FILE_NAME);
429   Scene3D::ModelView modelView2 = Scene3D::ModelView::New(TEST_GLTF_FILE_NAME);
430   Scene3D::ModelView modelView3 = Scene3D::ModelView::New(TEST_GLTF_FILE_NAME);
431   view.Add(modelView1);
432   view.Add(modelView2);
433
434   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView2), 0.0f, TEST_LOCATION);
435   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView2), 0.0f, TEST_LOCATION);
436   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView3), 0.0f, TEST_LOCATION);
437   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView3), 0.0f, TEST_LOCATION);
438
439   view.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
440
441   DALI_TEST_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView2), TEST_LOCATION);
442   DALI_TEST_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView2), TEST_LOCATION);
443   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView3), 0.0f, TEST_LOCATION);
444   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView3), 0.0f, TEST_LOCATION);
445
446   view.Add(modelView3);
447
448   DALI_TEST_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView3), TEST_LOCATION);
449   DALI_TEST_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView3), TEST_LOCATION);
450
451   view.Remove(modelView1);
452   view.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
453
454   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView2), 0.0f, TEST_LOCATION);
455   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView2), 0.0f, TEST_LOCATION);
456   DALI_TEST_NOT_EQUALS(GetDiffuseTexture(modelView1), GetDiffuseTexture(modelView3), 0.0f, TEST_LOCATION);
457   DALI_TEST_NOT_EQUALS(GetSpecularTexture(modelView1), GetSpecularTexture(modelView3), 0.0f, TEST_LOCATION);
458   DALI_TEST_EQUALS(GetDiffuseTexture(modelView2), GetDiffuseTexture(modelView3), TEST_LOCATION);
459   DALI_TEST_EQUALS(GetSpecularTexture(modelView2), GetSpecularTexture(modelView3), TEST_LOCATION);
460
461   END_TEST;
462 }
463
464 int UtcDaliSceneViewImageBasedFactor(void)
465 {
466   ToolkitTestApplication application;
467
468   Scene3D::SceneView view = Scene3D::SceneView::New();
469   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
470
471   application.GetScene().Add(view);
472
473   application.SendNotification();
474   application.Render();
475
476   Scene3D::ModelView modelView1 = Scene3D::ModelView::New(TEST_GLTF_FILE_NAME);
477   view.Add(modelView1);
478
479   DALI_TEST_EQUALS(view.GetImageBasedLightScaleFactor(), 1.0f, TEST_LOCATION);
480   DALI_TEST_EQUALS(modelView1.GetImageBasedLightScaleFactor(), 1.0f, TEST_LOCATION);
481
482   view.SetImageBasedLightScaleFactor(0.5f);
483   DALI_TEST_EQUALS(view.GetImageBasedLightScaleFactor(), 0.5f, TEST_LOCATION);
484   DALI_TEST_EQUALS(modelView1.GetImageBasedLightScaleFactor(), 0.5f, TEST_LOCATION);
485   END_TEST;
486 }
487
488 int UtcDaliSceneViewUseFramebuffer01(void)
489 {
490   ToolkitTestApplication application;
491
492   Scene3D::SceneView view = Scene3D::SceneView::New();
493   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
494
495   application.GetScene().Add(view);
496
497   application.SendNotification();
498   application.Render();
499
500   bool useFramebuffer = view.IsUsingFramebuffer();
501   view.UseFramebuffer(true);
502   DALI_TEST_NOT_EQUALS(useFramebuffer, view.IsUsingFramebuffer(), 0.0f, TEST_LOCATION);
503
504   END_TEST;
505 }
506
507 int UtcDaliSceneViewUseFramebuffer02(void)
508 {
509   ToolkitTestApplication application;
510
511   Scene3D::SceneView view = Scene3D::SceneView::New();
512   view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
513
514   application.GetScene().Add(view);
515
516   application.SendNotification();
517   application.Render();
518
519   RenderTask renderTask = application.GetScene().GetRenderTaskList().GetTask(1u);
520   DALI_TEST_CHECK(!renderTask.GetFrameBuffer());
521
522   view.UseFramebuffer(true);
523   DALI_TEST_CHECK(renderTask.GetFrameBuffer());
524
525   view.UseFramebuffer(false);
526   DALI_TEST_CHECK(!renderTask.GetFrameBuffer());
527
528   END_TEST;
529 }
530
531 // For ResourceReady
532 namespace
533 {
534 static bool gOnRelayoutCallBackCalled = false;
535 void OnRelayoutCallback(Actor actor)
536 {
537   gOnRelayoutCallBackCalled = true;
538 }
539
540 static bool gResourceReadyCalled = false;
541 void OnResourceReady(Control control)
542 {
543   gResourceReadyCalled = true;
544 }
545 }
546
547 int UtcDaliSceneViewResourceReady(void)
548 {
549   ToolkitTestApplication application;
550
551   gOnRelayoutCallBackCalled = false;
552   gResourceReadyCalled = false;
553   Scene3D::SceneView view = Scene3D::SceneView::New();
554   view.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
555   view.OnRelayoutSignal().Connect(OnRelayoutCallback);
556   view.ResourceReadySignal().Connect(OnResourceReady);
557   // SceneView::IsResourceReady() returns true by default.
558   DALI_TEST_EQUALS(view.IsResourceReady(), true, TEST_LOCATION);
559
560   // Sanity check
561   DALI_TEST_CHECK(!gOnRelayoutCallBackCalled);
562   DALI_TEST_CHECK(!gResourceReadyCalled);
563
564   application.GetScene().Add(view);
565
566   application.SendNotification();
567   application.Render();
568
569   DALI_TEST_EQUALS(gOnRelayoutCallBackCalled, true, TEST_LOCATION);
570   DALI_TEST_EQUALS(view.IsResourceReady(), true, TEST_LOCATION);
571   DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
572
573   gOnRelayoutCallBackCalled = false;
574   gResourceReadyCalled = false;
575
576   view.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
577
578   application.SendNotification();
579   application.Render();
580
581   DALI_TEST_EQUALS(gOnRelayoutCallBackCalled, false, TEST_LOCATION);
582   DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
583
584   END_TEST;
585 }