2 * Copyright (c) 2017 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.
20 #include <dali/public-api/dali-core.h>
21 #include <dali/devel-api/events/hit-test-algorithm.h>
22 #include <dali-test-suite-utils.h>
23 #include <dali/integration-api/debug.h>
24 #include <test-native-image.h>
26 #include <mesh-builder.h>
28 #define BOOLSTR(x) ((x)?"T":"F")
30 //& set: DaliRenderTask
34 void utc_dali_render_task_startup(void)
36 test_return_value = TET_UNDEF;
39 void utc_dali_render_task_cleanup(void)
41 test_return_value = TET_PASS;
47 * Constructor, Destructor, DownCast, New, copy constructor, assignment operator
49 * SetSourceActor 2+ve, 1-ve
50 * GetSourceActor 1+ve, 1-ve
51 * SetExclusive 2+ve, 0-ve
52 * IsExclusive 2+ve, 0-ve
53 * SetInputEnabled 1+ve, 0-ve
54 * GetInputEnabled 1+ve, 0-ve
55 * SetCameraActor 1+ve, 1-ve
56 * GetCameraActor 1+ve, 1-ve
57 * SetTargetFrameBuffer 1+ve, 1-ve
58 * GetTargetFrameBuffer 1+ve, 1-ve
59 * SetScreenToFrameBufferFunction 1+ve, 1-ve
60 * GetScreenToFrameBufferFunction 1+ve, 1-ve
61 * SetScreenToFrameBufferMappingActor 1+ve, 1-ve
62 * GetScreenToFrameBufferMappingActor 1+ve, 1-ve
63 * SetViewportPosition 1+ve
64 * GetCurrentViewportPosition 1+ve
65 * SetViewportSize 1+ve
66 * GetCurrentViewportSize 1+ve
67 * SetViewport 2+ve, 1-ve
68 * GetViewport 2+ve, 1-ve
69 * SetClearColor 1+ve, 1-ve
70 * GetClearColor 1+ve, 1-ve
71 * SetClearEnabled 1+ve, 1-ve
72 * GetClearEnabled 1+ve, 1-ve
80 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 )
111 : finished( 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);
165 bool TestScreenToFrameBufferFunction( Vector2& coordinates )
167 coordinates = coordinates + Vector2( 1, 2 );
172 Actor CreateRenderableActorSuccess(TestApplication& application, std::string filename)
174 PrepareResourceImage( application, 80u, 80u, Pixel::RGBA8888 );
175 Image image = ResourceImage::New(filename);
176 Actor actor = CreateRenderableActor(image);
177 actor.SetSize( 80, 80 );
181 Actor CreateRenderableActorFailed(TestApplication& application, std::string filename)
183 Image image = ResourceImage::New(filename);
184 DALI_TEST_CHECK( image );
185 Actor actor = CreateRenderableActor(image);
186 actor.SetSize( 80, 80 );
190 Image CreateResourceImage(TestApplication& application, std::string filename)
192 PrepareResourceImage( application, 80u, 80u, Pixel::RGBA8888 );
193 Image image = ResourceImage::New(filename);
194 DALI_TEST_CHECK( image );
198 RenderTask CreateRenderTask(TestApplication& application,
199 CameraActor offscreenCamera,
200 Actor rootActor, // Reset default render task to point at this actor
201 Actor secondRootActor, // Source actor
202 unsigned int refreshRate,
205 // Change main render task to use a different root
206 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
207 taskList.GetTask(0u).SetSourceActor( rootActor );
209 FrameBufferImage frameBufferImage;
212 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
213 frameBufferImage= FrameBufferImage::New( *(testNativeImagePtr.Get()) );
217 frameBufferImage = FrameBufferImage::New( 10, 10 );
220 // Don't draw output framebuffer // '
222 RenderTask newTask = taskList.CreateTask();
223 newTask.SetCameraActor( offscreenCamera );
224 newTask.SetSourceActor( secondRootActor );
225 newTask.SetInputEnabled( false );
226 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
227 newTask.SetClearEnabled( true );
228 newTask.SetExclusive( true );
229 newTask.SetRefreshRate( refreshRate );
230 newTask.SetTargetFrameBuffer( frameBufferImage );
231 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, glSync );
235 bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool testDrawn, bool& finishedSig, bool testFinished, bool testKeepUpdating, int lineNumber )
240 tet_printf("TestApplication::UpdateRender().\n");
242 application.Render(16);
243 application.SendNotification();
245 bool sigPassed = false;
248 sigPassed = finishedSig;
252 sigPassed = ! finishedSig;
255 bool drawResult = callStack.FindMethod("DrawElements") || callStack.FindMethod("DrawArrays");
257 bool drawPassed = false;
260 drawPassed = drawResult;
264 drawPassed = !drawResult;
267 bool keepUpdating = (application.GetUpdateStatus() != 0);
268 bool keepUpdatingPassed = false;
269 if( testKeepUpdating )
271 keepUpdatingPassed = keepUpdating;
275 keepUpdatingPassed = !keepUpdating;
278 bool result = (sigPassed && drawPassed && keepUpdatingPassed);
280 tet_printf("UpdateRender: Expected: Draw:%s Signal:%s KeepUpdating: %s Actual: Draw:%s Signal:%s KeepUpdating: %s %s, line %d\n",
281 BOOLSTR(testDrawn), BOOLSTR(testFinished), BOOLSTR(testKeepUpdating),
282 BOOLSTR(drawResult), BOOLSTR(finishedSig), BOOLSTR(keepUpdating),
283 result ? "Passed":"Failed",
289 // The functor to be used in the hit-test algorithm to check whether the actor is hittable.
290 bool IsActorHittableFunction(Actor actor, Dali::HitTestAlgorithm::TraverseType type)
292 bool hittable = false;
296 case Dali::HitTestAlgorithm::CHECK_ACTOR:
298 // Check whether the actor is visible and not fully transparent.
299 if( actor.IsVisible()
300 && actor.GetCurrentWorldColor().a > 0.01f) // not FULLY_TRANSPARENT
307 case Dali::HitTestAlgorithm::DESCEND_ACTOR_TREE:
309 if( actor.IsVisible() ) // Actor is visible, if not visible then none of its children are visible.
324 } // unnamed namespace
327 /****************************************************************************************************/
328 /****************************************************************************************************/
329 /******************************** TEST CASES BELOW **********************************************/
330 /****************************************************************************************************/
331 /****************************************************************************************************/
333 int UtcDaliRenderTaskDownCast01(void)
335 TestApplication application;
337 tet_infoline("Testing RenderTask::DownCast()");
339 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
341 BaseHandle base = taskList.GetTask( 0u );
342 DALI_TEST_CHECK( base );
344 RenderTask task = RenderTask::DownCast( base );
345 DALI_TEST_CHECK( task );
347 // Try calling a method
348 DALI_TEST_CHECK( task.GetSourceActor() );
352 int UtcDaliRenderTaskDownCast02(void)
354 TestApplication application;
356 tet_infoline("Testing RenderTask::DownCast()");
358 Actor actor = Actor::New();
360 RenderTask task = RenderTask::DownCast( actor );
361 DALI_TEST_CHECK( ! task );
366 int UtcDaliRenderTaskSetSourceActorN(void)
368 TestApplication application;
369 tet_infoline("Testing RenderTask::SetSourceActor() Negative - try with empty actor handle");
370 Stage stage = Stage::GetCurrent();
374 RenderTaskList taskList = stage.GetRenderTaskList();
375 RenderTask renderTask = taskList.CreateTask();
376 renderTask.SetSourceActor(srcActor);
378 application.SendNotification();
379 application.Render();
381 DALI_TEST_CHECK( ! renderTask.GetSourceActor() );
386 int UtcDaliRenderTaskSetSourceActorP01(void)
388 TestApplication application;
390 tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that setting a non-renderable actor stops existing source actor being rendered ");
392 Stage stage = Stage::GetCurrent();
393 RenderTaskList taskList = stage.GetRenderTaskList();
394 RenderTask task = taskList.GetTask( 0u );
396 Actor actor = task.GetSourceActor();
397 DALI_TEST_CHECK( actor );
399 BufferImage img = BufferImage::New( 1,1 );
400 Actor newActor = CreateRenderableActor( img );
401 newActor.SetSize(1,1);
402 stage.Add( newActor );
404 Actor nonRenderableActor = Actor::New();
405 stage.Add( nonRenderableActor );
407 // Stop the newActor from being rendered by changing the source actor
408 DALI_TEST_CHECK( nonRenderableActor );
409 task.SetSourceActor( nonRenderableActor );
410 DALI_TEST_CHECK( task.GetSourceActor() != actor );
411 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
413 TestGlAbstraction& gl = application.GetGlAbstraction();
414 TraceCallStack& drawTrace = gl.GetDrawTrace();
415 drawTrace.Enable(true);
417 // Update & Render nothing!
418 application.GetGlAbstraction().ClearBoundTextures();
419 application.SendNotification();
420 application.Render();
422 // Check that nothing was rendered
423 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
429 int UtcDaliRenderTaskSetSourceActorP02(void)
431 TestApplication application;
433 tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that switching source from a non-renderable to a renderable actor causes the texture to be drawn");
435 Stage stage = Stage::GetCurrent();
437 RenderTaskList taskList = stage.GetRenderTaskList();
439 RenderTask task = taskList.GetTask( 0u );
441 Actor actor = task.GetSourceActor();
442 DALI_TEST_CHECK( actor );
445 BufferImage img = BufferImage::New( 1,1 );
446 Actor newActor = CreateRenderableActor( img );
447 newActor.SetSize(1,1);
448 stage.Add( newActor );
450 Actor nonRenderableActor = Actor::New();
451 stage.Add( nonRenderableActor );
453 TestGlAbstraction& gl = application.GetGlAbstraction();
454 TraceCallStack& drawTrace = gl.GetDrawTrace();
455 drawTrace.Enable(true);
457 // Stop the newActor from being rendered by changing the source actor
458 DALI_TEST_CHECK( nonRenderableActor );
459 task.SetSourceActor( nonRenderableActor );
460 DALI_TEST_CHECK( task.GetSourceActor() != actor );
461 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
463 // Update & Render nothing!
464 application.GetGlAbstraction().ClearBoundTextures();
465 application.SendNotification();
466 application.Render();
468 // Check that nothing was rendered
469 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
472 // Set newActor as the new source Actor
473 task.SetSourceActor( newActor );
474 DALI_TEST_CHECK( task.GetSourceActor() != actor );
475 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
477 // Update & Render the newActor
478 application.GetGlAbstraction().ClearBoundTextures();
479 application.SendNotification();
480 application.Render();
482 // Check that the newActor was rendered
483 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
487 int UtcDaliRenderTaskSetSourceActorOffStage(void)
489 TestApplication application;
491 tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)");
493 Stage stage = Stage::GetCurrent();
494 RenderTaskList taskList = stage.GetRenderTaskList();
495 RenderTask task = taskList.GetTask( 0u );
497 Actor actor = task.GetSourceActor();
498 DALI_TEST_CHECK( actor );
500 TestGlAbstraction& gl = application.GetGlAbstraction();
501 TraceCallStack& drawTrace = gl.GetDrawTrace();
502 drawTrace.Enable(true);
504 BufferImage img = BufferImage::New( 1,1 );
505 Actor newActor = CreateRenderableActor( img );
506 newActor.SetSize(1,1);
507 task.SetSourceActor( newActor );
508 // Don't add newActor to stage yet //'
510 // Update & Render with the actor initially off-stage
511 application.SendNotification();
512 application.Render();
514 // Check that nothing was rendered
515 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
518 stage.Add( newActor );
520 // Update & Render with the actor on-stage
521 application.GetGlAbstraction().ClearBoundTextures();
522 application.SendNotification();
523 application.Render();
525 // Check that the newActor was rendered
526 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
529 // Now remove from stage
530 stage.Remove( newActor );
532 // Update & Render with the actor off-stage
533 application.SendNotification();
534 application.Render();
535 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
540 int UtcDaliRenderTaskSetSourceActorEmpty(void)
542 TestApplication application;
544 tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)");
546 Stage stage = Stage::GetCurrent();
547 RenderTaskList taskList = stage.GetRenderTaskList();
548 RenderTask task = taskList.GetTask( 0u );
550 Actor actor = task.GetSourceActor();
551 DALI_TEST_CHECK( actor );
553 BufferImage img = BufferImage::New( 1,1 );
554 Actor newActor = CreateRenderableActor( img );
555 newActor.SetSize(1,1);
556 stage.Add( newActor );
558 Actor nonRenderableActor = Actor::New();
559 stage.Add( nonRenderableActor );
561 // Set with empty handle
562 task.SetSourceActor( Actor() );
563 DALI_TEST_CHECK( ! task.GetSourceActor() );
565 TestGlAbstraction& gl = application.GetGlAbstraction();
566 TraceCallStack& drawTrace = gl.GetDrawTrace();
567 drawTrace.Enable(true);
569 // Update & Render nothing!
570 application.SendNotification();
571 application.Render();
573 // Check that nothing was rendered
574 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
576 // Set with non-empty handle
577 task.SetSourceActor( newActor );
578 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
580 // Update & Render the newActor
581 application.GetGlAbstraction().ClearBoundTextures();
582 application.SendNotification();
583 application.Render();
585 // Check that the newActor was rendered
586 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
590 int UtcDaliRenderTaskGetSourceActorP01(void)
592 TestApplication application;
594 tet_infoline("Testing RenderTask::GetSourceActor() Check the default render task has a valid source actor");
596 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
598 RenderTask task = taskList.GetTask( 0u );
600 Actor actor = task.GetSourceActor();
601 DALI_TEST_CHECK( actor );
603 // By default the entire scene should be rendered
604 Actor root = Stage::GetCurrent().GetLayer( 0 );
605 DALI_TEST_CHECK( root == actor );
609 int UtcDaliRenderTaskGetSourceActorP02(void)
611 TestApplication application;
613 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.");
615 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
616 RenderTask task = taskList.CreateTask();
617 Actor actor = Actor::New();
618 Stage::GetCurrent().Add(actor);
619 task.SetSourceActor( actor );
621 DALI_TEST_EQUALS( actor, task.GetSourceActor(), TEST_LOCATION );
626 int UtcDaliRenderTaskGetSourceActorN(void)
628 TestApplication application;
630 tet_infoline("Testing RenderTask::GetSourceActor() Try with empty handle");
635 Actor actor = task.GetSourceActor();
637 catch (Dali::DaliException& e)
639 DALI_TEST_PRINT_ASSERT( e );
640 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
646 int UtcDaliRenderTaskSetExclusive(void)
648 TestApplication application;
650 tet_infoline("Testing RenderTask::SetExclusive() Check that exclusion works");
652 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
654 // Manipulate the GenTextures behaviour, to identify different actors
656 std::vector<GLuint> ids;
657 ids.push_back( 8 ); // 8 = actor1
658 ids.push_back( 9 ); // 9 = actor2
659 ids.push_back( 10 ); // 10 = actor3
660 application.GetGlAbstraction().SetNextTextureIds( ids );
662 BufferImage img1 = BufferImage::New( 1,1 );
663 Actor actor1 = CreateRenderableActor( img1 );
665 Stage::GetCurrent().Add( actor1 );
667 // Update & Render actor1
668 application.SendNotification();
669 application.Render();
671 // Check that the actor1 was rendered
672 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
673 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
675 if ( boundTextures.size() )
677 DALI_TEST_EQUALS( boundTextures[0], 8u/*unique to actor1*/, TEST_LOCATION );
680 BufferImage img2 = BufferImage::New( 1,1 );
681 Actor actor2 = CreateRenderableActor( img2 );
684 // Force actor2 to be rendered before actor1
685 Layer layer = Layer::New();
686 Stage::GetCurrent().Add( layer );
688 layer.LowerToBottom();
691 application.GetGlAbstraction().ClearBoundTextures();
692 application.SendNotification();
693 application.Render();
695 // Check that the actors were rendered
696 DALI_TEST_EQUALS( boundTextures.size(), 2u, TEST_LOCATION );
698 if ( boundTextures.size() )
700 DALI_TEST_EQUALS( boundTextures[0], 9u/*unique to actor2*/, TEST_LOCATION );
701 DALI_TEST_EQUALS( boundTextures[1], 8u/*unique to actor1*/, TEST_LOCATION );
704 BufferImage img3 = BufferImage::New( 1,1 );
705 Actor actor3 = CreateRenderableActor( img3 );
708 // Force actor3 to be rendered before actor2
709 layer = Layer::New();
710 Stage::GetCurrent().Add( layer );
712 layer.LowerToBottom();
714 // Update & Render all actors
715 application.GetGlAbstraction().ClearBoundTextures();
716 application.SendNotification();
717 application.Render();
719 // Check that the actors were rendered
720 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
722 if ( boundTextures.size() )
724 DALI_TEST_EQUALS( boundTextures[0], 10u/*unique to actor3*/, TEST_LOCATION );
725 DALI_TEST_EQUALS( boundTextures[1], 9u/*unique to actor2*/, TEST_LOCATION );
726 DALI_TEST_EQUALS( boundTextures[2], 8u/*unique to actor1*/, TEST_LOCATION );
729 // Both actors are now connected to the root node
730 // Setup 2 render-tasks - the first will render from the root-node, and the second from actor2
732 // Not exclusive is the default
733 RenderTask task1 = taskList.GetTask( 0u );
734 DALI_TEST_CHECK( false == task1.IsExclusive() );
736 RenderTask task2 = taskList.CreateTask();
737 DALI_TEST_CHECK( false == task2.IsExclusive() );
738 task2.SetSourceActor( actor2 );
740 // Task1 should render all actors, and task 2 should render only actor2
742 application.GetGlAbstraction().ClearBoundTextures();
743 application.SendNotification();
744 application.Render();
746 DALI_TEST_EQUALS( boundTextures.size(), 4u, TEST_LOCATION );
748 if ( boundTextures.size() == 4 )
750 // Test that task 1 renders actor3, then actor2 & then actor1
751 DALI_TEST_CHECK( boundTextures[0] == 10u );
752 DALI_TEST_CHECK( boundTextures[1] == 9u );
753 DALI_TEST_CHECK( boundTextures[2] == 8u );
755 // Test that task 2 renders actor2
756 DALI_TEST_EQUALS( boundTextures[3], 9u, TEST_LOCATION );
759 // Make actor2 exclusive to task2
761 task2.SetExclusive( true );
762 DALI_TEST_CHECK( true == task2.IsExclusive() );
764 // Task1 should render only actor1, and task 2 should render only actor2
766 application.GetGlAbstraction().ClearBoundTextures();
767 application.SendNotification();
768 application.Render();
770 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
771 if ( boundTextures.size() == 3 )
773 // Test that task 1 renders actor3 & actor1
774 DALI_TEST_CHECK( boundTextures[0] == 10u );
775 DALI_TEST_CHECK( boundTextures[1] == 8u );
777 // Test that task 2 renders actor2
778 DALI_TEST_CHECK( boundTextures[2] == 9u );
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 BufferImage img1 = BufferImage::New( 1,1 );
794 Actor actor1 = CreateRenderableActor( img1 );
796 Stage::GetCurrent().Add( actor1 );
798 RenderTaskList taskList = Stage::GetCurrent().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 = Stage::GetCurrent().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 = Stage::GetCurrent().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 = Stage::GetCurrent().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 = Stage::GetCurrent().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 = Stage::GetCurrent().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 );
963 int UtcDaliRenderTaskSetCameraActorN(void)
965 TestApplication application;
967 tet_infoline("Testing RenderTask::SetCameraActor() with empty actor handle");
969 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
971 RenderTask task = taskList.GetTask( 0u );
973 Actor actor = task.GetCameraActor();
974 DALI_TEST_CHECK( actor );
976 CameraActor cameraActor;
978 task.SetCameraActor( cameraActor );
979 DALI_TEST_EQUALS( (bool)task.GetCameraActor(), false, TEST_LOCATION );
980 DALI_TEST_EQUALS( task.GetCameraActor(), cameraActor, TEST_LOCATION );
985 int UtcDaliRenderTaskGetCameraActorP(void)
987 TestApplication application;
989 tet_infoline("Testing RenderTask::GetCameraActor()");
991 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
993 RenderTask task = taskList.GetTask( 0u );
995 CameraActor actor = task.GetCameraActor();
996 DALI_TEST_CHECK( actor );
997 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
998 DALI_TEST_GREATER( actor.GetFieldOfView(), 0.0f, TEST_LOCATION );
1002 int UtcDaliRenderTaskGetCameraActorN(void)
1004 TestApplication application;
1006 tet_infoline("Testing RenderTask::GetCameraActor() with empty handle");
1011 Actor actor = task.GetCameraActor();
1013 catch (Dali::DaliException& e)
1015 DALI_TEST_PRINT_ASSERT( e );
1016 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1022 int UtcDaliRenderTaskSetTargetFrameBufferP(void)
1024 TestApplication application;
1026 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
1028 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1030 RenderTask task = taskList.GetTask( 0u );
1032 FrameBufferImage newImage = FrameBufferImage::New();
1033 task.SetTargetFrameBuffer( newImage );
1034 DALI_TEST_CHECK( task.GetTargetFrameBuffer() == newImage );
1038 int UtcDaliRenderTaskSetTargetFrameBufferN(void)
1040 TestApplication application;
1042 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
1044 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1046 RenderTask task = taskList.GetTask( 0u );
1047 FrameBufferImage newImage; // Empty handle
1048 task.SetTargetFrameBuffer( newImage );
1049 DALI_TEST_EQUALS( (bool)task.GetTargetFrameBuffer(), false, TEST_LOCATION );
1053 int UtcDaliRenderTaskGetTargetFrameBufferP(void)
1055 TestApplication application;
1057 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
1059 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1061 RenderTask newTask = taskList.CreateTask();
1062 FrameBufferImage fb = FrameBufferImage::New(128, 128, Pixel::RGBA8888);
1063 newTask.SetTargetFrameBuffer( fb );
1064 DALI_TEST_EQUALS( newTask.GetTargetFrameBuffer(), fb, TEST_LOCATION );
1068 int UtcDaliRenderTaskGetTargetFrameBufferN(void)
1070 TestApplication application;
1072 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
1074 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1076 RenderTask task = taskList.GetTask( 0u );
1078 // By default render-tasks do not render off-screen
1079 FrameBufferImage image = task.GetTargetFrameBuffer();
1080 DALI_TEST_CHECK( !image );
1085 int UtcDaliRenderTaskSetFrameBufferP(void)
1087 TestApplication application;
1089 tet_infoline("Testing RenderTask::SetFrameBuffer()");
1091 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1093 RenderTask task = taskList.GetTask( 0u );
1095 FrameBuffer newFrameBuffer = FrameBuffer::New( 128u, 128u, FrameBuffer::Attachment::NONE );
1096 task.SetFrameBuffer( newFrameBuffer );
1097 DALI_TEST_CHECK( task.GetFrameBuffer() == newFrameBuffer );
1101 int UtcDaliRenderTaskSetFrameBufferN(void)
1103 TestApplication application;
1105 tet_infoline("Testing RenderTask::SetFrameBuffer()");
1107 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1109 RenderTask task = taskList.GetTask( 0u );
1110 FrameBuffer newFrameBuffer; // Empty handle
1111 task.SetFrameBuffer( newFrameBuffer );
1112 DALI_TEST_EQUALS( (bool)task.GetFrameBuffer(), false, TEST_LOCATION );
1116 int UtcDaliRenderTaskGetFrameBufferP(void)
1118 TestApplication application;
1120 tet_infoline("Testing RenderTask::GetFrameBuffer()");
1122 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1124 RenderTask task = taskList.GetTask( 0u );
1126 FrameBuffer newFrameBuffer = FrameBuffer::New( 1u, 1u, FrameBuffer::Attachment::NONE );
1127 task.SetFrameBuffer( newFrameBuffer );
1128 DALI_TEST_CHECK( task.GetFrameBuffer() == newFrameBuffer );
1132 int UtcDaliRenderTaskGetFrameBufferN(void)
1134 TestApplication application;
1136 tet_infoline("Testing RenderTask::GetFrameBuffer()");
1138 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1140 RenderTask task = taskList.GetTask( 0u );
1142 // By default render-tasks do not render off-screen
1143 FrameBuffer frameBuffer = task.GetFrameBuffer();
1144 DALI_TEST_CHECK( !frameBuffer );
1149 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionP(void)
1151 TestApplication application;
1153 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
1155 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1157 RenderTask task = taskList.GetTask( 0u );
1159 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
1161 Vector2 coordinates( 5, 10 );
1162 Vector2 convertedCoordinates( 6, 12 ); // + Vector(1, 2)
1164 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1165 DALI_TEST_CHECK( func( coordinates ) );
1166 DALI_TEST_CHECK( coordinates == convertedCoordinates );
1168 task.SetScreenToFrameBufferFunction( RenderTask::FULLSCREEN_FRAMEBUFFER_FUNCTION );
1169 func = task.GetScreenToFrameBufferFunction();
1170 DALI_TEST_CHECK( func( coordinates ) );
1172 task.SetScreenToFrameBufferFunction( RenderTask::DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION );
1173 func = task.GetScreenToFrameBufferFunction();
1174 DALI_TEST_CHECK( ! func( coordinates ) );
1178 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionN(void)
1180 TestApplication application;
1182 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
1184 RenderTask task; // Empty handle
1187 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
1189 catch (Dali::DaliException& e)
1191 DALI_TEST_PRINT_ASSERT( e );
1192 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1197 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionP(void)
1199 TestApplication application;
1201 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction()");
1203 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1205 RenderTask task = taskList.GetTask( 0u );
1207 Vector2 originalCoordinates( 5, 10 );
1208 Vector2 coordinates( 5, 10 );
1210 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1211 DALI_TEST_CHECK( !func( coordinates ) ); // conversion should fail by default
1212 DALI_TEST_CHECK( coordinates == originalCoordinates ); // coordinates should not be modified
1216 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionN(void)
1218 TestApplication application;
1220 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction() on empty handle");
1225 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1228 catch (Dali::DaliException& e)
1230 DALI_TEST_PRINT_ASSERT( e );
1231 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1237 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorP(void)
1239 TestApplication application;
1240 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor ");
1242 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1243 RenderTask renderTask = taskList.CreateTask();
1244 Actor mappingActor = Actor::New();
1245 renderTask.SetScreenToFrameBufferMappingActor(mappingActor);
1247 DALI_TEST_EQUALS( mappingActor, renderTask.GetScreenToFrameBufferMappingActor(), TEST_LOCATION );
1252 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorN(void)
1254 TestApplication application;
1255 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor with empty task handle");
1261 task.SetScreenToFrameBufferMappingActor(mappingActor);
1263 catch (Dali::DaliException& e)
1265 DALI_TEST_PRINT_ASSERT( e );
1266 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1271 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActor02N(void)
1273 TestApplication application;
1274 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor with empty task handle");
1276 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1277 RenderTask renderTask = taskList.CreateTask();
1279 renderTask.SetScreenToFrameBufferMappingActor(actor);
1281 DALI_TEST_EQUALS( (bool)renderTask.GetScreenToFrameBufferMappingActor(), false, TEST_LOCATION);
1285 int UtcDaliRenderTaskGetViewportP01(void)
1287 TestApplication application;
1289 tet_infoline("Testing RenderTask::GetViewport() on default task");
1291 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1292 RenderTask task = taskList.GetTask( 0u );
1293 Viewport viewport = task.GetViewport();
1295 // By default the viewport should match the stage width/height
1296 Vector2 stageSize = Stage::GetCurrent().GetSize();
1297 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1298 DALI_TEST_CHECK( viewport == expectedViewport );
1302 int UtcDaliRenderTaskGetViewportP02(void)
1304 TestApplication application;
1306 tet_infoline("Testing RenderTask::GetViewport() on new task");
1308 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1309 RenderTask task = taskList.CreateTask();
1310 Viewport viewport = task.GetViewport();
1312 // By default the viewport should match the stage width/height
1313 Vector2 stageSize = Stage::GetCurrent().GetSize();
1314 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1315 DALI_TEST_CHECK( viewport == expectedViewport );
1319 int UtcDaliRenderTaskGetViewportN(void)
1321 TestApplication application;
1323 tet_infoline("Testing RenderTask::GetViewport() on empty handle");
1328 Viewport viewport = task.GetViewport();
1331 catch (Dali::DaliException& e)
1333 DALI_TEST_PRINT_ASSERT( e );
1334 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1340 int UtcDaliRenderTaskSetViewportP(void)
1342 TestApplication application;
1344 tet_infoline("Testing RenderTask::SetViewport()");
1346 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1348 RenderTask task = taskList.GetTask( 0u );
1349 Vector2 stageSize = Stage::GetCurrent().GetSize();
1350 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
1351 task.SetViewport( newViewport );
1353 // Update (viewport is a property)
1354 application.SendNotification();
1355 application.Render();
1357 DALI_TEST_CHECK( task.GetViewport() == newViewport );
1361 int UtcDaliRenderTaskSetViewportN(void)
1363 TestApplication application;
1365 tet_infoline("Testing RenderTask::SetViewport()");
1367 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1372 Vector2 stageSize = Stage::GetCurrent().GetSize();
1373 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
1374 task.SetViewport( newViewport );
1376 catch (Dali::DaliException& e)
1378 DALI_TEST_PRINT_ASSERT( e );
1379 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1386 int UtcDaliRenderTaskSetViewportPosition(void)
1388 TestApplication application;
1390 tet_infoline("Testing RenderTask::SetViewportPosition()");
1392 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1394 RenderTask task = taskList.GetTask( 0u );
1396 Viewport viewport = task.GetViewport();
1398 // By default the viewport should match the stage width/height
1400 Vector2 stageSize = Stage::GetCurrent().GetSize();
1401 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1402 DALI_TEST_CHECK( viewport == expectedViewport );
1405 Vector2 newPosition(25.0f, 50.0f);
1406 task.SetViewportPosition( newPosition );
1408 // Update (viewport is a property)
1409 application.SendNotification();
1410 application.Render();
1412 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1414 // Set by Property test
1415 Vector2 newPosition2(32.0f, 32.0f);
1416 task.SetProperty( RenderTask::Property::VIEWPORT_POSITION, newPosition2 );
1417 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1418 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition, TEST_LOCATION ); // still the old position
1421 application.SendNotification();
1422 application.Render();
1424 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1425 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1426 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1428 Vector2 newPosition3(64.0f, 0.0f);
1429 Animation animation = Animation::New(1.0f);
1430 animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_POSITION ), newPosition3, AlphaFunction::LINEAR );
1433 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1434 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1436 // Perform 1000ms worth of updates at which point animation should have completed.
1437 Wait(application, 1000);
1438 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1439 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1440 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1442 // Create another animation which animates by a certain value
1443 const Vector2 newPosition4( 75.0f, 45.0f );
1444 const Vector2 relativePosition( newPosition4 - newPosition3 );
1445 animation = Animation::New( 1.0f );
1446 animation.AnimateBy( Property( task, RenderTask::Property::VIEWPORT_POSITION ), relativePosition );
1449 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1450 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, TEST_LOCATION );
1452 // Perform 1000ms worth of updates at which point animation should have completed.
1453 Wait(application, 1000);
1454 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1455 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1456 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1461 int UtcDaliRenderTaskSetViewportSize(void)
1463 TestApplication application;
1465 tet_infoline("Testing RenderTask::SetViewportSize()");
1467 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1469 RenderTask task = taskList.GetTask( 0u );
1471 Viewport viewport = task.GetViewport();
1473 // By default the viewport should match the stage width/height
1475 Vector2 stageSize = Stage::GetCurrent().GetSize();
1476 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1477 DALI_TEST_CHECK( viewport == expectedViewport );
1479 Vector2 newSize(128.0f, 64.0f);
1480 task.SetViewportSize( newSize );
1482 // Update (viewport is a property)
1483 application.SendNotification();
1484 application.Render();
1486 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1488 // Set by Property test
1489 Vector2 newSize2(50.0f, 50.0f);
1490 task.SetProperty( RenderTask::Property::VIEWPORT_SIZE, newSize2 );
1491 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1492 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize, TEST_LOCATION ); // still the old position
1495 application.SendNotification();
1496 application.Render();
1498 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1499 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1500 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1502 Vector2 newSize3(10.0f, 10.0f);
1503 Animation animation = Animation::New(1.0f);
1504 animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_SIZE ), newSize3, AlphaFunction::LINEAR );
1507 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1508 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1510 // Perform 1000ms worth of updates at which point animation should have completed.
1511 Wait(application, 1000);
1512 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1513 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1514 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1516 // Create another animation which animates by a certain value
1517 const Vector2 newSize4( 75.0f, 45.0f );
1518 const Vector2 relativeSize( newSize4 - newSize3 );
1519 animation = Animation::New( 1.0f );
1520 animation.AnimateBy( Property( task, RenderTask::Property::VIEWPORT_SIZE ), relativeSize );
1523 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1524 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, TEST_LOCATION );
1526 // Perform 1000ms worth of updates at which point animation should have completed.
1527 Wait(application, 1000);
1528 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1529 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1530 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1535 int UtcDaliRenderTaskSetClearColorP(void)
1537 TestApplication application;
1539 tet_infoline("Testing RenderTask::SetClearColor()");
1541 Vector4 testColor( 1.0f, 2.0f, 3.0f, 4.0f );
1542 Vector4 testColor2( 5.0f, 6.0f, 7.0f, 8.0f );
1544 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1546 RenderTask task = taskList.GetTask( 0u );
1547 DALI_TEST_CHECK( task.GetClearColor() != testColor );
1549 task.SetClearColor( testColor );
1554 DALI_TEST_EQUALS( task.GetClearColor(), testColor, TEST_LOCATION );
1556 task.SetProperty( RenderTask::Property::CLEAR_COLOR, testColor2 );
1557 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1558 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor, TEST_LOCATION ); // still the old color
1563 DALI_TEST_EQUALS( task.GetClearColor(), testColor2, TEST_LOCATION );
1564 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1565 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1567 Vector4 newColor3(10.0f, 10.0f, 20.0f, 30.0f);
1568 Animation animation = Animation::New(1.0f);
1569 animation.AnimateTo( Property( task, RenderTask::Property::CLEAR_COLOR ), newColor3, AlphaFunction::LINEAR );
1572 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1573 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1575 // Perform 1000ms worth of updates at which point animation should have completed.
1576 Wait(application, 1000);
1577 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1578 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1580 // Create another animation which animates by a certain value
1581 const Vector4 newColor4( 0.45f, 0.35f, 0.25f, 0.1f );
1582 const Vector4 relativeColor( newColor4 - newColor3 );
1583 animation = Animation::New( 1.0f );
1584 animation.AnimateBy( Property( task, RenderTask::Property::CLEAR_COLOR ), relativeColor );
1587 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION );
1588 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_10, TEST_LOCATION );
1590 // Perform 1000ms worth of updates at which point animation should have completed.
1591 Wait(application, 1000);
1592 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION );
1593 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION );
1598 int UtcDaliRenderTaskSetClearColorN(void)
1600 TestApplication application;
1602 tet_infoline("Testing RenderTask::SetClearColor() on empty handle");
1607 task.SetClearColor( Vector4::ZERO );
1609 catch (Dali::DaliException& e)
1611 DALI_TEST_PRINT_ASSERT( e );
1612 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1617 int UtcDaliRenderTaskGetClearColorP(void)
1619 TestApplication application;
1621 tet_infoline("Testing RenderTask::GetClearColor()");
1623 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1624 RenderTask task = taskList.GetTask( 0u );
1625 DALI_TEST_EQUALS( task.GetClearColor(), RenderTask::DEFAULT_CLEAR_COLOR, TEST_LOCATION );
1629 int UtcDaliRenderTaskGetClearColorN(void)
1631 TestApplication application;
1633 tet_infoline("Testing RenderTask::GetClearColor()");
1638 Vector4 color = task.GetClearColor();
1641 catch (Dali::DaliException& e)
1643 DALI_TEST_PRINT_ASSERT( e );
1644 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1649 int UtcDaliRenderTaskSetClearEnabledP(void)
1651 TestApplication application;
1653 tet_infoline("Testing RenderTask::SetClearEnabled()");
1655 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1657 RenderTask task = taskList.GetTask( 0u );
1658 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1660 task.SetClearEnabled( true );
1661 DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION );
1663 task.SetClearEnabled( false );
1664 DALI_TEST_EQUALS( task.GetClearEnabled(), false, TEST_LOCATION );
1668 int UtcDaliRenderTaskSetClearEnabledN(void)
1670 TestApplication application;
1672 tet_infoline("Testing RenderTask::SetClearEnabled() with empty handle");
1677 task.SetClearEnabled(true);
1679 catch (Dali::DaliException& e)
1681 DALI_TEST_PRINT_ASSERT( e );
1682 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1687 int UtcDaliRenderTaskGetClearEnabledP(void)
1689 TestApplication application;
1691 tet_infoline("Testing RenderTask::GetClearEnabled()");
1693 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1695 RenderTask task = taskList.GetTask( 0u );
1696 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1701 int UtcDaliRenderTaskGetClearEnabledN(void)
1703 TestApplication application;
1705 tet_infoline("Testing RenderTask::GetClearEnabled() with empty handle");
1710 bool x = task.GetClearEnabled();
1713 catch (Dali::DaliException& e)
1715 DALI_TEST_PRINT_ASSERT( e );
1716 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1721 int UtcDaliRenderTaskSetCullModeP(void)
1723 TestApplication application;
1725 tet_infoline("Testing RenderTask::SetCullMode()");
1727 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1728 RenderTask task = taskList.GetTask( 0u );
1729 DALI_TEST_EQUALS( task.GetCullMode(), true, TEST_LOCATION );
1731 task.SetCullMode( false );
1733 DALI_TEST_EQUALS( task.GetCullMode(), false, TEST_LOCATION );
1738 int UtcDaliRenderTaskSetCullModeN(void)
1740 TestApplication application;
1742 tet_infoline("Testing RenderTask::SetCullMode() on empty handle");
1747 task.SetCullMode( false );
1749 catch (Dali::DaliException& e)
1751 DALI_TEST_PRINT_ASSERT( e );
1752 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1757 int UtcDaliRenderTaskGetCullModeP(void)
1759 TestApplication application;
1761 tet_infoline("Testing RenderTask::GetCullMode()");
1763 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1764 RenderTask task = taskList.GetTask( 0u );
1765 DALI_TEST_EQUALS( task.GetCullMode(), true, TEST_LOCATION );
1769 int UtcDaliRenderTaskGetCullModeN(void)
1771 TestApplication application;
1773 tet_infoline("Testing RenderTask::GetCullMode() with empty handle");
1778 bool x = task.GetCullMode();
1781 catch (Dali::DaliException& e)
1783 DALI_TEST_PRINT_ASSERT( e );
1784 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1790 int UtcDaliRenderTaskSetRefreshRate(void)
1792 TestApplication application;
1794 tet_infoline("Testing RenderTask::SetRefreshRate()");
1796 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1798 // By default tasks will be processed every frame
1799 RenderTask task = taskList.GetTask( 0u );
1800 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1802 task.SetRefreshRate( 2u ); // every-other frame
1803 DALI_TEST_CHECK( 2u == task.GetRefreshRate() );
1805 task.SetRefreshRate( RenderTask::REFRESH_ALWAYS );
1806 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1810 int UtcDaliRenderTaskGetRefreshRate(void)
1812 TestApplication application;
1814 tet_infoline("Testing RenderTask::GetRefreshRate()");
1816 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1818 // By default tasks will be processed every frame
1819 RenderTask task = taskList.GetTask( 0u );
1820 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1822 RenderTask newTask = taskList.CreateTask();
1823 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == newTask.GetRefreshRate() );
1827 int UtcDaliRenderTaskSignalFinished(void)
1829 TestApplication application;
1831 tet_infoline("Testing RenderTask::SignalFinished()");
1833 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1834 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1836 CameraActor offscreenCameraActor = CameraActor::New();
1838 Stage::GetCurrent().Add( offscreenCameraActor );
1840 BufferImage image = BufferImage::New( 10, 10 );
1842 Actor rootActor = CreateRenderableActor( image );
1843 rootActor.SetSize( 10, 10 );
1844 Stage::GetCurrent().Add( rootActor );
1846 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1847 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
1848 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
1850 RenderTask newTask = taskList.CreateTask();
1851 newTask.SetCameraActor( offscreenCameraActor );
1852 newTask.SetSourceActor( rootActor );
1853 newTask.SetInputEnabled( false );
1854 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
1855 newTask.SetClearEnabled( true );
1856 newTask.SetExclusive( true );
1857 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
1858 newTask.SetTargetFrameBuffer( frameBufferImage );
1859 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
1861 bool finished = false;
1862 RenderTaskFinished renderTaskFinished( finished );
1863 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1865 // Flush the queue and render.
1866 application.SendNotification();
1868 // 1 render to process render task, then wait for sync before finished msg is sent
1869 // from update to the event thread.
1871 application.Render();
1872 application.SendNotification();
1873 DALI_TEST_CHECK( !finished );
1875 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1876 DALI_TEST_CHECK( lastSyncObj != NULL );
1878 application.Render();
1879 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1880 application.SendNotification();
1881 DALI_TEST_CHECK( !finished );
1883 application.Render();
1884 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1885 application.SendNotification();
1886 DALI_TEST_CHECK( ! finished );
1888 sync.SetObjectSynced( lastSyncObj, true );
1890 application.Render();
1891 application.SendNotification();
1892 DALI_TEST_CHECK( !finished );
1894 application.Render();
1895 application.SendNotification();
1896 DALI_TEST_CHECK( finished );
1898 DALI_TEST_EQUALS( application.GetUpdateStatus(), 0, TEST_LOCATION );
1903 int UtcDaliRenderTaskContinuous01(void)
1905 TestApplication application;
1907 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not staged)\nPOST:continuous renders, no Finished signal");
1909 // SETUP AN OFFSCREEN RENDER TASK
1910 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1911 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1912 drawTrace.Enable(true);
1914 Actor rootActor = Actor::New();
1915 Stage::GetCurrent().Add( rootActor );
1917 CameraActor offscreenCameraActor = CameraActor::New();
1918 Stage::GetCurrent().Add( offscreenCameraActor );
1920 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1922 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1923 bool finished = false;
1924 RenderTaskFinished renderTaskFinished( finished );
1925 application.SendNotification();
1927 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1928 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1929 application.GetPlatform().ClearReadyResources();
1931 // ADD SOURCE ACTOR TO STAGE - expect continuous renders to start, no finished signal
1932 Stage::GetCurrent().Add(secondRootActor);
1933 application.SendNotification();
1935 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1936 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1941 int UtcDaliRenderTaskContinuous02(void)
1943 TestApplication application;
1945 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not visible)\nPOST:continuous renders, no Finished signal");
1947 // SETUP AN OFFSCREEN RENDER TASK
1948 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1949 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1950 drawTrace.Enable(true);
1952 Actor rootActor = Actor::New();
1953 Stage::GetCurrent().Add( rootActor );
1955 CameraActor offscreenCameraActor = CameraActor::New();
1956 Stage::GetCurrent().Add( offscreenCameraActor );
1958 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1959 Stage::GetCurrent().Add(secondRootActor);
1960 secondRootActor.SetVisible(false);
1962 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1963 bool finished = false;
1964 RenderTaskFinished renderTaskFinished( finished );
1965 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1966 application.SendNotification();
1968 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1969 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1970 application.GetPlatform().ClearReadyResources();
1972 // MAKE SOURCE ACTOR VISIBLE - expect continuous renders to start, no finished signal
1973 secondRootActor.SetVisible(true);
1974 application.SendNotification();
1976 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1977 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1981 int UtcDaliRenderTaskContinuous03(void)
1983 TestApplication application;
1985 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (camera actor not staged)\nPOST:continuous renders, no Finished signal");
1987 // SETUP AN OFFSCREEN RENDER TASK
1988 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1989 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1990 drawTrace.Enable(true);
1992 Actor rootActor = Actor::New();
1993 Stage::GetCurrent().Add( rootActor );
1995 CameraActor offscreenCameraActor = CameraActor::New();
1996 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1997 Stage::GetCurrent().Add(secondRootActor);
1999 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2000 bool finished = false;
2001 RenderTaskFinished renderTaskFinished( finished );
2002 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2003 application.SendNotification();
2005 // START PROCESS/RENDER Input, Expected Input, Expected
2006 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
2007 application.GetPlatform().ClearReadyResources();
2009 // ADD CAMERA ACTOR TO STAGE - expect continuous renders to start, no finished signal
2010 Stage::GetCurrent().Add( offscreenCameraActor );
2011 application.SendNotification();
2013 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
2014 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2019 int UtcDaliRenderTaskContinuous04(void)
2021 TestApplication application;
2023 tet_infoline("Testing RenderTask Render Continuous using loaded image");
2025 // SETUP AN OFFSCREEN RENDER TASK
2026 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2027 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2028 drawTrace.Enable(true);
2030 Actor rootActor = Actor::New();
2031 Stage::GetCurrent().Add( rootActor );
2033 CameraActor offscreenCameraActor = CameraActor::New();
2034 Stage::GetCurrent().Add( offscreenCameraActor );
2035 Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg");
2036 Stage::GetCurrent().Add(secondRootActor);
2038 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2039 bool finished = false;
2040 RenderTaskFinished renderTaskFinished( finished );
2041 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2042 application.SendNotification();
2044 // START PROCESS/RENDER Input, Expected Input, Expected
2045 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2049 int UtcDaliRenderTaskOnce01(void)
2051 TestApplication application;
2053 tet_infoline("Testing RenderTask Render Once GlSync, using loaded image");
2055 // SETUP AN OFFSCREEN RENDER TASK
2056 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2057 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2058 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2059 drawTrace.Enable(true);
2061 Actor rootActor = Actor::New();
2062 Stage::GetCurrent().Add( rootActor );
2064 CameraActor offscreenCameraActor = CameraActor::New();
2065 Stage::GetCurrent().Add( offscreenCameraActor );
2066 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2068 Stage::GetCurrent().Add(secondRootActor);
2070 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
2071 bool finished = false;
2072 RenderTaskFinished renderTaskFinished( finished );
2073 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2074 application.SendNotification();
2076 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2078 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2079 DALI_TEST_CHECK( lastSyncObj != NULL );
2080 sync.SetObjectSynced( lastSyncObj, true );
2082 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2083 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2087 int UtcDaliRenderTaskOnce02(void)
2089 TestApplication application;
2091 tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n");
2093 // SETUP AN OFFSCREEN RENDER TASK
2094 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2095 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2096 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2097 drawTrace.Enable(true);
2099 Actor rootActor = Actor::New();
2100 Stage::GetCurrent().Add( rootActor );
2102 CameraActor offscreenCameraActor = CameraActor::New();
2103 Stage::GetCurrent().Add( offscreenCameraActor );
2105 Shader shader = CreateShader();
2106 Image image = CreateResourceImage(application, "aFile.jpg");
2107 TextureSet textureSet = CreateTextureSet( image );
2109 Geometry geometry = CreateQuadGeometry();
2110 Renderer renderer = Renderer::New(geometry, shader);
2111 renderer.SetTextures( textureSet );
2112 Actor secondRootActor = Actor::New();
2113 secondRootActor.AddRenderer(renderer);
2114 secondRootActor.SetSize(100, 100);
2115 Stage::GetCurrent().Add(secondRootActor);
2117 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
2118 bool finished = false;
2119 RenderTaskFinished renderTaskFinished( finished );
2120 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2121 application.SendNotification();
2123 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2125 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2126 DALI_TEST_CHECK( lastSyncObj != NULL );
2127 sync.SetObjectSynced( lastSyncObj, true );
2129 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2130 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2135 int UtcDaliRenderTaskOnce03(void)
2137 TestApplication application;
2139 tet_infoline("Testing RenderTask Render Once GlSync, using loaded image. Switch from render always after ready to render once\n");
2141 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2142 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2143 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2144 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2145 drawTrace.Enable(true);
2147 Actor rootActor = Actor::New();
2148 Stage::GetCurrent().Add( rootActor );
2150 CameraActor offscreenCameraActor = CameraActor::New();
2151 Stage::GetCurrent().Add( offscreenCameraActor );
2152 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2153 Stage::GetCurrent().Add(secondRootActor);
2155 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2156 bool finished = false;
2157 RenderTaskFinished renderTaskFinished( finished );
2158 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2159 application.SendNotification();
2161 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2163 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2164 application.SendNotification();
2166 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2168 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2169 DALI_TEST_CHECK( lastSyncObj != NULL );
2170 sync.SetObjectSynced( lastSyncObj, true );
2172 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2173 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2179 int UtcDaliRenderTaskOnce04(void)
2181 TestApplication application;
2182 tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n"
2183 "Switch from render always after ready to render once\n"
2186 // SETUP AN OFFSCREEN RENDER TASK
2187 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2188 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2189 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2190 drawTrace.Enable(true);
2192 Actor rootActor = Actor::New();
2193 Stage::GetCurrent().Add( rootActor );
2195 CameraActor offscreenCameraActor = CameraActor::New();
2196 Stage::GetCurrent().Add( offscreenCameraActor );
2198 Shader shader = CreateShader();
2199 Image image = CreateResourceImage(application, "aFile.jpg");
2200 TextureSet textureSet = CreateTextureSet( image );
2202 Geometry geometry = CreateQuadGeometry();
2203 Renderer renderer = Renderer::New(geometry, shader);
2204 renderer.SetTextures( textureSet );
2205 Actor secondRootActor = Actor::New();
2206 secondRootActor.AddRenderer(renderer);
2207 secondRootActor.SetSize(100, 100);
2208 Stage::GetCurrent().Add(secondRootActor);
2210 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2211 bool finished = false;
2212 RenderTaskFinished renderTaskFinished( finished );
2213 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2214 application.SendNotification();
2216 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2218 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2219 application.SendNotification();
2221 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2223 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2224 DALI_TEST_CHECK( lastSyncObj != NULL );
2225 sync.SetObjectSynced( lastSyncObj, true );
2227 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2228 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2233 int UtcDaliRenderTaskOnceNoSync01(void)
2235 TestApplication application;
2237 tet_infoline("Testing RenderTask Render Once, \nPRE: Resources ready\nPOST: Finished signal sent once only");
2239 // SETUP AN OFFSCREEN RENDER TASK
2240 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2241 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2242 drawTrace.Enable(true);
2244 Actor rootActor = Actor::New();
2245 Stage::GetCurrent().Add( rootActor );
2247 CameraActor offscreenCameraActor = CameraActor::New();
2248 Stage::GetCurrent().Add( offscreenCameraActor );
2249 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2250 Stage::GetCurrent().Add(secondRootActor);
2252 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2253 bool finished = false;
2254 RenderTaskFinished renderTaskFinished( finished );
2255 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2256 application.SendNotification();
2258 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2259 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2263 int UtcDaliRenderTaskOnceNoSync02(void)
2265 TestApplication application;
2267 tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loaded image.\n"
2268 "PRE: Resources ready\nPOST: Finished signal sent once only");
2269 // SETUP AN OFFSCREEN RENDER TASK
2270 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2271 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2272 drawTrace.Enable(true);
2274 Actor rootActor = Actor::New();
2275 Stage::GetCurrent().Add( rootActor );
2277 CameraActor offscreenCameraActor = CameraActor::New();
2278 Stage::GetCurrent().Add( offscreenCameraActor );
2280 Shader shader = CreateShader();
2281 Image image = CreateResourceImage(application, "aFile.jpg");
2282 TextureSet textureSet = CreateTextureSet( image );
2284 Geometry geometry = CreateQuadGeometry();
2285 Renderer renderer = Renderer::New(geometry, shader);
2286 renderer.SetTextures( textureSet );
2287 Actor secondRootActor = Actor::New();
2288 secondRootActor.AddRenderer(renderer);
2289 secondRootActor.SetSize(100, 100);
2290 Stage::GetCurrent().Add(secondRootActor);
2292 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2293 bool finished = false;
2294 RenderTaskFinished renderTaskFinished( finished );
2295 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2296 application.SendNotification();
2298 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2299 application.GetPlatform().ClearReadyResources();
2300 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2305 int UtcDaliRenderTaskOnceNoSync03(void)
2307 TestApplication application;
2309 tet_infoline("Testing RenderTask Render Once, using loaded image. Switch from render always after ready to render once\n"
2310 "PRE: Render task ready, Image loaded\n"
2311 "POST: Finished signal sent only once");
2313 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2314 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2315 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2316 drawTrace.Enable(true);
2318 Actor rootActor = Actor::New();
2319 Stage::GetCurrent().Add( rootActor );
2321 CameraActor offscreenCameraActor = CameraActor::New();
2322 Stage::GetCurrent().Add( offscreenCameraActor );
2323 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2324 Stage::GetCurrent().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__ ) );
2334 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2335 application.SendNotification(); // Input, Expected Input, Expected
2336 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2337 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2341 int UtcDaliRenderTaskOnceNoSync04(void)
2343 TestApplication application;
2345 tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n"
2346 "Switch from render always after ready to render once\n"
2347 "PRE: Render task ready, Image not loaded\n"
2348 "POST: Finished signal sent only once");
2350 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2351 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2352 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2353 drawTrace.Enable(true);
2355 Actor rootActor = Actor::New();
2356 Stage::GetCurrent().Add( rootActor );
2358 CameraActor offscreenCameraActor = CameraActor::New();
2359 Stage::GetCurrent().Add( offscreenCameraActor );
2361 Shader shader = CreateShader();
2362 Image image = CreateResourceImage(application, "aFile.jpg");
2363 TextureSet textureSet = CreateTextureSet( image );
2365 Geometry geometry = CreateQuadGeometry();
2366 Renderer renderer = Renderer::New(geometry, shader);
2367 renderer.SetTextures( textureSet );
2368 Actor secondRootActor = Actor::New();
2369 secondRootActor.AddRenderer(renderer);
2370 secondRootActor.SetSize(100, 100);
2371 Stage::GetCurrent().Add(secondRootActor);
2374 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2375 bool finished = false;
2376 RenderTaskFinished renderTaskFinished( finished );
2377 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2378 application.SendNotification();
2380 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2381 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2382 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2383 DALI_TEST_CHECK( lastSyncObj == NULL );
2385 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2386 application.SendNotification(); // Input, Expected Input, Expected
2387 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2388 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2390 lastSyncObj = sync.GetLastSyncObject();
2391 DALI_TEST_CHECK( lastSyncObj == NULL );
2396 int UtcDaliRenderTaskOnceNoSync05(void)
2398 TestApplication application;
2400 tet_infoline("Testing RenderTask Render Once\n"
2401 "SetRefreshRate(ONCE), resource load failed, completes render task.\n"
2402 "PRE: resources failed to load\n"
2403 "POST: No finished signal sent.");
2405 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2406 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2407 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2408 drawTrace.Enable(true);
2410 Actor rootActor = Actor::New();
2411 Stage::GetCurrent().Add( rootActor );
2413 CameraActor offscreenCameraActor = CameraActor::New();
2414 Stage::GetCurrent().Add( offscreenCameraActor );
2415 Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg");
2416 Stage::GetCurrent().Add(secondRootActor);
2418 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2419 bool finished = false;
2420 RenderTaskFinished renderTaskFinished( finished );
2421 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2422 application.SendNotification();
2424 // START PROCESS/RENDER Input, Expected Input, Expected
2425 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2427 // CHANGE TO RENDER ONCE,
2428 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2429 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2436 int UtcDaliRenderTaskOnceChain01(void)
2438 TestApplication application;
2440 tet_infoline("Testing RenderTask Render Once Chained render tasks\n"
2441 "SetRefreshRate(ONCE), resource load completes, both render tasks render.\n"
2442 "PRE: resources ready\n"
2443 "POST: 2 finished signals sent.");
2445 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2446 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2447 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2448 drawTrace.Enable(true);
2450 Actor defaultRootActor = Actor::New(); // Root for default RT
2451 Stage::GetCurrent().Add( defaultRootActor );
2453 CameraActor offscreenCameraActor = CameraActor::New();
2454 Stage::GetCurrent().Add( offscreenCameraActor );
2455 Actor firstRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2456 Stage::GetCurrent().Add(firstRootActor);
2458 // first render task
2459 RenderTask firstTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, firstRootActor, RenderTask::REFRESH_ONCE, false);
2460 bool firstFinished = false;
2461 RenderTaskFinished renderTask1Finished( firstFinished );
2462 firstTask.FinishedSignal().Connect( &application, renderTask1Finished );
2464 // Second render task
2465 FrameBufferImage fbo = firstTask.GetTargetFrameBuffer();
2466 Actor secondRootActor = CreateRenderableActor( fbo );
2467 Stage::GetCurrent().Add(secondRootActor);
2468 RenderTask secondTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2469 bool secondFinished = false;
2470 RenderTaskFinished renderTask2Finished( secondFinished );
2471 secondTask.FinishedSignal().Connect( &application, renderTask2Finished );
2473 application.SendNotification();
2475 //Both render tasks are executed.
2476 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false, true, __LINE__ ) );
2477 DALI_TEST_CHECK( firstFinished == false );
2478 DALI_TEST_CHECK( secondFinished == false );
2480 //Nothing else to render and both render task should have finished now
2481 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, true, false, __LINE__ ) );
2482 DALI_TEST_CHECK( firstFinished == true );
2483 DALI_TEST_CHECK( secondFinished == true );
2488 int UtcDaliRenderTaskProperties(void)
2490 TestApplication application;
2492 RenderTask task = Stage::GetCurrent().GetRenderTaskList().CreateTask();
2494 Property::IndexContainer indices;
2495 task.GetPropertyIndices( indices );
2496 DALI_TEST_CHECK( indices.Size() );
2497 DALI_TEST_EQUALS( indices.Size(), task.GetPropertyCount(), TEST_LOCATION );
2501 int UtcDaliRenderTaskSetScreenToFrameBufferMappingActor(void)
2503 TestApplication application;
2504 tet_infoline("Testing RenderTask::SetScreenToFrameBufferMappingActor ");
2506 Stage stage = Stage::GetCurrent();
2507 Size stageSize = stage.GetSize();
2508 Actor mappingActor = Actor::New();
2509 Vector2 scale( 0.6f, 0.75f);
2510 Vector2 offset( stageSize.x*0.1f, stageSize.y*0.15f);
2511 mappingActor.SetSize( stageSize * scale );
2512 mappingActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
2513 mappingActor.SetPosition( offset.x, offset.y );
2514 stage.Add( mappingActor );
2516 Actor offscreenActor = Actor::New();
2517 offscreenActor.SetSize( stageSize );
2518 offscreenActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
2519 stage.Add( offscreenActor );
2521 RenderTaskList taskList = stage.GetRenderTaskList();
2522 RenderTask renderTask = taskList.CreateTask();
2523 FrameBufferImage frameBufferImage = FrameBufferImage::New(stageSize.width*scale.x, stageSize.height*scale.y, Pixel::A8);
2524 renderTask.SetSourceActor( offscreenActor );
2525 renderTask.SetExclusive( true );
2526 renderTask.SetInputEnabled( true );
2527 renderTask.SetTargetFrameBuffer( frameBufferImage );
2528 renderTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2529 renderTask.SetScreenToFrameBufferMappingActor( mappingActor );
2530 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2532 // Render and notify
2533 application.SendNotification();
2534 application.Render();
2535 application.Render();
2536 application.SendNotification();
2538 Vector2 screenCoordinates( stageSize.x * 0.05f, stageSize.y * 0.05f );
2539 Dali::HitTestAlgorithm::Results results;
2540 DALI_TEST_CHECK( !results.actor );
2541 DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
2542 // miss expected, results not changed
2543 DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2544 DALI_TEST_CHECK( !results.actor );
2545 DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
2547 screenCoordinates.x = stageSize.x * 0.265f;
2548 screenCoordinates.y = stageSize.y * 0.33f;
2549 results.actor = Actor();
2550 results.actorCoordinates = Vector2::ZERO;
2551 // hit expected, results changed
2552 DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2553 DALI_TEST_CHECK( results.actor == offscreenActor );
2554 DALI_TEST_EQUALS( (screenCoordinates-offset)/scale , results.actorCoordinates, 0.1f, TEST_LOCATION );
2556 screenCoordinates.x = stageSize.x * 0.435f;
2557 screenCoordinates.y = stageSize.y * 0.52f;
2558 // hit expected, results changed
2559 DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2560 DALI_TEST_CHECK( results.actor == offscreenActor );
2561 const Vector2 expectedCoordinates = (screenCoordinates-offset)/scale;
2562 DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION );
2564 screenCoordinates.x = stageSize.x * 0.65f;
2565 screenCoordinates.y = stageSize.y * 0.95f;
2566 // miss expected, results not changed
2567 DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2568 DALI_TEST_CHECK( results.actor == offscreenActor );
2569 DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION );
2573 int UtcDaliRenderTaskFinishInvisibleSourceActor(void)
2575 TestApplication application;
2577 tet_infoline("Testing RenderTask::FinishInvisibleSourceActor()");
2579 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2580 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2582 CameraActor offscreenCameraActor = CameraActor::New();
2584 Stage::GetCurrent().Add( offscreenCameraActor );
2586 BufferImage image = BufferImage::New( 10, 10 );
2587 Actor rootActor = CreateRenderableActor( image );
2588 rootActor.SetSize( 10, 10 );
2589 rootActor.SetVisible(false);
2590 Stage::GetCurrent().Add( rootActor );
2592 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2593 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
2594 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
2596 // Flush all outstanding messages
2597 application.SendNotification();
2598 application.Render();
2600 RenderTask newTask = taskList.CreateTask();
2601 newTask.SetCameraActor( offscreenCameraActor );
2602 newTask.SetSourceActor( rootActor );
2603 newTask.SetInputEnabled( false );
2604 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
2605 newTask.SetClearEnabled( true );
2606 newTask.SetExclusive( true );
2607 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2608 newTask.SetTargetFrameBuffer( frameBufferImage );
2609 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
2611 // Framebuffer doesn't actually get created until Connected, i.e. by previous line
2613 bool finished = false;
2614 RenderTaskFinished renderTaskFinished( finished );
2615 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2617 // Flush the queue and render.
2618 application.SendNotification();
2620 // 1 render to process render task, then wait for sync before finished msg is sent
2621 // from update to the event thread.
2623 application.Render();
2624 application.SendNotification();
2625 DALI_TEST_CHECK( !finished );
2627 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2628 DALI_TEST_CHECK( lastSyncObj != NULL );
2630 application.Render();
2631 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
2632 application.SendNotification();
2633 DALI_TEST_CHECK( !finished );
2635 application.Render();
2636 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
2637 application.SendNotification();
2638 DALI_TEST_CHECK( ! finished );
2640 sync.SetObjectSynced( lastSyncObj, true );
2642 application.Render();
2643 application.SendNotification();
2644 DALI_TEST_CHECK( !finished );
2646 application.Render();
2647 application.SendNotification();
2648 DALI_TEST_CHECK( finished );
2651 application.Render(); // Double check no more finished signal
2652 application.SendNotification();
2653 DALI_TEST_CHECK( ! finished );
2658 int UtcDaliRenderTaskFinishMissingImage(void)
2660 TestApplication application;
2662 // Previously we had bugs where not having a resource ID would cause render-tasks to wait forever
2663 tet_infoline("Testing RenderTask::SignalFinished() when an Actor has no Image set");
2665 Stage stage = Stage::GetCurrent();
2667 BufferImage image = BufferImage::New( 10, 10 );
2668 Actor rootActor = CreateRenderableActor( image );
2669 rootActor.SetSize( 10, 10 );
2670 stage.Add( rootActor );
2672 Actor actorWithMissingImage = CreateRenderableActor( Image() );
2673 actorWithMissingImage.SetSize( 10, 10 );
2674 stage.Add( actorWithMissingImage );
2676 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2677 RenderTask newTask = taskList.CreateTask();
2678 newTask.SetInputEnabled( false );
2679 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
2680 newTask.SetClearEnabled( true );
2681 newTask.SetExclusive( true );
2682 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2684 bool finished = false;
2685 RenderTaskFinished renderTaskFinished( finished );
2686 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2688 // 1 render to process render task, then 1 before finished msg is sent from update to the event thread.
2689 application.SendNotification();
2690 application.Render();
2691 application.Render();
2693 application.SendNotification();
2694 DALI_TEST_CHECK( finished );
2699 int UtcDaliRenderTaskWorldToViewport(void)
2701 TestApplication application( static_cast<size_t>(400), static_cast<size_t>(400) ); // square surface
2703 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2705 Actor actor = Actor::New();
2706 actor.SetSize(100.0f, 100.0f);
2707 actor.SetPosition( Vector3(0.0, 0.0, 0.0) );
2709 actor.SetParentOrigin( Vector3(0.5, 0.5, 0.5) );
2710 actor.SetAnchorPoint( Vector3(0.5, 0.5, 0.5) );
2712 Stage::GetCurrent().Add(actor);
2714 application.SendNotification();
2715 application.Render();
2716 application.SendNotification();
2718 RenderTask task = taskList.GetTask( 0u );
2720 CameraActor camera = task.GetCameraActor();
2722 Vector2 screenSize = task.GetCurrentViewportSize();
2724 float screenX = 0.0;
2725 float screenY = 0.0;
2727 bool ok = task.WorldToViewport(actor.GetCurrentWorldPosition(), screenX, screenY);
2728 DALI_TEST_CHECK(ok == true);
2730 DALI_TEST_EQUALS(screenX, screenSize.x/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2731 DALI_TEST_EQUALS(screenY, screenSize.y/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2733 Actor actor2 = Actor::New();
2734 float actor2Size = 100.f;
2735 actor2.SetSize( actor2Size, actor2Size );
2736 actor2.SetPosition( Vector3(0.0, 0.0, 0.0) );
2737 actor2.SetParentOrigin( Vector3(0.5, 0.5, 0.0) );
2738 actor2.SetAnchorPoint( Vector3(0.5, 0.5, 0.0) );
2739 Stage::GetCurrent().Add( actor2 );
2741 actor.SetParentOrigin( Vector3(0,0,0) );
2743 application.SendNotification();
2744 application.Render();
2745 application.SendNotification();
2747 ok = task.WorldToViewport(actor.GetCurrentWorldPosition(), screenX, screenY);
2748 DALI_TEST_CHECK(ok == true);
2750 DALI_TEST_EQUALS(screenX, screenSize.x/2 - actor2Size/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2751 DALI_TEST_EQUALS(screenY, screenSize.y/2 - actor2Size/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2757 int UtcDaliRenderTaskViewportToLocal(void)
2759 TestApplication application;
2760 Actor actor = Actor::New();
2761 actor.SetAnchorPoint(AnchorPoint::TOP_LEFT);
2762 actor.SetSize(100.0f, 100.0f);
2763 actor.SetPosition(10.0f, 10.0f);
2764 Stage::GetCurrent().Add(actor);
2766 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2767 RenderTask task = taskList.GetTask( 0u );
2769 // flush the queue and render once
2770 application.SendNotification();
2771 application.Render();
2772 application.SendNotification();
2773 application.Render();
2781 float screenX = 50.0f;
2782 float screenY = 50.0f;
2784 DALI_TEST_CHECK( actor.ScreenToLocal(localX, localY, screenX, screenY) );
2786 DALI_TEST_CHECK( task.ViewportToLocal(actor, screenX, screenY, rtLocalX, rtLocalY ) );
2788 DALI_TEST_EQUALS(localX, rtLocalX, 0.01f, TEST_LOCATION);
2789 DALI_TEST_EQUALS(localY, rtLocalY, 0.01f, TEST_LOCATION);
2795 int UtcDaliRenderTaskRequiresSync(void)
2797 TestApplication application;
2798 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2800 RenderTask newTask = taskList.CreateTask();
2801 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, false );
2803 DALI_TEST_EQUALS( newTask.GetProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), false, TEST_LOCATION );
2804 DALI_TEST_EQUALS( newTask.GetCurrentProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), false, TEST_LOCATION );
2806 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
2808 DALI_TEST_EQUALS( newTask.GetProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), true, TEST_LOCATION );
2809 DALI_TEST_EQUALS( newTask.GetCurrentProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), true, TEST_LOCATION );