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 } // unnamed namespace
292 /****************************************************************************************************/
293 /****************************************************************************************************/
294 /******************************** TEST CASES BELOW **********************************************/
295 /****************************************************************************************************/
296 /****************************************************************************************************/
298 int UtcDaliRenderTaskDownCast01(void)
300 TestApplication application;
302 tet_infoline("Testing RenderTask::DownCast()");
304 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
306 BaseHandle base = taskList.GetTask( 0u );
307 DALI_TEST_CHECK( base );
309 RenderTask task = RenderTask::DownCast( base );
310 DALI_TEST_CHECK( task );
312 // Try calling a method
313 DALI_TEST_CHECK( task.GetSourceActor() );
317 int UtcDaliRenderTaskDownCast02(void)
319 TestApplication application;
321 tet_infoline("Testing RenderTask::DownCast()");
323 Actor actor = Actor::New();
325 RenderTask task = RenderTask::DownCast( actor );
326 DALI_TEST_CHECK( ! task );
331 int UtcDaliRenderTaskSetSourceActorN(void)
333 TestApplication application;
334 tet_infoline("Testing RenderTask::SetSourceActor() Negative - try with empty actor handle");
335 Stage stage = Stage::GetCurrent();
339 RenderTaskList taskList = stage.GetRenderTaskList();
340 RenderTask renderTask = taskList.CreateTask();
341 renderTask.SetSourceActor(srcActor);
343 application.SendNotification();
344 application.Render();
346 DALI_TEST_CHECK( ! renderTask.GetSourceActor() );
351 int UtcDaliRenderTaskSetSourceActorP01(void)
353 TestApplication application;
355 tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that setting a non-renderable actor stops existing source actor being rendered ");
357 Stage stage = Stage::GetCurrent();
358 RenderTaskList taskList = stage.GetRenderTaskList();
359 RenderTask task = taskList.GetTask( 0u );
361 Actor actor = task.GetSourceActor();
362 DALI_TEST_CHECK( actor );
364 BufferImage img = BufferImage::New( 1,1 );
365 Actor newActor = CreateRenderableActor( img );
366 newActor.SetSize(1,1);
367 stage.Add( newActor );
369 Actor nonRenderableActor = Actor::New();
370 stage.Add( nonRenderableActor );
372 // Stop the newActor from being rendered by changing the source actor
373 DALI_TEST_CHECK( nonRenderableActor );
374 task.SetSourceActor( nonRenderableActor );
375 DALI_TEST_CHECK( task.GetSourceActor() != actor );
376 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
378 TestGlAbstraction& gl = application.GetGlAbstraction();
379 TraceCallStack& drawTrace = gl.GetDrawTrace();
380 drawTrace.Enable(true);
382 // Update & Render nothing!
383 application.GetGlAbstraction().ClearBoundTextures();
384 application.SendNotification();
385 application.Render();
387 // Check that nothing was rendered
388 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
394 int UtcDaliRenderTaskSetSourceActorP02(void)
396 TestApplication application;
398 tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that switching source from a non-renderable to a renderable actor causes the texture to be drawn");
400 Stage stage = Stage::GetCurrent();
402 RenderTaskList taskList = stage.GetRenderTaskList();
404 RenderTask task = taskList.GetTask( 0u );
406 Actor actor = task.GetSourceActor();
407 DALI_TEST_CHECK( actor );
410 BufferImage img = BufferImage::New( 1,1 );
411 Actor newActor = CreateRenderableActor( img );
412 newActor.SetSize(1,1);
413 stage.Add( newActor );
415 Actor nonRenderableActor = Actor::New();
416 stage.Add( nonRenderableActor );
418 TestGlAbstraction& gl = application.GetGlAbstraction();
419 TraceCallStack& drawTrace = gl.GetDrawTrace();
420 drawTrace.Enable(true);
422 // Stop the newActor from being rendered by changing the source actor
423 DALI_TEST_CHECK( nonRenderableActor );
424 task.SetSourceActor( nonRenderableActor );
425 DALI_TEST_CHECK( task.GetSourceActor() != actor );
426 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
428 // Update & Render nothing!
429 application.GetGlAbstraction().ClearBoundTextures();
430 application.SendNotification();
431 application.Render();
433 // Check that nothing was rendered
434 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
437 // Set newActor as the new source Actor
438 task.SetSourceActor( newActor );
439 DALI_TEST_CHECK( task.GetSourceActor() != actor );
440 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
442 // Update & Render the newActor
443 application.GetGlAbstraction().ClearBoundTextures();
444 application.SendNotification();
445 application.Render();
447 // Check that the newActor was rendered
448 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
452 int UtcDaliRenderTaskSetSourceActorOffStage(void)
454 TestApplication application;
456 tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)");
458 Stage stage = Stage::GetCurrent();
459 RenderTaskList taskList = stage.GetRenderTaskList();
460 RenderTask task = taskList.GetTask( 0u );
462 Actor actor = task.GetSourceActor();
463 DALI_TEST_CHECK( actor );
465 TestGlAbstraction& gl = application.GetGlAbstraction();
466 TraceCallStack& drawTrace = gl.GetDrawTrace();
467 drawTrace.Enable(true);
469 BufferImage img = BufferImage::New( 1,1 );
470 Actor newActor = CreateRenderableActor( img );
471 newActor.SetSize(1,1);
472 task.SetSourceActor( newActor );
473 // Don't add newActor to stage yet //'
475 // Update & Render with the actor initially off-stage
476 application.SendNotification();
477 application.Render();
479 // Check that nothing was rendered
480 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
483 stage.Add( newActor );
485 // Update & Render with the actor on-stage
486 application.GetGlAbstraction().ClearBoundTextures();
487 application.SendNotification();
488 application.Render();
490 // Check that the newActor was rendered
491 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
494 // Now remove from stage
495 stage.Remove( newActor );
497 // Update & Render with the actor off-stage
498 application.SendNotification();
499 application.Render();
500 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
505 int UtcDaliRenderTaskSetSourceActorEmpty(void)
507 TestApplication application;
509 tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)");
511 Stage stage = Stage::GetCurrent();
512 RenderTaskList taskList = stage.GetRenderTaskList();
513 RenderTask task = taskList.GetTask( 0u );
515 Actor actor = task.GetSourceActor();
516 DALI_TEST_CHECK( actor );
518 BufferImage img = BufferImage::New( 1,1 );
519 Actor newActor = CreateRenderableActor( img );
520 newActor.SetSize(1,1);
521 stage.Add( newActor );
523 Actor nonRenderableActor = Actor::New();
524 stage.Add( nonRenderableActor );
526 // Set with empty handle
527 task.SetSourceActor( Actor() );
528 DALI_TEST_CHECK( ! task.GetSourceActor() );
530 TestGlAbstraction& gl = application.GetGlAbstraction();
531 TraceCallStack& drawTrace = gl.GetDrawTrace();
532 drawTrace.Enable(true);
534 // Update & Render nothing!
535 application.SendNotification();
536 application.Render();
538 // Check that nothing was rendered
539 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
541 // Set with non-empty handle
542 task.SetSourceActor( newActor );
543 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
545 // Update & Render the newActor
546 application.GetGlAbstraction().ClearBoundTextures();
547 application.SendNotification();
548 application.Render();
550 // Check that the newActor was rendered
551 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
555 int UtcDaliRenderTaskGetSourceActorP01(void)
557 TestApplication application;
559 tet_infoline("Testing RenderTask::GetSourceActor() Check the default render task has a valid source actor");
561 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
563 RenderTask task = taskList.GetTask( 0u );
565 Actor actor = task.GetSourceActor();
566 DALI_TEST_CHECK( actor );
568 // By default the entire scene should be rendered
569 Actor root = Stage::GetCurrent().GetLayer( 0 );
570 DALI_TEST_CHECK( root == actor );
574 int UtcDaliRenderTaskGetSourceActorP02(void)
576 TestApplication application;
578 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.");
580 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
581 RenderTask task = taskList.CreateTask();
582 Actor actor = Actor::New();
583 Stage::GetCurrent().Add(actor);
584 task.SetSourceActor( actor );
586 DALI_TEST_EQUALS( actor, task.GetSourceActor(), TEST_LOCATION );
591 int UtcDaliRenderTaskGetSourceActorN(void)
593 TestApplication application;
595 tet_infoline("Testing RenderTask::GetSourceActor() Try with empty handle");
600 Actor actor = task.GetSourceActor();
602 catch (Dali::DaliException& e)
604 DALI_TEST_PRINT_ASSERT( e );
605 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
611 int UtcDaliRenderTaskSetExclusive(void)
613 TestApplication application;
615 tet_infoline("Testing RenderTask::SetExclusive() Check that exclusion works");
617 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
619 // Manipulate the GenTextures behaviour, to identify different actors
621 std::vector<GLuint> ids;
622 ids.push_back( 8 ); // 8 = actor1
623 ids.push_back( 9 ); // 9 = actor2
624 ids.push_back( 10 ); // 10 = actor3
625 application.GetGlAbstraction().SetNextTextureIds( ids );
627 BufferImage img1 = BufferImage::New( 1,1 );
628 Actor actor1 = CreateRenderableActor( img1 );
630 Stage::GetCurrent().Add( actor1 );
632 // Update & Render actor1
633 application.SendNotification();
634 application.Render();
636 // Check that the actor1 was rendered
637 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
638 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
640 if ( boundTextures.size() )
642 DALI_TEST_EQUALS( boundTextures[0], 8u/*unique to actor1*/, TEST_LOCATION );
645 BufferImage img2 = BufferImage::New( 1,1 );
646 Actor actor2 = CreateRenderableActor( img2 );
649 // Force actor2 to be rendered before actor1
650 Layer layer = Layer::New();
651 Stage::GetCurrent().Add( layer );
653 layer.LowerToBottom();
656 application.GetGlAbstraction().ClearBoundTextures();
657 application.SendNotification();
658 application.Render();
660 // Check that the actors were rendered
661 DALI_TEST_EQUALS( boundTextures.size(), 2u, TEST_LOCATION );
663 if ( boundTextures.size() )
665 DALI_TEST_EQUALS( boundTextures[0], 9u/*unique to actor2*/, TEST_LOCATION );
666 DALI_TEST_EQUALS( boundTextures[1], 8u/*unique to actor1*/, TEST_LOCATION );
669 BufferImage img3 = BufferImage::New( 1,1 );
670 Actor actor3 = CreateRenderableActor( img3 );
673 // Force actor3 to be rendered before actor2
674 layer = Layer::New();
675 Stage::GetCurrent().Add( layer );
677 layer.LowerToBottom();
679 // Update & Render all actors
680 application.GetGlAbstraction().ClearBoundTextures();
681 application.SendNotification();
682 application.Render();
684 // Check that the actors were rendered
685 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
687 if ( boundTextures.size() )
689 DALI_TEST_EQUALS( boundTextures[0], 10u/*unique to actor3*/, TEST_LOCATION );
690 DALI_TEST_EQUALS( boundTextures[1], 9u/*unique to actor2*/, TEST_LOCATION );
691 DALI_TEST_EQUALS( boundTextures[2], 8u/*unique to actor1*/, TEST_LOCATION );
694 // Both actors are now connected to the root node
695 // Setup 2 render-tasks - the first will render from the root-node, and the second from actor2
697 // Not exclusive is the default
698 RenderTask task1 = taskList.GetTask( 0u );
699 DALI_TEST_CHECK( false == task1.IsExclusive() );
701 RenderTask task2 = taskList.CreateTask();
702 DALI_TEST_CHECK( false == task2.IsExclusive() );
703 task2.SetSourceActor( actor2 );
705 // Task1 should render all actors, and task 2 should render only actor2
707 application.GetGlAbstraction().ClearBoundTextures();
708 application.SendNotification();
709 application.Render();
711 DALI_TEST_EQUALS( boundTextures.size(), 4u, TEST_LOCATION );
713 if ( boundTextures.size() == 4 )
715 // Test that task 1 renders actor3, then actor2 & then actor1
716 DALI_TEST_CHECK( boundTextures[0] == 10u );
717 DALI_TEST_CHECK( boundTextures[1] == 9u );
718 DALI_TEST_CHECK( boundTextures[2] == 8u );
720 // Test that task 2 renders actor2
721 DALI_TEST_EQUALS( boundTextures[3], 9u, TEST_LOCATION );
724 // Make actor2 exclusive to task2
726 task2.SetExclusive( true );
727 DALI_TEST_CHECK( true == task2.IsExclusive() );
729 // Task1 should render only actor1, and task 2 should render only actor2
731 application.GetGlAbstraction().ClearBoundTextures();
732 application.SendNotification();
733 application.Render();
735 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
736 if ( boundTextures.size() == 3 )
738 // Test that task 1 renders actor3 & actor1
739 DALI_TEST_CHECK( boundTextures[0] == 10u );
740 DALI_TEST_CHECK( boundTextures[1] == 8u );
742 // Test that task 2 renders actor2
743 DALI_TEST_CHECK( boundTextures[2] == 9u );
748 int UtcDaliRenderTaskSetExclusive02(void)
750 TestApplication application;
752 tet_infoline("Testing RenderTask::SetExclusive() Check that changing from exclusive to not-exclusive works");
754 std::vector<GLuint> ids;
755 ids.push_back( 8 ); // 8 = actor1
756 application.GetGlAbstraction().SetNextTextureIds( ids );
758 BufferImage img1 = BufferImage::New( 1,1 );
759 Actor actor1 = CreateRenderableActor( img1 );
761 Stage::GetCurrent().Add( actor1 );
763 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
764 RenderTask task = taskList.CreateTask();
766 task.SetSourceActor( actor1 );
767 task.SetExclusive(true); // Actor should only render once
769 TestGlAbstraction& gl = application.GetGlAbstraction();
770 TraceCallStack& drawTrace = gl.GetDrawTrace();
771 drawTrace.Enable(true);
773 // Update & Render actor1
774 application.SendNotification();
775 application.Render();
777 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
779 // Set task to non-exclusive - actor1 should render twice:
781 task.SetExclusive(false);
782 application.SendNotification();
783 application.Render();
785 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 2, TEST_LOCATION );
790 int UtcDaliRenderTaskSetExclusiveN(void)
792 TestApplication application;
794 tet_infoline("Testing RenderTask::SetExclusive() on empty handle");
799 task.SetExclusive(true);
801 catch (Dali::DaliException& e)
803 DALI_TEST_PRINT_ASSERT( e );
804 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
809 int UtcDaliRenderTaskIsExclusive01(void)
811 TestApplication application;
813 tet_infoline("Testing RenderTask::IsExclusive() Check default values are non-exclusive");
815 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
817 // Not exclusive is the default
818 RenderTask task = taskList.GetTask( 0u );
819 DALI_TEST_CHECK( false == task.IsExclusive() );
821 RenderTask newTask = taskList.CreateTask();
822 DALI_TEST_CHECK( false == newTask.IsExclusive() );
827 int UtcDaliRenderTaskIsExclusive02(void)
829 TestApplication application;
831 tet_infoline("Testing RenderTask::IsExclusive() Check the getter returns set values");
833 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
835 // Not exclusive is the default
836 RenderTask newTask = taskList.CreateTask();
837 DALI_TEST_EQUALS( newTask.IsExclusive(), false, TEST_LOCATION );
839 newTask.SetExclusive(true);
840 DALI_TEST_EQUALS( newTask.IsExclusive(), true, TEST_LOCATION );
844 int UtcDaliRenderTaskIsExclusiveN(void)
846 TestApplication application;
848 tet_infoline("Testing RenderTask::IsExclusive() on empty handle");
853 bool x = task.IsExclusive();
856 catch (Dali::DaliException& e)
858 DALI_TEST_PRINT_ASSERT( e );
859 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
864 int UtcDaliRenderTaskSetInputEnabled(void)
866 TestApplication application;
868 tet_infoline("Testing RenderTask::SetInputEnabled()");
870 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
872 // Input is enabled by default
873 RenderTask task = taskList.GetTask( 0u );
874 DALI_TEST_CHECK( true == task.GetInputEnabled() );
876 task.SetInputEnabled( false );
877 DALI_TEST_CHECK( false == task.GetInputEnabled() );
879 task.SetInputEnabled( true );
880 DALI_TEST_CHECK( true == task.GetInputEnabled() );
884 int UtcDaliRenderTaskGetInputEnabled(void)
886 TestApplication application;
888 tet_infoline("Testing RenderTask::GetInputEnabled()");
890 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
892 // Input is enabled by default
893 RenderTask task = taskList.GetTask( 0u );
894 DALI_TEST_EQUALS( true, task.GetInputEnabled(), TEST_LOCATION );
896 RenderTask newTask = taskList.CreateTask();
897 DALI_TEST_EQUALS( true, newTask.GetInputEnabled(), TEST_LOCATION );
899 newTask.SetInputEnabled(false);
900 DALI_TEST_EQUALS( false, newTask.GetInputEnabled(), TEST_LOCATION );
905 int UtcDaliRenderTaskSetCameraActorP(void)
907 TestApplication application;
909 tet_infoline("Testing RenderTask::SetCameraActor()");
911 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
913 RenderTask task = taskList.GetTask( 0u );
915 Actor defaultCameraActor = task.GetCameraActor();
916 DALI_TEST_CHECK( defaultCameraActor );
918 CameraActor newCameraActor = CameraActor::New();
919 DALI_TEST_CHECK( newCameraActor );
921 task.SetCameraActor( newCameraActor );
922 DALI_TEST_CHECK( task.GetCameraActor() != defaultCameraActor );
923 DALI_TEST_EQUALS( task.GetCameraActor(), newCameraActor, TEST_LOCATION );
928 int UtcDaliRenderTaskSetCameraActorN(void)
930 TestApplication application;
932 tet_infoline("Testing RenderTask::SetCameraActor() with empty actor handle");
934 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
936 RenderTask task = taskList.GetTask( 0u );
938 Actor actor = task.GetCameraActor();
939 DALI_TEST_CHECK( actor );
941 CameraActor cameraActor;
943 task.SetCameraActor( cameraActor );
944 DALI_TEST_EQUALS( (bool)task.GetCameraActor(), false, TEST_LOCATION );
945 DALI_TEST_EQUALS( task.GetCameraActor(), cameraActor, TEST_LOCATION );
950 int UtcDaliRenderTaskGetCameraActorP(void)
952 TestApplication application;
954 tet_infoline("Testing RenderTask::GetCameraActor()");
956 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
958 RenderTask task = taskList.GetTask( 0u );
960 CameraActor actor = task.GetCameraActor();
961 DALI_TEST_CHECK( actor );
962 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
963 DALI_TEST_GREATER( actor.GetFieldOfView(), 0.0f, TEST_LOCATION );
967 int UtcDaliRenderTaskGetCameraActorN(void)
969 TestApplication application;
971 tet_infoline("Testing RenderTask::GetCameraActor() with empty handle");
976 Actor actor = task.GetCameraActor();
978 catch (Dali::DaliException& e)
980 DALI_TEST_PRINT_ASSERT( e );
981 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
987 int UtcDaliRenderTaskSetTargetFrameBufferP(void)
989 TestApplication application;
991 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
993 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
995 RenderTask task = taskList.GetTask( 0u );
997 FrameBufferImage newImage = FrameBufferImage::New();
998 task.SetTargetFrameBuffer( newImage );
999 DALI_TEST_CHECK( task.GetTargetFrameBuffer() == newImage );
1003 int UtcDaliRenderTaskSetTargetFrameBufferN(void)
1005 TestApplication application;
1007 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
1009 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1011 RenderTask task = taskList.GetTask( 0u );
1012 FrameBufferImage newImage; // Empty handle
1013 task.SetTargetFrameBuffer( newImage );
1014 DALI_TEST_EQUALS( (bool)task.GetTargetFrameBuffer(), false, TEST_LOCATION );
1018 int UtcDaliRenderTaskGetTargetFrameBufferP(void)
1020 TestApplication application;
1022 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
1024 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1026 RenderTask newTask = taskList.CreateTask();
1027 FrameBufferImage fb = FrameBufferImage::New(128, 128, Pixel::RGBA8888);
1028 newTask.SetTargetFrameBuffer( fb );
1029 DALI_TEST_EQUALS( newTask.GetTargetFrameBuffer(), fb, TEST_LOCATION );
1033 int UtcDaliRenderTaskGetTargetFrameBufferN(void)
1035 TestApplication application;
1037 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
1039 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1041 RenderTask task = taskList.GetTask( 0u );
1043 // By default render-tasks do not render off-screen
1044 FrameBufferImage image = task.GetTargetFrameBuffer();
1045 DALI_TEST_CHECK( !image );
1050 int UtcDaliRenderTaskSetFrameBufferP(void)
1052 TestApplication application;
1054 tet_infoline("Testing RenderTask::SetFrameBuffer()");
1056 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1058 RenderTask task = taskList.GetTask( 0u );
1060 FrameBuffer newFrameBuffer = FrameBuffer::New( 128u, 128u, FrameBuffer::Attachment::NONE );
1061 task.SetFrameBuffer( newFrameBuffer );
1062 DALI_TEST_CHECK( task.GetFrameBuffer() == newFrameBuffer );
1066 int UtcDaliRenderTaskSetFrameBufferN(void)
1068 TestApplication application;
1070 tet_infoline("Testing RenderTask::SetFrameBuffer()");
1072 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1074 RenderTask task = taskList.GetTask( 0u );
1075 FrameBuffer newFrameBuffer; // Empty handle
1076 task.SetFrameBuffer( newFrameBuffer );
1077 DALI_TEST_EQUALS( (bool)task.GetFrameBuffer(), false, TEST_LOCATION );
1081 int UtcDaliRenderTaskGetFrameBufferP(void)
1083 TestApplication application;
1085 tet_infoline("Testing RenderTask::GetFrameBuffer()");
1087 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1089 RenderTask task = taskList.GetTask( 0u );
1091 FrameBuffer newFrameBuffer = FrameBuffer::New( 1u, 1u, FrameBuffer::Attachment::NONE );
1092 task.SetFrameBuffer( newFrameBuffer );
1093 DALI_TEST_CHECK( task.GetFrameBuffer() == newFrameBuffer );
1097 int UtcDaliRenderTaskGetFrameBufferN(void)
1099 TestApplication application;
1101 tet_infoline("Testing RenderTask::GetFrameBuffer()");
1103 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1105 RenderTask task = taskList.GetTask( 0u );
1107 // By default render-tasks do not render off-screen
1108 FrameBuffer frameBuffer = task.GetFrameBuffer();
1109 DALI_TEST_CHECK( !frameBuffer );
1114 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionP(void)
1116 TestApplication application;
1118 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
1120 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1122 RenderTask task = taskList.GetTask( 0u );
1124 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
1126 Vector2 coordinates( 5, 10 );
1127 Vector2 convertedCoordinates( 6, 12 ); // + Vector(1, 2)
1129 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1130 DALI_TEST_CHECK( func( coordinates ) );
1131 DALI_TEST_CHECK( coordinates == convertedCoordinates );
1133 task.SetScreenToFrameBufferFunction( RenderTask::FULLSCREEN_FRAMEBUFFER_FUNCTION );
1134 func = task.GetScreenToFrameBufferFunction();
1135 DALI_TEST_CHECK( func( coordinates ) );
1137 task.SetScreenToFrameBufferFunction( RenderTask::DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION );
1138 func = task.GetScreenToFrameBufferFunction();
1139 DALI_TEST_CHECK( ! func( coordinates ) );
1143 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionN(void)
1145 TestApplication application;
1147 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
1149 RenderTask task; // Empty handle
1152 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
1154 catch (Dali::DaliException& e)
1156 DALI_TEST_PRINT_ASSERT( e );
1157 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1162 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionP(void)
1164 TestApplication application;
1166 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction()");
1168 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1170 RenderTask task = taskList.GetTask( 0u );
1172 Vector2 originalCoordinates( 5, 10 );
1173 Vector2 coordinates( 5, 10 );
1175 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1176 DALI_TEST_CHECK( !func( coordinates ) ); // conversion should fail by default
1177 DALI_TEST_CHECK( coordinates == originalCoordinates ); // coordinates should not be modified
1181 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionN(void)
1183 TestApplication application;
1185 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction() on empty handle");
1190 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1193 catch (Dali::DaliException& e)
1195 DALI_TEST_PRINT_ASSERT( e );
1196 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1202 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorP(void)
1204 TestApplication application;
1205 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor ");
1207 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1208 RenderTask renderTask = taskList.CreateTask();
1209 Actor mappingActor = Actor::New();
1210 renderTask.SetScreenToFrameBufferMappingActor(mappingActor);
1212 DALI_TEST_EQUALS( mappingActor, renderTask.GetScreenToFrameBufferMappingActor(), TEST_LOCATION );
1217 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorN(void)
1219 TestApplication application;
1220 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor with empty task handle");
1226 task.SetScreenToFrameBufferMappingActor(mappingActor);
1228 catch (Dali::DaliException& e)
1230 DALI_TEST_PRINT_ASSERT( e );
1231 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1236 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActor02N(void)
1238 TestApplication application;
1239 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor with empty task handle");
1241 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1242 RenderTask renderTask = taskList.CreateTask();
1244 renderTask.SetScreenToFrameBufferMappingActor(actor);
1246 DALI_TEST_EQUALS( (bool)renderTask.GetScreenToFrameBufferMappingActor(), false, TEST_LOCATION);
1250 int UtcDaliRenderTaskGetViewportP01(void)
1252 TestApplication application;
1254 tet_infoline("Testing RenderTask::GetViewport() on default task");
1256 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1257 RenderTask task = taskList.GetTask( 0u );
1258 Viewport viewport = task.GetViewport();
1260 // By default the viewport should match the stage width/height
1261 Vector2 stageSize = Stage::GetCurrent().GetSize();
1262 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1263 DALI_TEST_CHECK( viewport == expectedViewport );
1267 int UtcDaliRenderTaskGetViewportP02(void)
1269 TestApplication application;
1271 tet_infoline("Testing RenderTask::GetViewport() on new task");
1273 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1274 RenderTask task = taskList.CreateTask();
1275 Viewport viewport = task.GetViewport();
1277 // By default the viewport should match the stage width/height
1278 Vector2 stageSize = Stage::GetCurrent().GetSize();
1279 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1280 DALI_TEST_CHECK( viewport == expectedViewport );
1284 int UtcDaliRenderTaskGetViewportN(void)
1286 TestApplication application;
1288 tet_infoline("Testing RenderTask::GetViewport() on empty handle");
1293 Viewport viewport = task.GetViewport();
1296 catch (Dali::DaliException& e)
1298 DALI_TEST_PRINT_ASSERT( e );
1299 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1305 int UtcDaliRenderTaskSetViewportP(void)
1307 TestApplication application;
1309 tet_infoline("Testing RenderTask::SetViewport()");
1311 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1313 RenderTask task = taskList.GetTask( 0u );
1314 Vector2 stageSize = Stage::GetCurrent().GetSize();
1315 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
1316 task.SetViewport( newViewport );
1318 // Update (viewport is a property)
1319 application.SendNotification();
1320 application.Render();
1322 DALI_TEST_CHECK( task.GetViewport() == newViewport );
1326 int UtcDaliRenderTaskSetViewportN(void)
1328 TestApplication application;
1330 tet_infoline("Testing RenderTask::SetViewport()");
1332 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1337 Vector2 stageSize = Stage::GetCurrent().GetSize();
1338 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
1339 task.SetViewport( newViewport );
1341 catch (Dali::DaliException& e)
1343 DALI_TEST_PRINT_ASSERT( e );
1344 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1351 int UtcDaliRenderTaskSetViewportPosition(void)
1353 TestApplication application;
1355 tet_infoline("Testing RenderTask::SetViewportPosition()");
1357 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1359 RenderTask task = taskList.GetTask( 0u );
1361 Viewport viewport = task.GetViewport();
1363 // By default the viewport should match the stage width/height
1365 Vector2 stageSize = Stage::GetCurrent().GetSize();
1366 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1367 DALI_TEST_CHECK( viewport == expectedViewport );
1370 Vector2 newPosition(25.0f, 50.0f);
1371 task.SetViewportPosition( newPosition );
1373 // Update (viewport is a property)
1374 application.SendNotification();
1375 application.Render();
1377 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1379 // Set by Property test
1380 Vector2 newPosition2(32.0f, 32.0f);
1381 task.SetProperty( RenderTask::Property::VIEWPORT_POSITION, newPosition2 );
1382 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1383 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition, TEST_LOCATION ); // still the old position
1386 application.SendNotification();
1387 application.Render();
1389 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1390 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1391 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1393 Vector2 newPosition3(64.0f, 0.0f);
1394 Animation animation = Animation::New(1.0f);
1395 animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_POSITION ), newPosition3, AlphaFunction::LINEAR );
1398 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1399 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1401 // Perform 1000ms worth of updates at which point animation should have completed.
1402 Wait(application, 1000);
1403 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1404 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1405 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1407 // Create another animation which animates by a certain value
1408 const Vector2 newPosition4( 75.0f, 45.0f );
1409 const Vector2 relativePosition( newPosition4 - newPosition3 );
1410 animation = Animation::New( 1.0f );
1411 animation.AnimateBy( Property( task, RenderTask::Property::VIEWPORT_POSITION ), relativePosition );
1414 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1415 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, TEST_LOCATION );
1417 // Perform 1000ms worth of updates at which point animation should have completed.
1418 Wait(application, 1000);
1419 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1420 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1421 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1426 int UtcDaliRenderTaskSetViewportSize(void)
1428 TestApplication application;
1430 tet_infoline("Testing RenderTask::SetViewportSize()");
1432 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1434 RenderTask task = taskList.GetTask( 0u );
1436 Viewport viewport = task.GetViewport();
1438 // By default the viewport should match the stage width/height
1440 Vector2 stageSize = Stage::GetCurrent().GetSize();
1441 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1442 DALI_TEST_CHECK( viewport == expectedViewport );
1444 Vector2 newSize(128.0f, 64.0f);
1445 task.SetViewportSize( newSize );
1447 // Update (viewport is a property)
1448 application.SendNotification();
1449 application.Render();
1451 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1453 // Set by Property test
1454 Vector2 newSize2(50.0f, 50.0f);
1455 task.SetProperty( RenderTask::Property::VIEWPORT_SIZE, newSize2 );
1456 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1457 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize, TEST_LOCATION ); // still the old position
1460 application.SendNotification();
1461 application.Render();
1463 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1464 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1465 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1467 Vector2 newSize3(10.0f, 10.0f);
1468 Animation animation = Animation::New(1.0f);
1469 animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_SIZE ), newSize3, AlphaFunction::LINEAR );
1472 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1473 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1475 // Perform 1000ms worth of updates at which point animation should have completed.
1476 Wait(application, 1000);
1477 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1478 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1479 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1481 // Create another animation which animates by a certain value
1482 const Vector2 newSize4( 75.0f, 45.0f );
1483 const Vector2 relativeSize( newSize4 - newSize3 );
1484 animation = Animation::New( 1.0f );
1485 animation.AnimateBy( Property( task, RenderTask::Property::VIEWPORT_SIZE ), relativeSize );
1488 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1489 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, TEST_LOCATION );
1491 // Perform 1000ms worth of updates at which point animation should have completed.
1492 Wait(application, 1000);
1493 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1494 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1495 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1500 int UtcDaliRenderTaskSetClearColorP(void)
1502 TestApplication application;
1504 tet_infoline("Testing RenderTask::SetClearColor()");
1506 Vector4 testColor( 1.0f, 2.0f, 3.0f, 4.0f );
1507 Vector4 testColor2( 5.0f, 6.0f, 7.0f, 8.0f );
1509 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1511 RenderTask task = taskList.GetTask( 0u );
1512 DALI_TEST_CHECK( task.GetClearColor() != testColor );
1514 task.SetClearColor( testColor );
1519 DALI_TEST_EQUALS( task.GetClearColor(), testColor, TEST_LOCATION );
1521 task.SetProperty( RenderTask::Property::CLEAR_COLOR, testColor2 );
1522 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1523 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor, TEST_LOCATION ); // still the old color
1528 DALI_TEST_EQUALS( task.GetClearColor(), testColor2, TEST_LOCATION );
1529 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1530 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1532 Vector4 newColor3(10.0f, 10.0f, 20.0f, 30.0f);
1533 Animation animation = Animation::New(1.0f);
1534 animation.AnimateTo( Property( task, RenderTask::Property::CLEAR_COLOR ), newColor3, AlphaFunction::LINEAR );
1537 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1538 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1540 // Perform 1000ms worth of updates at which point animation should have completed.
1541 Wait(application, 1000);
1542 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1543 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1545 // Create another animation which animates by a certain value
1546 const Vector4 newColor4( 0.45f, 0.35f, 0.25f, 0.1f );
1547 const Vector4 relativeColor( newColor4 - newColor3 );
1548 animation = Animation::New( 1.0f );
1549 animation.AnimateBy( Property( task, RenderTask::Property::CLEAR_COLOR ), relativeColor );
1552 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION );
1553 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_10, TEST_LOCATION );
1555 // Perform 1000ms worth of updates at which point animation should have completed.
1556 Wait(application, 1000);
1557 DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION );
1558 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION );
1563 int UtcDaliRenderTaskSetClearColorN(void)
1565 TestApplication application;
1567 tet_infoline("Testing RenderTask::SetClearColor() on empty handle");
1572 task.SetClearColor( Vector4::ZERO );
1574 catch (Dali::DaliException& e)
1576 DALI_TEST_PRINT_ASSERT( e );
1577 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1582 int UtcDaliRenderTaskGetClearColorP(void)
1584 TestApplication application;
1586 tet_infoline("Testing RenderTask::GetClearColor()");
1588 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1589 RenderTask task = taskList.GetTask( 0u );
1590 DALI_TEST_EQUALS( task.GetClearColor(), RenderTask::DEFAULT_CLEAR_COLOR, TEST_LOCATION );
1594 int UtcDaliRenderTaskGetClearColorN(void)
1596 TestApplication application;
1598 tet_infoline("Testing RenderTask::GetClearColor()");
1603 Vector4 color = task.GetClearColor();
1606 catch (Dali::DaliException& e)
1608 DALI_TEST_PRINT_ASSERT( e );
1609 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1614 int UtcDaliRenderTaskSetClearEnabledP(void)
1616 TestApplication application;
1618 tet_infoline("Testing RenderTask::SetClearEnabled()");
1620 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1622 RenderTask task = taskList.GetTask( 0u );
1623 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1625 task.SetClearEnabled( true );
1626 DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION );
1628 task.SetClearEnabled( false );
1629 DALI_TEST_EQUALS( task.GetClearEnabled(), false, TEST_LOCATION );
1633 int UtcDaliRenderTaskSetClearEnabledN(void)
1635 TestApplication application;
1637 tet_infoline("Testing RenderTask::SetClearEnabled() with empty handle");
1642 task.SetClearEnabled(true);
1644 catch (Dali::DaliException& e)
1646 DALI_TEST_PRINT_ASSERT( e );
1647 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1652 int UtcDaliRenderTaskGetClearEnabledP(void)
1654 TestApplication application;
1656 tet_infoline("Testing RenderTask::GetClearEnabled()");
1658 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1660 RenderTask task = taskList.GetTask( 0u );
1661 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1666 int UtcDaliRenderTaskGetClearEnabledN(void)
1668 TestApplication application;
1670 tet_infoline("Testing RenderTask::GetClearEnabled() with empty handle");
1675 bool x = task.GetClearEnabled();
1678 catch (Dali::DaliException& e)
1680 DALI_TEST_PRINT_ASSERT( e );
1681 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1686 int UtcDaliRenderTaskSetCullModeP(void)
1688 TestApplication application;
1690 tet_infoline("Testing RenderTask::SetCullMode()");
1692 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1693 RenderTask task = taskList.GetTask( 0u );
1694 DALI_TEST_EQUALS( task.GetCullMode(), true, TEST_LOCATION );
1696 task.SetCullMode( false );
1698 DALI_TEST_EQUALS( task.GetCullMode(), false, TEST_LOCATION );
1703 int UtcDaliRenderTaskSetCullModeN(void)
1705 TestApplication application;
1707 tet_infoline("Testing RenderTask::SetCullMode() on empty handle");
1712 task.SetCullMode( false );
1714 catch (Dali::DaliException& e)
1716 DALI_TEST_PRINT_ASSERT( e );
1717 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1722 int UtcDaliRenderTaskGetCullModeP(void)
1724 TestApplication application;
1726 tet_infoline("Testing RenderTask::GetCullMode()");
1728 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1729 RenderTask task = taskList.GetTask( 0u );
1730 DALI_TEST_EQUALS( task.GetCullMode(), true, TEST_LOCATION );
1734 int UtcDaliRenderTaskGetCullModeN(void)
1736 TestApplication application;
1738 tet_infoline("Testing RenderTask::GetCullMode() with empty handle");
1743 bool x = task.GetCullMode();
1746 catch (Dali::DaliException& e)
1748 DALI_TEST_PRINT_ASSERT( e );
1749 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1755 int UtcDaliRenderTaskSetRefreshRate(void)
1757 TestApplication application;
1759 tet_infoline("Testing RenderTask::SetRefreshRate()");
1761 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1763 // By default tasks will be processed every frame
1764 RenderTask task = taskList.GetTask( 0u );
1765 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1767 task.SetRefreshRate( 2u ); // every-other frame
1768 DALI_TEST_CHECK( 2u == task.GetRefreshRate() );
1770 task.SetRefreshRate( RenderTask::REFRESH_ALWAYS );
1771 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1775 int UtcDaliRenderTaskGetRefreshRate(void)
1777 TestApplication application;
1779 tet_infoline("Testing RenderTask::GetRefreshRate()");
1781 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1783 // By default tasks will be processed every frame
1784 RenderTask task = taskList.GetTask( 0u );
1785 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1787 RenderTask newTask = taskList.CreateTask();
1788 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == newTask.GetRefreshRate() );
1792 int UtcDaliRenderTaskSignalFinished(void)
1794 TestApplication application;
1796 tet_infoline("Testing RenderTask::SignalFinished()");
1798 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1799 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1801 CameraActor offscreenCameraActor = CameraActor::New();
1803 Stage::GetCurrent().Add( offscreenCameraActor );
1805 BufferImage image = BufferImage::New( 10, 10 );
1807 Actor rootActor = CreateRenderableActor( image );
1808 rootActor.SetSize( 10, 10 );
1809 Stage::GetCurrent().Add( rootActor );
1811 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1812 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
1813 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
1815 RenderTask newTask = taskList.CreateTask();
1816 newTask.SetCameraActor( offscreenCameraActor );
1817 newTask.SetSourceActor( rootActor );
1818 newTask.SetInputEnabled( false );
1819 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
1820 newTask.SetClearEnabled( true );
1821 newTask.SetExclusive( true );
1822 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
1823 newTask.SetTargetFrameBuffer( frameBufferImage );
1824 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
1826 bool finished = false;
1827 RenderTaskFinished renderTaskFinished( finished );
1828 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1830 // Flush the queue and render.
1831 application.SendNotification();
1833 // 1 render to process render task, then wait for sync before finished msg is sent
1834 // from update to the event thread.
1836 application.Render();
1837 application.SendNotification();
1838 DALI_TEST_CHECK( !finished );
1840 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1841 DALI_TEST_CHECK( lastSyncObj != NULL );
1843 application.Render();
1844 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1845 application.SendNotification();
1846 DALI_TEST_CHECK( !finished );
1848 application.Render();
1849 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1850 application.SendNotification();
1851 DALI_TEST_CHECK( ! finished );
1853 sync.SetObjectSynced( lastSyncObj, true );
1855 application.Render();
1856 application.SendNotification();
1857 DALI_TEST_CHECK( !finished );
1859 application.Render();
1860 application.SendNotification();
1861 DALI_TEST_CHECK( finished );
1863 DALI_TEST_EQUALS( application.GetUpdateStatus(), 0, TEST_LOCATION );
1868 int UtcDaliRenderTaskContinuous01(void)
1870 TestApplication application;
1872 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not staged)\nPOST:continuous renders, no Finished signal");
1874 // SETUP AN OFFSCREEN RENDER TASK
1875 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1876 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1877 drawTrace.Enable(true);
1879 Actor rootActor = Actor::New();
1880 Stage::GetCurrent().Add( rootActor );
1882 CameraActor offscreenCameraActor = CameraActor::New();
1883 Stage::GetCurrent().Add( offscreenCameraActor );
1885 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1887 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1888 bool finished = false;
1889 RenderTaskFinished renderTaskFinished( finished );
1890 application.SendNotification();
1892 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1893 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1894 application.GetPlatform().ClearReadyResources();
1896 // ADD SOURCE ACTOR TO STAGE - expect continuous renders to start, no finished signal
1897 Stage::GetCurrent().Add(secondRootActor);
1898 application.SendNotification();
1900 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1901 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1906 int UtcDaliRenderTaskContinuous02(void)
1908 TestApplication application;
1910 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not visible)\nPOST:continuous renders, no Finished signal");
1912 // SETUP AN OFFSCREEN RENDER TASK
1913 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1914 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1915 drawTrace.Enable(true);
1917 Actor rootActor = Actor::New();
1918 Stage::GetCurrent().Add( rootActor );
1920 CameraActor offscreenCameraActor = CameraActor::New();
1921 Stage::GetCurrent().Add( offscreenCameraActor );
1923 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1924 Stage::GetCurrent().Add(secondRootActor);
1925 secondRootActor.SetVisible(false);
1927 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1928 bool finished = false;
1929 RenderTaskFinished renderTaskFinished( finished );
1930 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1931 application.SendNotification();
1933 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1934 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1935 application.GetPlatform().ClearReadyResources();
1937 // MAKE SOURCE ACTOR VISIBLE - expect continuous renders to start, no finished signal
1938 secondRootActor.SetVisible(true);
1939 application.SendNotification();
1941 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1942 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1946 int UtcDaliRenderTaskContinuous03(void)
1948 TestApplication application;
1950 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (camera actor not staged)\nPOST:continuous renders, no Finished signal");
1952 // SETUP AN OFFSCREEN RENDER TASK
1953 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1954 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1955 drawTrace.Enable(true);
1957 Actor rootActor = Actor::New();
1958 Stage::GetCurrent().Add( rootActor );
1960 CameraActor offscreenCameraActor = CameraActor::New();
1961 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1962 Stage::GetCurrent().Add(secondRootActor);
1964 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1965 bool finished = false;
1966 RenderTaskFinished renderTaskFinished( finished );
1967 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1968 application.SendNotification();
1970 // START PROCESS/RENDER Input, Expected Input, Expected
1971 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1972 application.GetPlatform().ClearReadyResources();
1974 // ADD CAMERA ACTOR TO STAGE - expect continuous renders to start, no finished signal
1975 Stage::GetCurrent().Add( offscreenCameraActor );
1976 application.SendNotification();
1978 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1979 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1984 int UtcDaliRenderTaskContinuous04(void)
1986 TestApplication application;
1988 tet_infoline("Testing RenderTask Render Continuous using loaded image");
1990 // SETUP AN OFFSCREEN RENDER TASK
1991 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1992 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1993 drawTrace.Enable(true);
1995 Actor rootActor = Actor::New();
1996 Stage::GetCurrent().Add( rootActor );
1998 CameraActor offscreenCameraActor = CameraActor::New();
1999 Stage::GetCurrent().Add( offscreenCameraActor );
2000 Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg");
2001 Stage::GetCurrent().Add(secondRootActor);
2003 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2004 bool finished = false;
2005 RenderTaskFinished renderTaskFinished( finished );
2006 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2007 application.SendNotification();
2009 // START PROCESS/RENDER Input, Expected Input, Expected
2010 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2014 int UtcDaliRenderTaskOnce01(void)
2016 TestApplication application;
2018 tet_infoline("Testing RenderTask Render Once GlSync, using loaded image");
2020 // SETUP AN OFFSCREEN RENDER TASK
2021 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2022 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2023 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2024 drawTrace.Enable(true);
2026 Actor rootActor = Actor::New();
2027 Stage::GetCurrent().Add( rootActor );
2029 CameraActor offscreenCameraActor = CameraActor::New();
2030 Stage::GetCurrent().Add( offscreenCameraActor );
2031 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2033 Stage::GetCurrent().Add(secondRootActor);
2035 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
2036 bool finished = false;
2037 RenderTaskFinished renderTaskFinished( finished );
2038 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2039 application.SendNotification();
2041 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2043 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2044 DALI_TEST_CHECK( lastSyncObj != NULL );
2045 sync.SetObjectSynced( lastSyncObj, true );
2047 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2048 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2052 int UtcDaliRenderTaskOnce02(void)
2054 TestApplication application;
2056 tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n");
2058 // SETUP AN OFFSCREEN RENDER TASK
2059 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2060 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2061 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2062 drawTrace.Enable(true);
2064 Actor rootActor = Actor::New();
2065 Stage::GetCurrent().Add( rootActor );
2067 CameraActor offscreenCameraActor = CameraActor::New();
2068 Stage::GetCurrent().Add( offscreenCameraActor );
2070 Shader shader = CreateShader();
2071 Image image = CreateResourceImage(application, "aFile.jpg");
2072 TextureSet textureSet = CreateTextureSet( image );
2074 Geometry geometry = CreateQuadGeometry();
2075 Renderer renderer = Renderer::New(geometry, shader);
2076 renderer.SetTextures( textureSet );
2077 Actor secondRootActor = Actor::New();
2078 secondRootActor.AddRenderer(renderer);
2079 secondRootActor.SetSize(100, 100);
2080 Stage::GetCurrent().Add(secondRootActor);
2082 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
2083 bool finished = false;
2084 RenderTaskFinished renderTaskFinished( finished );
2085 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2086 application.SendNotification();
2088 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2090 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2091 DALI_TEST_CHECK( lastSyncObj != NULL );
2092 sync.SetObjectSynced( lastSyncObj, true );
2094 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2095 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2100 int UtcDaliRenderTaskOnce03(void)
2102 TestApplication application;
2104 tet_infoline("Testing RenderTask Render Once GlSync, using loaded image. Switch from render always after ready to render once\n");
2106 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2107 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2108 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2109 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2110 drawTrace.Enable(true);
2112 Actor rootActor = Actor::New();
2113 Stage::GetCurrent().Add( rootActor );
2115 CameraActor offscreenCameraActor = CameraActor::New();
2116 Stage::GetCurrent().Add( offscreenCameraActor );
2117 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2118 Stage::GetCurrent().Add(secondRootActor);
2120 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2121 bool finished = false;
2122 RenderTaskFinished renderTaskFinished( finished );
2123 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2124 application.SendNotification();
2126 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2128 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2129 application.SendNotification();
2131 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2133 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2134 DALI_TEST_CHECK( lastSyncObj != NULL );
2135 sync.SetObjectSynced( lastSyncObj, true );
2137 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2138 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2144 int UtcDaliRenderTaskOnce04(void)
2146 TestApplication application;
2147 tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n"
2148 "Switch from render always after ready to render once\n"
2151 // SETUP AN OFFSCREEN RENDER TASK
2152 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2153 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2154 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2155 drawTrace.Enable(true);
2157 Actor rootActor = Actor::New();
2158 Stage::GetCurrent().Add( rootActor );
2160 CameraActor offscreenCameraActor = CameraActor::New();
2161 Stage::GetCurrent().Add( offscreenCameraActor );
2163 Shader shader = CreateShader();
2164 Image image = CreateResourceImage(application, "aFile.jpg");
2165 TextureSet textureSet = CreateTextureSet( image );
2167 Geometry geometry = CreateQuadGeometry();
2168 Renderer renderer = Renderer::New(geometry, shader);
2169 renderer.SetTextures( textureSet );
2170 Actor secondRootActor = Actor::New();
2171 secondRootActor.AddRenderer(renderer);
2172 secondRootActor.SetSize(100, 100);
2173 Stage::GetCurrent().Add(secondRootActor);
2175 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2176 bool finished = false;
2177 RenderTaskFinished renderTaskFinished( finished );
2178 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2179 application.SendNotification();
2181 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2183 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2184 application.SendNotification();
2186 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2188 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2189 DALI_TEST_CHECK( lastSyncObj != NULL );
2190 sync.SetObjectSynced( lastSyncObj, true );
2192 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2193 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2198 int UtcDaliRenderTaskOnceNoSync01(void)
2200 TestApplication application;
2202 tet_infoline("Testing RenderTask Render Once, \nPRE: Resources ready\nPOST: Finished signal sent once only");
2204 // SETUP AN OFFSCREEN RENDER TASK
2205 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2206 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2207 drawTrace.Enable(true);
2209 Actor rootActor = Actor::New();
2210 Stage::GetCurrent().Add( rootActor );
2212 CameraActor offscreenCameraActor = CameraActor::New();
2213 Stage::GetCurrent().Add( offscreenCameraActor );
2214 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2215 Stage::GetCurrent().Add(secondRootActor);
2217 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2218 bool finished = false;
2219 RenderTaskFinished renderTaskFinished( finished );
2220 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2221 application.SendNotification();
2223 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2224 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2228 int UtcDaliRenderTaskOnceNoSync02(void)
2230 TestApplication application;
2232 tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loaded image.\n"
2233 "PRE: Resources ready\nPOST: Finished signal sent once only");
2234 // SETUP AN OFFSCREEN RENDER TASK
2235 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2236 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2237 drawTrace.Enable(true);
2239 Actor rootActor = Actor::New();
2240 Stage::GetCurrent().Add( rootActor );
2242 CameraActor offscreenCameraActor = CameraActor::New();
2243 Stage::GetCurrent().Add( offscreenCameraActor );
2245 Shader shader = CreateShader();
2246 Image image = CreateResourceImage(application, "aFile.jpg");
2247 TextureSet textureSet = CreateTextureSet( image );
2249 Geometry geometry = CreateQuadGeometry();
2250 Renderer renderer = Renderer::New(geometry, shader);
2251 renderer.SetTextures( textureSet );
2252 Actor secondRootActor = Actor::New();
2253 secondRootActor.AddRenderer(renderer);
2254 secondRootActor.SetSize(100, 100);
2255 Stage::GetCurrent().Add(secondRootActor);
2257 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2258 bool finished = false;
2259 RenderTaskFinished renderTaskFinished( finished );
2260 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2261 application.SendNotification();
2263 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2264 application.GetPlatform().ClearReadyResources();
2265 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2270 int UtcDaliRenderTaskOnceNoSync03(void)
2272 TestApplication application;
2274 tet_infoline("Testing RenderTask Render Once, using loaded image. Switch from render always after ready to render once\n"
2275 "PRE: Render task ready, Image loaded\n"
2276 "POST: Finished signal sent only once");
2278 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2279 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2280 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2281 drawTrace.Enable(true);
2283 Actor rootActor = Actor::New();
2284 Stage::GetCurrent().Add( rootActor );
2286 CameraActor offscreenCameraActor = CameraActor::New();
2287 Stage::GetCurrent().Add( offscreenCameraActor );
2288 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2289 Stage::GetCurrent().Add(secondRootActor);
2291 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2292 bool finished = false;
2293 RenderTaskFinished renderTaskFinished( finished );
2294 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2295 application.SendNotification();
2297 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2299 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2300 application.SendNotification(); // Input, Expected Input, Expected
2301 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2302 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2306 int UtcDaliRenderTaskOnceNoSync04(void)
2308 TestApplication application;
2310 tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n"
2311 "Switch from render always after ready to render once\n"
2312 "PRE: Render task ready, Image not loaded\n"
2313 "POST: Finished signal sent only once");
2315 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2316 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2317 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2318 drawTrace.Enable(true);
2320 Actor rootActor = Actor::New();
2321 Stage::GetCurrent().Add( rootActor );
2323 CameraActor offscreenCameraActor = CameraActor::New();
2324 Stage::GetCurrent().Add( offscreenCameraActor );
2326 Shader shader = CreateShader();
2327 Image image = CreateResourceImage(application, "aFile.jpg");
2328 TextureSet textureSet = CreateTextureSet( image );
2330 Geometry geometry = CreateQuadGeometry();
2331 Renderer renderer = Renderer::New(geometry, shader);
2332 renderer.SetTextures( textureSet );
2333 Actor secondRootActor = Actor::New();
2334 secondRootActor.AddRenderer(renderer);
2335 secondRootActor.SetSize(100, 100);
2336 Stage::GetCurrent().Add(secondRootActor);
2339 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2340 bool finished = false;
2341 RenderTaskFinished renderTaskFinished( finished );
2342 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2343 application.SendNotification();
2345 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2346 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2347 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2348 DALI_TEST_CHECK( lastSyncObj == NULL );
2350 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2351 application.SendNotification(); // Input, Expected Input, Expected
2352 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2353 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2355 lastSyncObj = sync.GetLastSyncObject();
2356 DALI_TEST_CHECK( lastSyncObj == NULL );
2361 int UtcDaliRenderTaskOnceNoSync05(void)
2363 TestApplication application;
2365 tet_infoline("Testing RenderTask Render Once\n"
2366 "SetRefreshRate(ONCE), resource load failed, completes render task.\n"
2367 "PRE: resources failed to load\n"
2368 "POST: No finished signal sent.");
2370 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2371 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2372 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2373 drawTrace.Enable(true);
2375 Actor rootActor = Actor::New();
2376 Stage::GetCurrent().Add( rootActor );
2378 CameraActor offscreenCameraActor = CameraActor::New();
2379 Stage::GetCurrent().Add( offscreenCameraActor );
2380 Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg");
2381 Stage::GetCurrent().Add(secondRootActor);
2383 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2384 bool finished = false;
2385 RenderTaskFinished renderTaskFinished( finished );
2386 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2387 application.SendNotification();
2389 // START PROCESS/RENDER Input, Expected Input, Expected
2390 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2392 // CHANGE TO RENDER ONCE,
2393 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2394 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2401 int UtcDaliRenderTaskOnceChain01(void)
2403 TestApplication application;
2405 tet_infoline("Testing RenderTask Render Once Chained render tasks\n"
2406 "SetRefreshRate(ONCE), resource load completes, both render tasks render.\n"
2407 "PRE: resources ready\n"
2408 "POST: 2 finished signals sent.");
2410 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2411 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2412 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2413 drawTrace.Enable(true);
2415 Actor defaultRootActor = Actor::New(); // Root for default RT
2416 Stage::GetCurrent().Add( defaultRootActor );
2418 CameraActor offscreenCameraActor = CameraActor::New();
2419 Stage::GetCurrent().Add( offscreenCameraActor );
2420 Actor firstRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2421 Stage::GetCurrent().Add(firstRootActor);
2423 // first render task
2424 RenderTask firstTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, firstRootActor, RenderTask::REFRESH_ONCE, false);
2425 bool firstFinished = false;
2426 RenderTaskFinished renderTask1Finished( firstFinished );
2427 firstTask.FinishedSignal().Connect( &application, renderTask1Finished );
2429 // Second render task
2430 FrameBufferImage fbo = firstTask.GetTargetFrameBuffer();
2431 Actor secondRootActor = CreateRenderableActor( fbo );
2432 Stage::GetCurrent().Add(secondRootActor);
2433 RenderTask secondTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2434 bool secondFinished = false;
2435 RenderTaskFinished renderTask2Finished( secondFinished );
2436 secondTask.FinishedSignal().Connect( &application, renderTask2Finished );
2438 application.SendNotification();
2440 //Both render tasks are executed.
2441 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false, true, __LINE__ ) );
2442 DALI_TEST_CHECK( firstFinished == false );
2443 DALI_TEST_CHECK( secondFinished == false );
2445 //Nothing else to render and both render task should have finished now
2446 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, true, false, __LINE__ ) );
2447 DALI_TEST_CHECK( firstFinished == true );
2448 DALI_TEST_CHECK( secondFinished == true );
2453 int UtcDaliRenderTaskProperties(void)
2455 TestApplication application;
2457 RenderTask task = Stage::GetCurrent().GetRenderTaskList().CreateTask();
2459 Property::IndexContainer indices;
2460 task.GetPropertyIndices( indices );
2461 DALI_TEST_CHECK( indices.Size() );
2462 DALI_TEST_EQUALS( indices.Size(), task.GetPropertyCount(), TEST_LOCATION );
2466 int UtcDaliRenderTaskFinishInvisibleSourceActor(void)
2468 TestApplication application;
2470 tet_infoline("Testing RenderTask::FinishInvisibleSourceActor()");
2472 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2473 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2475 CameraActor offscreenCameraActor = CameraActor::New();
2477 Stage::GetCurrent().Add( offscreenCameraActor );
2479 BufferImage image = BufferImage::New( 10, 10 );
2480 Actor rootActor = CreateRenderableActor( image );
2481 rootActor.SetSize( 10, 10 );
2482 rootActor.SetVisible(false);
2483 Stage::GetCurrent().Add( rootActor );
2485 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2486 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
2487 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
2489 // Flush all outstanding messages
2490 application.SendNotification();
2491 application.Render();
2493 RenderTask newTask = taskList.CreateTask();
2494 newTask.SetCameraActor( offscreenCameraActor );
2495 newTask.SetSourceActor( rootActor );
2496 newTask.SetInputEnabled( false );
2497 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
2498 newTask.SetClearEnabled( true );
2499 newTask.SetExclusive( true );
2500 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2501 newTask.SetTargetFrameBuffer( frameBufferImage );
2502 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
2504 // Framebuffer doesn't actually get created until Connected, i.e. by previous line
2506 bool finished = false;
2507 RenderTaskFinished renderTaskFinished( finished );
2508 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2510 // Flush the queue and render.
2511 application.SendNotification();
2513 // 1 render to process render task, then wait for sync before finished msg is sent
2514 // from update to the event thread.
2516 application.Render();
2517 application.SendNotification();
2518 DALI_TEST_CHECK( !finished );
2520 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2521 DALI_TEST_CHECK( lastSyncObj != NULL );
2523 application.Render();
2524 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
2525 application.SendNotification();
2526 DALI_TEST_CHECK( !finished );
2528 application.Render();
2529 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
2530 application.SendNotification();
2531 DALI_TEST_CHECK( ! finished );
2533 sync.SetObjectSynced( lastSyncObj, true );
2535 application.Render();
2536 application.SendNotification();
2537 DALI_TEST_CHECK( !finished );
2539 application.Render();
2540 application.SendNotification();
2541 DALI_TEST_CHECK( finished );
2544 application.Render(); // Double check no more finished signal
2545 application.SendNotification();
2546 DALI_TEST_CHECK( ! finished );
2551 int UtcDaliRenderTaskFinishMissingImage(void)
2553 TestApplication application;
2555 // Previously we had bugs where not having a resource ID would cause render-tasks to wait forever
2556 tet_infoline("Testing RenderTask::SignalFinished() when an Actor has no Image set");
2558 Stage stage = Stage::GetCurrent();
2560 BufferImage image = BufferImage::New( 10, 10 );
2561 Actor rootActor = CreateRenderableActor( image );
2562 rootActor.SetSize( 10, 10 );
2563 stage.Add( rootActor );
2565 Actor actorWithMissingImage = CreateRenderableActor( Image() );
2566 actorWithMissingImage.SetSize( 10, 10 );
2567 stage.Add( actorWithMissingImage );
2569 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2570 RenderTask newTask = taskList.CreateTask();
2571 newTask.SetInputEnabled( false );
2572 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
2573 newTask.SetClearEnabled( true );
2574 newTask.SetExclusive( true );
2575 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2577 bool finished = false;
2578 RenderTaskFinished renderTaskFinished( finished );
2579 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2581 // 1 render to process render task, then 1 before finished msg is sent from update to the event thread.
2582 application.SendNotification();
2583 application.Render();
2584 application.Render();
2586 application.SendNotification();
2587 DALI_TEST_CHECK( finished );
2592 int UtcDaliRenderTaskWorldToViewport(void)
2594 TestApplication application( 400u, 400u ); // square surface
2596 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2598 Actor actor = Actor::New();
2599 actor.SetSize(100.0f, 100.0f);
2600 actor.SetPosition( Vector3(0.0, 0.0, 0.0) );
2602 actor.SetParentOrigin( Vector3(0.5, 0.5, 0.5) );
2603 actor.SetAnchorPoint( Vector3(0.5, 0.5, 0.5) );
2605 Stage::GetCurrent().Add(actor);
2607 application.SendNotification();
2608 application.Render();
2609 application.SendNotification();
2611 RenderTask task = taskList.GetTask( 0u );
2613 CameraActor camera = task.GetCameraActor();
2615 Vector2 screenSize = task.GetCurrentViewportSize();
2617 float screenX = 0.0;
2618 float screenY = 0.0;
2620 bool ok = task.WorldToViewport(actor.GetCurrentWorldPosition(), screenX, screenY);
2621 DALI_TEST_CHECK(ok == true);
2623 DALI_TEST_EQUALS(screenX, screenSize.x/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2624 DALI_TEST_EQUALS(screenY, screenSize.y/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2626 Actor actor2 = Actor::New();
2627 float actor2Size = 100.f;
2628 actor2.SetSize( actor2Size, actor2Size );
2629 actor2.SetPosition( Vector3(0.0, 0.0, 0.0) );
2630 actor2.SetParentOrigin( Vector3(0.5, 0.5, 0.0) );
2631 actor2.SetAnchorPoint( Vector3(0.5, 0.5, 0.0) );
2632 Stage::GetCurrent().Add( actor2 );
2634 actor.SetParentOrigin( Vector3(0,0,0) );
2636 application.SendNotification();
2637 application.Render();
2638 application.SendNotification();
2640 ok = task.WorldToViewport(actor.GetCurrentWorldPosition(), screenX, screenY);
2641 DALI_TEST_CHECK(ok == true);
2643 DALI_TEST_EQUALS(screenX, screenSize.x/2 - actor2Size/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2644 DALI_TEST_EQUALS(screenY, screenSize.y/2 - actor2Size/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2650 int UtcDaliRenderTaskViewportToLocal(void)
2652 TestApplication application;
2653 Actor actor = Actor::New();
2654 actor.SetAnchorPoint(AnchorPoint::TOP_LEFT);
2655 actor.SetSize(100.0f, 100.0f);
2656 actor.SetPosition(10.0f, 10.0f);
2657 Stage::GetCurrent().Add(actor);
2659 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2660 RenderTask task = taskList.GetTask( 0u );
2662 // flush the queue and render once
2663 application.SendNotification();
2664 application.Render();
2665 application.SendNotification();
2666 application.Render();
2674 float screenX = 50.0f;
2675 float screenY = 50.0f;
2677 DALI_TEST_CHECK( actor.ScreenToLocal(localX, localY, screenX, screenY) );
2679 DALI_TEST_CHECK( task.ViewportToLocal(actor, screenX, screenY, rtLocalX, rtLocalY ) );
2681 DALI_TEST_EQUALS(localX, rtLocalX, 0.01f, TEST_LOCATION);
2682 DALI_TEST_EQUALS(localY, rtLocalY, 0.01f, TEST_LOCATION);
2688 int UtcDaliRenderTaskRequiresSync(void)
2690 TestApplication application;
2691 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2693 RenderTask newTask = taskList.CreateTask();
2694 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, false );
2696 DALI_TEST_EQUALS( newTask.GetProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), false, TEST_LOCATION );
2697 DALI_TEST_EQUALS( newTask.GetCurrentProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), false, TEST_LOCATION );
2699 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
2701 DALI_TEST_EQUALS( newTask.GetProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), true, TEST_LOCATION );
2702 DALI_TEST_EQUALS( newTask.GetCurrentProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), true, TEST_LOCATION );