2 * Copyright (c) 2016 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();
394 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
396 RenderTaskList taskList = stage.GetRenderTaskList();
398 RenderTask task = taskList.GetTask( 0u );
400 Actor actor = task.GetSourceActor();
401 DALI_TEST_CHECK( actor );
403 std::vector<GLuint> ids;
405 application.GetGlAbstraction().SetNextTextureIds( ids );
407 BufferImage img = BufferImage::New( 1,1 );
408 Actor newActor = CreateRenderableActor( img );
409 newActor.SetSize(1,1);
410 stage.Add( newActor );
412 Actor nonRenderableActor = Actor::New();
413 stage.Add( nonRenderableActor );
415 // Stop the newActor from being rendered by changing the source actor
416 DALI_TEST_CHECK( nonRenderableActor );
417 task.SetSourceActor( nonRenderableActor );
418 DALI_TEST_CHECK( task.GetSourceActor() != actor );
419 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
421 // Update & Render nothing!
422 application.GetGlAbstraction().ClearBoundTextures();
423 application.SendNotification();
424 application.Render();
426 // Check that nothing was rendered
427 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
433 int UtcDaliRenderTaskSetSourceActorP02(void)
435 TestApplication application;
437 tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that switching source from a non-renderable to a renderable actor causes the texture to be drawn");
439 Stage stage = Stage::GetCurrent();
441 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
443 RenderTaskList taskList = stage.GetRenderTaskList();
445 RenderTask task = taskList.GetTask( 0u );
447 Actor actor = task.GetSourceActor();
448 DALI_TEST_CHECK( actor );
450 std::vector<GLuint> ids;
452 application.GetGlAbstraction().SetNextTextureIds( ids );
454 BufferImage img = BufferImage::New( 1,1 );
455 Actor newActor = CreateRenderableActor( img );
456 newActor.SetSize(1,1);
457 stage.Add( newActor );
459 Actor nonRenderableActor = Actor::New();
460 stage.Add( nonRenderableActor );
462 // Stop the newActor from being rendered by changing the source actor
463 DALI_TEST_CHECK( nonRenderableActor );
464 task.SetSourceActor( nonRenderableActor );
465 DALI_TEST_CHECK( task.GetSourceActor() != actor );
466 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
468 // Update & Render nothing!
469 application.GetGlAbstraction().ClearBoundTextures();
470 application.SendNotification();
471 application.Render();
473 // Check that nothing was rendered
474 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
476 // Set newActor as the new source Actor
477 task.SetSourceActor( newActor );
478 DALI_TEST_CHECK( task.GetSourceActor() != actor );
479 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
481 // Update & Render the newActor
482 application.GetGlAbstraction().ClearBoundTextures();
483 application.SendNotification();
484 application.Render();
486 // Check that the newActor was rendered
487 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
488 if ( boundTextures.size() )
490 DALI_TEST_EQUALS( boundTextures[0], 7u, TEST_LOCATION );
495 int UtcDaliRenderTaskSetSourceActorOffStage(void)
497 TestApplication application;
499 tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)");
501 Stage stage = Stage::GetCurrent();
503 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
505 RenderTaskList taskList = stage.GetRenderTaskList();
507 RenderTask task = taskList.GetTask( 0u );
509 Actor actor = task.GetSourceActor();
510 DALI_TEST_CHECK( actor );
512 std::vector<GLuint> ids;
513 GLuint expectedTextureId( 3 );
514 ids.push_back( expectedTextureId );
515 application.GetGlAbstraction().SetNextTextureIds( ids );
517 BufferImage img = BufferImage::New( 1,1 );
518 Actor newActor = CreateRenderableActor( img );
519 newActor.SetSize(1,1);
520 task.SetSourceActor( newActor );
521 // Don't add newActor to stage yet //'
523 // Update & Render with the actor initially off-stage
524 application.GetGlAbstraction().ClearBoundTextures();
525 application.SendNotification();
526 application.Render();
528 // Check that nothing was rendered
529 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
532 stage.Add( newActor );
534 // Update & Render with the actor on-stage
535 application.GetGlAbstraction().ClearBoundTextures();
536 application.SendNotification();
537 application.Render();
539 // Check that the newActor was rendered
540 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
541 if ( boundTextures.size() )
543 DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION );
546 // Now remove from stage
547 stage.Remove( newActor );
549 // Update & Render with the actor off-stage
550 application.GetGlAbstraction().ClearBoundTextures();
551 application.SendNotification();
552 application.Render();
556 int UtcDaliRenderTaskSetSourceActorEmpty(void)
558 TestApplication application;
560 tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)");
562 Stage stage = Stage::GetCurrent();
564 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
566 RenderTaskList taskList = stage.GetRenderTaskList();
568 RenderTask task = taskList.GetTask( 0u );
570 Actor actor = task.GetSourceActor();
571 DALI_TEST_CHECK( actor );
573 std::vector<GLuint> ids;
574 GLuint expectedTextureId( 5 );
575 ids.push_back( expectedTextureId );
576 application.GetGlAbstraction().SetNextTextureIds( ids );
578 BufferImage img = BufferImage::New( 1,1 );
579 Actor newActor = CreateRenderableActor( img );
580 newActor.SetSize(1,1);
581 stage.Add( newActor );
583 Actor nonRenderableActor = Actor::New();
584 stage.Add( nonRenderableActor );
586 // Set with empty handle
587 task.SetSourceActor( Actor() );
588 DALI_TEST_CHECK( ! task.GetSourceActor() );
590 // Update & Render nothing!
591 application.GetGlAbstraction().ClearBoundTextures();
592 application.SendNotification();
593 application.Render();
595 // Check that nothing was rendered
596 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
598 // Set with non-empty handle
599 task.SetSourceActor( newActor );
600 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
602 // Update & Render the newActor
603 application.GetGlAbstraction().ClearBoundTextures();
604 application.SendNotification();
605 application.Render();
607 // Check that the newActor was rendered
608 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
609 if ( boundTextures.size() )
611 DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION );
616 int UtcDaliRenderTaskGetSourceActorP01(void)
618 TestApplication application;
620 tet_infoline("Testing RenderTask::GetSourceActor() Check the default render task has a valid source actor");
622 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
624 RenderTask task = taskList.GetTask( 0u );
626 Actor actor = task.GetSourceActor();
627 DALI_TEST_CHECK( actor );
629 // By default the entire scene should be rendered
630 Actor root = Stage::GetCurrent().GetLayer( 0 );
631 DALI_TEST_CHECK( root == actor );
635 int UtcDaliRenderTaskGetSourceActorP02(void)
637 TestApplication application;
639 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.");
641 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
642 RenderTask task = taskList.CreateTask();
643 Actor actor = Actor::New();
644 Stage::GetCurrent().Add(actor);
645 task.SetSourceActor( actor );
647 DALI_TEST_EQUALS( actor, task.GetSourceActor(), TEST_LOCATION );
652 int UtcDaliRenderTaskGetSourceActorN(void)
654 TestApplication application;
656 tet_infoline("Testing RenderTask::GetSourceActor() Try with empty handle");
661 Actor actor = task.GetSourceActor();
663 catch (Dali::DaliException& e)
665 DALI_TEST_PRINT_ASSERT( e );
666 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
672 int UtcDaliRenderTaskSetExclusive(void)
674 TestApplication application;
676 tet_infoline("Testing RenderTask::SetExclusive() Check that exclusion works");
678 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
680 // Manipulate the GenTextures behaviour, to identify different actors
682 std::vector<GLuint> ids;
683 ids.push_back( 8 ); // 8 = actor1
684 ids.push_back( 9 ); // 9 = actor2
685 ids.push_back( 10 ); // 10 = actor3
686 application.GetGlAbstraction().SetNextTextureIds( ids );
688 BufferImage img1 = BufferImage::New( 1,1 );
689 Actor actor1 = CreateRenderableActor( img1 );
691 Stage::GetCurrent().Add( actor1 );
693 // Update & Render actor1
694 application.SendNotification();
695 application.Render();
697 // Check that the actor1 was rendered
698 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
699 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
701 if ( boundTextures.size() )
703 DALI_TEST_EQUALS( boundTextures[0], 8u/*unique to actor1*/, TEST_LOCATION );
706 BufferImage img2 = BufferImage::New( 1,1 );
707 Actor actor2 = CreateRenderableActor( img2 );
710 // Force actor2 to be rendered before actor1
711 Layer layer = Layer::New();
712 Stage::GetCurrent().Add( layer );
714 layer.LowerToBottom();
717 application.GetGlAbstraction().ClearBoundTextures();
718 application.SendNotification();
719 application.Render();
721 // Check that the actors were rendered
722 DALI_TEST_EQUALS( boundTextures.size(), 2u, TEST_LOCATION );
724 if ( boundTextures.size() )
726 DALI_TEST_EQUALS( boundTextures[0], 9u/*unique to actor2*/, TEST_LOCATION );
727 DALI_TEST_EQUALS( boundTextures[1], 8u/*unique to actor1*/, TEST_LOCATION );
730 BufferImage img3 = BufferImage::New( 1,1 );
731 Actor actor3 = CreateRenderableActor( img3 );
734 // Force actor3 to be rendered before actor2
735 layer = Layer::New();
736 Stage::GetCurrent().Add( layer );
738 layer.LowerToBottom();
740 // Update & Render all actors
741 application.GetGlAbstraction().ClearBoundTextures();
742 application.SendNotification();
743 application.Render();
745 // Check that the actors were rendered
746 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
748 if ( boundTextures.size() )
750 DALI_TEST_EQUALS( boundTextures[0], 10u/*unique to actor3*/, TEST_LOCATION );
751 DALI_TEST_EQUALS( boundTextures[1], 9u/*unique to actor2*/, TEST_LOCATION );
752 DALI_TEST_EQUALS( boundTextures[2], 8u/*unique to actor1*/, TEST_LOCATION );
755 // Both actors are now connected to the root node
756 // Setup 2 render-tasks - the first will render from the root-node, and the second from actor2
758 // Not exclusive is the default
759 RenderTask task1 = taskList.GetTask( 0u );
760 DALI_TEST_CHECK( false == task1.IsExclusive() );
762 RenderTask task2 = taskList.CreateTask();
763 DALI_TEST_CHECK( false == task2.IsExclusive() );
764 task2.SetSourceActor( actor2 );
766 // Task1 should render all actors, and task 2 should render only actor2
768 application.GetGlAbstraction().ClearBoundTextures();
769 application.SendNotification();
770 application.Render();
772 DALI_TEST_EQUALS( boundTextures.size(), 4u, TEST_LOCATION );
774 if ( boundTextures.size() == 4 )
776 // Test that task 1 renders actor3, then actor2 & then actor1
777 DALI_TEST_CHECK( boundTextures[0] == 10u );
778 DALI_TEST_CHECK( boundTextures[1] == 9u );
779 DALI_TEST_CHECK( boundTextures[2] == 8u );
781 // Test that task 2 renders actor2
782 DALI_TEST_EQUALS( boundTextures[3], 9u, TEST_LOCATION );
785 // Make actor2 exclusive to task2
787 task2.SetExclusive( true );
788 DALI_TEST_CHECK( true == task2.IsExclusive() );
790 // Task1 should render only actor1, and task 2 should render only actor2
792 application.GetGlAbstraction().ClearBoundTextures();
793 application.SendNotification();
794 application.Render();
796 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
797 if ( boundTextures.size() == 3 )
799 // Test that task 1 renders actor3 & actor1
800 DALI_TEST_CHECK( boundTextures[0] == 10u );
801 DALI_TEST_CHECK( boundTextures[1] == 8u );
803 // Test that task 2 renders actor2
804 DALI_TEST_CHECK( boundTextures[2] == 9u );
809 int UtcDaliRenderTaskSetExclusive02(void)
811 TestApplication application;
813 tet_infoline("Testing RenderTask::SetExclusive() Check that changing from exclusive to not-exclusive works");
815 std::vector<GLuint> ids;
816 ids.push_back( 8 ); // 8 = actor1
817 application.GetGlAbstraction().SetNextTextureIds( ids );
819 BufferImage img1 = BufferImage::New( 1,1 );
820 Actor actor1 = CreateRenderableActor( img1 );
822 Stage::GetCurrent().Add( actor1 );
824 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
825 RenderTask task = taskList.CreateTask();
827 task.SetSourceActor( actor1 );
828 task.SetExclusive(true); // Actor should only render once
830 TestGlAbstraction& gl = application.GetGlAbstraction();
831 TraceCallStack& drawTrace = gl.GetDrawTrace();
832 drawTrace.Enable(true);
834 // Update & Render actor1
835 application.SendNotification();
836 application.Render();
838 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
840 // Set task to non-exclusive - actor1 should render twice:
842 task.SetExclusive(false);
843 application.SendNotification();
844 application.Render();
846 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 2, TEST_LOCATION );
851 int UtcDaliRenderTaskSetExclusiveN(void)
853 TestApplication application;
855 tet_infoline("Testing RenderTask::SetExclusive() on empty handle");
860 task.SetExclusive(true);
862 catch (Dali::DaliException& e)
864 DALI_TEST_PRINT_ASSERT( e );
865 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
870 int UtcDaliRenderTaskIsExclusive01(void)
872 TestApplication application;
874 tet_infoline("Testing RenderTask::IsExclusive() Check default values are non-exclusive");
876 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
878 // Not exclusive is the default
879 RenderTask task = taskList.GetTask( 0u );
880 DALI_TEST_CHECK( false == task.IsExclusive() );
882 RenderTask newTask = taskList.CreateTask();
883 DALI_TEST_CHECK( false == newTask.IsExclusive() );
888 int UtcDaliRenderTaskIsExclusive02(void)
890 TestApplication application;
892 tet_infoline("Testing RenderTask::IsExclusive() Check the getter returns set values");
894 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
896 // Not exclusive is the default
897 RenderTask newTask = taskList.CreateTask();
898 DALI_TEST_EQUALS( newTask.IsExclusive(), false, TEST_LOCATION );
900 newTask.SetExclusive(true);
901 DALI_TEST_EQUALS( newTask.IsExclusive(), true, TEST_LOCATION );
905 int UtcDaliRenderTaskIsExclusiveN(void)
907 TestApplication application;
909 tet_infoline("Testing RenderTask::IsExclusive() on empty handle");
914 bool x = task.IsExclusive();
917 catch (Dali::DaliException& e)
919 DALI_TEST_PRINT_ASSERT( e );
920 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
925 int UtcDaliRenderTaskSetInputEnabled(void)
927 TestApplication application;
929 tet_infoline("Testing RenderTask::SetInputEnabled()");
931 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
933 // Input is enabled by default
934 RenderTask task = taskList.GetTask( 0u );
935 DALI_TEST_CHECK( true == task.GetInputEnabled() );
937 task.SetInputEnabled( false );
938 DALI_TEST_CHECK( false == task.GetInputEnabled() );
940 task.SetInputEnabled( true );
941 DALI_TEST_CHECK( true == task.GetInputEnabled() );
945 int UtcDaliRenderTaskGetInputEnabled(void)
947 TestApplication application;
949 tet_infoline("Testing RenderTask::GetInputEnabled()");
951 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
953 // Input is enabled by default
954 RenderTask task = taskList.GetTask( 0u );
955 DALI_TEST_EQUALS( true, task.GetInputEnabled(), TEST_LOCATION );
957 RenderTask newTask = taskList.CreateTask();
958 DALI_TEST_EQUALS( true, newTask.GetInputEnabled(), TEST_LOCATION );
960 newTask.SetInputEnabled(false);
961 DALI_TEST_EQUALS( false, newTask.GetInputEnabled(), TEST_LOCATION );
966 int UtcDaliRenderTaskSetCameraActorP(void)
968 TestApplication application;
970 tet_infoline("Testing RenderTask::SetCameraActor()");
972 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
974 RenderTask task = taskList.GetTask( 0u );
976 Actor defaultCameraActor = task.GetCameraActor();
977 DALI_TEST_CHECK( defaultCameraActor );
979 CameraActor newCameraActor = CameraActor::New();
980 DALI_TEST_CHECK( newCameraActor );
982 task.SetCameraActor( newCameraActor );
983 DALI_TEST_CHECK( task.GetCameraActor() != defaultCameraActor );
984 DALI_TEST_EQUALS( task.GetCameraActor(), newCameraActor, TEST_LOCATION );
989 int UtcDaliRenderTaskSetCameraActorN(void)
991 TestApplication application;
993 tet_infoline("Testing RenderTask::SetCameraActor() with empty actor handle");
995 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
997 RenderTask task = taskList.GetTask( 0u );
999 Actor actor = task.GetCameraActor();
1000 DALI_TEST_CHECK( actor );
1002 CameraActor cameraActor;
1004 task.SetCameraActor( cameraActor );
1005 DALI_TEST_EQUALS( (bool)task.GetCameraActor(), false, TEST_LOCATION );
1006 DALI_TEST_EQUALS( task.GetCameraActor(), cameraActor, TEST_LOCATION );
1011 int UtcDaliRenderTaskGetCameraActorP(void)
1013 TestApplication application;
1015 tet_infoline("Testing RenderTask::GetCameraActor()");
1017 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1019 RenderTask task = taskList.GetTask( 0u );
1021 CameraActor actor = task.GetCameraActor();
1022 DALI_TEST_CHECK( actor );
1023 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1024 DALI_TEST_GREATER( actor.GetFieldOfView(), 0.0f, TEST_LOCATION );
1028 int UtcDaliRenderTaskGetCameraActorN(void)
1030 TestApplication application;
1032 tet_infoline("Testing RenderTask::GetCameraActor() with empty handle");
1037 Actor actor = task.GetCameraActor();
1039 catch (Dali::DaliException& e)
1041 DALI_TEST_PRINT_ASSERT( e );
1042 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1048 int UtcDaliRenderTaskSetTargetFrameBufferP(void)
1050 TestApplication application;
1052 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
1054 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1056 RenderTask task = taskList.GetTask( 0u );
1058 FrameBufferImage newImage = FrameBufferImage::New();
1059 task.SetTargetFrameBuffer( newImage );
1060 DALI_TEST_CHECK( task.GetTargetFrameBuffer() == newImage );
1064 int UtcDaliRenderTaskSetTargetFrameBufferN(void)
1066 TestApplication application;
1068 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
1070 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1072 RenderTask task = taskList.GetTask( 0u );
1073 FrameBufferImage newImage; // Empty handle
1074 task.SetTargetFrameBuffer( newImage );
1075 DALI_TEST_EQUALS( (bool)task.GetTargetFrameBuffer(), false, TEST_LOCATION );
1079 int UtcDaliRenderTaskGetTargetFrameBufferP(void)
1081 TestApplication application;
1083 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
1085 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1087 RenderTask newTask = taskList.CreateTask();
1088 FrameBufferImage fb = FrameBufferImage::New(128, 128, Pixel::RGBA8888);
1089 newTask.SetTargetFrameBuffer( fb );
1090 DALI_TEST_EQUALS( newTask.GetTargetFrameBuffer(), fb, TEST_LOCATION );
1094 int UtcDaliRenderTaskGetTargetFrameBufferN(void)
1096 TestApplication application;
1098 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
1100 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1102 RenderTask task = taskList.GetTask( 0u );
1104 // By default render-tasks do not render off-screen
1105 FrameBufferImage image = task.GetTargetFrameBuffer();
1106 DALI_TEST_CHECK( !image );
1111 int UtcDaliRenderTaskSetFrameBufferP(void)
1113 TestApplication application;
1115 tet_infoline("Testing RenderTask::SetFrameBuffer()");
1117 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1119 RenderTask task = taskList.GetTask( 0u );
1121 FrameBuffer newFrameBuffer = FrameBuffer::New( 128u, 128u, FrameBuffer::Attachment::NONE );
1122 task.SetFrameBuffer( newFrameBuffer );
1123 DALI_TEST_CHECK( task.GetFrameBuffer() == newFrameBuffer );
1127 int UtcDaliRenderTaskSetFrameBufferN(void)
1129 TestApplication application;
1131 tet_infoline("Testing RenderTask::SetFrameBuffer()");
1133 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1135 RenderTask task = taskList.GetTask( 0u );
1136 FrameBuffer newFrameBuffer; // Empty handle
1137 task.SetFrameBuffer( newFrameBuffer );
1138 DALI_TEST_EQUALS( (bool)task.GetFrameBuffer(), false, TEST_LOCATION );
1142 int UtcDaliRenderTaskGetFrameBufferP(void)
1144 TestApplication application;
1146 tet_infoline("Testing RenderTask::GetFrameBuffer()");
1148 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1150 RenderTask task = taskList.GetTask( 0u );
1152 FrameBuffer newFrameBuffer = FrameBuffer::New( 1u, 1u, FrameBuffer::Attachment::NONE );
1153 task.SetFrameBuffer( newFrameBuffer );
1154 DALI_TEST_CHECK( task.GetFrameBuffer() == newFrameBuffer );
1158 int UtcDaliRenderTaskGetFrameBufferN(void)
1160 TestApplication application;
1162 tet_infoline("Testing RenderTask::GetFrameBuffer()");
1164 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1166 RenderTask task = taskList.GetTask( 0u );
1168 // By default render-tasks do not render off-screen
1169 FrameBuffer frameBuffer = task.GetFrameBuffer();
1170 DALI_TEST_CHECK( !frameBuffer );
1175 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionP(void)
1177 TestApplication application;
1179 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
1181 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1183 RenderTask task = taskList.GetTask( 0u );
1185 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
1187 Vector2 coordinates( 5, 10 );
1188 Vector2 convertedCoordinates( 6, 12 ); // + Vector(1, 2)
1190 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1191 DALI_TEST_CHECK( func( coordinates ) );
1192 DALI_TEST_CHECK( coordinates == convertedCoordinates );
1194 task.SetScreenToFrameBufferFunction( RenderTask::FULLSCREEN_FRAMEBUFFER_FUNCTION );
1195 func = task.GetScreenToFrameBufferFunction();
1196 DALI_TEST_CHECK( func( coordinates ) );
1198 task.SetScreenToFrameBufferFunction( RenderTask::DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION );
1199 func = task.GetScreenToFrameBufferFunction();
1200 DALI_TEST_CHECK( ! func( coordinates ) );
1204 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionN(void)
1206 TestApplication application;
1208 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
1210 RenderTask task; // Empty handle
1213 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
1215 catch (Dali::DaliException& e)
1217 DALI_TEST_PRINT_ASSERT( e );
1218 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1223 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionP(void)
1225 TestApplication application;
1227 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction()");
1229 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1231 RenderTask task = taskList.GetTask( 0u );
1233 Vector2 originalCoordinates( 5, 10 );
1234 Vector2 coordinates( 5, 10 );
1236 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1237 DALI_TEST_CHECK( !func( coordinates ) ); // conversion should fail by default
1238 DALI_TEST_CHECK( coordinates == originalCoordinates ); // coordinates should not be modified
1242 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionN(void)
1244 TestApplication application;
1246 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction() on empty handle");
1251 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1254 catch (Dali::DaliException& e)
1256 DALI_TEST_PRINT_ASSERT( e );
1257 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1263 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorP(void)
1265 TestApplication application;
1266 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor ");
1268 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1269 RenderTask renderTask = taskList.CreateTask();
1270 Actor mappingActor = Actor::New();
1271 renderTask.SetScreenToFrameBufferMappingActor(mappingActor);
1273 DALI_TEST_EQUALS( mappingActor, renderTask.GetScreenToFrameBufferMappingActor(), TEST_LOCATION );
1278 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorN(void)
1280 TestApplication application;
1281 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor with empty task handle");
1287 task.SetScreenToFrameBufferMappingActor(mappingActor);
1289 catch (Dali::DaliException& e)
1291 DALI_TEST_PRINT_ASSERT( e );
1292 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1297 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActor02N(void)
1299 TestApplication application;
1300 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor with empty task handle");
1302 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1303 RenderTask renderTask = taskList.CreateTask();
1305 renderTask.SetScreenToFrameBufferMappingActor(actor);
1307 DALI_TEST_EQUALS( (bool)renderTask.GetScreenToFrameBufferMappingActor(), false, TEST_LOCATION);
1311 int UtcDaliRenderTaskGetViewportP01(void)
1313 TestApplication application;
1315 tet_infoline("Testing RenderTask::GetViewport() on default task");
1317 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1318 RenderTask task = taskList.GetTask( 0u );
1319 Viewport viewport = task.GetViewport();
1321 // By default the viewport should match the stage width/height
1322 Vector2 stageSize = Stage::GetCurrent().GetSize();
1323 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1324 DALI_TEST_CHECK( viewport == expectedViewport );
1328 int UtcDaliRenderTaskGetViewportP02(void)
1330 TestApplication application;
1332 tet_infoline("Testing RenderTask::GetViewport() on new task");
1334 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1335 RenderTask task = taskList.CreateTask();
1336 Viewport viewport = task.GetViewport();
1338 // By default the viewport should match the stage width/height
1339 Vector2 stageSize = Stage::GetCurrent().GetSize();
1340 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1341 DALI_TEST_CHECK( viewport == expectedViewport );
1345 int UtcDaliRenderTaskGetViewportN(void)
1347 TestApplication application;
1349 tet_infoline("Testing RenderTask::GetViewport() on empty handle");
1354 Viewport viewport = task.GetViewport();
1357 catch (Dali::DaliException& e)
1359 DALI_TEST_PRINT_ASSERT( e );
1360 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1366 int UtcDaliRenderTaskSetViewportP(void)
1368 TestApplication application;
1370 tet_infoline("Testing RenderTask::SetViewport()");
1372 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1374 RenderTask task = taskList.GetTask( 0u );
1375 Vector2 stageSize = Stage::GetCurrent().GetSize();
1376 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
1377 task.SetViewport( newViewport );
1379 // Update (viewport is a property)
1380 application.SendNotification();
1381 application.Render();
1383 DALI_TEST_CHECK( task.GetViewport() == newViewport );
1387 int UtcDaliRenderTaskSetViewportN(void)
1389 TestApplication application;
1391 tet_infoline("Testing RenderTask::SetViewport()");
1393 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1398 Vector2 stageSize = Stage::GetCurrent().GetSize();
1399 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
1400 task.SetViewport( newViewport );
1402 catch (Dali::DaliException& e)
1404 DALI_TEST_PRINT_ASSERT( e );
1405 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1412 int UtcDaliRenderTaskSetViewportPosition(void)
1414 TestApplication application;
1416 tet_infoline("Testing RenderTask::SetViewportPosition()");
1418 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1420 RenderTask task = taskList.GetTask( 0u );
1422 Viewport viewport = task.GetViewport();
1424 // By default the viewport should match the stage width/height
1426 Vector2 stageSize = Stage::GetCurrent().GetSize();
1427 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1428 DALI_TEST_CHECK( viewport == expectedViewport );
1431 Vector2 newPosition(25.0f, 50.0f);
1432 task.SetViewportPosition( newPosition );
1434 // Update (viewport is a property)
1435 application.SendNotification();
1436 application.Render();
1438 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1440 // Set by Property test
1441 Vector2 newPosition2(32.0f, 32.0f);
1442 task.SetProperty( RenderTask::Property::VIEWPORT_POSITION, newPosition2 );
1445 application.SendNotification();
1446 application.Render();
1448 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1450 Vector2 newPosition3(64.0f, 0.0f);
1451 Animation animation = Animation::New(1.0f);
1452 animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_POSITION ), newPosition3, AlphaFunction::LINEAR );
1455 // Perform 1000ms worth of updates at which point animation should have completed.
1456 Wait(application, 1000);
1457 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition3, 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 );
1493 application.SendNotification();
1494 application.Render();
1496 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1498 Vector2 newSize3(10.0f, 10.0f);
1499 Animation animation = Animation::New(1.0f);
1500 animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_SIZE ), newSize3, AlphaFunction::LINEAR );
1503 // Perform 1000ms worth of updates at which point animation should have completed.
1504 Wait(application, 1000);
1505 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1510 int UtcDaliRenderTaskSetClearColorP(void)
1512 TestApplication application;
1514 tet_infoline("Testing RenderTask::SetClearColor()");
1516 Vector4 testColor( 1.0f, 2.0f, 3.0f, 4.0f );
1517 Vector4 testColor2( 5.0f, 6.0f, 7.0f, 8.0f );
1519 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1521 RenderTask task = taskList.GetTask( 0u );
1522 DALI_TEST_CHECK( task.GetClearColor() != testColor );
1524 task.SetClearColor( testColor );
1529 DALI_TEST_EQUALS( task.GetClearColor(), testColor, TEST_LOCATION );
1531 task.SetProperty( RenderTask::Property::CLEAR_COLOR, testColor2 );
1536 DALI_TEST_EQUALS( task.GetClearColor(), testColor2, TEST_LOCATION );
1540 int UtcDaliRenderTaskSetClearColorN(void)
1542 TestApplication application;
1544 tet_infoline("Testing RenderTask::SetClearColor() on empty handle");
1549 task.SetClearColor( Vector4::ZERO );
1551 catch (Dali::DaliException& e)
1553 DALI_TEST_PRINT_ASSERT( e );
1554 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1559 int UtcDaliRenderTaskGetClearColorP(void)
1561 TestApplication application;
1563 tet_infoline("Testing RenderTask::GetClearColor()");
1565 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1566 RenderTask task = taskList.GetTask( 0u );
1567 DALI_TEST_EQUALS( task.GetClearColor(), RenderTask::DEFAULT_CLEAR_COLOR, TEST_LOCATION );
1571 int UtcDaliRenderTaskGetClearColorN(void)
1573 TestApplication application;
1575 tet_infoline("Testing RenderTask::GetClearColor()");
1580 Vector4 color = task.GetClearColor();
1583 catch (Dali::DaliException& e)
1585 DALI_TEST_PRINT_ASSERT( e );
1586 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1591 int UtcDaliRenderTaskSetClearEnabledP(void)
1593 TestApplication application;
1595 tet_infoline("Testing RenderTask::SetClearEnabled()");
1597 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1599 RenderTask task = taskList.GetTask( 0u );
1600 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1602 task.SetClearEnabled( true );
1603 DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION );
1605 task.SetClearEnabled( false );
1606 DALI_TEST_EQUALS( task.GetClearEnabled(), false, TEST_LOCATION );
1610 int UtcDaliRenderTaskSetClearEnabledN(void)
1612 TestApplication application;
1614 tet_infoline("Testing RenderTask::SetClearEnabled() with empty handle");
1619 task.SetClearEnabled(true);
1621 catch (Dali::DaliException& e)
1623 DALI_TEST_PRINT_ASSERT( e );
1624 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1629 int UtcDaliRenderTaskGetClearEnabledP(void)
1631 TestApplication application;
1633 tet_infoline("Testing RenderTask::GetClearEnabled()");
1635 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1637 RenderTask task = taskList.GetTask( 0u );
1638 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1643 int UtcDaliRenderTaskGetClearEnabledN(void)
1645 TestApplication application;
1647 tet_infoline("Testing RenderTask::GetClearEnabled() with empty handle");
1652 bool x = task.GetClearEnabled();
1655 catch (Dali::DaliException& e)
1657 DALI_TEST_PRINT_ASSERT( e );
1658 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1663 int UtcDaliRenderTaskSetCullModeP(void)
1665 TestApplication application;
1667 tet_infoline("Testing RenderTask::SetCullMode()");
1669 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1670 RenderTask task = taskList.GetTask( 0u );
1671 DALI_TEST_EQUALS( task.GetCullMode(), true, TEST_LOCATION );
1673 task.SetCullMode( false );
1675 DALI_TEST_EQUALS( task.GetCullMode(), false, TEST_LOCATION );
1680 int UtcDaliRenderTaskSetCullModeN(void)
1682 TestApplication application;
1684 tet_infoline("Testing RenderTask::SetCullMode() on empty handle");
1689 task.SetCullMode( false );
1691 catch (Dali::DaliException& e)
1693 DALI_TEST_PRINT_ASSERT( e );
1694 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1699 int UtcDaliRenderTaskGetCullModeP(void)
1701 TestApplication application;
1703 tet_infoline("Testing RenderTask::GetCullMode()");
1705 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1706 RenderTask task = taskList.GetTask( 0u );
1707 DALI_TEST_EQUALS( task.GetCullMode(), true, TEST_LOCATION );
1711 int UtcDaliRenderTaskGetCullModeN(void)
1713 TestApplication application;
1715 tet_infoline("Testing RenderTask::GetCullMode() with empty handle");
1720 bool x = task.GetCullMode();
1723 catch (Dali::DaliException& e)
1725 DALI_TEST_PRINT_ASSERT( e );
1726 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1732 int UtcDaliRenderTaskSetRefreshRate(void)
1734 TestApplication application;
1736 tet_infoline("Testing RenderTask::SetRefreshRate()");
1738 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1740 // By default tasks will be processed every frame
1741 RenderTask task = taskList.GetTask( 0u );
1742 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1744 task.SetRefreshRate( 2u ); // every-other frame
1745 DALI_TEST_CHECK( 2u == task.GetRefreshRate() );
1747 task.SetRefreshRate( RenderTask::REFRESH_ALWAYS );
1748 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1752 int UtcDaliRenderTaskGetRefreshRate(void)
1754 TestApplication application;
1756 tet_infoline("Testing RenderTask::GetRefreshRate()");
1758 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1760 // By default tasks will be processed every frame
1761 RenderTask task = taskList.GetTask( 0u );
1762 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1764 RenderTask newTask = taskList.CreateTask();
1765 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == newTask.GetRefreshRate() );
1769 int UtcDaliRenderTaskSignalFinished(void)
1771 TestApplication application;
1773 tet_infoline("Testing RenderTask::SignalFinished()");
1775 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1776 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1778 CameraActor offscreenCameraActor = CameraActor::New();
1780 Stage::GetCurrent().Add( offscreenCameraActor );
1782 BufferImage image = BufferImage::New( 10, 10 );
1784 Actor rootActor = CreateRenderableActor( image );
1785 rootActor.SetSize( 10, 10 );
1786 Stage::GetCurrent().Add( rootActor );
1788 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1789 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
1790 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
1792 RenderTask newTask = taskList.CreateTask();
1793 newTask.SetCameraActor( offscreenCameraActor );
1794 newTask.SetSourceActor( rootActor );
1795 newTask.SetInputEnabled( false );
1796 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
1797 newTask.SetClearEnabled( true );
1798 newTask.SetExclusive( true );
1799 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
1800 newTask.SetTargetFrameBuffer( frameBufferImage );
1801 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
1803 bool finished = false;
1804 RenderTaskFinished renderTaskFinished( finished );
1805 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1807 // Flush the queue and render.
1808 application.SendNotification();
1810 // 1 render to process render task, then wait for sync before finished msg is sent
1811 // from update to the event thread.
1813 application.Render();
1814 application.SendNotification();
1815 DALI_TEST_CHECK( !finished );
1817 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1818 DALI_TEST_CHECK( lastSyncObj != NULL );
1820 application.Render();
1821 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1822 application.SendNotification();
1823 DALI_TEST_CHECK( !finished );
1825 application.Render();
1826 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1827 application.SendNotification();
1828 DALI_TEST_CHECK( ! finished );
1830 sync.SetObjectSynced( lastSyncObj, true );
1832 application.Render();
1833 application.SendNotification();
1834 DALI_TEST_CHECK( !finished );
1836 application.Render();
1837 application.SendNotification();
1838 DALI_TEST_CHECK( finished );
1840 DALI_TEST_EQUALS( application.GetUpdateStatus(), 0, TEST_LOCATION );
1845 int UtcDaliRenderTaskContinuous01(void)
1847 TestApplication application;
1849 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not staged)\nPOST:continuous renders, no Finished signal");
1851 // SETUP AN OFFSCREEN RENDER TASK
1852 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1853 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1854 drawTrace.Enable(true);
1856 Actor rootActor = Actor::New();
1857 Stage::GetCurrent().Add( rootActor );
1859 CameraActor offscreenCameraActor = CameraActor::New();
1860 Stage::GetCurrent().Add( offscreenCameraActor );
1862 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1864 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1865 bool finished = false;
1866 RenderTaskFinished renderTaskFinished( finished );
1867 application.SendNotification();
1869 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1870 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1871 application.GetPlatform().ClearReadyResources();
1873 // ADD SOURCE ACTOR TO STAGE - expect continuous renders to start, no finished signal
1874 Stage::GetCurrent().Add(secondRootActor);
1875 application.SendNotification();
1877 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1878 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1883 int UtcDaliRenderTaskContinuous02(void)
1885 TestApplication application;
1887 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not visible)\nPOST:continuous renders, no Finished signal");
1889 // SETUP AN OFFSCREEN RENDER TASK
1890 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1891 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1892 drawTrace.Enable(true);
1894 Actor rootActor = Actor::New();
1895 Stage::GetCurrent().Add( rootActor );
1897 CameraActor offscreenCameraActor = CameraActor::New();
1898 Stage::GetCurrent().Add( offscreenCameraActor );
1900 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1901 Stage::GetCurrent().Add(secondRootActor);
1902 secondRootActor.SetVisible(false);
1904 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1905 bool finished = false;
1906 RenderTaskFinished renderTaskFinished( finished );
1907 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1908 application.SendNotification();
1910 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1911 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1912 application.GetPlatform().ClearReadyResources();
1914 // MAKE SOURCE ACTOR VISIBLE - expect continuous renders to start, no finished signal
1915 secondRootActor.SetVisible(true);
1916 application.SendNotification();
1918 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1919 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1923 int UtcDaliRenderTaskContinuous03(void)
1925 TestApplication application;
1927 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (camera actor not staged)\nPOST:continuous renders, no Finished signal");
1929 // SETUP AN OFFSCREEN RENDER TASK
1930 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1931 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1932 drawTrace.Enable(true);
1934 Actor rootActor = Actor::New();
1935 Stage::GetCurrent().Add( rootActor );
1937 CameraActor offscreenCameraActor = CameraActor::New();
1938 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1939 Stage::GetCurrent().Add(secondRootActor);
1941 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1942 bool finished = false;
1943 RenderTaskFinished renderTaskFinished( finished );
1944 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1945 application.SendNotification();
1947 // START PROCESS/RENDER Input, Expected Input, Expected
1948 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1949 application.GetPlatform().ClearReadyResources();
1951 // ADD CAMERA ACTOR TO STAGE - expect continuous renders to start, no finished signal
1952 Stage::GetCurrent().Add( offscreenCameraActor );
1953 application.SendNotification();
1955 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1956 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1961 int UtcDaliRenderTaskContinuous04(void)
1963 TestApplication application;
1965 tet_infoline("Testing RenderTask Render Continuous using loaded image");
1967 // SETUP AN OFFSCREEN RENDER TASK
1968 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1969 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1970 drawTrace.Enable(true);
1972 Actor rootActor = Actor::New();
1973 Stage::GetCurrent().Add( rootActor );
1975 CameraActor offscreenCameraActor = CameraActor::New();
1976 Stage::GetCurrent().Add( offscreenCameraActor );
1977 Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg");
1978 Stage::GetCurrent().Add(secondRootActor);
1980 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1981 bool finished = false;
1982 RenderTaskFinished renderTaskFinished( finished );
1983 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1984 application.SendNotification();
1986 // START PROCESS/RENDER Input, Expected Input, Expected
1987 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1991 int UtcDaliRenderTaskOnce01(void)
1993 TestApplication application;
1995 tet_infoline("Testing RenderTask Render Once GlSync, using loaded image");
1997 // SETUP AN OFFSCREEN RENDER TASK
1998 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1999 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2000 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2001 drawTrace.Enable(true);
2003 Actor rootActor = Actor::New();
2004 Stage::GetCurrent().Add( rootActor );
2006 CameraActor offscreenCameraActor = CameraActor::New();
2007 Stage::GetCurrent().Add( offscreenCameraActor );
2008 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2010 Stage::GetCurrent().Add(secondRootActor);
2012 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
2013 bool finished = false;
2014 RenderTaskFinished renderTaskFinished( finished );
2015 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2016 application.SendNotification();
2018 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2020 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2021 DALI_TEST_CHECK( lastSyncObj != NULL );
2022 sync.SetObjectSynced( lastSyncObj, true );
2024 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2025 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2029 int UtcDaliRenderTaskOnce02(void)
2031 TestApplication application;
2033 tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n");
2035 // SETUP AN OFFSCREEN RENDER TASK
2036 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2037 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2038 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2039 drawTrace.Enable(true);
2041 Actor rootActor = Actor::New();
2042 Stage::GetCurrent().Add( rootActor );
2044 CameraActor offscreenCameraActor = CameraActor::New();
2045 Stage::GetCurrent().Add( offscreenCameraActor );
2047 Shader shader = CreateShader();
2048 Image image = CreateResourceImage(application, "aFile.jpg");
2049 TextureSet textureSet = CreateTextureSet( image );
2051 Geometry geometry = CreateQuadGeometry();
2052 Renderer renderer = Renderer::New(geometry, shader);
2053 renderer.SetTextures( textureSet );
2054 Actor secondRootActor = Actor::New();
2055 secondRootActor.AddRenderer(renderer);
2056 secondRootActor.SetSize(100, 100);
2057 Stage::GetCurrent().Add(secondRootActor);
2059 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
2060 bool finished = false;
2061 RenderTaskFinished renderTaskFinished( finished );
2062 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2063 application.SendNotification();
2065 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2067 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2068 DALI_TEST_CHECK( lastSyncObj != NULL );
2069 sync.SetObjectSynced( lastSyncObj, true );
2071 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2072 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2077 int UtcDaliRenderTaskOnce03(void)
2079 TestApplication application;
2081 tet_infoline("Testing RenderTask Render Once GlSync, using loaded image. Switch from render always after ready to render once\n");
2083 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2084 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2085 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2086 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2087 drawTrace.Enable(true);
2089 Actor rootActor = Actor::New();
2090 Stage::GetCurrent().Add( rootActor );
2092 CameraActor offscreenCameraActor = CameraActor::New();
2093 Stage::GetCurrent().Add( offscreenCameraActor );
2094 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2095 Stage::GetCurrent().Add(secondRootActor);
2097 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2098 bool finished = false;
2099 RenderTaskFinished renderTaskFinished( finished );
2100 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2101 application.SendNotification();
2103 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2105 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2106 application.SendNotification();
2108 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2110 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2111 DALI_TEST_CHECK( lastSyncObj != NULL );
2112 sync.SetObjectSynced( lastSyncObj, true );
2114 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2115 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2121 int UtcDaliRenderTaskOnce04(void)
2123 TestApplication application;
2124 tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n"
2125 "Switch from render always after ready to render once\n"
2128 // SETUP AN OFFSCREEN RENDER TASK
2129 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2130 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2131 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2132 drawTrace.Enable(true);
2134 Actor rootActor = Actor::New();
2135 Stage::GetCurrent().Add( rootActor );
2137 CameraActor offscreenCameraActor = CameraActor::New();
2138 Stage::GetCurrent().Add( offscreenCameraActor );
2140 Shader shader = CreateShader();
2141 Image image = CreateResourceImage(application, "aFile.jpg");
2142 TextureSet textureSet = CreateTextureSet( image );
2144 Geometry geometry = CreateQuadGeometry();
2145 Renderer renderer = Renderer::New(geometry, shader);
2146 renderer.SetTextures( textureSet );
2147 Actor secondRootActor = Actor::New();
2148 secondRootActor.AddRenderer(renderer);
2149 secondRootActor.SetSize(100, 100);
2150 Stage::GetCurrent().Add(secondRootActor);
2152 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2153 bool finished = false;
2154 RenderTaskFinished renderTaskFinished( finished );
2155 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2156 application.SendNotification();
2158 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2160 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2161 application.SendNotification();
2163 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2165 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2166 DALI_TEST_CHECK( lastSyncObj != NULL );
2167 sync.SetObjectSynced( lastSyncObj, true );
2169 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2170 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2175 int UtcDaliRenderTaskOnceNoSync01(void)
2177 TestApplication application;
2179 tet_infoline("Testing RenderTask Render Once, \nPRE: Resources ready\nPOST: Finished signal sent once only");
2181 // SETUP AN OFFSCREEN RENDER TASK
2182 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2183 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2184 drawTrace.Enable(true);
2186 Actor rootActor = Actor::New();
2187 Stage::GetCurrent().Add( rootActor );
2189 CameraActor offscreenCameraActor = CameraActor::New();
2190 Stage::GetCurrent().Add( offscreenCameraActor );
2191 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2192 Stage::GetCurrent().Add(secondRootActor);
2194 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2195 bool finished = false;
2196 RenderTaskFinished renderTaskFinished( finished );
2197 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2198 application.SendNotification();
2200 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2201 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2205 int UtcDaliRenderTaskOnceNoSync02(void)
2207 TestApplication application;
2209 tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loaded image.\n"
2210 "PRE: Resources ready\nPOST: Finished signal sent once only");
2211 // SETUP AN OFFSCREEN RENDER TASK
2212 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2213 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2214 drawTrace.Enable(true);
2216 Actor rootActor = Actor::New();
2217 Stage::GetCurrent().Add( rootActor );
2219 CameraActor offscreenCameraActor = CameraActor::New();
2220 Stage::GetCurrent().Add( offscreenCameraActor );
2222 Shader shader = CreateShader();
2223 Image image = CreateResourceImage(application, "aFile.jpg");
2224 TextureSet textureSet = CreateTextureSet( image );
2226 Geometry geometry = CreateQuadGeometry();
2227 Renderer renderer = Renderer::New(geometry, shader);
2228 renderer.SetTextures( textureSet );
2229 Actor secondRootActor = Actor::New();
2230 secondRootActor.AddRenderer(renderer);
2231 secondRootActor.SetSize(100, 100);
2232 Stage::GetCurrent().Add(secondRootActor);
2234 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2235 bool finished = false;
2236 RenderTaskFinished renderTaskFinished( finished );
2237 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2238 application.SendNotification();
2240 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2241 application.GetPlatform().ClearReadyResources();
2242 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2247 int UtcDaliRenderTaskOnceNoSync03(void)
2249 TestApplication application;
2251 tet_infoline("Testing RenderTask Render Once, using loaded image. Switch from render always after ready to render once\n"
2252 "PRE: Render task ready, Image loaded\n"
2253 "POST: Finished signal sent only once");
2255 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2256 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2257 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2258 drawTrace.Enable(true);
2260 Actor rootActor = Actor::New();
2261 Stage::GetCurrent().Add( rootActor );
2263 CameraActor offscreenCameraActor = CameraActor::New();
2264 Stage::GetCurrent().Add( offscreenCameraActor );
2265 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2266 Stage::GetCurrent().Add(secondRootActor);
2268 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2269 bool finished = false;
2270 RenderTaskFinished renderTaskFinished( finished );
2271 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2272 application.SendNotification();
2274 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2276 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2277 application.SendNotification(); // Input, Expected Input, Expected
2278 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2279 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2283 int UtcDaliRenderTaskOnceNoSync04(void)
2285 TestApplication application;
2287 tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n"
2288 "Switch from render always after ready to render once\n"
2289 "PRE: Render task ready, Image not loaded\n"
2290 "POST: Finished signal sent only once");
2292 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2293 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2294 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2295 drawTrace.Enable(true);
2297 Actor rootActor = Actor::New();
2298 Stage::GetCurrent().Add( rootActor );
2300 CameraActor offscreenCameraActor = CameraActor::New();
2301 Stage::GetCurrent().Add( offscreenCameraActor );
2303 Shader shader = CreateShader();
2304 Image image = CreateResourceImage(application, "aFile.jpg");
2305 TextureSet textureSet = CreateTextureSet( image );
2307 Geometry geometry = CreateQuadGeometry();
2308 Renderer renderer = Renderer::New(geometry, shader);
2309 renderer.SetTextures( textureSet );
2310 Actor secondRootActor = Actor::New();
2311 secondRootActor.AddRenderer(renderer);
2312 secondRootActor.SetSize(100, 100);
2313 Stage::GetCurrent().Add(secondRootActor);
2316 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2317 bool finished = false;
2318 RenderTaskFinished renderTaskFinished( finished );
2319 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2320 application.SendNotification();
2322 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2323 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2324 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2325 DALI_TEST_CHECK( lastSyncObj == NULL );
2327 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2328 application.SendNotification(); // Input, Expected Input, Expected
2329 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2330 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2332 lastSyncObj = sync.GetLastSyncObject();
2333 DALI_TEST_CHECK( lastSyncObj == NULL );
2338 int UtcDaliRenderTaskOnceNoSync05(void)
2340 TestApplication application;
2342 tet_infoline("Testing RenderTask Render Once\n"
2343 "SetRefreshRate(ONCE), resource load failed, completes render task.\n"
2344 "PRE: resources failed to load\n"
2345 "POST: No finished signal sent.");
2347 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2348 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2349 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2350 drawTrace.Enable(true);
2352 Actor rootActor = Actor::New();
2353 Stage::GetCurrent().Add( rootActor );
2355 CameraActor offscreenCameraActor = CameraActor::New();
2356 Stage::GetCurrent().Add( offscreenCameraActor );
2357 Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg");
2358 Stage::GetCurrent().Add(secondRootActor);
2360 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2361 bool finished = false;
2362 RenderTaskFinished renderTaskFinished( finished );
2363 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2364 application.SendNotification();
2366 // START PROCESS/RENDER Input, Expected Input, Expected
2367 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2369 // CHANGE TO RENDER ONCE,
2370 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2371 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2378 int UtcDaliRenderTaskOnceChain01(void)
2380 TestApplication application;
2382 tet_infoline("Testing RenderTask Render Once Chained render tasks\n"
2383 "SetRefreshRate(ONCE), resource load completes, both render tasks render.\n"
2384 "PRE: resources ready\n"
2385 "POST: 2 finished signals sent.");
2387 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2388 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2389 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2390 drawTrace.Enable(true);
2392 Actor defaultRootActor = Actor::New(); // Root for default RT
2393 Stage::GetCurrent().Add( defaultRootActor );
2395 CameraActor offscreenCameraActor = CameraActor::New();
2396 Stage::GetCurrent().Add( offscreenCameraActor );
2397 Actor firstRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2398 Stage::GetCurrent().Add(firstRootActor);
2400 // first render task
2401 RenderTask firstTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, firstRootActor, RenderTask::REFRESH_ONCE, false);
2402 bool firstFinished = false;
2403 RenderTaskFinished renderTask1Finished( firstFinished );
2404 firstTask.FinishedSignal().Connect( &application, renderTask1Finished );
2406 // Second render task
2407 FrameBufferImage fbo = firstTask.GetTargetFrameBuffer();
2408 Actor secondRootActor = CreateRenderableActor( fbo );
2409 Stage::GetCurrent().Add(secondRootActor);
2410 RenderTask secondTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2411 bool secondFinished = false;
2412 RenderTaskFinished renderTask2Finished( secondFinished );
2413 secondTask.FinishedSignal().Connect( &application, renderTask2Finished );
2415 application.SendNotification();
2417 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false, true, __LINE__ ) );
2418 DALI_TEST_CHECK( firstFinished == false );
2419 DALI_TEST_CHECK( secondFinished == false );
2421 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, true, true, __LINE__ ) );
2422 DALI_TEST_CHECK( firstFinished == true );
2423 DALI_TEST_CHECK( secondFinished == false );
2425 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, secondFinished, true, false, __LINE__ ) );
2426 DALI_TEST_CHECK( secondFinished == true );
2431 int UtcDaliRenderTaskProperties(void)
2433 TestApplication application;
2435 RenderTask task = Stage::GetCurrent().GetRenderTaskList().CreateTask();
2437 Property::IndexContainer indices;
2438 task.GetPropertyIndices( indices );
2439 DALI_TEST_CHECK( indices.Size() );
2440 DALI_TEST_EQUALS( indices.Size(), task.GetPropertyCount(), TEST_LOCATION );
2444 int UtcDaliRenderTaskSetScreenToFrameBufferMappingActor(void)
2446 TestApplication application;
2447 tet_infoline("Testing RenderTask::SetScreenToFrameBufferMappingActor ");
2449 Stage stage = Stage::GetCurrent();
2450 Size stageSize = stage.GetSize();
2451 Actor mappingActor = Actor::New();
2452 Vector2 scale( 0.6f, 0.75f);
2453 Vector2 offset( stageSize.x*0.1f, stageSize.y*0.15f);
2454 mappingActor.SetSize( stageSize * scale );
2455 mappingActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
2456 mappingActor.SetPosition( offset.x, offset.y );
2457 stage.Add( mappingActor );
2459 Actor offscreenActor = Actor::New();
2460 offscreenActor.SetSize( stageSize );
2461 offscreenActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
2462 stage.Add( offscreenActor );
2464 RenderTaskList taskList = stage.GetRenderTaskList();
2465 RenderTask renderTask = taskList.CreateTask();
2466 FrameBufferImage frameBufferImage = FrameBufferImage::New(stageSize.width*scale.x, stageSize.height*scale.y, Pixel::A8);
2467 renderTask.SetSourceActor( offscreenActor );
2468 renderTask.SetExclusive( true );
2469 renderTask.SetInputEnabled( true );
2470 renderTask.SetTargetFrameBuffer( frameBufferImage );
2471 renderTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2472 renderTask.SetScreenToFrameBufferMappingActor( mappingActor );
2473 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2475 // Render and notify
2476 application.SendNotification();
2477 application.Render();
2478 application.Render();
2479 application.SendNotification();
2481 Vector2 screenCoordinates( stageSize.x * 0.05f, stageSize.y * 0.05f );
2482 Dali::HitTestAlgorithm::Results results;
2483 DALI_TEST_CHECK( !results.actor );
2484 DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
2485 // miss expected, results not changed
2486 DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2487 DALI_TEST_CHECK( !results.actor );
2488 DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
2490 screenCoordinates.x = stageSize.x * 0.265f;
2491 screenCoordinates.y = stageSize.y * 0.33f;
2492 results.actor = Actor();
2493 results.actorCoordinates = Vector2::ZERO;
2494 // hit expected, results changed
2495 DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2496 DALI_TEST_CHECK( results.actor == offscreenActor );
2497 DALI_TEST_EQUALS( (screenCoordinates-offset)/scale , results.actorCoordinates, 0.1f, TEST_LOCATION );
2499 screenCoordinates.x = stageSize.x * 0.435f;
2500 screenCoordinates.y = stageSize.y * 0.52f;
2501 // hit expected, results changed
2502 DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2503 DALI_TEST_CHECK( results.actor == offscreenActor );
2504 const Vector2 expectedCoordinates = (screenCoordinates-offset)/scale;
2505 DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION );
2507 screenCoordinates.x = stageSize.x * 0.65f;
2508 screenCoordinates.y = stageSize.y * 0.95f;
2509 // miss expected, results not changed
2510 DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2511 DALI_TEST_CHECK( results.actor == offscreenActor );
2512 DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION );
2516 int UtcDaliRenderTaskFinishInvisibleSourceActor(void)
2518 TestApplication application;
2520 tet_infoline("Testing RenderTask::FinishInvisibleSourceActor()");
2522 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2523 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2525 CameraActor offscreenCameraActor = CameraActor::New();
2527 Stage::GetCurrent().Add( offscreenCameraActor );
2529 BufferImage image = BufferImage::New( 10, 10 );
2530 Actor rootActor = CreateRenderableActor( image );
2531 rootActor.SetSize( 10, 10 );
2532 rootActor.SetVisible(false);
2533 Stage::GetCurrent().Add( rootActor );
2535 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2536 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
2537 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
2539 // Flush all outstanding messages
2540 application.SendNotification();
2541 application.Render();
2543 RenderTask newTask = taskList.CreateTask();
2544 newTask.SetCameraActor( offscreenCameraActor );
2545 newTask.SetSourceActor( rootActor );
2546 newTask.SetInputEnabled( false );
2547 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
2548 newTask.SetClearEnabled( true );
2549 newTask.SetExclusive( true );
2550 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2551 newTask.SetTargetFrameBuffer( frameBufferImage );
2552 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
2554 // Framebuffer doesn't actually get created until Connected, i.e. by previous line
2556 bool finished = false;
2557 RenderTaskFinished renderTaskFinished( finished );
2558 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2560 // Flush the queue and render.
2561 application.SendNotification();
2563 // 1 render to process render task, then wait for sync before finished msg is sent
2564 // from update to the event thread.
2566 application.Render();
2567 application.SendNotification();
2568 DALI_TEST_CHECK( !finished );
2570 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2571 DALI_TEST_CHECK( lastSyncObj != NULL );
2573 application.Render();
2574 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
2575 application.SendNotification();
2576 DALI_TEST_CHECK( !finished );
2578 application.Render();
2579 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
2580 application.SendNotification();
2581 DALI_TEST_CHECK( ! finished );
2583 sync.SetObjectSynced( lastSyncObj, true );
2585 application.Render();
2586 application.SendNotification();
2587 DALI_TEST_CHECK( !finished );
2589 application.Render();
2590 application.SendNotification();
2591 DALI_TEST_CHECK( finished );
2594 application.Render(); // Double check no more finished signal
2595 application.SendNotification();
2596 DALI_TEST_CHECK( ! finished );
2601 int UtcDaliRenderTaskFinishMissingImage(void)
2603 TestApplication application;
2605 // Previously we had bugs where not having a resource ID would cause render-tasks to wait forever
2606 tet_infoline("Testing RenderTask::SignalFinished() when an Actor has no Image set");
2608 Stage stage = Stage::GetCurrent();
2610 BufferImage image = BufferImage::New( 10, 10 );
2611 Actor rootActor = CreateRenderableActor( image );
2612 rootActor.SetSize( 10, 10 );
2613 stage.Add( rootActor );
2615 Actor actorWithMissingImage = CreateRenderableActor( Image() );
2616 actorWithMissingImage.SetSize( 10, 10 );
2617 stage.Add( actorWithMissingImage );
2619 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2620 RenderTask newTask = taskList.CreateTask();
2621 newTask.SetInputEnabled( false );
2622 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
2623 newTask.SetClearEnabled( true );
2624 newTask.SetExclusive( true );
2625 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2627 bool finished = false;
2628 RenderTaskFinished renderTaskFinished( finished );
2629 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2631 // 1 render to process render task, then 1 before finished msg is sent from update to the event thread.
2632 application.SendNotification();
2633 application.Render();
2634 application.Render();
2636 application.SendNotification();
2637 DALI_TEST_CHECK( finished );
2642 int UtcDaliRenderTaskWorldToViewport(void)
2644 TestApplication application( static_cast<size_t>(400), static_cast<size_t>(400) ); // square surface
2646 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2648 Actor actor = Actor::New();
2649 actor.SetSize(100.0f, 100.0f);
2650 actor.SetPosition( Vector3(0.0, 0.0, 0.0) );
2652 actor.SetParentOrigin( Vector3(0.5, 0.5, 0.5) );
2653 actor.SetAnchorPoint( Vector3(0.5, 0.5, 0.5) );
2655 Stage::GetCurrent().Add(actor);
2657 application.SendNotification();
2658 application.Render();
2659 application.SendNotification();
2661 RenderTask task = taskList.GetTask( 0u );
2663 CameraActor camera = task.GetCameraActor();
2665 Vector2 screenSize = task.GetCurrentViewportSize();
2667 float screenX = 0.0;
2668 float screenY = 0.0;
2670 bool ok = task.WorldToViewport(actor.GetCurrentWorldPosition(), screenX, screenY);
2671 DALI_TEST_CHECK(ok == true);
2673 DALI_TEST_EQUALS(screenX, screenSize.x/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2674 DALI_TEST_EQUALS(screenY, screenSize.y/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2676 Actor actor2 = Actor::New();
2677 float actor2Size = 100.f;
2678 actor2.SetSize( actor2Size, actor2Size );
2679 actor2.SetPosition( Vector3(0.0, 0.0, 0.0) );
2680 actor2.SetParentOrigin( Vector3(0.5, 0.5, 0.0) );
2681 actor2.SetAnchorPoint( Vector3(0.5, 0.5, 0.0) );
2682 Stage::GetCurrent().Add( actor2 );
2684 actor.SetParentOrigin( Vector3(0,0,0) );
2686 application.SendNotification();
2687 application.Render();
2688 application.SendNotification();
2690 ok = task.WorldToViewport(actor.GetCurrentWorldPosition(), screenX, screenY);
2691 DALI_TEST_CHECK(ok == true);
2693 DALI_TEST_EQUALS(screenX, screenSize.x/2 - actor2Size/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2694 DALI_TEST_EQUALS(screenY, screenSize.y/2 - actor2Size/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2700 int UtcDaliRenderTaskViewportToLocal(void)
2702 TestApplication application;
2703 Actor actor = Actor::New();
2704 actor.SetAnchorPoint(AnchorPoint::TOP_LEFT);
2705 actor.SetSize(100.0f, 100.0f);
2706 actor.SetPosition(10.0f, 10.0f);
2707 Stage::GetCurrent().Add(actor);
2709 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2710 RenderTask task = taskList.GetTask( 0u );
2712 // flush the queue and render once
2713 application.SendNotification();
2714 application.Render();
2715 application.SendNotification();
2716 application.Render();
2724 float screenX = 50.0f;
2725 float screenY = 50.0f;
2727 DALI_TEST_CHECK( actor.ScreenToLocal(localX, localY, screenX, screenY) );
2729 DALI_TEST_CHECK( task.ViewportToLocal(actor, screenX, screenY, rtLocalX, rtLocalY ) );
2731 DALI_TEST_EQUALS(localX, rtLocalX, 0.01f, TEST_LOCATION);
2732 DALI_TEST_EQUALS(localY, rtLocalY, 0.01f, TEST_LOCATION);