2 * Copyright (c) 2021 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.
18 #include <dali-test-suite-utils.h>
19 #include <dali/devel-api/events/hit-test-algorithm.h>
20 #include <dali/integration-api/debug.h>
21 #include <dali/public-api/dali-core.h>
22 #include <mesh-builder.h>
24 #include <test-actor-utils.h>
25 #include <test-native-image.h>
29 #define BOOLSTR(x) ((x) ? "T" : "F")
31 //& set: DaliRenderTask
35 void utc_dali_render_task_startup(void)
37 test_return_value = TET_UNDEF;
40 void utc_dali_render_task_cleanup(void)
42 test_return_value = TET_PASS;
48 * Constructor, Destructor, DownCast, New, copy constructor, assignment operator
50 * SetSourceActor 2+ve, 1-ve
51 * GetSourceActor 1+ve, 1-ve
52 * SetExclusive 2+ve, 0-ve
53 * IsExclusive 2+ve, 0-ve
54 * SetInputEnabled 1+ve, 0-ve
55 * GetInputEnabled 1+ve, 0-ve
56 * SetCameraActor 1+ve, 1-ve
57 * GetCameraActor 1+ve, 1-ve
58 * SetTargetFrameBuffer 1+ve, 1-ve
59 * GetTargetFrameBuffer 1+ve, 1-ve
60 * SetScreenToFrameBufferFunction 1+ve, 1-ve
61 * GetScreenToFrameBufferFunction 1+ve, 1-ve
62 * SetScreenToFrameBufferMappingActor 1+ve, 1-ve
63 * GetScreenToFrameBufferMappingActor 1+ve, 1-ve
64 * SetViewportPosition 1+ve
65 * GetCurrentViewportPosition 1+ve
66 * SetViewportSize 1+ve
67 * GetCurrentViewportSize 1+ve
68 * SetViewport 2+ve, 1-ve
69 * GetViewport 2+ve, 1-ve
70 * SetClearColor 1+ve, 1-ve
71 * GetClearColor 1+ve, 1-ve
72 * SetClearEnabled 1+ve, 1-ve
73 * GetClearEnabled 1+ve, 1-ve
81 namespace // unnamed namespace
83 const int RENDER_FRAME_INTERVAL = 16; ///< Duration of each frame in ms. (at approx 60FPS)
86 * Simulate time passed by.
88 * @note this will always process at least 1 frame (1/60 sec)
90 * @param application Test application instance
91 * @param duration Time to pass in milliseconds.
92 * @return The actual time passed in milliseconds
94 int Wait(TestApplication& application, int duration = 0)
98 for(int i = 0; i <= (duration / RENDER_FRAME_INTERVAL); i++)
100 application.SendNotification();
101 application.Render(RENDER_FRAME_INTERVAL);
102 time += RENDER_FRAME_INTERVAL;
108 struct RenderTaskFinished
110 RenderTaskFinished(bool& finished)
115 void operator()(RenderTask& renderTask)
123 struct RenderTaskFinishedRemoveSource
125 RenderTaskFinishedRemoveSource(bool& finished)
126 : finished(finished),
131 void operator()(RenderTask& renderTask)
133 DALI_TEST_CHECK(finishedOnce == false);
136 Actor srcActor = renderTask.GetSourceActor();
137 UnparentAndReset(srcActor);
144 struct RenderTaskFinishedRenderAgain
146 RenderTaskFinishedRenderAgain(bool& finished)
147 : finished(finished),
152 void operator()(RenderTask& renderTask)
154 DALI_TEST_CHECK(finishedOnce == false);
157 renderTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
164 bool TestScreenToFrameBufferFunction(Vector2& coordinates)
166 coordinates = coordinates + Vector2(1, 2);
171 Actor CreateRenderableActorSuccess(TestApplication& application, std::string filename)
173 Actor actor = CreateRenderableActor();
174 actor.SetProperty(Actor::Property::SIZE, Vector2(80.0f, 80.0f));
178 Texture CreateTexture(void)
180 return Dali::CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 80, 80);
183 RenderTask CreateRenderTask(TestApplication& application,
184 CameraActor offscreenCamera,
185 Actor rootActor, // Reset default render task to point at this actor
186 Actor secondRootActor, // Source actor
187 unsigned int refreshRate,
189 uint32_t frameBufferWidth = 10,
190 uint32_t frameBufferHeight = 10)
192 // Change main render task to use a different root
193 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
194 taskList.GetTask(0u).SetSourceActor(rootActor);
196 FrameBuffer frameBuffer = FrameBuffer::New(frameBufferWidth, frameBufferHeight);
199 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(frameBufferWidth, frameBufferHeight);
200 Texture texture = Texture::New(*testNativeImagePtr);
201 frameBuffer.AttachColorTexture(texture);
204 // Don't draw output framebuffer // '
206 RenderTask newTask = taskList.CreateTask();
207 newTask.SetCameraActor(offscreenCamera);
208 newTask.SetSourceActor(secondRootActor);
209 newTask.SetInputEnabled(false);
210 newTask.SetClearColor(Vector4(0.f, 0.f, 0.f, 0.f));
211 newTask.SetClearEnabled(true);
212 newTask.SetExclusive(true);
213 newTask.SetRefreshRate(refreshRate);
214 newTask.SetFrameBuffer(frameBuffer);
215 newTask.SetProperty(RenderTask::Property::REQUIRES_SYNC, glSync);
219 bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool testDrawn, bool& finishedSig, bool testFinished, bool testKeepUpdating, int lineNumber)
224 tet_printf("TestApplication::UpdateRender().\n");
226 application.Render(16);
227 application.SendNotification();
229 bool sigPassed = false;
232 sigPassed = finishedSig;
236 sigPassed = !finishedSig;
239 bool drawResult = callStack.FindMethod("DrawElements") || callStack.FindMethod("DrawArrays");
241 bool drawPassed = false;
244 drawPassed = drawResult;
248 drawPassed = !drawResult;
251 bool keepUpdating = (application.GetUpdateStatus() != 0);
252 bool keepUpdatingPassed = false;
255 keepUpdatingPassed = keepUpdating;
259 keepUpdatingPassed = !keepUpdating;
262 bool result = (sigPassed && drawPassed && keepUpdatingPassed);
264 tet_printf("UpdateRender: Expected: Draw:%s Signal:%s KeepUpdating: %s Actual: Draw:%s Signal:%s KeepUpdating: %s %s, line %d\n",
266 BOOLSTR(testFinished),
267 BOOLSTR(testKeepUpdating),
269 BOOLSTR(finishedSig),
270 BOOLSTR(keepUpdating),
271 result ? "Passed" : "Failed",
277 } // unnamed namespace
279 /****************************************************************************************************/
280 /****************************************************************************************************/
281 /******************************** TEST CASES BELOW **********************************************/
282 /****************************************************************************************************/
283 /****************************************************************************************************/
285 int UtcDaliRenderTaskDownCast01(void)
287 TestApplication application;
289 tet_infoline("Testing RenderTask::DownCast()");
291 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
293 BaseHandle base = taskList.GetTask(0u);
294 DALI_TEST_CHECK(base);
296 RenderTask task = RenderTask::DownCast(base);
297 DALI_TEST_CHECK(task);
299 // Try calling a method
300 DALI_TEST_CHECK(task.GetSourceActor());
304 int UtcDaliRenderTaskDownCast02(void)
306 TestApplication application;
308 tet_infoline("Testing RenderTask::DownCast()");
310 Actor actor = Actor::New();
312 RenderTask task = RenderTask::DownCast(actor);
313 DALI_TEST_CHECK(!task);
318 int UtcDaliRenderTaskSetSourceActorN(void)
320 TestApplication application;
321 tet_infoline("Testing RenderTask::SetSourceActor() Negative - try with empty actor handle");
322 Integration::Scene stage = application.GetScene();
326 RenderTaskList taskList = stage.GetRenderTaskList();
327 RenderTask renderTask = taskList.CreateTask();
328 renderTask.SetSourceActor(srcActor);
330 application.SendNotification();
331 application.Render();
333 DALI_TEST_CHECK(!renderTask.GetSourceActor());
337 int UtcDaliRenderTaskSetSourceActorP01(void)
339 TestApplication application;
341 tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that setting a non-renderable actor stops existing source actor being rendered ");
343 Integration::Scene stage = application.GetScene();
344 RenderTaskList taskList = stage.GetRenderTaskList();
345 RenderTask task = taskList.GetTask(0u);
347 Actor actor = task.GetSourceActor();
348 DALI_TEST_CHECK(actor);
350 Texture img = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 1, 1);
351 Actor newActor = CreateRenderableActor(img);
352 newActor.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
355 Actor nonRenderableActor = Actor::New();
356 stage.Add(nonRenderableActor);
358 // Stop the newActor from being rendered by changing the source actor
359 DALI_TEST_CHECK(nonRenderableActor);
360 task.SetSourceActor(nonRenderableActor);
361 DALI_TEST_CHECK(task.GetSourceActor() != actor);
362 DALI_TEST_CHECK(task.GetSourceActor() == nonRenderableActor);
364 TestGlAbstraction& gl = application.GetGlAbstraction();
365 TraceCallStack& drawTrace = gl.GetDrawTrace();
366 drawTrace.Enable(true);
368 // Update & Render nothing!
369 application.GetGlAbstraction().ClearBoundTextures();
370 application.SendNotification();
371 application.Render();
373 // Check that nothing was rendered
374 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION);
379 int UtcDaliRenderTaskSetSourceActorP02(void)
381 TestApplication application;
383 tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that switching source from a non-renderable to a renderable actor causes the texture to be drawn");
385 Integration::Scene stage = application.GetScene();
387 RenderTaskList taskList = stage.GetRenderTaskList();
389 RenderTask task = taskList.GetTask(0u);
391 Actor actor = task.GetSourceActor();
392 DALI_TEST_CHECK(actor);
394 Texture img = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 1, 1);
395 Actor newActor = CreateRenderableActor(img);
396 newActor.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
399 Actor nonRenderableActor = Actor::New();
400 stage.Add(nonRenderableActor);
402 TestGlAbstraction& gl = application.GetGlAbstraction();
403 TraceCallStack& drawTrace = gl.GetDrawTrace();
404 drawTrace.Enable(true);
406 // Stop the newActor from being rendered by changing the source actor
407 DALI_TEST_CHECK(nonRenderableActor);
408 task.SetSourceActor(nonRenderableActor);
409 DALI_TEST_CHECK(task.GetSourceActor() != actor);
410 DALI_TEST_CHECK(task.GetSourceActor() == nonRenderableActor);
412 // Update & Render nothing!
413 application.GetGlAbstraction().ClearBoundTextures();
414 application.SendNotification();
415 application.Render();
417 // Check that nothing was rendered
418 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION);
421 // Set newActor as the new source Actor
422 task.SetSourceActor(newActor);
423 DALI_TEST_CHECK(task.GetSourceActor() != actor);
424 DALI_TEST_CHECK(task.GetSourceActor() == newActor);
426 // Update & Render the newActor
427 application.GetGlAbstraction().ClearBoundTextures();
428 application.SendNotification();
429 application.Render();
431 // Check that the newActor was rendered
432 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION);
436 int UtcDaliRenderTaskSetSourceActorOffScene(void)
438 TestApplication application;
440 tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)");
442 Integration::Scene stage = application.GetScene();
443 RenderTaskList taskList = stage.GetRenderTaskList();
444 RenderTask task = taskList.GetTask(0u);
446 Actor actor = task.GetSourceActor();
447 DALI_TEST_CHECK(actor);
449 TestGlAbstraction& gl = application.GetGlAbstraction();
450 TraceCallStack& drawTrace = gl.GetDrawTrace();
451 drawTrace.Enable(true);
453 Texture img = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 1, 1);
454 Actor newActor = CreateRenderableActor(img);
455 newActor.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
456 task.SetSourceActor(newActor);
457 // Don't add newActor to stage yet //'
459 // Update & Render with the actor initially off-stage
460 application.SendNotification();
461 application.Render();
463 // Check that nothing was rendered
464 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION);
469 // Update & Render with the actor on-stage
470 application.GetGlAbstraction().ClearBoundTextures();
471 application.SendNotification();
472 application.Render();
474 // Check that the newActor was rendered
475 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION);
478 // Now remove from stage
479 stage.Remove(newActor);
481 // Update & Render with the actor off-stage
482 application.SendNotification();
483 application.Render();
484 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION);
489 int UtcDaliRenderTaskSetSourceActorEmpty(void)
491 TestApplication application;
493 tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)");
495 Integration::Scene stage = application.GetScene();
496 RenderTaskList taskList = stage.GetRenderTaskList();
497 RenderTask task = taskList.GetTask(0u);
499 Actor actor = task.GetSourceActor();
500 DALI_TEST_CHECK(actor);
502 Texture img = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 1, 1);
503 Actor newActor = CreateRenderableActor(img);
504 newActor.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
507 Actor nonRenderableActor = Actor::New();
508 stage.Add(nonRenderableActor);
510 // Set with empty handle
511 task.SetSourceActor(Actor());
512 DALI_TEST_CHECK(!task.GetSourceActor());
514 TestGlAbstraction& gl = application.GetGlAbstraction();
515 TraceCallStack& drawTrace = gl.GetDrawTrace();
516 drawTrace.Enable(true);
518 // Update & Render nothing!
519 application.SendNotification();
520 application.Render();
522 // Check that nothing was rendered
523 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION);
525 // Set with non-empty handle
526 task.SetSourceActor(newActor);
527 DALI_TEST_CHECK(task.GetSourceActor() == newActor);
529 // Update & Render the newActor
530 application.GetGlAbstraction().ClearBoundTextures();
531 application.SendNotification();
532 application.Render();
534 // Check that the newActor was rendered
535 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION);
539 int UtcDaliRenderTaskSetSourceActorDestroyed(void)
541 TestApplication application;
543 tet_infoline("Testing RenderTask::SetSourceActor - Set a source actor and destroy the source actor");
545 Integration::Scene stage = application.GetScene();
546 RenderTaskList taskList = stage.GetRenderTaskList();
547 RenderTask task = taskList.GetTask(0u);
549 Actor actor = task.GetSourceActor();
550 DALI_TEST_CHECK(actor);
552 Texture img = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 1, 1);
554 Actor newActor = CreateRenderableActor(img);
555 newActor.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
558 task.SetSourceActor(newActor);
560 DALI_TEST_CHECK(task.GetSourceActor() != actor);
561 DALI_TEST_CHECK(task.GetSourceActor() == newActor);
563 application.SendNotification();
564 application.Render();
566 // Destroy the source actor
567 stage.Remove(newActor);
570 DALI_TEST_CHECK(!task.GetSourceActor()); // The source actor should be an empty handle.
575 int UtcDaliRenderTaskGetSourceActorP01(void)
577 TestApplication application;
579 tet_infoline("Testing RenderTask::GetSourceActor() Check the default render task has a valid source actor");
581 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
583 RenderTask task = taskList.GetTask(0u);
585 Actor actor = task.GetSourceActor();
586 DALI_TEST_CHECK(actor);
588 // By default the entire scene should be rendered
589 Actor root = application.GetScene().GetLayer(0);
590 DALI_TEST_CHECK(root == actor);
594 int UtcDaliRenderTaskGetSourceActorP02(void)
596 TestApplication application;
598 tet_infoline("Testing RenderTask::GetSourceActor() Create a new render task, Add a new actor to the stage and set it as the source of the new render task. Get its source actor and check that it is equivalent to what was set.");
600 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
601 RenderTask task = taskList.CreateTask();
602 Actor actor = Actor::New();
603 application.GetScene().Add(actor);
604 task.SetSourceActor(actor);
606 DALI_TEST_EQUALS(actor, task.GetSourceActor(), TEST_LOCATION);
611 int UtcDaliRenderTaskGetSourceActorN(void)
613 TestApplication application;
615 tet_infoline("Testing RenderTask::GetSourceActor() Try with empty handle");
620 Actor actor = task.GetSourceActor();
622 catch(Dali::DaliException& e)
624 DALI_TEST_PRINT_ASSERT(e);
625 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
631 int UtcDaliRenderTaskSetExclusive(void)
633 TestApplication application;
635 tet_infoline("Testing RenderTask::SetExclusive() Check that exclusion works");
637 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
639 // Manipulate the GenTextures behaviour, to identify different actors
641 std::vector<GLuint> ids;
642 ids.push_back(8); // 8 = actor1
643 ids.push_back(9); // 9 = actor2
644 ids.push_back(10); // 10 = actor3
645 application.GetGlAbstraction().SetNextTextureIds(ids);
647 Texture img1 = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 1, 1);
648 Actor actor1 = CreateRenderableActor(img1);
649 actor1.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
650 application.GetScene().Add(actor1);
652 // Update & Render actor1
653 application.SendNotification();
654 application.Render();
656 // Check that the actor1 was rendered
657 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures(GL_TEXTURE0);
658 DALI_TEST_GREATER(boundTextures.size(), static_cast<std::vector<GLuint>::size_type>(0), TEST_LOCATION);
660 if(boundTextures.size())
662 int a = boundTextures.size() - 1;
663 DALI_TEST_EQUALS(boundTextures[a], 8u /*unique to actor1*/, TEST_LOCATION);
666 Texture img2 = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 1, 1);
668 Actor actor2 = CreateRenderableActor(img2);
669 actor2.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
671 // Force actor2 to be rendered before actor1
672 Layer layer = Layer::New();
673 application.GetScene().Add(layer);
675 layer.LowerToBottom();
678 application.GetGlAbstraction().ClearBoundTextures();
679 application.SendNotification();
680 application.Render();
682 // Check that the actors were rendered
683 DALI_TEST_GREATER(boundTextures.size(), static_cast<std::vector<GLuint>::size_type>(1), TEST_LOCATION);
685 if(boundTextures.size() >= 2)
687 int a = boundTextures.size() - 2;
688 int b = boundTextures.size() - 1;
689 DALI_TEST_EQUALS(boundTextures[a], 9u /*unique to actor2*/, TEST_LOCATION);
690 DALI_TEST_EQUALS(boundTextures[b], 8u /*unique to actor1*/, TEST_LOCATION);
693 Texture img3 = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 1, 1);
694 Actor actor3 = CreateRenderableActor(img3);
695 actor3.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
697 // Force actor3 to be rendered before actor2
698 layer = Layer::New();
699 application.GetScene().Add(layer);
701 layer.LowerToBottom();
703 // Update & Render all actors
704 application.GetGlAbstraction().ClearBoundTextures();
705 application.SendNotification();
706 application.Render();
708 // Check that the actors were rendered
709 DALI_TEST_GREATER(boundTextures.size(), static_cast<std::vector<GLuint>::size_type>(2), TEST_LOCATION);
711 if(boundTextures.size() >= 3)
713 int a = boundTextures.size() - 3;
714 int b = boundTextures.size() - 2;
715 int c = boundTextures.size() - 1;
716 DALI_TEST_EQUALS(boundTextures[a], 10u /*unique to actor3*/, TEST_LOCATION);
717 DALI_TEST_EQUALS(boundTextures[b], 9u /*unique to actor2*/, TEST_LOCATION);
718 DALI_TEST_EQUALS(boundTextures[c], 8u /*unique to actor1*/, TEST_LOCATION);
721 // Both actors are now connected to the root node
722 // Setup 2 render-tasks - the first will render from the root-node, and the second from actor2
724 // Not exclusive is the default
725 RenderTask task1 = taskList.GetTask(0u);
726 DALI_TEST_CHECK(false == task1.IsExclusive());
728 RenderTask task2 = taskList.CreateTask();
729 DALI_TEST_CHECK(false == task2.IsExclusive());
730 task2.SetSourceActor(actor2);
732 // Task1 should render all actors, and task 2 should render only actor2
734 application.GetGlAbstraction().ClearBoundTextures();
735 application.SendNotification();
736 application.Render();
738 if(boundTextures.size() >= 4)
740 // Test that task 1 renders actor3, then actor2 & then actor1
741 int a = boundTextures.size() - 4;
742 int b = boundTextures.size() - 3;
743 int c = boundTextures.size() - 2;
744 int d = boundTextures.size() - 1;
745 DALI_TEST_EQUALS(boundTextures[a], 10u /*unique to actor3*/, TEST_LOCATION);
746 DALI_TEST_EQUALS(boundTextures[b], 9u /*unique to actor2*/, TEST_LOCATION);
747 DALI_TEST_EQUALS(boundTextures[c], 8u /*unique to actor1*/, TEST_LOCATION);
749 // Test that task 2 renders actor2
750 DALI_TEST_EQUALS(boundTextures[d], 9u, TEST_LOCATION);
753 // Make actor2 exclusive to task2
755 task2.SetExclusive(true);
756 DALI_TEST_CHECK(true == task2.IsExclusive());
758 // Task1 should render only actor1, and task 2 should render only actor2
760 application.GetGlAbstraction().ClearBoundTextures();
761 application.SendNotification();
762 application.Render();
764 DALI_TEST_EQUALS(boundTextures.size(), 3u, TEST_LOCATION);
765 if(boundTextures.size() == 3)
767 // Test that task 1 renders actor3 & actor1
768 DALI_TEST_CHECK(boundTextures[0] == 10u);
769 DALI_TEST_CHECK(boundTextures[1] == 8u);
771 // Test that task 2 renders actor2
772 DALI_TEST_CHECK(boundTextures[2] == 9u);
775 // Create a renderable actor and replace the source actor in task2
776 auto actor4 = CreateRenderableActor();
777 task2.SetSourceActor(actor3);
778 DALI_TEST_EQUALS(actor3, task2.GetSourceActor(), TEST_LOCATION);
783 int UtcDaliRenderTaskSetExclusive02(void)
785 TestApplication application;
787 tet_infoline("Testing RenderTask::SetExclusive() Check that changing from exclusive to not-exclusive works");
789 std::vector<GLuint> ids;
790 ids.push_back(8); // 8 = actor1
791 application.GetGlAbstraction().SetNextTextureIds(ids);
793 Texture img1 = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 1, 1);
794 Actor actor1 = CreateRenderableActor(img1);
795 actor1.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
796 application.GetScene().Add(actor1);
798 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
799 RenderTask task = taskList.CreateTask();
801 task.SetSourceActor(actor1);
802 task.SetExclusive(true); // Actor should only render once
804 TestGlAbstraction& gl = application.GetGlAbstraction();
805 TraceCallStack& drawTrace = gl.GetDrawTrace();
806 drawTrace.Enable(true);
808 // Update & Render actor1
809 application.SendNotification();
810 application.Render();
812 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION);
814 // Set task to non-exclusive - actor1 should render twice:
816 task.SetExclusive(false);
817 application.SendNotification();
818 application.Render();
820 DALI_TEST_EQUALS(drawTrace.CountMethod("DrawElements"), 2, TEST_LOCATION);
825 int UtcDaliRenderTaskSetExclusiveN(void)
827 TestApplication application;
829 tet_infoline("Testing RenderTask::SetExclusive() on empty handle");
834 task.SetExclusive(true);
836 catch(Dali::DaliException& e)
838 DALI_TEST_PRINT_ASSERT(e);
839 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
844 int UtcDaliRenderTaskIsExclusive01(void)
846 TestApplication application;
848 tet_infoline("Testing RenderTask::IsExclusive() Check default values are non-exclusive");
850 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
852 // Not exclusive is the default
853 RenderTask task = taskList.GetTask(0u);
854 DALI_TEST_CHECK(false == task.IsExclusive());
856 RenderTask newTask = taskList.CreateTask();
857 DALI_TEST_CHECK(false == newTask.IsExclusive());
862 int UtcDaliRenderTaskIsExclusive02(void)
864 TestApplication application;
866 tet_infoline("Testing RenderTask::IsExclusive() Check the getter returns set values");
868 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
870 // Not exclusive is the default
871 RenderTask newTask = taskList.CreateTask();
872 DALI_TEST_EQUALS(newTask.IsExclusive(), false, TEST_LOCATION);
874 newTask.SetExclusive(true);
875 DALI_TEST_EQUALS(newTask.IsExclusive(), true, TEST_LOCATION);
879 int UtcDaliRenderTaskIsExclusiveN(void)
881 TestApplication application;
883 tet_infoline("Testing RenderTask::IsExclusive() on empty handle");
888 bool x = task.IsExclusive();
891 catch(Dali::DaliException& e)
893 DALI_TEST_PRINT_ASSERT(e);
894 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
899 int UtcDaliRenderTaskSetInputEnabled(void)
901 TestApplication application;
903 tet_infoline("Testing RenderTask::SetInputEnabled()");
905 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
907 // Input is enabled by default
908 RenderTask task = taskList.GetTask(0u);
909 DALI_TEST_CHECK(true == task.GetInputEnabled());
911 task.SetInputEnabled(false);
912 DALI_TEST_CHECK(false == task.GetInputEnabled());
914 task.SetInputEnabled(true);
915 DALI_TEST_CHECK(true == task.GetInputEnabled());
919 int UtcDaliRenderTaskGetInputEnabled(void)
921 TestApplication application;
923 tet_infoline("Testing RenderTask::GetInputEnabled()");
925 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
927 // Input is enabled by default
928 RenderTask task = taskList.GetTask(0u);
929 DALI_TEST_EQUALS(true, task.GetInputEnabled(), TEST_LOCATION);
931 RenderTask newTask = taskList.CreateTask();
932 DALI_TEST_EQUALS(true, newTask.GetInputEnabled(), TEST_LOCATION);
934 newTask.SetInputEnabled(false);
935 DALI_TEST_EQUALS(false, newTask.GetInputEnabled(), TEST_LOCATION);
940 int UtcDaliRenderTaskSetCameraActorP(void)
942 TestApplication application;
944 tet_infoline("Testing RenderTask::SetCameraActor()");
946 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
948 RenderTask task = taskList.GetTask(0u);
950 Actor defaultCameraActor = task.GetCameraActor();
951 DALI_TEST_CHECK(defaultCameraActor);
953 CameraActor newCameraActor = CameraActor::New();
954 DALI_TEST_CHECK(newCameraActor);
956 task.SetCameraActor(newCameraActor);
957 DALI_TEST_CHECK(task.GetCameraActor() != defaultCameraActor);
958 DALI_TEST_EQUALS(task.GetCameraActor(), newCameraActor, TEST_LOCATION);
962 int UtcDaliRenderTaskSetCameraActorN(void)
964 TestApplication application;
966 tet_infoline("Testing RenderTask::SetCameraActor() with empty actor handle");
968 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
970 RenderTask task = taskList.GetTask(0u);
972 Actor actor = task.GetCameraActor();
973 DALI_TEST_CHECK(actor);
975 CameraActor cameraActor;
977 task.SetCameraActor(cameraActor);
978 DALI_TEST_EQUALS((bool)task.GetCameraActor(), false, TEST_LOCATION);
979 DALI_TEST_EQUALS(task.GetCameraActor(), cameraActor, TEST_LOCATION);
983 int UtcDaliRenderTaskSetCameraActorDestroyed(void)
985 TestApplication application;
987 tet_infoline("Testing RenderTask::SetCameraActor - Set a camera actor and destroy the camera actor");
989 Integration::Scene stage = application.GetScene();
990 RenderTaskList taskList = stage.GetRenderTaskList();
991 RenderTask task = taskList.GetTask(0u);
993 CameraActor newCameraActor = CameraActor::New();
994 task.SetCameraActor(newCameraActor);
996 DALI_TEST_EQUALS(task.GetCameraActor(), newCameraActor, TEST_LOCATION);
998 // Destroy the camera actor
999 newCameraActor.Reset();
1001 CameraActor camera = task.GetCameraActor();
1002 DALI_TEST_CHECK(!camera); // The camera actor should be an empty handle.
1007 int UtcDaliRenderTaskGetCameraActorP(void)
1009 TestApplication application;
1011 tet_infoline("Testing RenderTask::GetCameraActor()");
1013 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1015 RenderTask task = taskList.GetTask(0u);
1017 CameraActor actor = task.GetCameraActor();
1018 DALI_TEST_CHECK(actor);
1019 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
1020 DALI_TEST_GREATER(actor.GetFieldOfView(), 0.0f, TEST_LOCATION);
1024 int UtcDaliRenderTaskGetCameraActorN(void)
1026 TestApplication application;
1028 tet_infoline("Testing RenderTask::GetCameraActor() with empty handle");
1033 Actor actor = task.GetCameraActor();
1035 catch(Dali::DaliException& e)
1037 DALI_TEST_PRINT_ASSERT(e);
1038 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1044 int UtcDaliRenderTaskSetFrameBufferP(void)
1046 TestApplication application;
1048 tet_infoline("Testing RenderTask::SetFrameBuffer()");
1050 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1052 RenderTask task = taskList.GetTask(0u);
1054 FrameBuffer newFrameBuffer = FrameBuffer::New(128u, 128u, FrameBuffer::Attachment::NONE);
1055 task.SetFrameBuffer(newFrameBuffer);
1056 DALI_TEST_CHECK(task.GetFrameBuffer() == newFrameBuffer);
1060 int UtcDaliRenderTaskSetFrameBufferN(void)
1062 TestApplication application;
1064 tet_infoline("Testing RenderTask::SetFrameBuffer()");
1066 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1068 RenderTask task = taskList.GetTask(0u);
1069 FrameBuffer newFrameBuffer; // Empty handle
1070 task.SetFrameBuffer(newFrameBuffer);
1071 DALI_TEST_EQUALS((bool)task.GetFrameBuffer(), false, TEST_LOCATION);
1075 int UtcDaliRenderTaskGetFrameBufferP(void)
1077 TestApplication application;
1079 tet_infoline("Testing RenderTask::GetFrameBuffer()");
1081 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1083 RenderTask task = taskList.GetTask(0u);
1085 FrameBuffer newFrameBuffer = FrameBuffer::New(1u, 1u, FrameBuffer::Attachment::NONE);
1086 task.SetFrameBuffer(newFrameBuffer);
1087 DALI_TEST_CHECK(task.GetFrameBuffer() == newFrameBuffer);
1091 int UtcDaliRenderTaskGetFrameBufferN(void)
1093 TestApplication application;
1095 tet_infoline("Testing RenderTask::GetFrameBuffer()");
1097 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1099 RenderTask task = taskList.GetTask(0u);
1101 // By default render-tasks do not render off-screen
1102 FrameBuffer frameBuffer = task.GetFrameBuffer();
1103 DALI_TEST_CHECK(!frameBuffer);
1108 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionP(void)
1110 TestApplication application;
1112 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
1114 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1116 RenderTask task = taskList.GetTask(0u);
1118 task.SetScreenToFrameBufferFunction(TestScreenToFrameBufferFunction);
1120 Vector2 coordinates(5, 10);
1121 Vector2 convertedCoordinates(6, 12); // + Vector(1, 2)
1123 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1124 DALI_TEST_CHECK(func(coordinates));
1125 DALI_TEST_CHECK(coordinates == convertedCoordinates);
1127 task.SetScreenToFrameBufferFunction(RenderTask::FULLSCREEN_FRAMEBUFFER_FUNCTION);
1128 func = task.GetScreenToFrameBufferFunction();
1129 DALI_TEST_CHECK(func(coordinates));
1131 task.SetScreenToFrameBufferFunction(RenderTask::DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION);
1132 func = task.GetScreenToFrameBufferFunction();
1133 DALI_TEST_CHECK(!func(coordinates));
1137 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionN(void)
1139 TestApplication application;
1141 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
1143 RenderTask task; // Empty handle
1146 task.SetScreenToFrameBufferFunction(TestScreenToFrameBufferFunction);
1148 catch(Dali::DaliException& e)
1150 DALI_TEST_PRINT_ASSERT(e);
1151 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1156 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionP(void)
1158 TestApplication application;
1160 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction()");
1162 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1164 RenderTask task = taskList.GetTask(0u);
1166 Vector2 originalCoordinates(5, 10);
1167 Vector2 coordinates(5, 10);
1169 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1170 DALI_TEST_CHECK(!func(coordinates)); // conversion should fail by default
1171 DALI_TEST_CHECK(coordinates == originalCoordinates); // coordinates should not be modified
1175 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionN(void)
1177 TestApplication application;
1179 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction() on empty handle");
1184 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1187 catch(Dali::DaliException& e)
1189 DALI_TEST_PRINT_ASSERT(e);
1190 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1195 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorP(void)
1197 TestApplication application;
1198 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor ");
1200 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1201 RenderTask renderTask = taskList.CreateTask();
1202 Actor mappingActor = Actor::New();
1203 renderTask.SetScreenToFrameBufferMappingActor(mappingActor);
1205 DALI_TEST_EQUALS(mappingActor, renderTask.GetScreenToFrameBufferMappingActor(), TEST_LOCATION);
1209 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorN(void)
1211 TestApplication application;
1212 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor with empty task handle");
1218 task.SetScreenToFrameBufferMappingActor(mappingActor);
1220 catch(Dali::DaliException& e)
1222 DALI_TEST_PRINT_ASSERT(e);
1223 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1228 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActor02N(void)
1230 TestApplication application;
1231 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor with empty task handle");
1233 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1234 RenderTask renderTask = taskList.CreateTask();
1236 renderTask.SetScreenToFrameBufferMappingActor(actor);
1238 DALI_TEST_EQUALS((bool)renderTask.GetScreenToFrameBufferMappingActor(), false, TEST_LOCATION);
1242 int UtcDaliRenderTaskGetViewportP01(void)
1244 TestApplication application;
1246 tet_infoline("Testing RenderTask::GetViewport() on default task");
1248 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1249 RenderTask task = taskList.GetTask(0u);
1250 Viewport viewport = task.GetViewport();
1252 // By default the viewport should match the stage width/height
1253 Vector2 stageSize = application.GetScene().GetSize();
1254 Viewport expectedViewport(0, 0, stageSize.width, stageSize.height);
1255 DALI_TEST_CHECK(viewport == expectedViewport);
1259 int UtcDaliRenderTaskGetViewportP02(void)
1261 TestApplication application;
1263 tet_infoline("Testing RenderTask::GetViewport() on new task");
1265 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1266 RenderTask task = taskList.CreateTask();
1267 Viewport viewport = task.GetViewport();
1269 // By default the viewport should match the stage width/height
1270 Vector2 stageSize = application.GetScene().GetSize();
1271 Viewport expectedViewport(0, 0, stageSize.width, stageSize.height);
1272 DALI_TEST_CHECK(viewport == expectedViewport);
1276 int UtcDaliRenderTaskGetViewportN(void)
1278 TestApplication application;
1280 tet_infoline("Testing RenderTask::GetViewport() on empty handle");
1285 Viewport viewport = task.GetViewport();
1288 catch(Dali::DaliException& e)
1290 DALI_TEST_PRINT_ASSERT(e);
1291 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1296 int UtcDaliRenderTaskSetViewportP(void)
1298 TestApplication application;
1300 tet_infoline("Testing RenderTask::SetViewport()");
1302 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1304 RenderTask task = taskList.GetTask(0u);
1305 Vector2 stageSize = application.GetScene().GetSize();
1306 Viewport newViewport(0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f);
1307 task.SetViewport(newViewport);
1309 // Update (viewport is a property)
1310 application.SendNotification();
1311 application.Render();
1313 DALI_TEST_CHECK(task.GetViewport() == newViewport);
1317 int UtcDaliRenderTaskSetViewportN(void)
1319 TestApplication application;
1321 tet_infoline("Testing RenderTask::SetViewport()");
1323 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1328 Vector2 stageSize = application.GetScene().GetSize();
1329 Viewport newViewport(0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f);
1330 task.SetViewport(newViewport);
1332 catch(Dali::DaliException& e)
1334 DALI_TEST_PRINT_ASSERT(e);
1335 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1341 int UtcDaliRenderTaskSetViewportPosition(void)
1343 TestApplication application;
1345 tet_infoline("Testing RenderTask::SetViewportPosition()");
1347 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1349 RenderTask task = taskList.GetTask(0u);
1351 Viewport viewport = task.GetViewport();
1353 // By default the viewport should match the stage width/height
1355 Vector2 stageSize = application.GetScene().GetSize();
1356 Viewport expectedViewport(0, 0, stageSize.width, stageSize.height);
1357 DALI_TEST_CHECK(viewport == expectedViewport);
1360 Vector2 newPosition(25.0f, 50.0f);
1361 task.SetViewportPosition(newPosition);
1363 // Update (viewport is a property)
1364 application.SendNotification();
1365 application.Render();
1367 DALI_TEST_EQUALS(task.GetCurrentViewportPosition(), newPosition, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1369 // Set by Property test
1370 Vector2 newPosition2(32.0f, 32.0f);
1371 task.SetProperty(RenderTask::Property::VIEWPORT_POSITION, newPosition2);
1372 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition2, TEST_LOCATION);
1373 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition, TEST_LOCATION); // still the old position
1376 application.SendNotification();
1377 application.Render();
1379 DALI_TEST_EQUALS(task.GetCurrentViewportPosition(), newPosition2, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1380 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition2, TEST_LOCATION);
1381 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition2, TEST_LOCATION);
1383 Vector2 newPosition3(64.0f, 0.0f);
1384 Animation animation = Animation::New(1.0f);
1385 animation.AnimateTo(Property(task, RenderTask::Property::VIEWPORT_POSITION), newPosition3, AlphaFunction::LINEAR);
1388 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1389 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition2, TEST_LOCATION);
1391 // Perform 1000ms worth of updates at which point animation should have completed.
1392 Wait(application, 1000);
1393 DALI_TEST_EQUALS(task.GetCurrentViewportPosition(), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1394 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1395 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1397 // Create another animation which animates by a certain value
1398 const Vector2 newPosition4(75.0f, 45.0f);
1399 const Vector2 relativePosition(newPosition4 - newPosition3);
1400 animation = Animation::New(1.0f);
1401 animation.AnimateBy(Property(task, RenderTask::Property::VIEWPORT_POSITION), relativePosition);
1404 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1405 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition3, TEST_LOCATION);
1407 // Perform 1000ms worth of updates at which point animation should have completed.
1408 Wait(application, 1000);
1409 DALI_TEST_EQUALS(task.GetCurrentViewportPosition(), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1410 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1411 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_POSITION), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1416 int UtcDaliRenderTaskSetViewportSize(void)
1418 TestApplication application;
1420 tet_infoline("Testing RenderTask::SetViewportSize()");
1422 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1424 RenderTask task = taskList.GetTask(0u);
1426 Viewport viewport = task.GetViewport();
1428 // By default the viewport should match the stage width/height
1430 Vector2 stageSize = application.GetScene().GetSize();
1431 Viewport expectedViewport(0, 0, stageSize.width, stageSize.height);
1432 DALI_TEST_CHECK(viewport == expectedViewport);
1434 Vector2 newSize(128.0f, 64.0f);
1435 task.SetViewportSize(newSize);
1437 // Update (viewport is a property)
1438 application.SendNotification();
1439 application.Render();
1441 DALI_TEST_EQUALS(task.GetCurrentViewportSize(), newSize, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1443 // Set by Property test
1444 Vector2 newSize2(50.0f, 50.0f);
1445 task.SetProperty(RenderTask::Property::VIEWPORT_SIZE, newSize2);
1446 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize2, TEST_LOCATION);
1447 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize, TEST_LOCATION); // still the old position
1450 application.SendNotification();
1451 application.Render();
1453 DALI_TEST_EQUALS(task.GetCurrentViewportSize(), newSize2, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1454 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize2, TEST_LOCATION);
1455 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize2, TEST_LOCATION);
1457 Vector2 newSize3(10.0f, 10.0f);
1458 Animation animation = Animation::New(1.0f);
1459 animation.AnimateTo(Property(task, RenderTask::Property::VIEWPORT_SIZE), newSize3, AlphaFunction::LINEAR);
1462 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1463 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize2, TEST_LOCATION);
1465 // Perform 1000ms worth of updates at which point animation should have completed.
1466 Wait(application, 1000);
1467 DALI_TEST_EQUALS(task.GetCurrentViewportSize(), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1468 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1469 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1471 // Create another animation which animates by a certain value
1472 const Vector2 newSize4(75.0f, 45.0f);
1473 const Vector2 relativeSize(newSize4 - newSize3);
1474 animation = Animation::New(1.0f);
1475 animation.AnimateBy(Property(task, RenderTask::Property::VIEWPORT_SIZE), relativeSize);
1478 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1479 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize3, TEST_LOCATION);
1481 // Perform 1000ms worth of updates at which point animation should have completed.
1482 Wait(application, 1000);
1483 DALI_TEST_EQUALS(task.GetCurrentViewportSize(), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1484 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1485 DALI_TEST_EQUALS(task.GetProperty<Vector2>(RenderTask::Property::VIEWPORT_SIZE), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1490 int UtcDaliRenderTaskSetClearColorP(void)
1492 TestApplication application;
1494 tet_infoline("Testing RenderTask::SetClearColor()");
1496 Vector4 testColor(1.0f, 2.0f, 3.0f, 4.0f);
1497 Vector4 testColor2(5.0f, 6.0f, 7.0f, 8.0f);
1499 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1501 RenderTask task = taskList.GetTask(0u);
1502 DALI_TEST_CHECK(task.GetClearColor() != testColor);
1504 task.SetClearColor(testColor);
1509 DALI_TEST_EQUALS(task.GetClearColor(), testColor, TEST_LOCATION);
1511 task.SetProperty(RenderTask::Property::CLEAR_COLOR, testColor2);
1512 DALI_TEST_EQUALS(task.GetProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), testColor2, TEST_LOCATION);
1513 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), testColor, TEST_LOCATION); // still the old color
1518 DALI_TEST_EQUALS(task.GetClearColor(), testColor2, TEST_LOCATION);
1519 DALI_TEST_EQUALS(task.GetProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), testColor2, TEST_LOCATION);
1520 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), testColor2, TEST_LOCATION);
1522 Vector4 newColor3(10.0f, 10.0f, 20.0f, 30.0f);
1523 Animation animation = Animation::New(1.0f);
1524 animation.AnimateTo(Property(task, RenderTask::Property::CLEAR_COLOR), newColor3, AlphaFunction::LINEAR);
1527 DALI_TEST_EQUALS(task.GetProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1528 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), testColor2, TEST_LOCATION);
1530 // Perform 1000ms worth of updates at which point animation should have completed.
1531 Wait(application, 1000);
1532 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1533 DALI_TEST_EQUALS(task.GetProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION);
1535 // Create another animation which animates by a certain value
1536 const Vector4 newColor4(0.45f, 0.35f, 0.25f, 0.1f);
1537 const Vector4 relativeColor(newColor4 - newColor3);
1538 animation = Animation::New(1.0f);
1539 animation.AnimateBy(Property(task, RenderTask::Property::CLEAR_COLOR), relativeColor);
1542 DALI_TEST_EQUALS(task.GetProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION);
1543 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), newColor3, Math::MACHINE_EPSILON_10, TEST_LOCATION);
1545 // Perform 1000ms worth of updates at which point animation should have completed.
1546 Wait(application, 1000);
1547 DALI_TEST_EQUALS(task.GetCurrentProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION);
1548 DALI_TEST_EQUALS(task.GetProperty<Vector4>(RenderTask::Property::CLEAR_COLOR), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION);
1553 int UtcDaliRenderTaskSetClearColorN(void)
1555 TestApplication application;
1557 tet_infoline("Testing RenderTask::SetClearColor() on empty handle");
1562 task.SetClearColor(Vector4::ZERO);
1564 catch(Dali::DaliException& e)
1566 DALI_TEST_PRINT_ASSERT(e);
1567 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1572 int UtcDaliRenderTaskGetClearColorP(void)
1574 TestApplication application;
1576 tet_infoline("Testing RenderTask::GetClearColor()");
1578 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1579 RenderTask task = taskList.GetTask(0u);
1580 DALI_TEST_EQUALS(task.GetClearColor(), RenderTask::DEFAULT_CLEAR_COLOR, TEST_LOCATION);
1584 int UtcDaliRenderTaskGetClearColorN(void)
1586 TestApplication application;
1588 tet_infoline("Testing RenderTask::GetClearColor()");
1593 Vector4 color = task.GetClearColor();
1596 catch(Dali::DaliException& e)
1598 DALI_TEST_PRINT_ASSERT(e);
1599 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1604 int UtcDaliRenderTaskSetClearEnabledP(void)
1606 TestApplication application;
1608 tet_infoline("Testing RenderTask::SetClearEnabled()");
1610 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1612 RenderTask task = taskList.GetTask(0u);
1613 DALI_TEST_CHECK(task.GetClearEnabled()); // defaults to true
1615 task.SetClearEnabled(false);
1616 DALI_TEST_EQUALS(task.GetClearEnabled(), false, TEST_LOCATION);
1618 task.SetClearEnabled(true);
1619 DALI_TEST_EQUALS(task.GetClearEnabled(), true, TEST_LOCATION);
1623 int UtcDaliRenderTaskSetClearEnabledN(void)
1625 TestApplication application;
1627 tet_infoline("Testing RenderTask::SetClearEnabled() with empty handle");
1632 task.SetClearEnabled(true);
1634 catch(Dali::DaliException& e)
1636 DALI_TEST_PRINT_ASSERT(e);
1637 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1642 int UtcDaliRenderTaskGetClearEnabledP(void)
1644 TestApplication application;
1646 tet_infoline("Testing RenderTask::GetClearEnabled()");
1648 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1650 RenderTask task = taskList.GetTask(0u);
1651 DALI_TEST_CHECK(task.GetClearEnabled()); // defaults to true
1655 int UtcDaliRenderTaskGetClearEnabledN(void)
1657 TestApplication application;
1659 tet_infoline("Testing RenderTask::GetClearEnabled() with empty handle");
1664 bool x = task.GetClearEnabled();
1667 catch(Dali::DaliException& e)
1669 DALI_TEST_PRINT_ASSERT(e);
1670 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1675 int UtcDaliRenderTaskSetCullModeP(void)
1677 TestApplication application;
1679 tet_infoline("Testing RenderTask::SetCullMode()");
1681 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1682 RenderTask task = taskList.GetTask(0u);
1683 DALI_TEST_EQUALS(task.GetCullMode(), true, TEST_LOCATION);
1685 task.SetCullMode(false);
1687 DALI_TEST_EQUALS(task.GetCullMode(), false, TEST_LOCATION);
1692 int UtcDaliRenderTaskSetCullModeN(void)
1694 TestApplication application;
1696 tet_infoline("Testing RenderTask::SetCullMode() on empty handle");
1701 task.SetCullMode(false);
1703 catch(Dali::DaliException& e)
1705 DALI_TEST_PRINT_ASSERT(e);
1706 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1711 int UtcDaliRenderTaskGetCullModeP(void)
1713 TestApplication application;
1715 tet_infoline("Testing RenderTask::GetCullMode()");
1717 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1718 RenderTask task = taskList.GetTask(0u);
1719 DALI_TEST_EQUALS(task.GetCullMode(), true, TEST_LOCATION);
1723 int UtcDaliRenderTaskGetCullModeN(void)
1725 TestApplication application;
1727 tet_infoline("Testing RenderTask::GetCullMode() with empty handle");
1732 bool x = task.GetCullMode();
1735 catch(Dali::DaliException& e)
1737 DALI_TEST_PRINT_ASSERT(e);
1738 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1743 int UtcDaliRenderTaskSetRefreshRate(void)
1745 TestApplication application;
1747 tet_infoline("Testing RenderTask::SetRefreshRate()");
1749 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1751 // By default tasks will be processed every frame
1752 RenderTask task = taskList.GetTask(0u);
1753 DALI_TEST_CHECK(RenderTask::REFRESH_ALWAYS == task.GetRefreshRate());
1755 task.SetRefreshRate(2u); // every-other frame
1756 DALI_TEST_CHECK(2u == task.GetRefreshRate());
1758 task.SetRefreshRate(RenderTask::REFRESH_ALWAYS);
1759 DALI_TEST_CHECK(RenderTask::REFRESH_ALWAYS == task.GetRefreshRate());
1763 int UtcDaliRenderTaskGetRefreshRate(void)
1765 TestApplication application;
1767 tet_infoline("Testing RenderTask::GetRefreshRate()");
1769 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1771 // By default tasks will be processed every frame
1772 RenderTask task = taskList.GetTask(0u);
1773 DALI_TEST_CHECK(RenderTask::REFRESH_ALWAYS == task.GetRefreshRate());
1775 RenderTask newTask = taskList.CreateTask();
1776 DALI_TEST_CHECK(RenderTask::REFRESH_ALWAYS == newTask.GetRefreshRate());
1780 int UtcDaliRenderTaskSignalFinished(void)
1782 TestApplication application;
1784 tet_infoline("Testing RenderTask::SignalFinished()");
1786 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1787 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1789 CameraActor offscreenCameraActor = CameraActor::New();
1791 application.GetScene().Add(offscreenCameraActor);
1793 Texture image = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 10, 10);
1794 Actor rootActor = CreateRenderableActor(image);
1795 rootActor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
1796 application.GetScene().Add(rootActor);
1798 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
1799 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
1800 Texture frameBufferTexture = Texture::New(*testNativeImagePtr);
1801 FrameBuffer frameBuffer = FrameBuffer::New(frameBufferTexture.GetWidth(), frameBufferTexture.GetHeight());
1802 frameBuffer.AttachColorTexture(frameBufferTexture);
1804 RenderTask newTask = taskList.CreateTask();
1805 newTask.SetCameraActor(offscreenCameraActor);
1806 newTask.SetSourceActor(rootActor);
1807 newTask.SetInputEnabled(false);
1808 newTask.SetClearColor(Vector4(0.f, 0.f, 0.f, 0.f));
1809 newTask.SetClearEnabled(true);
1810 newTask.SetExclusive(true);
1811 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1812 newTask.SetFrameBuffer(frameBuffer);
1813 newTask.SetProperty(RenderTask::Property::REQUIRES_SYNC, true);
1815 bool finished = false;
1816 RenderTaskFinished renderTaskFinished(finished);
1817 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
1819 // Flush the queue and render.
1820 application.SendNotification();
1822 // 1 render to process render task, then wait for sync before finished msg is sent
1823 // from update to the event thread.
1825 application.Render();
1826 application.SendNotification();
1827 DALI_TEST_CHECK(!finished);
1829 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1830 DALI_TEST_CHECK(lastSyncObj != NULL);
1832 application.Render();
1833 DALI_TEST_EQUALS((Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION);
1834 application.SendNotification();
1835 DALI_TEST_CHECK(!finished);
1837 application.Render();
1838 DALI_TEST_EQUALS((Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION);
1839 application.SendNotification();
1840 DALI_TEST_CHECK(!finished);
1842 sync.SetObjectSynced(lastSyncObj, true);
1844 application.Render();
1845 application.SendNotification();
1846 DALI_TEST_CHECK(!finished);
1848 application.Render();
1849 application.SendNotification();
1850 DALI_TEST_CHECK(finished);
1852 DALI_TEST_EQUALS(application.GetUpdateStatus(), 0, TEST_LOCATION);
1856 int UtcDaliRenderTaskContinuous01(void)
1858 TestApplication application;
1860 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not staged)\nPOST:continuous renders, no Finished signal");
1862 // SETUP AN OFFSCREEN RENDER TASK
1863 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1864 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1865 drawTrace.Enable(true);
1867 Actor rootActor = Actor::New();
1868 application.GetScene().Add(rootActor);
1870 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
1871 application.GetScene().Add(offscreenCameraActor);
1873 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1875 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1876 bool finished = false;
1877 RenderTaskFinished renderTaskFinished(finished);
1878 application.SendNotification();
1880 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1881 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, false, false, __LINE__));
1882 application.GetPlatform().ClearReadyResources();
1884 // ADD SOURCE ACTOR TO STAGE - expect continuous renders to start, no finished signal
1885 application.GetScene().Add(secondRootActor);
1886 application.SendNotification();
1888 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1889 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__));
1893 int UtcDaliRenderTaskContinuous02(void)
1895 TestApplication application;
1897 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not visible)\nPOST:continuous renders, no Finished signal");
1899 // SETUP AN OFFSCREEN RENDER TASK
1900 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1901 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1902 drawTrace.Enable(true);
1904 Actor rootActor = Actor::New();
1905 application.GetScene().Add(rootActor);
1907 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
1908 application.GetScene().Add(offscreenCameraActor);
1910 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1911 application.GetScene().Add(secondRootActor);
1912 secondRootActor.SetProperty(Actor::Property::VISIBLE, false);
1914 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1915 bool finished = false;
1916 RenderTaskFinished renderTaskFinished(finished);
1917 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
1918 application.SendNotification();
1920 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1921 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, false, false, __LINE__));
1922 application.GetPlatform().ClearReadyResources();
1924 // MAKE SOURCE ACTOR VISIBLE - expect continuous renders to start, no finished signal
1925 secondRootActor.SetProperty(Actor::Property::VISIBLE, true);
1926 application.SendNotification();
1928 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1929 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__));
1933 int UtcDaliRenderTaskContinuous03(void)
1935 TestApplication application;
1937 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (camera actor not staged)\nPOST:continuous renders, no Finished signal");
1939 // SETUP AN OFFSCREEN RENDER TASK
1940 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1941 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1942 drawTrace.Enable(true);
1944 Actor rootActor = Actor::New();
1945 application.GetScene().Add(rootActor);
1947 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
1948 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1949 application.GetScene().Add(secondRootActor);
1951 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1952 bool finished = false;
1953 RenderTaskFinished renderTaskFinished(finished);
1954 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
1955 application.SendNotification();
1957 // START PROCESS/RENDER Input, Expected Input, Expected
1958 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, false, false, __LINE__));
1959 application.GetPlatform().ClearReadyResources();
1961 // ADD CAMERA ACTOR TO STAGE - expect continuous renders to start, no finished signal
1962 application.GetScene().Add(offscreenCameraActor);
1963 application.SendNotification();
1965 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1966 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__));
1970 int UtcDaliRenderTaskContinuous04(void)
1972 TestApplication application;
1974 tet_infoline("Testing RenderTask Render Continuous using loaded image");
1976 // SETUP AN OFFSCREEN RENDER TASK
1977 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
1978 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1979 drawTrace.Enable(true);
1981 Actor rootActor = Actor::New();
1982 application.GetScene().Add(rootActor);
1984 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
1985 application.GetScene().Add(offscreenCameraActor);
1986 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1987 application.GetScene().Add(secondRootActor);
1989 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1990 bool finished = false;
1991 RenderTaskFinished renderTaskFinished(finished);
1992 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
1993 application.SendNotification();
1995 // START PROCESS/RENDER Input, Expected Input, Expected
1996 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__));
2000 int UtcDaliRenderTaskOnce01(void)
2002 TestApplication application;
2004 tet_infoline("Testing RenderTask Render Once GlSync, using loaded image");
2006 // SETUP AN OFFSCREEN RENDER TASK
2007 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2008 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2009 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2010 drawTrace.Enable(true);
2012 Actor rootActor = Actor::New();
2013 application.GetScene().Add(rootActor);
2015 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2016 application.GetScene().Add(offscreenCameraActor);
2017 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2019 application.GetScene().Add(secondRootActor);
2021 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
2022 bool finished = false;
2023 RenderTaskFinished renderTaskFinished(finished);
2024 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2025 application.SendNotification();
2027 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__));
2029 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2030 DALI_TEST_CHECK(lastSyncObj != NULL);
2031 sync.SetObjectSynced(lastSyncObj, true);
2033 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, false, true, __LINE__));
2034 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, true, false, __LINE__));
2038 int UtcDaliRenderTaskOnce02(void)
2040 TestApplication application;
2042 tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n");
2044 // SETUP AN OFFSCREEN RENDER TASK
2045 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2046 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2047 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2048 drawTrace.Enable(true);
2050 Actor rootActor = Actor::New();
2051 application.GetScene().Add(rootActor);
2053 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2054 application.GetScene().Add(offscreenCameraActor);
2056 Shader shader = CreateShader();
2057 Texture image = CreateTexture();
2058 TextureSet textureSet = CreateTextureSet(image);
2060 Geometry geometry = CreateQuadGeometry();
2061 Renderer renderer = Renderer::New(geometry, shader);
2062 renderer.SetTextures(textureSet);
2063 Actor secondRootActor = Actor::New();
2064 secondRootActor.AddRenderer(renderer);
2065 secondRootActor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
2066 application.GetScene().Add(secondRootActor);
2068 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
2069 bool finished = false;
2070 RenderTaskFinished renderTaskFinished(finished);
2071 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2072 application.SendNotification();
2074 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__));
2076 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2077 DALI_TEST_CHECK(lastSyncObj != NULL);
2078 sync.SetObjectSynced(lastSyncObj, true);
2080 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, false, true, __LINE__));
2081 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, true, false, __LINE__));
2086 int UtcDaliRenderTaskOnce03(void)
2088 TestApplication application;
2090 tet_infoline("Testing RenderTask Render Once GlSync, using loaded image. Switch from render always after ready to render once\n");
2092 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2093 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2094 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2095 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2096 drawTrace.Enable(true);
2098 Actor rootActor = Actor::New();
2099 application.GetScene().Add(rootActor);
2101 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2102 application.GetScene().Add(offscreenCameraActor);
2103 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2104 application.GetScene().Add(secondRootActor);
2106 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2107 bool finished = false;
2108 RenderTaskFinished renderTaskFinished(finished);
2109 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2110 application.SendNotification();
2112 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__));
2114 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2115 application.SendNotification();
2116 // drawn sig finished Keep updating
2117 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__));
2119 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2120 DALI_TEST_CHECK(lastSyncObj != NULL);
2121 sync.SetObjectSynced(lastSyncObj, true);
2123 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, false, true, __LINE__));
2124 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, true, false, __LINE__));
2129 int UtcDaliRenderTaskOnce04(void)
2131 TestApplication application;
2133 "Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n"
2134 "Switch from render always after ready to render once\n");
2136 // SETUP AN OFFSCREEN RENDER TASK
2137 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2138 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2139 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2140 drawTrace.Enable(true);
2142 Actor rootActor = Actor::New();
2143 application.GetScene().Add(rootActor);
2145 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2146 application.GetScene().Add(offscreenCameraActor);
2148 Shader shader = CreateShader();
2149 Texture image = CreateTexture();
2150 TextureSet textureSet = CreateTextureSet(image);
2152 Geometry geometry = CreateQuadGeometry();
2153 Renderer renderer = Renderer::New(geometry, shader);
2154 renderer.SetTextures(textureSet);
2155 Actor secondRootActor = Actor::New();
2156 secondRootActor.AddRenderer(renderer);
2157 secondRootActor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
2158 application.GetScene().Add(secondRootActor);
2160 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2161 bool finished = false;
2162 RenderTaskFinished renderTaskFinished(finished);
2163 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2164 application.SendNotification();
2166 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__));
2168 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2169 application.SendNotification();
2170 // FAILS drawn sig finished Keep updating
2171 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__));
2173 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2174 DALI_TEST_CHECK(lastSyncObj != NULL);
2175 sync.SetObjectSynced(lastSyncObj, true);
2177 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, false, true, __LINE__));
2178 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, true, false, __LINE__));
2183 int UtcDaliRenderTaskOnceNoSync01(void)
2185 TestApplication application;
2187 tet_infoline("Testing RenderTask Render Once, \nPRE: Resources ready\nPOST: Finished signal sent once only");
2189 // SETUP AN OFFSCREEN RENDER TASK
2190 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2191 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2192 drawTrace.Enable(true);
2194 Actor rootActor = Actor::New();
2195 application.GetScene().Add(rootActor);
2197 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2198 application.GetScene().Add(offscreenCameraActor);
2199 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2200 application.GetScene().Add(secondRootActor);
2202 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2203 bool finished = false;
2204 RenderTaskFinished renderTaskFinished(finished);
2205 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2206 application.SendNotification();
2208 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__));
2209 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, true, false, __LINE__));
2213 int UtcDaliRenderTaskOnceNoSync02(void)
2215 TestApplication application;
2218 "Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loaded image.\n"
2219 "PRE: Resources ready\nPOST: Finished signal sent once only");
2220 // SETUP AN OFFSCREEN RENDER TASK
2221 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2222 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2223 drawTrace.Enable(true);
2225 Actor rootActor = Actor::New();
2226 application.GetScene().Add(rootActor);
2228 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2229 application.GetScene().Add(offscreenCameraActor);
2231 Shader shader = CreateShader();
2232 Texture image = CreateTexture();
2233 TextureSet textureSet = CreateTextureSet(image);
2235 Geometry geometry = CreateQuadGeometry();
2236 Renderer renderer = Renderer::New(geometry, shader);
2237 renderer.SetTextures(textureSet);
2238 Actor secondRootActor = Actor::New();
2239 secondRootActor.AddRenderer(renderer);
2240 secondRootActor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
2241 application.GetScene().Add(secondRootActor);
2243 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2244 bool finished = false;
2245 RenderTaskFinished renderTaskFinished(finished);
2246 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2247 application.SendNotification();
2249 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__));
2250 application.GetPlatform().ClearReadyResources();
2251 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, true, false, __LINE__));
2256 int UtcDaliRenderTaskOnceNoSync03(void)
2258 TestApplication application;
2261 "Testing RenderTask Render Once, using loaded image. Switch from render always after ready to render once\n"
2262 "PRE: Render task ready, Image loaded\n"
2263 "POST: Finished signal sent only once");
2265 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2266 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2267 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2268 drawTrace.Enable(true);
2270 Actor rootActor = Actor::New();
2271 application.GetScene().Add(rootActor);
2273 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2274 application.GetScene().Add(offscreenCameraActor);
2275 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2276 application.GetScene().Add(secondRootActor);
2278 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2279 bool finished = false;
2280 RenderTaskFinished renderTaskFinished(finished);
2281 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2282 application.SendNotification();
2284 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__));
2286 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2287 application.SendNotification(); // Input, Expected Input, Expected
2288 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__));
2289 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, true, false, __LINE__));
2293 int UtcDaliRenderTaskOnceNoSync04(void)
2295 TestApplication application;
2298 "Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n"
2299 "Switch from render always after ready to render once\n"
2300 "PRE: Render task ready, Image not loaded\n"
2301 "POST: Finished signal sent only once");
2303 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2304 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2305 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2306 drawTrace.Enable(true);
2308 Actor rootActor = Actor::New();
2309 application.GetScene().Add(rootActor);
2311 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2312 application.GetScene().Add(offscreenCameraActor);
2314 Shader shader = CreateShader();
2315 Texture image = CreateTexture();
2316 TextureSet textureSet = CreateTextureSet(image);
2318 Geometry geometry = CreateQuadGeometry();
2319 Renderer renderer = Renderer::New(geometry, shader);
2320 renderer.SetTextures(textureSet);
2321 Actor secondRootActor = Actor::New();
2322 secondRootActor.AddRenderer(renderer);
2323 secondRootActor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
2324 application.GetScene().Add(secondRootActor);
2326 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2327 bool finished = false;
2328 RenderTaskFinished renderTaskFinished(finished);
2329 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2330 application.SendNotification();
2332 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__));
2333 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2334 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2335 DALI_TEST_CHECK(lastSyncObj == NULL);
2337 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2338 application.SendNotification(); // Input, Expected Input, Expected
2339 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__));
2340 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, finished, true, false, __LINE__));
2342 lastSyncObj = sync.GetLastSyncObject();
2343 DALI_TEST_CHECK(lastSyncObj == NULL);
2348 int UtcDaliRenderTaskOnceNoSync05(void)
2350 TestApplication application;
2353 "Testing RenderTask Render Once\n"
2354 "SetRefreshRate(ONCE), resource load failed, completes render task.\n"
2355 "PRE: resources failed to load\n"
2356 "POST: No finished signal sent.");
2358 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2359 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2360 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2361 drawTrace.Enable(true);
2363 Actor rootActor = Actor::New();
2364 application.GetScene().Add(rootActor);
2366 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2367 application.GetScene().Add(offscreenCameraActor);
2368 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2369 application.GetScene().Add(secondRootActor);
2371 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2372 bool finished = false;
2373 RenderTaskFinished renderTaskFinished(finished);
2374 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2375 application.SendNotification();
2377 // START PROCESS/RENDER Input, Expected Input, Expected
2378 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__));
2380 // CHANGE TO RENDER ONCE,
2381 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2382 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__));
2387 int UtcDaliRenderTaskOnceChain01(void)
2389 TestApplication application;
2392 "Testing RenderTask Render Once Chained render tasks\n"
2393 "SetRefreshRate(ONCE), resource load completes, both render tasks render.\n"
2394 "PRE: resources ready\n"
2395 "POST: 2 finished signals sent.");
2397 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2398 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2399 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2400 drawTrace.Enable(true);
2402 Actor defaultRootActor = Actor::New(); // Root for default RT
2403 application.GetScene().Add(defaultRootActor);
2405 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2406 application.GetScene().Add(offscreenCameraActor);
2407 Actor firstRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2408 application.GetScene().Add(firstRootActor);
2410 // first render task
2411 RenderTask firstTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, firstRootActor, RenderTask::REFRESH_ONCE, false);
2412 bool firstFinished = false;
2413 RenderTaskFinished renderTask1Finished(firstFinished);
2414 firstTask.FinishedSignal().Connect(&application, renderTask1Finished);
2416 // Second render task
2417 FrameBuffer fbo = firstTask.GetFrameBuffer();
2418 Actor secondRootActor = CreateRenderableActor(fbo.GetColorTexture());
2419 application.GetScene().Add(secondRootActor);
2420 RenderTask secondTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2421 bool secondFinished = false;
2422 RenderTaskFinished renderTask2Finished(secondFinished);
2423 secondTask.FinishedSignal().Connect(&application, renderTask2Finished);
2425 application.SendNotification();
2427 //Both render tasks are executed.
2428 DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, firstFinished, false, true, __LINE__));
2429 DALI_TEST_CHECK(firstFinished == false);
2430 DALI_TEST_CHECK(secondFinished == false);
2432 //Nothing else to render and both render task should have finished now
2433 DALI_TEST_CHECK(UpdateRender(application, drawTrace, false, firstFinished, true, false, __LINE__));
2434 DALI_TEST_CHECK(firstFinished == true);
2435 DALI_TEST_CHECK(secondFinished == true);
2440 int UtcDaliRenderTaskProperties(void)
2442 TestApplication application;
2444 RenderTask task = application.GetScene().GetRenderTaskList().CreateTask();
2446 Property::IndexContainer indices;
2447 task.GetPropertyIndices(indices);
2448 DALI_TEST_CHECK(indices.Size());
2449 DALI_TEST_EQUALS(indices.Size(), task.GetPropertyCount(), TEST_LOCATION);
2453 int UtcDaliRenderTaskFinishInvisibleSourceActor(void)
2455 TestApplication application;
2457 tet_infoline("Testing RenderTask::FinishInvisibleSourceActor()");
2459 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2460 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2462 CameraActor offscreenCameraActor = CameraActor::New();
2464 application.GetScene().Add(offscreenCameraActor);
2466 Texture image = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 10, 10);
2467 Actor rootActor = CreateRenderableActor(image);
2468 rootActor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
2469 rootActor.SetProperty(Actor::Property::VISIBLE, false);
2470 application.GetScene().Add(rootActor);
2472 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
2473 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
2474 Texture frameBufferTexture = Texture::New(*testNativeImagePtr);
2475 FrameBuffer frameBuffer = FrameBuffer::New(frameBufferTexture.GetWidth(), frameBufferTexture.GetHeight());
2476 frameBuffer.AttachColorTexture(frameBufferTexture);
2478 // Flush all outstanding messages
2479 application.SendNotification();
2480 application.Render();
2482 RenderTask newTask = taskList.CreateTask();
2483 newTask.SetCameraActor(offscreenCameraActor);
2484 newTask.SetSourceActor(rootActor);
2485 newTask.SetInputEnabled(false);
2486 newTask.SetClearColor(Vector4(0.f, 0.f, 0.f, 0.f));
2487 newTask.SetClearEnabled(true);
2488 newTask.SetExclusive(true);
2489 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2490 newTask.SetFrameBuffer(frameBuffer);
2491 newTask.SetProperty(RenderTask::Property::REQUIRES_SYNC, true);
2493 // Framebuffer doesn't actually get created until Connected, i.e. by previous line
2495 bool finished = false;
2496 RenderTaskFinished renderTaskFinished(finished);
2497 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2499 // Flush the queue and render.
2500 application.SendNotification();
2502 // 1 render to process render task, then wait for sync before finished msg is sent
2503 // from update to the event thread.
2505 application.Render();
2506 application.SendNotification();
2507 DALI_TEST_CHECK(!finished);
2509 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2510 DALI_TEST_CHECK(lastSyncObj != NULL);
2512 application.Render();
2513 DALI_TEST_EQUALS((Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION);
2514 application.SendNotification();
2515 DALI_TEST_CHECK(!finished);
2517 application.Render();
2518 DALI_TEST_EQUALS((Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION);
2519 application.SendNotification();
2520 DALI_TEST_CHECK(!finished);
2522 sync.SetObjectSynced(lastSyncObj, true);
2524 application.Render();
2525 application.SendNotification();
2526 DALI_TEST_CHECK(!finished);
2528 application.Render();
2529 application.SendNotification();
2530 DALI_TEST_CHECK(finished);
2533 application.Render(); // Double check no more finished signal
2534 application.SendNotification();
2535 DALI_TEST_CHECK(!finished);
2540 int UtcDaliRenderTaskFinishMissingImage(void)
2542 TestApplication application;
2544 // Previously we had bugs where not having a resource ID would cause render-tasks to wait forever
2545 tet_infoline("Testing RenderTask::SignalFinished() when an Actor has no Image set");
2547 Integration::Scene stage = application.GetScene();
2549 Texture image = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 10, 10);
2550 Actor rootActor = CreateRenderableActor(image);
2551 rootActor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
2552 stage.Add(rootActor);
2554 Actor actorWithMissingImage = CreateRenderableActor(Texture());
2555 actorWithMissingImage.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
2556 stage.Add(actorWithMissingImage);
2558 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
2559 RenderTask newTask = taskList.CreateTask();
2560 newTask.SetInputEnabled(false);
2561 newTask.SetClearColor(Vector4(0.f, 0.f, 0.f, 0.f));
2562 newTask.SetClearEnabled(true);
2563 newTask.SetExclusive(true);
2564 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2566 bool finished = false;
2567 RenderTaskFinished renderTaskFinished(finished);
2568 newTask.FinishedSignal().Connect(&application, renderTaskFinished);
2570 // 1 render to process render task, then 1 before finished msg is sent from update to the event thread.
2571 application.SendNotification();
2572 application.Render();
2573 application.Render();
2575 application.SendNotification();
2576 DALI_TEST_CHECK(finished);
2581 int UtcDaliRenderTaskWorldToViewport(void)
2583 TestApplication application(400u, 400u); // square surface
2585 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
2587 Actor actor = Actor::New();
2588 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
2589 actor.SetProperty(Actor::Property::POSITION, Vector3(0.0, 0.0, 0.0));
2591 actor.SetProperty(Actor::Property::PARENT_ORIGIN, Vector3(0.5, 0.5, 0.5));
2592 actor.SetProperty(Actor::Property::ANCHOR_POINT, Vector3(0.5, 0.5, 0.5));
2594 application.GetScene().Add(actor);
2596 application.SendNotification();
2597 application.Render();
2598 application.SendNotification();
2600 RenderTask task = taskList.GetTask(0u);
2602 CameraActor camera = task.GetCameraActor();
2604 Vector2 screenSize = task.GetCurrentViewportSize();
2606 float screenX = 0.0;
2607 float screenY = 0.0;
2609 bool ok = task.WorldToViewport(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), screenX, screenY);
2610 DALI_TEST_CHECK(ok == true);
2612 DALI_TEST_EQUALS(screenX, screenSize.x / 2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2613 DALI_TEST_EQUALS(screenY, screenSize.y / 2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2615 Actor actor2 = Actor::New();
2616 float actor2Size = 100.f;
2617 actor2.SetProperty(Actor::Property::SIZE, Vector2(actor2Size, actor2Size));
2618 actor2.SetProperty(Actor::Property::POSITION, Vector3(0.0, 0.0, 0.0));
2619 actor2.SetProperty(Actor::Property::PARENT_ORIGIN, Vector3(0.5, 0.5, 0.0));
2620 actor2.SetProperty(Actor::Property::ANCHOR_POINT, Vector3(0.5, 0.5, 0.0));
2621 application.GetScene().Add(actor2);
2623 actor.SetProperty(Actor::Property::PARENT_ORIGIN, Vector3(0, 0, 0));
2625 application.SendNotification();
2626 application.Render();
2627 application.SendNotification();
2629 ok = task.WorldToViewport(actor.GetCurrentProperty<Vector3>(Actor::Property::WORLD_POSITION), screenX, screenY);
2630 DALI_TEST_CHECK(ok == true);
2632 DALI_TEST_EQUALS(screenX, screenSize.x / 2 - actor2Size / 2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2633 DALI_TEST_EQUALS(screenY, screenSize.y / 2 - actor2Size / 2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2638 int UtcDaliRenderTaskViewportToLocal(void)
2640 TestApplication application;
2641 Actor actor = Actor::New();
2642 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
2643 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
2644 actor.SetProperty(Actor::Property::POSITION, Vector2(10.0f, 10.0f));
2645 application.GetScene().Add(actor);
2647 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
2648 RenderTask task = taskList.GetTask(0u);
2650 // flush the queue and render once
2651 application.SendNotification();
2652 application.Render();
2653 application.SendNotification();
2654 application.Render();
2662 float screenX = 50.0f;
2663 float screenY = 50.0f;
2665 DALI_TEST_CHECK(actor.ScreenToLocal(localX, localY, screenX, screenY));
2667 DALI_TEST_CHECK(task.ViewportToLocal(actor, screenX, screenY, rtLocalX, rtLocalY));
2669 DALI_TEST_EQUALS(localX, rtLocalX, 0.01f, TEST_LOCATION);
2670 DALI_TEST_EQUALS(localY, rtLocalY, 0.01f, TEST_LOCATION);
2675 int UtcDaliRenderTaskOffscreenViewportToLocal(void)
2677 TestApplication application;
2678 Actor actor = Actor::New();
2679 actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
2680 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
2681 actor.SetProperty(Actor::Property::POSITION, Vector2(10.0f, 10.0f));
2682 application.GetScene().Add(actor);
2684 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
2685 RenderTask task = taskList.CreateTask();
2687 FrameBuffer newFrameBuffer = FrameBuffer::New(10, 10);
2688 task.SetFrameBuffer(newFrameBuffer);
2689 task.SetSourceActor(actor);
2690 task.SetScreenToFrameBufferMappingActor(actor);
2692 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2693 application.GetScene().Add(offscreenCameraActor);
2694 task.SetCameraActor(offscreenCameraActor);
2696 // flush the queue and render once
2697 application.SendNotification();
2698 application.Render();
2699 application.SendNotification();
2700 application.Render();
2708 float screenX = 50.0f;
2709 float screenY = 50.0f;
2711 DALI_TEST_CHECK(actor.ScreenToLocal(localX, localY, screenX, screenY));
2713 DALI_TEST_CHECK(task.ViewportToLocal(actor, screenX, screenY, rtLocalX, rtLocalY));
2715 DALI_TEST_EQUALS(localX, rtLocalX, 0.01f, TEST_LOCATION);
2716 DALI_TEST_EQUALS(localY, rtLocalY, 0.01f, TEST_LOCATION);
2721 int UtcDaliRenderTaskRequiresSync(void)
2723 TestApplication application;
2724 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
2726 RenderTask newTask = taskList.CreateTask();
2727 newTask.SetProperty(RenderTask::Property::REQUIRES_SYNC, false);
2729 DALI_TEST_EQUALS(newTask.GetProperty<bool>(RenderTask::Property::REQUIRES_SYNC), false, TEST_LOCATION);
2730 DALI_TEST_EQUALS(newTask.GetCurrentProperty<bool>(RenderTask::Property::REQUIRES_SYNC), false, TEST_LOCATION);
2732 newTask.SetProperty(RenderTask::Property::REQUIRES_SYNC, true);
2734 DALI_TEST_EQUALS(newTask.GetProperty<bool>(RenderTask::Property::REQUIRES_SYNC), true, TEST_LOCATION);
2735 DALI_TEST_EQUALS(newTask.GetCurrentProperty<bool>(RenderTask::Property::REQUIRES_SYNC), true, TEST_LOCATION);
2740 int UtcDaliRenderTaskSetClearEnabled(void)
2742 TestApplication application;
2744 tet_infoline("UtcDaliRenderTaskSetClearEnabled");
2746 application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
2747 TestGlAbstraction& gl = application.GetGlAbstraction();
2749 Actor renderableActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2750 application.GetScene().Add(renderableActor);
2752 Actor rootActor = Actor::New();
2753 application.GetScene().Add(rootActor);
2755 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
2756 application.GetScene().Add(offscreenCameraActor);
2758 Actor sourceActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2759 application.GetScene().Add(sourceActor);
2761 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, sourceActor, RenderTask::REFRESH_ALWAYS, false);
2763 DALI_TEST_EQUALS(gl.GetClearCountCalled(), 0, TEST_LOCATION);
2765 application.SendNotification();
2766 application.Render();
2768 // glClear should be called twice - default task and the new task.
2769 DALI_TEST_EQUALS(gl.GetClearCountCalled(), 2, TEST_LOCATION);
2771 newTask.SetClearEnabled(false);
2773 application.SendNotification();
2774 application.Render();
2776 // The count should increase by 1 - default task only.
2777 DALI_TEST_EQUALS(gl.GetClearCountCalled(), 3, TEST_LOCATION);
2782 int UtcDaliRenderTaskMoveConstrctor(void)
2784 TestApplication application;
2786 Vector4 testColor(1.0f, 2.0f, 3.0f, 4.0f);
2788 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
2789 RenderTask task = taskList.GetTask(0u);
2790 DALI_TEST_CHECK(task);
2791 DALI_TEST_EQUALS(2, task.GetBaseObject().ReferenceCount(), TEST_LOCATION);
2792 DALI_TEST_CHECK(task.GetClearColor() != testColor);
2794 task.SetClearColor(testColor);
2799 DALI_TEST_EQUALS(task.GetClearColor(), testColor, TEST_LOCATION);
2801 RenderTask move = std::move(task);
2802 DALI_TEST_CHECK(move);
2803 DALI_TEST_EQUALS(2, move.GetBaseObject().ReferenceCount(), TEST_LOCATION);
2804 DALI_TEST_EQUALS(move.GetClearColor(), testColor, TEST_LOCATION);
2805 DALI_TEST_CHECK(!task);
2810 int UtcDaliRenderTaskMoveAssignment(void)
2812 TestApplication application;
2814 Vector4 testColor(1.0f, 2.0f, 3.0f, 4.0f);
2816 RenderTaskList taskList = application.GetScene().GetRenderTaskList();
2817 RenderTask task = taskList.GetTask(0u);
2818 DALI_TEST_CHECK(task);
2819 DALI_TEST_EQUALS(2, task.GetBaseObject().ReferenceCount(), TEST_LOCATION);
2820 DALI_TEST_CHECK(task.GetClearColor() != testColor);
2822 task.SetClearColor(testColor);
2827 DALI_TEST_EQUALS(task.GetClearColor(), testColor, TEST_LOCATION);
2830 move = std::move(task);
2831 DALI_TEST_CHECK(move);
2832 DALI_TEST_EQUALS(2, move.GetBaseObject().ReferenceCount(), TEST_LOCATION);
2833 DALI_TEST_EQUALS(move.GetClearColor(), testColor, TEST_LOCATION);
2834 DALI_TEST_CHECK(!task);
2839 int UtcDaliRenderTaskSetCullModeNegative(void)
2841 TestApplication application;
2842 Dali::RenderTask instance;
2846 instance.SetCullMode(arg1);
2847 DALI_TEST_CHECK(false); // Should not get here
2851 DALI_TEST_CHECK(true); // We expect an assert
2856 int UtcDaliRenderTaskSetViewportNegative(void)
2858 TestApplication application;
2859 Dali::RenderTask instance;
2862 Dali::Rect<int> arg1;
2863 instance.SetViewport(arg1);
2864 DALI_TEST_CHECK(false); // Should not get here
2868 DALI_TEST_CHECK(true); // We expect an assert
2873 int UtcDaliRenderTaskSetExclusiveNegative(void)
2875 TestApplication application;
2876 Dali::RenderTask instance;
2880 instance.SetExclusive(arg1);
2881 DALI_TEST_CHECK(false); // Should not get here
2885 DALI_TEST_CHECK(true); // We expect an assert
2890 int UtcDaliRenderTaskSetClearColorNegative(void)
2892 TestApplication application;
2893 Dali::RenderTask instance;
2897 instance.SetClearColor(arg1);
2898 DALI_TEST_CHECK(false); // Should not get here
2902 DALI_TEST_CHECK(true); // We expect an assert
2907 int UtcDaliRenderTaskFinishedSignalNegative(void)
2909 TestApplication application;
2910 Dali::RenderTask instance;
2913 instance.FinishedSignal();
2914 DALI_TEST_CHECK(false); // Should not get here
2918 DALI_TEST_CHECK(true); // We expect an assert
2923 int UtcDaliRenderTaskSetCameraActorNegative(void)
2925 TestApplication application;
2926 Dali::RenderTask instance;
2929 Dali::CameraActor arg1;
2930 instance.SetCameraActor(arg1);
2931 DALI_TEST_CHECK(false); // Should not get here
2935 DALI_TEST_CHECK(true); // We expect an assert
2940 int UtcDaliRenderTaskSetFrameBufferNegative(void)
2942 TestApplication application;
2943 Dali::RenderTask instance;
2946 Dali::FrameBuffer arg1;
2947 instance.SetFrameBuffer(arg1);
2948 DALI_TEST_CHECK(false); // Should not get here
2952 DALI_TEST_CHECK(true); // We expect an assert
2957 int UtcDaliRenderTaskSetRefreshRateNegative(void)
2959 TestApplication application;
2960 Dali::RenderTask instance;
2963 unsigned int arg1(0u);
2964 instance.SetRefreshRate(arg1);
2965 DALI_TEST_CHECK(false); // Should not get here
2969 DALI_TEST_CHECK(true); // We expect an assert
2974 int UtcDaliRenderTaskSetSourceActorNegative(void)
2976 TestApplication application;
2977 Dali::RenderTask instance;
2981 instance.SetSourceActor(arg1);
2982 DALI_TEST_CHECK(false); // Should not get here
2986 DALI_TEST_CHECK(true); // We expect an assert
2991 int UtcDaliRenderTaskSetClearEnabledNegative(void)
2993 TestApplication application;
2994 Dali::RenderTask instance;
2998 instance.SetClearEnabled(arg1);
2999 DALI_TEST_CHECK(false); // Should not get here
3003 DALI_TEST_CHECK(true); // We expect an assert
3008 int UtcDaliRenderTaskSetInputEnabledNegative(void)
3010 TestApplication application;
3011 Dali::RenderTask instance;
3015 instance.SetInputEnabled(arg1);
3016 DALI_TEST_CHECK(false); // Should not get here
3020 DALI_TEST_CHECK(true); // We expect an assert
3025 int UtcDaliRenderTaskSetViewportSizeNegative(void)
3027 TestApplication application;
3028 Dali::RenderTask instance;
3032 instance.SetViewportSize(arg1);
3033 DALI_TEST_CHECK(false); // Should not get here
3037 DALI_TEST_CHECK(true); // We expect an assert
3042 int UtcDaliRenderTaskSetViewportPositionNegative(void)
3044 TestApplication application;
3045 Dali::RenderTask instance;
3049 instance.SetViewportPosition(arg1);
3050 DALI_TEST_CHECK(false); // Should not get here
3054 DALI_TEST_CHECK(true); // We expect an assert
3059 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionNegative(void)
3061 TestApplication application;
3062 Dali::RenderTask instance;
3065 RenderTask::ScreenToFrameBufferFunction arg1(nullptr);
3066 instance.SetScreenToFrameBufferFunction(arg1);
3067 DALI_TEST_CHECK(false); // Should not get here
3071 DALI_TEST_CHECK(true); // We expect an assert
3076 int UtcDaliRenderTaskSetScreenToFrameBufferMappingActorNegative(void)
3078 TestApplication application;
3079 Dali::RenderTask instance;
3083 instance.SetScreenToFrameBufferMappingActor(arg1);
3084 DALI_TEST_CHECK(false); // Should not get here
3088 DALI_TEST_CHECK(true); // We expect an assert
3093 int UtcDaliRenderTaskGetCullModeNegative(void)
3095 TestApplication application;
3096 Dali::RenderTask instance;
3099 instance.GetCullMode();
3100 DALI_TEST_CHECK(false); // Should not get here
3104 DALI_TEST_CHECK(true); // We expect an assert
3109 int UtcDaliRenderTaskGetViewportNegative(void)
3111 TestApplication application;
3112 Dali::RenderTask instance;
3115 instance.GetViewport();
3116 DALI_TEST_CHECK(false); // Should not get here
3120 DALI_TEST_CHECK(true); // We expect an assert
3125 int UtcDaliRenderTaskIsExclusiveNegative(void)
3127 TestApplication application;
3128 Dali::RenderTask instance;
3131 instance.IsExclusive();
3132 DALI_TEST_CHECK(false); // Should not get here
3136 DALI_TEST_CHECK(true); // We expect an assert
3141 int UtcDaliRenderTaskGetClearColorNegative(void)
3143 TestApplication application;
3144 Dali::RenderTask instance;
3147 instance.GetClearColor();
3148 DALI_TEST_CHECK(false); // Should not get here
3152 DALI_TEST_CHECK(true); // We expect an assert
3157 int UtcDaliRenderTaskGetCameraActorNegative(void)
3159 TestApplication application;
3160 Dali::RenderTask instance;
3163 instance.GetCameraActor();
3164 DALI_TEST_CHECK(false); // Should not get here
3168 DALI_TEST_CHECK(true); // We expect an assert
3173 int UtcDaliRenderTaskGetFrameBufferNegative(void)
3175 TestApplication application;
3176 Dali::RenderTask instance;
3179 instance.GetFrameBuffer();
3180 DALI_TEST_CHECK(false); // Should not get here
3184 DALI_TEST_CHECK(true); // We expect an assert
3189 int UtcDaliRenderTaskGetRefreshRateNegative(void)
3191 TestApplication application;
3192 Dali::RenderTask instance;
3195 instance.GetRefreshRate();
3196 DALI_TEST_CHECK(false); // Should not get here
3200 DALI_TEST_CHECK(true); // We expect an assert
3205 int UtcDaliRenderTaskGetSourceActorNegative(void)
3207 TestApplication application;
3208 Dali::RenderTask instance;
3211 instance.GetSourceActor();
3212 DALI_TEST_CHECK(false); // Should not get here
3216 DALI_TEST_CHECK(true); // We expect an assert
3221 int UtcDaliRenderTaskGetClearEnabledNegative(void)
3223 TestApplication application;
3224 Dali::RenderTask instance;
3227 instance.GetClearEnabled();
3228 DALI_TEST_CHECK(false); // Should not get here
3232 DALI_TEST_CHECK(true); // We expect an assert
3237 int UtcDaliRenderTaskGetInputEnabledNegative(void)
3239 TestApplication application;
3240 Dali::RenderTask instance;
3243 instance.GetInputEnabled();
3244 DALI_TEST_CHECK(false); // Should not get here
3248 DALI_TEST_CHECK(true); // We expect an assert
3253 int UtcDaliRenderTaskViewportToLocalNegative(void)
3255 TestApplication application;
3256 Dali::RenderTask instance;
3259 Dali::Actor arg1(Actor::New());
3264 instance.ViewportToLocal(arg1, arg2, arg3, arg4, arg5);
3265 DALI_TEST_CHECK(false); // Should not get here
3269 DALI_TEST_CHECK(true); // We expect an assert
3274 int UtcDaliRenderTaskWorldToViewportNegative(void)
3276 TestApplication application;
3277 Dali::RenderTask instance;
3283 instance.WorldToViewport(arg1, arg2, arg3);
3284 DALI_TEST_CHECK(false); // Should not get here
3288 DALI_TEST_CHECK(true); // We expect an assert
3293 int UtcDaliRenderTaskGetCurrentViewportSizeNegative(void)
3295 TestApplication application;
3296 Dali::RenderTask instance;
3299 instance.GetCurrentViewportSize();
3300 DALI_TEST_CHECK(false); // Should not get here
3304 DALI_TEST_CHECK(true); // We expect an assert
3309 int UtcDaliRenderTaskGetCurrentViewportPositionNegative(void)
3311 TestApplication application;
3312 Dali::RenderTask instance;
3315 instance.GetCurrentViewportPosition();
3316 DALI_TEST_CHECK(false); // Should not get here
3320 DALI_TEST_CHECK(true); // We expect an assert
3325 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionNegative(void)
3327 TestApplication application;
3328 Dali::RenderTask instance;
3331 instance.GetScreenToFrameBufferFunction();
3332 DALI_TEST_CHECK(false); // Should not get here
3336 DALI_TEST_CHECK(true); // We expect an assert
3341 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorNegative(void)
3343 TestApplication application;
3344 Dali::RenderTask instance;
3347 instance.GetScreenToFrameBufferMappingActor();
3348 DALI_TEST_CHECK(false); // Should not get here
3352 DALI_TEST_CHECK(true); // We expect an assert
3357 int UtcDaliRenderTaskClippingMode01(void)
3359 TestApplication application;
3361 tet_infoline("Testing clipping mode: CLIP_TO_BOUNDING_BOX.\n");
3363 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
3364 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
3365 TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace();
3367 enabledDisableTrace.Enable(true);
3368 scissorTrace.Enable(true);
3370 // SETUP AN OFFSCREEN RENDER TASK
3371 Actor rootActor = Actor::New();
3372 application.GetScene().Add(rootActor);
3374 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
3375 offscreenCameraActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3376 offscreenCameraActor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
3377 application.GetScene().Add(offscreenCameraActor);
3379 Shader shader = CreateShader();
3380 Texture image = CreateTexture();
3381 TextureSet textureSet = CreateTextureSet(image);
3383 Geometry geometry = CreateQuadGeometry();
3384 Renderer renderer = Renderer::New(geometry, shader);
3385 renderer.SetTextures(textureSet);
3387 Vector2 position(100.0f, 100.0f);
3388 Vector2 size(200.0f, 200.0f);
3389 Actor secondRootActor = Actor::New();
3390 secondRootActor.AddRenderer(renderer);
3391 secondRootActor.SetProperty(Actor::Property::POSITION, position);
3392 secondRootActor.SetProperty(Actor::Property::SIZE, size);
3393 secondRootActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
3394 secondRootActor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
3395 secondRootActor.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
3396 application.GetScene().Add(secondRootActor);
3398 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true, TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT);
3400 application.SendNotification();
3401 application.Render();
3403 std::ostringstream scissor;
3404 scissor << std::hex << GL_SCISSOR_TEST;
3405 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Enable", scissor.str()));
3407 // Check the scissor was set, and the coordinates are correct.
3408 Vector4 expectResults(position.x, TestApplication::DEFAULT_SURFACE_HEIGHT - size.height - position.y, size.width, size.height); // (100, 500, 200, 200)
3409 std::stringstream compareParametersString;
3410 compareParametersString << expectResults.x << ", " << expectResults.y << ", " << expectResults.z << ", " << expectResults.w;
3411 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", compareParametersString.str())); // Compare with the expected result
3416 int UtcDaliRenderTaskClippingMode02(void)
3418 TestApplication application;
3420 tet_infoline("Testing clipping mode with the inverted camera: CLIP_TO_BOUNDING_BOX.\n");
3422 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
3423 TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace();
3424 TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace();
3426 enabledDisableTrace.Enable(true);
3427 scissorTrace.Enable(true);
3429 // SETUP AN OFFSCREEN RENDER TASK
3430 Actor rootActor = Actor::New();
3431 application.GetScene().Add(rootActor);
3433 CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
3434 offscreenCameraActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3435 offscreenCameraActor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
3436 offscreenCameraActor.SetInvertYAxis(true);
3437 application.GetScene().Add(offscreenCameraActor);
3439 Shader shader = CreateShader();
3440 Texture image = CreateTexture();
3441 TextureSet textureSet = CreateTextureSet(image);
3443 Geometry geometry = CreateQuadGeometry();
3444 Renderer renderer = Renderer::New(geometry, shader);
3445 renderer.SetTextures(textureSet);
3447 Vector2 position(100.0f, 100.0f);
3448 Vector2 size(200.0f, 200.0f);
3449 Actor secondRootActor = Actor::New();
3450 secondRootActor.AddRenderer(renderer);
3451 secondRootActor.SetProperty(Actor::Property::POSITION, position);
3452 secondRootActor.SetProperty(Actor::Property::SIZE, size);
3453 secondRootActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
3454 secondRootActor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
3455 secondRootActor.SetProperty(Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX);
3456 application.GetScene().Add(secondRootActor);
3458 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true, TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT);
3460 application.SendNotification();
3461 application.Render();
3463 std::ostringstream scissor;
3464 scissor << std::hex << GL_SCISSOR_TEST;
3465 DALI_TEST_CHECK(enabledDisableTrace.FindMethodAndParams("Enable", scissor.str()));
3467 // Check the scissor was set, and the coordinates are correct.
3468 Vector4 expectResults(position.x, position.y, size.width, size.height); // (100, 100, 200, 200)
3469 std::stringstream compareParametersString;
3470 compareParametersString << expectResults.x << ", " << expectResults.y << ", " << expectResults.z << ", " << expectResults.w;
3471 DALI_TEST_CHECK(scissorTrace.FindMethodAndParams("Scissor", compareParametersString.str())); // Compare with the expected result