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/devel-api/object/handle-devel.h>
23 #include <dali-test-suite-utils.h>
24 #include <dali/integration-api/debug.h>
25 #include <test-native-image.h>
27 #include <mesh-builder.h>
29 #define BOOLSTR(x) ((x)?"T":"F")
31 //& set: DaliRenderTask
35 void utc_dali_render_task_startup(void)
37 test_return_value = TET_UNDEF;
40 void utc_dali_render_task_cleanup(void)
42 test_return_value = TET_PASS;
48 * Constructor, Destructor, DownCast, New, copy constructor, assignment operator
50 * SetSourceActor 2+ve, 1-ve
51 * GetSourceActor 1+ve, 1-ve
52 * SetExclusive 2+ve, 0-ve
53 * IsExclusive 2+ve, 0-ve
54 * SetInputEnabled 1+ve, 0-ve
55 * GetInputEnabled 1+ve, 0-ve
56 * SetCameraActor 1+ve, 1-ve
57 * GetCameraActor 1+ve, 1-ve
58 * SetTargetFrameBuffer 1+ve, 1-ve
59 * GetTargetFrameBuffer 1+ve, 1-ve
60 * SetScreenToFrameBufferFunction 1+ve, 1-ve
61 * GetScreenToFrameBufferFunction 1+ve, 1-ve
62 * SetScreenToFrameBufferMappingActor 1+ve, 1-ve
63 * GetScreenToFrameBufferMappingActor 1+ve, 1-ve
64 * SetViewportPosition 1+ve
65 * GetCurrentViewportPosition 1+ve
66 * SetViewportSize 1+ve
67 * GetCurrentViewportSize 1+ve
68 * SetViewport 2+ve, 1-ve
69 * GetViewport 2+ve, 1-ve
70 * SetClearColor 1+ve, 1-ve
71 * GetClearColor 1+ve, 1-ve
72 * SetClearEnabled 1+ve, 1-ve
73 * GetClearEnabled 1+ve, 1-ve
81 namespace // unnamed namespace
84 const int RENDER_FRAME_INTERVAL = 16; ///< Duration of each frame in ms. (at approx 60FPS)
87 * Simulate time passed by.
89 * @note this will always process at least 1 frame (1/60 sec)
91 * @param application Test application instance
92 * @param duration Time to pass in milliseconds.
93 * @return The actual time passed in milliseconds
95 int Wait(TestApplication& application, int duration = 0)
99 for(int i = 0; i <= ( duration / RENDER_FRAME_INTERVAL); i++)
101 application.SendNotification();
102 application.Render(RENDER_FRAME_INTERVAL);
103 time += RENDER_FRAME_INTERVAL;
109 struct RenderTaskFinished
111 RenderTaskFinished( bool& finished )
112 : finished( finished )
116 void operator()( RenderTask& renderTask )
124 struct RenderTaskFinishedRemoveSource
126 RenderTaskFinishedRemoveSource( bool& finished )
127 : finished( finished ),
132 void operator()( RenderTask& renderTask )
134 DALI_TEST_CHECK(finishedOnce == false);
137 Actor srcActor = renderTask.GetSourceActor();
138 UnparentAndReset(srcActor);
145 struct RenderTaskFinishedRenderAgain
147 RenderTaskFinishedRenderAgain( bool& finished )
148 : finished( finished ),
153 void operator()( RenderTask& renderTask )
155 DALI_TEST_CHECK(finishedOnce == false);
158 renderTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
166 bool TestScreenToFrameBufferFunction( Vector2& coordinates )
168 coordinates = coordinates + Vector2( 1, 2 );
173 Actor CreateRenderableActorSuccess(TestApplication& application, std::string filename)
175 PrepareResourceImage( application, 80u, 80u, Pixel::RGBA8888 );
176 Image image = ResourceImage::New(filename);
177 Actor actor = CreateRenderableActor(image);
178 actor.SetSize( 80, 80 );
182 Actor CreateRenderableActorFailed(TestApplication& application, std::string filename)
184 Image image = ResourceImage::New(filename);
185 DALI_TEST_CHECK( image );
186 Actor actor = CreateRenderableActor(image);
187 actor.SetSize( 80, 80 );
191 Image CreateResourceImage(TestApplication& application, std::string filename)
193 PrepareResourceImage( application, 80u, 80u, Pixel::RGBA8888 );
194 Image image = ResourceImage::New(filename);
195 DALI_TEST_CHECK( image );
199 RenderTask CreateRenderTask(TestApplication& application,
200 CameraActor offscreenCamera,
201 Actor rootActor, // Reset default render task to point at this actor
202 Actor secondRootActor, // Source actor
203 unsigned int refreshRate,
206 // Change main render task to use a different root
207 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
208 taskList.GetTask(0u).SetSourceActor( rootActor );
210 FrameBufferImage frameBufferImage;
213 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
214 frameBufferImage= FrameBufferImage::New( *(testNativeImagePtr.Get()) );
218 frameBufferImage = FrameBufferImage::New( 10, 10 );
221 // Don't draw output framebuffer // '
223 RenderTask newTask = taskList.CreateTask();
224 newTask.SetCameraActor( offscreenCamera );
225 newTask.SetSourceActor( secondRootActor );
226 newTask.SetInputEnabled( false );
227 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
228 newTask.SetClearEnabled( true );
229 newTask.SetExclusive( true );
230 newTask.SetRefreshRate( refreshRate );
231 newTask.SetTargetFrameBuffer( frameBufferImage );
232 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, glSync );
236 bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool testDrawn, bool& finishedSig, bool testFinished, bool testKeepUpdating, int lineNumber )
241 tet_printf("TestApplication::UpdateRender().\n");
243 application.Render(16);
244 application.SendNotification();
246 bool sigPassed = false;
249 sigPassed = finishedSig;
253 sigPassed = ! finishedSig;
256 bool drawResult = callStack.FindMethod("DrawElements") || callStack.FindMethod("DrawArrays");
258 bool drawPassed = false;
261 drawPassed = drawResult;
265 drawPassed = !drawResult;
268 bool keepUpdating = (application.GetUpdateStatus() != 0);
269 bool keepUpdatingPassed = false;
270 if( testKeepUpdating )
272 keepUpdatingPassed = keepUpdating;
276 keepUpdatingPassed = !keepUpdating;
279 bool result = (sigPassed && drawPassed && keepUpdatingPassed);
281 tet_printf("UpdateRender: Expected: Draw:%s Signal:%s KeepUpdating: %s Actual: Draw:%s Signal:%s KeepUpdating: %s %s, line %d\n",
282 BOOLSTR(testDrawn), BOOLSTR(testFinished), BOOLSTR(testKeepUpdating),
283 BOOLSTR(drawResult), BOOLSTR(finishedSig), BOOLSTR(keepUpdating),
284 result ? "Passed":"Failed",
290 // The functor to be used in the hit-test algorithm to check whether the actor is hittable.
291 bool IsActorHittableFunction(Actor actor, Dali::HitTestAlgorithm::TraverseType type)
293 bool hittable = false;
297 case Dali::HitTestAlgorithm::CHECK_ACTOR:
299 // Check whether the actor is visible and not fully transparent.
300 if( actor.IsVisible()
301 && actor.GetCurrentWorldColor().a > 0.01f) // not FULLY_TRANSPARENT
308 case Dali::HitTestAlgorithm::DESCEND_ACTOR_TREE:
310 if( actor.IsVisible() ) // Actor is visible, if not visible then none of its children are visible.
325 } // unnamed namespace
328 /****************************************************************************************************/
329 /****************************************************************************************************/
330 /******************************** TEST CASES BELOW **********************************************/
331 /****************************************************************************************************/
332 /****************************************************************************************************/
334 int UtcDaliRenderTaskDownCast01(void)
336 TestApplication application;
338 tet_infoline("Testing RenderTask::DownCast()");
340 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
342 BaseHandle base = taskList.GetTask( 0u );
343 DALI_TEST_CHECK( base );
345 RenderTask task = RenderTask::DownCast( base );
346 DALI_TEST_CHECK( task );
348 // Try calling a method
349 DALI_TEST_CHECK( task.GetSourceActor() );
353 int UtcDaliRenderTaskDownCast02(void)
355 TestApplication application;
357 tet_infoline("Testing RenderTask::DownCast()");
359 Actor actor = Actor::New();
361 RenderTask task = RenderTask::DownCast( actor );
362 DALI_TEST_CHECK( ! task );
367 int UtcDaliRenderTaskSetSourceActorN(void)
369 TestApplication application;
370 tet_infoline("Testing RenderTask::SetSourceActor() Negative - try with empty actor handle");
371 Stage stage = Stage::GetCurrent();
375 RenderTaskList taskList = stage.GetRenderTaskList();
376 RenderTask renderTask = taskList.CreateTask();
377 renderTask.SetSourceActor(srcActor);
379 application.SendNotification();
380 application.Render();
382 DALI_TEST_CHECK( ! renderTask.GetSourceActor() );
387 int UtcDaliRenderTaskSetSourceActorP01(void)
389 TestApplication application;
391 tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that setting a non-renderable actor stops existing source actor being rendered ");
393 Stage stage = Stage::GetCurrent();
394 RenderTaskList taskList = stage.GetRenderTaskList();
395 RenderTask task = taskList.GetTask( 0u );
397 Actor actor = task.GetSourceActor();
398 DALI_TEST_CHECK( actor );
400 BufferImage img = BufferImage::New( 1,1 );
401 Actor newActor = CreateRenderableActor( img );
402 newActor.SetSize(1,1);
403 stage.Add( newActor );
405 Actor nonRenderableActor = Actor::New();
406 stage.Add( nonRenderableActor );
408 // Stop the newActor from being rendered by changing the source actor
409 DALI_TEST_CHECK( nonRenderableActor );
410 task.SetSourceActor( nonRenderableActor );
411 DALI_TEST_CHECK( task.GetSourceActor() != actor );
412 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
414 TestGlAbstraction& gl = application.GetGlAbstraction();
415 TraceCallStack& drawTrace = gl.GetDrawTrace();
416 drawTrace.Enable(true);
418 // Update & Render nothing!
419 application.GetGlAbstraction().ClearBoundTextures();
420 application.SendNotification();
421 application.Render();
423 // Check that nothing was rendered
424 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
430 int UtcDaliRenderTaskSetSourceActorP02(void)
432 TestApplication application;
434 tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that switching source from a non-renderable to a renderable actor causes the texture to be drawn");
436 Stage stage = Stage::GetCurrent();
438 RenderTaskList taskList = stage.GetRenderTaskList();
440 RenderTask task = taskList.GetTask( 0u );
442 Actor actor = task.GetSourceActor();
443 DALI_TEST_CHECK( actor );
446 BufferImage img = BufferImage::New( 1,1 );
447 Actor newActor = CreateRenderableActor( img );
448 newActor.SetSize(1,1);
449 stage.Add( newActor );
451 Actor nonRenderableActor = Actor::New();
452 stage.Add( nonRenderableActor );
454 TestGlAbstraction& gl = application.GetGlAbstraction();
455 TraceCallStack& drawTrace = gl.GetDrawTrace();
456 drawTrace.Enable(true);
458 // Stop the newActor from being rendered by changing the source actor
459 DALI_TEST_CHECK( nonRenderableActor );
460 task.SetSourceActor( nonRenderableActor );
461 DALI_TEST_CHECK( task.GetSourceActor() != actor );
462 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
464 // Update & Render nothing!
465 application.GetGlAbstraction().ClearBoundTextures();
466 application.SendNotification();
467 application.Render();
469 // Check that nothing was rendered
470 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
473 // Set newActor as the new source Actor
474 task.SetSourceActor( newActor );
475 DALI_TEST_CHECK( task.GetSourceActor() != actor );
476 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
478 // Update & Render the newActor
479 application.GetGlAbstraction().ClearBoundTextures();
480 application.SendNotification();
481 application.Render();
483 // Check that the newActor was rendered
484 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
488 int UtcDaliRenderTaskSetSourceActorOffStage(void)
490 TestApplication application;
492 tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)");
494 Stage stage = Stage::GetCurrent();
495 RenderTaskList taskList = stage.GetRenderTaskList();
496 RenderTask task = taskList.GetTask( 0u );
498 Actor actor = task.GetSourceActor();
499 DALI_TEST_CHECK( actor );
501 TestGlAbstraction& gl = application.GetGlAbstraction();
502 TraceCallStack& drawTrace = gl.GetDrawTrace();
503 drawTrace.Enable(true);
505 BufferImage img = BufferImage::New( 1,1 );
506 Actor newActor = CreateRenderableActor( img );
507 newActor.SetSize(1,1);
508 task.SetSourceActor( newActor );
509 // Don't add newActor to stage yet //'
511 // Update & Render with the actor initially off-stage
512 application.SendNotification();
513 application.Render();
515 // Check that nothing was rendered
516 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
519 stage.Add( newActor );
521 // Update & Render with the actor on-stage
522 application.GetGlAbstraction().ClearBoundTextures();
523 application.SendNotification();
524 application.Render();
526 // Check that the newActor was rendered
527 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
530 // Now remove from stage
531 stage.Remove( newActor );
533 // Update & Render with the actor off-stage
534 application.SendNotification();
535 application.Render();
536 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
541 int UtcDaliRenderTaskSetSourceActorEmpty(void)
543 TestApplication application;
545 tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)");
547 Stage stage = Stage::GetCurrent();
548 RenderTaskList taskList = stage.GetRenderTaskList();
549 RenderTask task = taskList.GetTask( 0u );
551 Actor actor = task.GetSourceActor();
552 DALI_TEST_CHECK( actor );
554 BufferImage img = BufferImage::New( 1,1 );
555 Actor newActor = CreateRenderableActor( img );
556 newActor.SetSize(1,1);
557 stage.Add( newActor );
559 Actor nonRenderableActor = Actor::New();
560 stage.Add( nonRenderableActor );
562 // Set with empty handle
563 task.SetSourceActor( Actor() );
564 DALI_TEST_CHECK( ! task.GetSourceActor() );
566 TestGlAbstraction& gl = application.GetGlAbstraction();
567 TraceCallStack& drawTrace = gl.GetDrawTrace();
568 drawTrace.Enable(true);
570 // Update & Render nothing!
571 application.SendNotification();
572 application.Render();
574 // Check that nothing was rendered
575 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION );
577 // Set with non-empty handle
578 task.SetSourceActor( newActor );
579 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
581 // Update & Render the newActor
582 application.GetGlAbstraction().ClearBoundTextures();
583 application.SendNotification();
584 application.Render();
586 // Check that the newActor was rendered
587 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
591 int UtcDaliRenderTaskGetSourceActorP01(void)
593 TestApplication application;
595 tet_infoline("Testing RenderTask::GetSourceActor() Check the default render task has a valid source actor");
597 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
599 RenderTask task = taskList.GetTask( 0u );
601 Actor actor = task.GetSourceActor();
602 DALI_TEST_CHECK( actor );
604 // By default the entire scene should be rendered
605 Actor root = Stage::GetCurrent().GetLayer( 0 );
606 DALI_TEST_CHECK( root == actor );
610 int UtcDaliRenderTaskGetSourceActorP02(void)
612 TestApplication application;
614 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.");
616 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
617 RenderTask task = taskList.CreateTask();
618 Actor actor = Actor::New();
619 Stage::GetCurrent().Add(actor);
620 task.SetSourceActor( actor );
622 DALI_TEST_EQUALS( actor, task.GetSourceActor(), TEST_LOCATION );
627 int UtcDaliRenderTaskGetSourceActorN(void)
629 TestApplication application;
631 tet_infoline("Testing RenderTask::GetSourceActor() Try with empty handle");
636 Actor actor = task.GetSourceActor();
638 catch (Dali::DaliException& e)
640 DALI_TEST_PRINT_ASSERT( e );
641 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
647 int UtcDaliRenderTaskSetExclusive(void)
649 TestApplication application;
651 tet_infoline("Testing RenderTask::SetExclusive() Check that exclusion works");
653 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
655 // Manipulate the GenTextures behaviour, to identify different actors
657 std::vector<GLuint> ids;
658 ids.push_back( 8 ); // 8 = actor1
659 ids.push_back( 9 ); // 9 = actor2
660 ids.push_back( 10 ); // 10 = actor3
661 application.GetGlAbstraction().SetNextTextureIds( ids );
663 BufferImage img1 = BufferImage::New( 1,1 );
664 Actor actor1 = CreateRenderableActor( img1 );
666 Stage::GetCurrent().Add( actor1 );
668 // Update & Render actor1
669 application.SendNotification();
670 application.Render();
672 // Check that the actor1 was rendered
673 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
674 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
676 if ( boundTextures.size() )
678 DALI_TEST_EQUALS( boundTextures[0], 8u/*unique to actor1*/, TEST_LOCATION );
681 BufferImage img2 = BufferImage::New( 1,1 );
682 Actor actor2 = CreateRenderableActor( img2 );
685 // Force actor2 to be rendered before actor1
686 Layer layer = Layer::New();
687 Stage::GetCurrent().Add( layer );
689 layer.LowerToBottom();
692 application.GetGlAbstraction().ClearBoundTextures();
693 application.SendNotification();
694 application.Render();
696 // Check that the actors were rendered
697 DALI_TEST_EQUALS( boundTextures.size(), 2u, TEST_LOCATION );
699 if ( boundTextures.size() )
701 DALI_TEST_EQUALS( boundTextures[0], 9u/*unique to actor2*/, TEST_LOCATION );
702 DALI_TEST_EQUALS( boundTextures[1], 8u/*unique to actor1*/, TEST_LOCATION );
705 BufferImage img3 = BufferImage::New( 1,1 );
706 Actor actor3 = CreateRenderableActor( img3 );
709 // Force actor3 to be rendered before actor2
710 layer = Layer::New();
711 Stage::GetCurrent().Add( layer );
713 layer.LowerToBottom();
715 // Update & Render all actors
716 application.GetGlAbstraction().ClearBoundTextures();
717 application.SendNotification();
718 application.Render();
720 // Check that the actors were rendered
721 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
723 if ( boundTextures.size() )
725 DALI_TEST_EQUALS( boundTextures[0], 10u/*unique to actor3*/, TEST_LOCATION );
726 DALI_TEST_EQUALS( boundTextures[1], 9u/*unique to actor2*/, TEST_LOCATION );
727 DALI_TEST_EQUALS( boundTextures[2], 8u/*unique to actor1*/, TEST_LOCATION );
730 // Both actors are now connected to the root node
731 // Setup 2 render-tasks - the first will render from the root-node, and the second from actor2
733 // Not exclusive is the default
734 RenderTask task1 = taskList.GetTask( 0u );
735 DALI_TEST_CHECK( false == task1.IsExclusive() );
737 RenderTask task2 = taskList.CreateTask();
738 DALI_TEST_CHECK( false == task2.IsExclusive() );
739 task2.SetSourceActor( actor2 );
741 // Task1 should render all actors, and task 2 should render only actor2
743 application.GetGlAbstraction().ClearBoundTextures();
744 application.SendNotification();
745 application.Render();
747 DALI_TEST_EQUALS( boundTextures.size(), 4u, TEST_LOCATION );
749 if ( boundTextures.size() == 4 )
751 // Test that task 1 renders actor3, then actor2 & then actor1
752 DALI_TEST_CHECK( boundTextures[0] == 10u );
753 DALI_TEST_CHECK( boundTextures[1] == 9u );
754 DALI_TEST_CHECK( boundTextures[2] == 8u );
756 // Test that task 2 renders actor2
757 DALI_TEST_EQUALS( boundTextures[3], 9u, TEST_LOCATION );
760 // Make actor2 exclusive to task2
762 task2.SetExclusive( true );
763 DALI_TEST_CHECK( true == task2.IsExclusive() );
765 // Task1 should render only actor1, and task 2 should render only actor2
767 application.GetGlAbstraction().ClearBoundTextures();
768 application.SendNotification();
769 application.Render();
771 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
772 if ( boundTextures.size() == 3 )
774 // Test that task 1 renders actor3 & actor1
775 DALI_TEST_CHECK( boundTextures[0] == 10u );
776 DALI_TEST_CHECK( boundTextures[1] == 8u );
778 // Test that task 2 renders actor2
779 DALI_TEST_CHECK( boundTextures[2] == 9u );
784 int UtcDaliRenderTaskSetExclusive02(void)
786 TestApplication application;
788 tet_infoline("Testing RenderTask::SetExclusive() Check that changing from exclusive to not-exclusive works");
790 std::vector<GLuint> ids;
791 ids.push_back( 8 ); // 8 = actor1
792 application.GetGlAbstraction().SetNextTextureIds( ids );
794 BufferImage img1 = BufferImage::New( 1,1 );
795 Actor actor1 = CreateRenderableActor( img1 );
797 Stage::GetCurrent().Add( actor1 );
799 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
800 RenderTask task = taskList.CreateTask();
802 task.SetSourceActor( actor1 );
803 task.SetExclusive(true); // Actor should only render once
805 TestGlAbstraction& gl = application.GetGlAbstraction();
806 TraceCallStack& drawTrace = gl.GetDrawTrace();
807 drawTrace.Enable(true);
809 // Update & Render actor1
810 application.SendNotification();
811 application.Render();
813 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION );
815 // Set task to non-exclusive - actor1 should render twice:
817 task.SetExclusive(false);
818 application.SendNotification();
819 application.Render();
821 DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 2, TEST_LOCATION );
826 int UtcDaliRenderTaskSetExclusiveN(void)
828 TestApplication application;
830 tet_infoline("Testing RenderTask::SetExclusive() on empty handle");
835 task.SetExclusive(true);
837 catch (Dali::DaliException& e)
839 DALI_TEST_PRINT_ASSERT( e );
840 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
845 int UtcDaliRenderTaskIsExclusive01(void)
847 TestApplication application;
849 tet_infoline("Testing RenderTask::IsExclusive() Check default values are non-exclusive");
851 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
853 // Not exclusive is the default
854 RenderTask task = taskList.GetTask( 0u );
855 DALI_TEST_CHECK( false == task.IsExclusive() );
857 RenderTask newTask = taskList.CreateTask();
858 DALI_TEST_CHECK( false == newTask.IsExclusive() );
863 int UtcDaliRenderTaskIsExclusive02(void)
865 TestApplication application;
867 tet_infoline("Testing RenderTask::IsExclusive() Check the getter returns set values");
869 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
871 // Not exclusive is the default
872 RenderTask newTask = taskList.CreateTask();
873 DALI_TEST_EQUALS( newTask.IsExclusive(), false, TEST_LOCATION );
875 newTask.SetExclusive(true);
876 DALI_TEST_EQUALS( newTask.IsExclusive(), true, TEST_LOCATION );
880 int UtcDaliRenderTaskIsExclusiveN(void)
882 TestApplication application;
884 tet_infoline("Testing RenderTask::IsExclusive() on empty handle");
889 bool x = task.IsExclusive();
892 catch (Dali::DaliException& e)
894 DALI_TEST_PRINT_ASSERT( e );
895 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
900 int UtcDaliRenderTaskSetInputEnabled(void)
902 TestApplication application;
904 tet_infoline("Testing RenderTask::SetInputEnabled()");
906 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
908 // Input is enabled by default
909 RenderTask task = taskList.GetTask( 0u );
910 DALI_TEST_CHECK( true == task.GetInputEnabled() );
912 task.SetInputEnabled( false );
913 DALI_TEST_CHECK( false == task.GetInputEnabled() );
915 task.SetInputEnabled( true );
916 DALI_TEST_CHECK( true == task.GetInputEnabled() );
920 int UtcDaliRenderTaskGetInputEnabled(void)
922 TestApplication application;
924 tet_infoline("Testing RenderTask::GetInputEnabled()");
926 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
928 // Input is enabled by default
929 RenderTask task = taskList.GetTask( 0u );
930 DALI_TEST_EQUALS( true, task.GetInputEnabled(), TEST_LOCATION );
932 RenderTask newTask = taskList.CreateTask();
933 DALI_TEST_EQUALS( true, newTask.GetInputEnabled(), TEST_LOCATION );
935 newTask.SetInputEnabled(false);
936 DALI_TEST_EQUALS( false, newTask.GetInputEnabled(), TEST_LOCATION );
941 int UtcDaliRenderTaskSetCameraActorP(void)
943 TestApplication application;
945 tet_infoline("Testing RenderTask::SetCameraActor()");
947 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
949 RenderTask task = taskList.GetTask( 0u );
951 Actor defaultCameraActor = task.GetCameraActor();
952 DALI_TEST_CHECK( defaultCameraActor );
954 CameraActor newCameraActor = CameraActor::New();
955 DALI_TEST_CHECK( newCameraActor );
957 task.SetCameraActor( newCameraActor );
958 DALI_TEST_CHECK( task.GetCameraActor() != defaultCameraActor );
959 DALI_TEST_EQUALS( task.GetCameraActor(), newCameraActor, TEST_LOCATION );
964 int UtcDaliRenderTaskSetCameraActorN(void)
966 TestApplication application;
968 tet_infoline("Testing RenderTask::SetCameraActor() with empty actor handle");
970 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
972 RenderTask task = taskList.GetTask( 0u );
974 Actor actor = task.GetCameraActor();
975 DALI_TEST_CHECK( actor );
977 CameraActor cameraActor;
979 task.SetCameraActor( cameraActor );
980 DALI_TEST_EQUALS( (bool)task.GetCameraActor(), false, TEST_LOCATION );
981 DALI_TEST_EQUALS( task.GetCameraActor(), cameraActor, TEST_LOCATION );
986 int UtcDaliRenderTaskGetCameraActorP(void)
988 TestApplication application;
990 tet_infoline("Testing RenderTask::GetCameraActor()");
992 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
994 RenderTask task = taskList.GetTask( 0u );
996 CameraActor actor = task.GetCameraActor();
997 DALI_TEST_CHECK( actor );
998 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
999 DALI_TEST_GREATER( actor.GetFieldOfView(), 0.0f, TEST_LOCATION );
1003 int UtcDaliRenderTaskGetCameraActorN(void)
1005 TestApplication application;
1007 tet_infoline("Testing RenderTask::GetCameraActor() with empty handle");
1012 Actor actor = task.GetCameraActor();
1014 catch (Dali::DaliException& e)
1016 DALI_TEST_PRINT_ASSERT( e );
1017 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1023 int UtcDaliRenderTaskSetTargetFrameBufferP(void)
1025 TestApplication application;
1027 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
1029 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1031 RenderTask task = taskList.GetTask( 0u );
1033 FrameBufferImage newImage = FrameBufferImage::New();
1034 task.SetTargetFrameBuffer( newImage );
1035 DALI_TEST_CHECK( task.GetTargetFrameBuffer() == newImage );
1039 int UtcDaliRenderTaskSetTargetFrameBufferN(void)
1041 TestApplication application;
1043 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
1045 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1047 RenderTask task = taskList.GetTask( 0u );
1048 FrameBufferImage newImage; // Empty handle
1049 task.SetTargetFrameBuffer( newImage );
1050 DALI_TEST_EQUALS( (bool)task.GetTargetFrameBuffer(), false, TEST_LOCATION );
1054 int UtcDaliRenderTaskGetTargetFrameBufferP(void)
1056 TestApplication application;
1058 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
1060 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1062 RenderTask newTask = taskList.CreateTask();
1063 FrameBufferImage fb = FrameBufferImage::New(128, 128, Pixel::RGBA8888);
1064 newTask.SetTargetFrameBuffer( fb );
1065 DALI_TEST_EQUALS( newTask.GetTargetFrameBuffer(), fb, TEST_LOCATION );
1069 int UtcDaliRenderTaskGetTargetFrameBufferN(void)
1071 TestApplication application;
1073 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
1075 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1077 RenderTask task = taskList.GetTask( 0u );
1079 // By default render-tasks do not render off-screen
1080 FrameBufferImage image = task.GetTargetFrameBuffer();
1081 DALI_TEST_CHECK( !image );
1086 int UtcDaliRenderTaskSetFrameBufferP(void)
1088 TestApplication application;
1090 tet_infoline("Testing RenderTask::SetFrameBuffer()");
1092 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1094 RenderTask task = taskList.GetTask( 0u );
1096 FrameBuffer newFrameBuffer = FrameBuffer::New( 128u, 128u, FrameBuffer::Attachment::NONE );
1097 task.SetFrameBuffer( newFrameBuffer );
1098 DALI_TEST_CHECK( task.GetFrameBuffer() == newFrameBuffer );
1102 int UtcDaliRenderTaskSetFrameBufferN(void)
1104 TestApplication application;
1106 tet_infoline("Testing RenderTask::SetFrameBuffer()");
1108 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1110 RenderTask task = taskList.GetTask( 0u );
1111 FrameBuffer newFrameBuffer; // Empty handle
1112 task.SetFrameBuffer( newFrameBuffer );
1113 DALI_TEST_EQUALS( (bool)task.GetFrameBuffer(), false, TEST_LOCATION );
1117 int UtcDaliRenderTaskGetFrameBufferP(void)
1119 TestApplication application;
1121 tet_infoline("Testing RenderTask::GetFrameBuffer()");
1123 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1125 RenderTask task = taskList.GetTask( 0u );
1127 FrameBuffer newFrameBuffer = FrameBuffer::New( 1u, 1u, FrameBuffer::Attachment::NONE );
1128 task.SetFrameBuffer( newFrameBuffer );
1129 DALI_TEST_CHECK( task.GetFrameBuffer() == newFrameBuffer );
1133 int UtcDaliRenderTaskGetFrameBufferN(void)
1135 TestApplication application;
1137 tet_infoline("Testing RenderTask::GetFrameBuffer()");
1139 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1141 RenderTask task = taskList.GetTask( 0u );
1143 // By default render-tasks do not render off-screen
1144 FrameBuffer frameBuffer = task.GetFrameBuffer();
1145 DALI_TEST_CHECK( !frameBuffer );
1150 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionP(void)
1152 TestApplication application;
1154 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
1156 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1158 RenderTask task = taskList.GetTask( 0u );
1160 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
1162 Vector2 coordinates( 5, 10 );
1163 Vector2 convertedCoordinates( 6, 12 ); // + Vector(1, 2)
1165 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1166 DALI_TEST_CHECK( func( coordinates ) );
1167 DALI_TEST_CHECK( coordinates == convertedCoordinates );
1169 task.SetScreenToFrameBufferFunction( RenderTask::FULLSCREEN_FRAMEBUFFER_FUNCTION );
1170 func = task.GetScreenToFrameBufferFunction();
1171 DALI_TEST_CHECK( func( coordinates ) );
1173 task.SetScreenToFrameBufferFunction( RenderTask::DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION );
1174 func = task.GetScreenToFrameBufferFunction();
1175 DALI_TEST_CHECK( ! func( coordinates ) );
1179 int UtcDaliRenderTaskSetScreenToFrameBufferFunctionN(void)
1181 TestApplication application;
1183 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
1185 RenderTask task; // Empty handle
1188 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
1190 catch (Dali::DaliException& e)
1192 DALI_TEST_PRINT_ASSERT( e );
1193 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1198 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionP(void)
1200 TestApplication application;
1202 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction()");
1204 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1206 RenderTask task = taskList.GetTask( 0u );
1208 Vector2 originalCoordinates( 5, 10 );
1209 Vector2 coordinates( 5, 10 );
1211 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1212 DALI_TEST_CHECK( !func( coordinates ) ); // conversion should fail by default
1213 DALI_TEST_CHECK( coordinates == originalCoordinates ); // coordinates should not be modified
1217 int UtcDaliRenderTaskGetScreenToFrameBufferFunctionN(void)
1219 TestApplication application;
1221 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction() on empty handle");
1226 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
1229 catch (Dali::DaliException& e)
1231 DALI_TEST_PRINT_ASSERT( e );
1232 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1238 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorP(void)
1240 TestApplication application;
1241 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor ");
1243 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1244 RenderTask renderTask = taskList.CreateTask();
1245 Actor mappingActor = Actor::New();
1246 renderTask.SetScreenToFrameBufferMappingActor(mappingActor);
1248 DALI_TEST_EQUALS( mappingActor, renderTask.GetScreenToFrameBufferMappingActor(), TEST_LOCATION );
1253 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorN(void)
1255 TestApplication application;
1256 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor with empty task handle");
1262 task.SetScreenToFrameBufferMappingActor(mappingActor);
1264 catch (Dali::DaliException& e)
1266 DALI_TEST_PRINT_ASSERT( e );
1267 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1272 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActor02N(void)
1274 TestApplication application;
1275 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor with empty task handle");
1277 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1278 RenderTask renderTask = taskList.CreateTask();
1280 renderTask.SetScreenToFrameBufferMappingActor(actor);
1282 DALI_TEST_EQUALS( (bool)renderTask.GetScreenToFrameBufferMappingActor(), false, TEST_LOCATION);
1286 int UtcDaliRenderTaskGetViewportP01(void)
1288 TestApplication application;
1290 tet_infoline("Testing RenderTask::GetViewport() on default task");
1292 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1293 RenderTask task = taskList.GetTask( 0u );
1294 Viewport viewport = task.GetViewport();
1296 // By default the viewport should match the stage width/height
1297 Vector2 stageSize = Stage::GetCurrent().GetSize();
1298 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1299 DALI_TEST_CHECK( viewport == expectedViewport );
1303 int UtcDaliRenderTaskGetViewportP02(void)
1305 TestApplication application;
1307 tet_infoline("Testing RenderTask::GetViewport() on new task");
1309 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1310 RenderTask task = taskList.CreateTask();
1311 Viewport viewport = task.GetViewport();
1313 // By default the viewport should match the stage width/height
1314 Vector2 stageSize = Stage::GetCurrent().GetSize();
1315 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1316 DALI_TEST_CHECK( viewport == expectedViewport );
1320 int UtcDaliRenderTaskGetViewportN(void)
1322 TestApplication application;
1324 tet_infoline("Testing RenderTask::GetViewport() on empty handle");
1329 Viewport viewport = task.GetViewport();
1332 catch (Dali::DaliException& e)
1334 DALI_TEST_PRINT_ASSERT( e );
1335 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1341 int UtcDaliRenderTaskSetViewportP(void)
1343 TestApplication application;
1345 tet_infoline("Testing RenderTask::SetViewport()");
1347 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1349 RenderTask task = taskList.GetTask( 0u );
1350 Vector2 stageSize = Stage::GetCurrent().GetSize();
1351 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
1352 task.SetViewport( newViewport );
1354 // Update (viewport is a property)
1355 application.SendNotification();
1356 application.Render();
1358 DALI_TEST_CHECK( task.GetViewport() == newViewport );
1362 int UtcDaliRenderTaskSetViewportN(void)
1364 TestApplication application;
1366 tet_infoline("Testing RenderTask::SetViewport()");
1368 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1373 Vector2 stageSize = Stage::GetCurrent().GetSize();
1374 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
1375 task.SetViewport( newViewport );
1377 catch (Dali::DaliException& e)
1379 DALI_TEST_PRINT_ASSERT( e );
1380 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1387 int UtcDaliRenderTaskSetViewportPosition(void)
1389 TestApplication application;
1391 tet_infoline("Testing RenderTask::SetViewportPosition()");
1393 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1395 RenderTask task = taskList.GetTask( 0u );
1397 Viewport viewport = task.GetViewport();
1399 // By default the viewport should match the stage width/height
1401 Vector2 stageSize = Stage::GetCurrent().GetSize();
1402 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1403 DALI_TEST_CHECK( viewport == expectedViewport );
1406 Vector2 newPosition(25.0f, 50.0f);
1407 task.SetViewportPosition( newPosition );
1409 // Update (viewport is a property)
1410 application.SendNotification();
1411 application.Render();
1413 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1415 // Set by Property test
1416 Vector2 newPosition2(32.0f, 32.0f);
1417 task.SetProperty( RenderTask::Property::VIEWPORT_POSITION, newPosition2 );
1418 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1419 DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector2 >( task, RenderTask::Property::VIEWPORT_POSITION ), newPosition, TEST_LOCATION ); // still the old position
1422 application.SendNotification();
1423 application.Render();
1425 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1426 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1427 DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector2 >( task, RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION );
1429 Vector2 newPosition3(64.0f, 0.0f);
1430 Animation animation = Animation::New(1.0f);
1431 animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_POSITION ), newPosition3, AlphaFunction::LINEAR );
1434 // Perform 1000ms worth of updates at which point animation should have completed.
1435 Wait(application, 1000);
1436 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1440 int UtcDaliRenderTaskSetViewportSize(void)
1442 TestApplication application;
1444 tet_infoline("Testing RenderTask::SetViewportSize()");
1446 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1448 RenderTask task = taskList.GetTask( 0u );
1450 Viewport viewport = task.GetViewport();
1452 // By default the viewport should match the stage width/height
1454 Vector2 stageSize = Stage::GetCurrent().GetSize();
1455 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
1456 DALI_TEST_CHECK( viewport == expectedViewport );
1458 Vector2 newSize(128.0f, 64.0f);
1459 task.SetViewportSize( newSize );
1461 // Update (viewport is a property)
1462 application.SendNotification();
1463 application.Render();
1465 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1467 // Set by Property test
1468 Vector2 newSize2(50.0f, 50.0f);
1469 task.SetProperty( RenderTask::Property::VIEWPORT_SIZE, newSize2 );
1470 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1471 DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector2 >( task, RenderTask::Property::VIEWPORT_SIZE ), newSize, TEST_LOCATION ); // still the old position
1474 application.SendNotification();
1475 application.Render();
1477 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1478 DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1479 DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector2 >( task, RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION );
1481 Vector2 newSize3(10.0f, 10.0f);
1482 Animation animation = Animation::New(1.0f);
1483 animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_SIZE ), newSize3, AlphaFunction::LINEAR );
1486 // Perform 1000ms worth of updates at which point animation should have completed.
1487 Wait(application, 1000);
1488 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1493 int UtcDaliRenderTaskSetClearColorP(void)
1495 TestApplication application;
1497 tet_infoline("Testing RenderTask::SetClearColor()");
1499 Vector4 testColor( 1.0f, 2.0f, 3.0f, 4.0f );
1500 Vector4 testColor2( 5.0f, 6.0f, 7.0f, 8.0f );
1502 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1504 RenderTask task = taskList.GetTask( 0u );
1505 DALI_TEST_CHECK( task.GetClearColor() != testColor );
1507 task.SetClearColor( testColor );
1512 DALI_TEST_EQUALS( task.GetClearColor(), testColor, TEST_LOCATION );
1514 task.SetProperty( RenderTask::Property::CLEAR_COLOR, testColor2 );
1515 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1516 DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector4 >( task, RenderTask::Property::CLEAR_COLOR ), testColor, TEST_LOCATION ); // still the old color
1521 DALI_TEST_EQUALS( task.GetClearColor(), testColor2, TEST_LOCATION );
1522 DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1523 DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector4 >( task, RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION );
1527 int UtcDaliRenderTaskSetClearColorN(void)
1529 TestApplication application;
1531 tet_infoline("Testing RenderTask::SetClearColor() on empty handle");
1536 task.SetClearColor( Vector4::ZERO );
1538 catch (Dali::DaliException& e)
1540 DALI_TEST_PRINT_ASSERT( e );
1541 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1546 int UtcDaliRenderTaskGetClearColorP(void)
1548 TestApplication application;
1550 tet_infoline("Testing RenderTask::GetClearColor()");
1552 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1553 RenderTask task = taskList.GetTask( 0u );
1554 DALI_TEST_EQUALS( task.GetClearColor(), RenderTask::DEFAULT_CLEAR_COLOR, TEST_LOCATION );
1558 int UtcDaliRenderTaskGetClearColorN(void)
1560 TestApplication application;
1562 tet_infoline("Testing RenderTask::GetClearColor()");
1567 Vector4 color = task.GetClearColor();
1570 catch (Dali::DaliException& e)
1572 DALI_TEST_PRINT_ASSERT( e );
1573 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1578 int UtcDaliRenderTaskSetClearEnabledP(void)
1580 TestApplication application;
1582 tet_infoline("Testing RenderTask::SetClearEnabled()");
1584 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1586 RenderTask task = taskList.GetTask( 0u );
1587 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1589 task.SetClearEnabled( true );
1590 DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION );
1592 task.SetClearEnabled( false );
1593 DALI_TEST_EQUALS( task.GetClearEnabled(), false, TEST_LOCATION );
1597 int UtcDaliRenderTaskSetClearEnabledN(void)
1599 TestApplication application;
1601 tet_infoline("Testing RenderTask::SetClearEnabled() with empty handle");
1606 task.SetClearEnabled(true);
1608 catch (Dali::DaliException& e)
1610 DALI_TEST_PRINT_ASSERT( e );
1611 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1616 int UtcDaliRenderTaskGetClearEnabledP(void)
1618 TestApplication application;
1620 tet_infoline("Testing RenderTask::GetClearEnabled()");
1622 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1624 RenderTask task = taskList.GetTask( 0u );
1625 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1630 int UtcDaliRenderTaskGetClearEnabledN(void)
1632 TestApplication application;
1634 tet_infoline("Testing RenderTask::GetClearEnabled() with empty handle");
1639 bool x = task.GetClearEnabled();
1642 catch (Dali::DaliException& e)
1644 DALI_TEST_PRINT_ASSERT( e );
1645 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1650 int UtcDaliRenderTaskSetCullModeP(void)
1652 TestApplication application;
1654 tet_infoline("Testing RenderTask::SetCullMode()");
1656 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1657 RenderTask task = taskList.GetTask( 0u );
1658 DALI_TEST_EQUALS( task.GetCullMode(), true, TEST_LOCATION );
1660 task.SetCullMode( false );
1662 DALI_TEST_EQUALS( task.GetCullMode(), false, TEST_LOCATION );
1667 int UtcDaliRenderTaskSetCullModeN(void)
1669 TestApplication application;
1671 tet_infoline("Testing RenderTask::SetCullMode() on empty handle");
1676 task.SetCullMode( false );
1678 catch (Dali::DaliException& e)
1680 DALI_TEST_PRINT_ASSERT( e );
1681 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1686 int UtcDaliRenderTaskGetCullModeP(void)
1688 TestApplication application;
1690 tet_infoline("Testing RenderTask::GetCullMode()");
1692 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1693 RenderTask task = taskList.GetTask( 0u );
1694 DALI_TEST_EQUALS( task.GetCullMode(), true, TEST_LOCATION );
1698 int UtcDaliRenderTaskGetCullModeN(void)
1700 TestApplication application;
1702 tet_infoline("Testing RenderTask::GetCullMode() with empty handle");
1707 bool x = task.GetCullMode();
1710 catch (Dali::DaliException& e)
1712 DALI_TEST_PRINT_ASSERT( e );
1713 DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION);
1719 int UtcDaliRenderTaskSetRefreshRate(void)
1721 TestApplication application;
1723 tet_infoline("Testing RenderTask::SetRefreshRate()");
1725 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1727 // By default tasks will be processed every frame
1728 RenderTask task = taskList.GetTask( 0u );
1729 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1731 task.SetRefreshRate( 2u ); // every-other frame
1732 DALI_TEST_CHECK( 2u == task.GetRefreshRate() );
1734 task.SetRefreshRate( RenderTask::REFRESH_ALWAYS );
1735 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1739 int UtcDaliRenderTaskGetRefreshRate(void)
1741 TestApplication application;
1743 tet_infoline("Testing RenderTask::GetRefreshRate()");
1745 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1747 // By default tasks will be processed every frame
1748 RenderTask task = taskList.GetTask( 0u );
1749 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1751 RenderTask newTask = taskList.CreateTask();
1752 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == newTask.GetRefreshRate() );
1756 int UtcDaliRenderTaskSignalFinished(void)
1758 TestApplication application;
1760 tet_infoline("Testing RenderTask::SignalFinished()");
1762 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1763 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1765 CameraActor offscreenCameraActor = CameraActor::New();
1767 Stage::GetCurrent().Add( offscreenCameraActor );
1769 BufferImage image = BufferImage::New( 10, 10 );
1771 Actor rootActor = CreateRenderableActor( image );
1772 rootActor.SetSize( 10, 10 );
1773 Stage::GetCurrent().Add( rootActor );
1775 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1776 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
1777 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
1779 RenderTask newTask = taskList.CreateTask();
1780 newTask.SetCameraActor( offscreenCameraActor );
1781 newTask.SetSourceActor( rootActor );
1782 newTask.SetInputEnabled( false );
1783 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
1784 newTask.SetClearEnabled( true );
1785 newTask.SetExclusive( true );
1786 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
1787 newTask.SetTargetFrameBuffer( frameBufferImage );
1788 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
1790 bool finished = false;
1791 RenderTaskFinished renderTaskFinished( finished );
1792 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1794 // Flush the queue and render.
1795 application.SendNotification();
1797 // 1 render to process render task, then wait for sync before finished msg is sent
1798 // from update to the event thread.
1800 application.Render();
1801 application.SendNotification();
1802 DALI_TEST_CHECK( !finished );
1804 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1805 DALI_TEST_CHECK( lastSyncObj != NULL );
1807 application.Render();
1808 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1809 application.SendNotification();
1810 DALI_TEST_CHECK( !finished );
1812 application.Render();
1813 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1814 application.SendNotification();
1815 DALI_TEST_CHECK( ! finished );
1817 sync.SetObjectSynced( lastSyncObj, true );
1819 application.Render();
1820 application.SendNotification();
1821 DALI_TEST_CHECK( !finished );
1823 application.Render();
1824 application.SendNotification();
1825 DALI_TEST_CHECK( finished );
1827 DALI_TEST_EQUALS( application.GetUpdateStatus(), 0, TEST_LOCATION );
1832 int UtcDaliRenderTaskContinuous01(void)
1834 TestApplication application;
1836 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not staged)\nPOST:continuous renders, no Finished signal");
1838 // SETUP AN OFFSCREEN RENDER TASK
1839 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1840 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1841 drawTrace.Enable(true);
1843 Actor rootActor = Actor::New();
1844 Stage::GetCurrent().Add( rootActor );
1846 CameraActor offscreenCameraActor = CameraActor::New();
1847 Stage::GetCurrent().Add( offscreenCameraActor );
1849 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1851 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1852 bool finished = false;
1853 RenderTaskFinished renderTaskFinished( finished );
1854 application.SendNotification();
1856 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1857 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1858 application.GetPlatform().ClearReadyResources();
1860 // ADD SOURCE ACTOR TO STAGE - expect continuous renders to start, no finished signal
1861 Stage::GetCurrent().Add(secondRootActor);
1862 application.SendNotification();
1864 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1865 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1870 int UtcDaliRenderTaskContinuous02(void)
1872 TestApplication application;
1874 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not visible)\nPOST:continuous renders, no Finished signal");
1876 // SETUP AN OFFSCREEN RENDER TASK
1877 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1878 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1879 drawTrace.Enable(true);
1881 Actor rootActor = Actor::New();
1882 Stage::GetCurrent().Add( rootActor );
1884 CameraActor offscreenCameraActor = CameraActor::New();
1885 Stage::GetCurrent().Add( offscreenCameraActor );
1887 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1888 Stage::GetCurrent().Add(secondRootActor);
1889 secondRootActor.SetVisible(false);
1891 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1892 bool finished = false;
1893 RenderTaskFinished renderTaskFinished( finished );
1894 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1895 application.SendNotification();
1897 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1898 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1899 application.GetPlatform().ClearReadyResources();
1901 // MAKE SOURCE ACTOR VISIBLE - expect continuous renders to start, no finished signal
1902 secondRootActor.SetVisible(true);
1903 application.SendNotification();
1905 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1906 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1910 int UtcDaliRenderTaskContinuous03(void)
1912 TestApplication application;
1914 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (camera actor not staged)\nPOST:continuous renders, no Finished signal");
1916 // SETUP AN OFFSCREEN RENDER TASK
1917 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1918 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1919 drawTrace.Enable(true);
1921 Actor rootActor = Actor::New();
1922 Stage::GetCurrent().Add( rootActor );
1924 CameraActor offscreenCameraActor = CameraActor::New();
1925 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1926 Stage::GetCurrent().Add(secondRootActor);
1928 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1929 bool finished = false;
1930 RenderTaskFinished renderTaskFinished( finished );
1931 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1932 application.SendNotification();
1934 // START PROCESS/RENDER Input, Expected Input, Expected
1935 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false, __LINE__ ) );
1936 application.GetPlatform().ClearReadyResources();
1938 // ADD CAMERA ACTOR TO STAGE - expect continuous renders to start, no finished signal
1939 Stage::GetCurrent().Add( offscreenCameraActor );
1940 application.SendNotification();
1942 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1943 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1948 int UtcDaliRenderTaskContinuous04(void)
1950 TestApplication application;
1952 tet_infoline("Testing RenderTask Render Continuous using loaded image");
1954 // SETUP AN OFFSCREEN RENDER TASK
1955 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1956 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1957 drawTrace.Enable(true);
1959 Actor rootActor = Actor::New();
1960 Stage::GetCurrent().Add( rootActor );
1962 CameraActor offscreenCameraActor = CameraActor::New();
1963 Stage::GetCurrent().Add( offscreenCameraActor );
1964 Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg");
1965 Stage::GetCurrent().Add(secondRootActor);
1967 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1968 bool finished = false;
1969 RenderTaskFinished renderTaskFinished( finished );
1970 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1971 application.SendNotification();
1973 // START PROCESS/RENDER Input, Expected Input, Expected
1974 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
1978 int UtcDaliRenderTaskOnce01(void)
1980 TestApplication application;
1982 tet_infoline("Testing RenderTask Render Once GlSync, using loaded image");
1984 // SETUP AN OFFSCREEN RENDER TASK
1985 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1986 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1987 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1988 drawTrace.Enable(true);
1990 Actor rootActor = Actor::New();
1991 Stage::GetCurrent().Add( rootActor );
1993 CameraActor offscreenCameraActor = CameraActor::New();
1994 Stage::GetCurrent().Add( offscreenCameraActor );
1995 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
1997 Stage::GetCurrent().Add(secondRootActor);
1999 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
2000 bool finished = false;
2001 RenderTaskFinished renderTaskFinished( finished );
2002 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2003 application.SendNotification();
2005 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2007 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2008 DALI_TEST_CHECK( lastSyncObj != NULL );
2009 sync.SetObjectSynced( lastSyncObj, true );
2011 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2012 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2016 int UtcDaliRenderTaskOnce02(void)
2018 TestApplication application;
2020 tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n");
2022 // SETUP AN OFFSCREEN RENDER TASK
2023 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2024 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2025 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2026 drawTrace.Enable(true);
2028 Actor rootActor = Actor::New();
2029 Stage::GetCurrent().Add( rootActor );
2031 CameraActor offscreenCameraActor = CameraActor::New();
2032 Stage::GetCurrent().Add( offscreenCameraActor );
2034 Shader shader = CreateShader();
2035 Image image = CreateResourceImage(application, "aFile.jpg");
2036 TextureSet textureSet = CreateTextureSet( image );
2038 Geometry geometry = CreateQuadGeometry();
2039 Renderer renderer = Renderer::New(geometry, shader);
2040 renderer.SetTextures( textureSet );
2041 Actor secondRootActor = Actor::New();
2042 secondRootActor.AddRenderer(renderer);
2043 secondRootActor.SetSize(100, 100);
2044 Stage::GetCurrent().Add(secondRootActor);
2046 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
2047 bool finished = false;
2048 RenderTaskFinished renderTaskFinished( finished );
2049 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2050 application.SendNotification();
2052 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2054 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2055 DALI_TEST_CHECK( lastSyncObj != NULL );
2056 sync.SetObjectSynced( lastSyncObj, true );
2058 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2059 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2064 int UtcDaliRenderTaskOnce03(void)
2066 TestApplication application;
2068 tet_infoline("Testing RenderTask Render Once GlSync, using loaded image. Switch from render always after ready to render once\n");
2070 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2071 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2072 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2073 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2074 drawTrace.Enable(true);
2076 Actor rootActor = Actor::New();
2077 Stage::GetCurrent().Add( rootActor );
2079 CameraActor offscreenCameraActor = CameraActor::New();
2080 Stage::GetCurrent().Add( offscreenCameraActor );
2081 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2082 Stage::GetCurrent().Add(secondRootActor);
2084 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2085 bool finished = false;
2086 RenderTaskFinished renderTaskFinished( finished );
2087 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2088 application.SendNotification();
2090 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2092 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2093 application.SendNotification();
2095 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2097 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2098 DALI_TEST_CHECK( lastSyncObj != NULL );
2099 sync.SetObjectSynced( lastSyncObj, true );
2101 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2102 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2108 int UtcDaliRenderTaskOnce04(void)
2110 TestApplication application;
2111 tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n"
2112 "Switch from render always after ready to render once\n"
2115 // SETUP AN OFFSCREEN RENDER TASK
2116 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2117 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2118 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2119 drawTrace.Enable(true);
2121 Actor rootActor = Actor::New();
2122 Stage::GetCurrent().Add( rootActor );
2124 CameraActor offscreenCameraActor = CameraActor::New();
2125 Stage::GetCurrent().Add( offscreenCameraActor );
2127 Shader shader = CreateShader();
2128 Image image = CreateResourceImage(application, "aFile.jpg");
2129 TextureSet textureSet = CreateTextureSet( image );
2131 Geometry geometry = CreateQuadGeometry();
2132 Renderer renderer = Renderer::New(geometry, shader);
2133 renderer.SetTextures( textureSet );
2134 Actor secondRootActor = Actor::New();
2135 secondRootActor.AddRenderer(renderer);
2136 secondRootActor.SetSize(100, 100);
2137 Stage::GetCurrent().Add(secondRootActor);
2139 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
2140 bool finished = false;
2141 RenderTaskFinished renderTaskFinished( finished );
2142 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2143 application.SendNotification();
2145 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2147 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2148 application.SendNotification();
2150 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2152 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2153 DALI_TEST_CHECK( lastSyncObj != NULL );
2154 sync.SetObjectSynced( lastSyncObj, true );
2156 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) );
2157 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2162 int UtcDaliRenderTaskOnceNoSync01(void)
2164 TestApplication application;
2166 tet_infoline("Testing RenderTask Render Once, \nPRE: Resources ready\nPOST: Finished signal sent once only");
2168 // SETUP AN OFFSCREEN RENDER TASK
2169 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2170 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2171 drawTrace.Enable(true);
2173 Actor rootActor = Actor::New();
2174 Stage::GetCurrent().Add( rootActor );
2176 CameraActor offscreenCameraActor = CameraActor::New();
2177 Stage::GetCurrent().Add( offscreenCameraActor );
2178 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2179 Stage::GetCurrent().Add(secondRootActor);
2181 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2182 bool finished = false;
2183 RenderTaskFinished renderTaskFinished( finished );
2184 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2185 application.SendNotification();
2187 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2188 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2192 int UtcDaliRenderTaskOnceNoSync02(void)
2194 TestApplication application;
2196 tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loaded image.\n"
2197 "PRE: Resources ready\nPOST: Finished signal sent once only");
2198 // SETUP AN OFFSCREEN RENDER TASK
2199 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2200 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2201 drawTrace.Enable(true);
2203 Actor rootActor = Actor::New();
2204 Stage::GetCurrent().Add( rootActor );
2206 CameraActor offscreenCameraActor = CameraActor::New();
2207 Stage::GetCurrent().Add( offscreenCameraActor );
2209 Shader shader = CreateShader();
2210 Image image = CreateResourceImage(application, "aFile.jpg");
2211 TextureSet textureSet = CreateTextureSet( image );
2213 Geometry geometry = CreateQuadGeometry();
2214 Renderer renderer = Renderer::New(geometry, shader);
2215 renderer.SetTextures( textureSet );
2216 Actor secondRootActor = Actor::New();
2217 secondRootActor.AddRenderer(renderer);
2218 secondRootActor.SetSize(100, 100);
2219 Stage::GetCurrent().Add(secondRootActor);
2221 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2222 bool finished = false;
2223 RenderTaskFinished renderTaskFinished( finished );
2224 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2225 application.SendNotification();
2227 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2228 application.GetPlatform().ClearReadyResources();
2229 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2234 int UtcDaliRenderTaskOnceNoSync03(void)
2236 TestApplication application;
2238 tet_infoline("Testing RenderTask Render Once, using loaded image. Switch from render always after ready to render once\n"
2239 "PRE: Render task ready, Image loaded\n"
2240 "POST: Finished signal sent only once");
2242 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2243 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2244 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2245 drawTrace.Enable(true);
2247 Actor rootActor = Actor::New();
2248 Stage::GetCurrent().Add( rootActor );
2250 CameraActor offscreenCameraActor = CameraActor::New();
2251 Stage::GetCurrent().Add( offscreenCameraActor );
2252 Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2253 Stage::GetCurrent().Add(secondRootActor);
2255 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2256 bool finished = false;
2257 RenderTaskFinished renderTaskFinished( finished );
2258 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2259 application.SendNotification();
2261 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2263 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2264 application.SendNotification(); // Input, Expected Input, Expected
2265 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2266 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2270 int UtcDaliRenderTaskOnceNoSync04(void)
2272 TestApplication application;
2274 tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n"
2275 "Switch from render always after ready to render once\n"
2276 "PRE: Render task ready, Image not loaded\n"
2277 "POST: Finished signal sent only once");
2279 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2280 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2281 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2282 drawTrace.Enable(true);
2284 Actor rootActor = Actor::New();
2285 Stage::GetCurrent().Add( rootActor );
2287 CameraActor offscreenCameraActor = CameraActor::New();
2288 Stage::GetCurrent().Add( offscreenCameraActor );
2290 Shader shader = CreateShader();
2291 Image image = CreateResourceImage(application, "aFile.jpg");
2292 TextureSet textureSet = CreateTextureSet( image );
2294 Geometry geometry = CreateQuadGeometry();
2295 Renderer renderer = Renderer::New(geometry, shader);
2296 renderer.SetTextures( textureSet );
2297 Actor secondRootActor = Actor::New();
2298 secondRootActor.AddRenderer(renderer);
2299 secondRootActor.SetSize(100, 100);
2300 Stage::GetCurrent().Add(secondRootActor);
2303 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2304 bool finished = false;
2305 RenderTaskFinished renderTaskFinished( finished );
2306 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2307 application.SendNotification();
2309 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2310 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2311 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2312 DALI_TEST_CHECK( lastSyncObj == NULL );
2314 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2315 application.SendNotification(); // Input, Expected Input, Expected
2316 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) );
2317 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) );
2319 lastSyncObj = sync.GetLastSyncObject();
2320 DALI_TEST_CHECK( lastSyncObj == NULL );
2325 int UtcDaliRenderTaskOnceNoSync05(void)
2327 TestApplication application;
2329 tet_infoline("Testing RenderTask Render Once\n"
2330 "SetRefreshRate(ONCE), resource load failed, completes render task.\n"
2331 "PRE: resources failed to load\n"
2332 "POST: No finished signal sent.");
2334 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2335 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2336 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2337 drawTrace.Enable(true);
2339 Actor rootActor = Actor::New();
2340 Stage::GetCurrent().Add( rootActor );
2342 CameraActor offscreenCameraActor = CameraActor::New();
2343 Stage::GetCurrent().Add( offscreenCameraActor );
2344 Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg");
2345 Stage::GetCurrent().Add(secondRootActor);
2347 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2348 bool finished = false;
2349 RenderTaskFinished renderTaskFinished( finished );
2350 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2351 application.SendNotification();
2353 // START PROCESS/RENDER Input, Expected Input, Expected
2354 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2356 // CHANGE TO RENDER ONCE,
2357 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2358 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) );
2365 int UtcDaliRenderTaskOnceChain01(void)
2367 TestApplication application;
2369 tet_infoline("Testing RenderTask Render Once Chained render tasks\n"
2370 "SetRefreshRate(ONCE), resource load completes, both render tasks render.\n"
2371 "PRE: resources ready\n"
2372 "POST: 2 finished signals sent.");
2374 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2375 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2376 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2377 drawTrace.Enable(true);
2379 Actor defaultRootActor = Actor::New(); // Root for default RT
2380 Stage::GetCurrent().Add( defaultRootActor );
2382 CameraActor offscreenCameraActor = CameraActor::New();
2383 Stage::GetCurrent().Add( offscreenCameraActor );
2384 Actor firstRootActor = CreateRenderableActorSuccess(application, "aFile.jpg");
2385 Stage::GetCurrent().Add(firstRootActor);
2387 // first render task
2388 RenderTask firstTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, firstRootActor, RenderTask::REFRESH_ONCE, false);
2389 bool firstFinished = false;
2390 RenderTaskFinished renderTask1Finished( firstFinished );
2391 firstTask.FinishedSignal().Connect( &application, renderTask1Finished );
2393 // Second render task
2394 FrameBufferImage fbo = firstTask.GetTargetFrameBuffer();
2395 Actor secondRootActor = CreateRenderableActor( fbo );
2396 Stage::GetCurrent().Add(secondRootActor);
2397 RenderTask secondTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2398 bool secondFinished = false;
2399 RenderTaskFinished renderTask2Finished( secondFinished );
2400 secondTask.FinishedSignal().Connect( &application, renderTask2Finished );
2402 application.SendNotification();
2404 //Both render tasks are executed.
2405 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false, true, __LINE__ ) );
2406 DALI_TEST_CHECK( firstFinished == false );
2407 DALI_TEST_CHECK( secondFinished == false );
2409 //Nothing else to render and both render task should have finished now
2410 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, true, false, __LINE__ ) );
2411 DALI_TEST_CHECK( firstFinished == true );
2412 DALI_TEST_CHECK( secondFinished == true );
2417 int UtcDaliRenderTaskProperties(void)
2419 TestApplication application;
2421 RenderTask task = Stage::GetCurrent().GetRenderTaskList().CreateTask();
2423 Property::IndexContainer indices;
2424 task.GetPropertyIndices( indices );
2425 DALI_TEST_CHECK( indices.Size() );
2426 DALI_TEST_EQUALS( indices.Size(), task.GetPropertyCount(), TEST_LOCATION );
2430 int UtcDaliRenderTaskSetScreenToFrameBufferMappingActor(void)
2432 TestApplication application;
2433 tet_infoline("Testing RenderTask::SetScreenToFrameBufferMappingActor ");
2435 Stage stage = Stage::GetCurrent();
2436 Size stageSize = stage.GetSize();
2437 Actor mappingActor = Actor::New();
2438 Vector2 scale( 0.6f, 0.75f);
2439 Vector2 offset( stageSize.x*0.1f, stageSize.y*0.15f);
2440 mappingActor.SetSize( stageSize * scale );
2441 mappingActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
2442 mappingActor.SetPosition( offset.x, offset.y );
2443 stage.Add( mappingActor );
2445 Actor offscreenActor = Actor::New();
2446 offscreenActor.SetSize( stageSize );
2447 offscreenActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
2448 stage.Add( offscreenActor );
2450 RenderTaskList taskList = stage.GetRenderTaskList();
2451 RenderTask renderTask = taskList.CreateTask();
2452 FrameBufferImage frameBufferImage = FrameBufferImage::New(stageSize.width*scale.x, stageSize.height*scale.y, Pixel::A8);
2453 renderTask.SetSourceActor( offscreenActor );
2454 renderTask.SetExclusive( true );
2455 renderTask.SetInputEnabled( true );
2456 renderTask.SetTargetFrameBuffer( frameBufferImage );
2457 renderTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2458 renderTask.SetScreenToFrameBufferMappingActor( mappingActor );
2459 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2461 // Render and notify
2462 application.SendNotification();
2463 application.Render();
2464 application.Render();
2465 application.SendNotification();
2467 Vector2 screenCoordinates( stageSize.x * 0.05f, stageSize.y * 0.05f );
2468 Dali::HitTestAlgorithm::Results results;
2469 DALI_TEST_CHECK( !results.actor );
2470 DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
2471 // miss expected, results not changed
2472 DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2473 DALI_TEST_CHECK( !results.actor );
2474 DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION );
2476 screenCoordinates.x = stageSize.x * 0.265f;
2477 screenCoordinates.y = stageSize.y * 0.33f;
2478 results.actor = Actor();
2479 results.actorCoordinates = Vector2::ZERO;
2480 // hit expected, results changed
2481 DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2482 DALI_TEST_CHECK( results.actor == offscreenActor );
2483 DALI_TEST_EQUALS( (screenCoordinates-offset)/scale , results.actorCoordinates, 0.1f, TEST_LOCATION );
2485 screenCoordinates.x = stageSize.x * 0.435f;
2486 screenCoordinates.y = stageSize.y * 0.52f;
2487 // hit expected, results changed
2488 DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2489 DALI_TEST_CHECK( results.actor == offscreenActor );
2490 const Vector2 expectedCoordinates = (screenCoordinates-offset)/scale;
2491 DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION );
2493 screenCoordinates.x = stageSize.x * 0.65f;
2494 screenCoordinates.y = stageSize.y * 0.95f;
2495 // miss expected, results not changed
2496 DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) );
2497 DALI_TEST_CHECK( results.actor == offscreenActor );
2498 DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION );
2502 int UtcDaliRenderTaskFinishInvisibleSourceActor(void)
2504 TestApplication application;
2506 tet_infoline("Testing RenderTask::FinishInvisibleSourceActor()");
2508 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2509 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
2511 CameraActor offscreenCameraActor = CameraActor::New();
2513 Stage::GetCurrent().Add( offscreenCameraActor );
2515 BufferImage image = BufferImage::New( 10, 10 );
2516 Actor rootActor = CreateRenderableActor( image );
2517 rootActor.SetSize( 10, 10 );
2518 rootActor.SetVisible(false);
2519 Stage::GetCurrent().Add( rootActor );
2521 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2522 NativeImageInterfacePtr testNativeImagePtr = TestNativeImage::New(10, 10);
2523 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
2525 // Flush all outstanding messages
2526 application.SendNotification();
2527 application.Render();
2529 RenderTask newTask = taskList.CreateTask();
2530 newTask.SetCameraActor( offscreenCameraActor );
2531 newTask.SetSourceActor( rootActor );
2532 newTask.SetInputEnabled( false );
2533 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
2534 newTask.SetClearEnabled( true );
2535 newTask.SetExclusive( true );
2536 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2537 newTask.SetTargetFrameBuffer( frameBufferImage );
2538 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
2540 // Framebuffer doesn't actually get created until Connected, i.e. by previous line
2542 bool finished = false;
2543 RenderTaskFinished renderTaskFinished( finished );
2544 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2546 // Flush the queue and render.
2547 application.SendNotification();
2549 // 1 render to process render task, then wait for sync before finished msg is sent
2550 // from update to the event thread.
2552 application.Render();
2553 application.SendNotification();
2554 DALI_TEST_CHECK( !finished );
2556 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2557 DALI_TEST_CHECK( lastSyncObj != NULL );
2559 application.Render();
2560 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
2561 application.SendNotification();
2562 DALI_TEST_CHECK( !finished );
2564 application.Render();
2565 DALI_TEST_EQUALS( (Integration::KeepUpdating::Reasons)(application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
2566 application.SendNotification();
2567 DALI_TEST_CHECK( ! finished );
2569 sync.SetObjectSynced( lastSyncObj, true );
2571 application.Render();
2572 application.SendNotification();
2573 DALI_TEST_CHECK( !finished );
2575 application.Render();
2576 application.SendNotification();
2577 DALI_TEST_CHECK( finished );
2580 application.Render(); // Double check no more finished signal
2581 application.SendNotification();
2582 DALI_TEST_CHECK( ! finished );
2587 int UtcDaliRenderTaskFinishMissingImage(void)
2589 TestApplication application;
2591 // Previously we had bugs where not having a resource ID would cause render-tasks to wait forever
2592 tet_infoline("Testing RenderTask::SignalFinished() when an Actor has no Image set");
2594 Stage stage = Stage::GetCurrent();
2596 BufferImage image = BufferImage::New( 10, 10 );
2597 Actor rootActor = CreateRenderableActor( image );
2598 rootActor.SetSize( 10, 10 );
2599 stage.Add( rootActor );
2601 Actor actorWithMissingImage = CreateRenderableActor( Image() );
2602 actorWithMissingImage.SetSize( 10, 10 );
2603 stage.Add( actorWithMissingImage );
2605 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2606 RenderTask newTask = taskList.CreateTask();
2607 newTask.SetInputEnabled( false );
2608 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
2609 newTask.SetClearEnabled( true );
2610 newTask.SetExclusive( true );
2611 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
2613 bool finished = false;
2614 RenderTaskFinished renderTaskFinished( finished );
2615 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2617 // 1 render to process render task, then 1 before finished msg is sent from update to the event thread.
2618 application.SendNotification();
2619 application.Render();
2620 application.Render();
2622 application.SendNotification();
2623 DALI_TEST_CHECK( finished );
2628 int UtcDaliRenderTaskWorldToViewport(void)
2630 TestApplication application( static_cast<size_t>(400), static_cast<size_t>(400) ); // square surface
2632 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2634 Actor actor = Actor::New();
2635 actor.SetSize(100.0f, 100.0f);
2636 actor.SetPosition( Vector3(0.0, 0.0, 0.0) );
2638 actor.SetParentOrigin( Vector3(0.5, 0.5, 0.5) );
2639 actor.SetAnchorPoint( Vector3(0.5, 0.5, 0.5) );
2641 Stage::GetCurrent().Add(actor);
2643 application.SendNotification();
2644 application.Render();
2645 application.SendNotification();
2647 RenderTask task = taskList.GetTask( 0u );
2649 CameraActor camera = task.GetCameraActor();
2651 Vector2 screenSize = task.GetCurrentViewportSize();
2653 float screenX = 0.0;
2654 float screenY = 0.0;
2656 bool ok = task.WorldToViewport(actor.GetCurrentWorldPosition(), screenX, screenY);
2657 DALI_TEST_CHECK(ok == true);
2659 DALI_TEST_EQUALS(screenX, screenSize.x/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2660 DALI_TEST_EQUALS(screenY, screenSize.y/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2662 Actor actor2 = Actor::New();
2663 float actor2Size = 100.f;
2664 actor2.SetSize( actor2Size, actor2Size );
2665 actor2.SetPosition( Vector3(0.0, 0.0, 0.0) );
2666 actor2.SetParentOrigin( Vector3(0.5, 0.5, 0.0) );
2667 actor2.SetAnchorPoint( Vector3(0.5, 0.5, 0.0) );
2668 Stage::GetCurrent().Add( actor2 );
2670 actor.SetParentOrigin( Vector3(0,0,0) );
2672 application.SendNotification();
2673 application.Render();
2674 application.SendNotification();
2676 ok = task.WorldToViewport(actor.GetCurrentWorldPosition(), screenX, screenY);
2677 DALI_TEST_CHECK(ok == true);
2679 DALI_TEST_EQUALS(screenX, screenSize.x/2 - actor2Size/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2680 DALI_TEST_EQUALS(screenY, screenSize.y/2 - actor2Size/2, Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2686 int UtcDaliRenderTaskViewportToLocal(void)
2688 TestApplication application;
2689 Actor actor = Actor::New();
2690 actor.SetAnchorPoint(AnchorPoint::TOP_LEFT);
2691 actor.SetSize(100.0f, 100.0f);
2692 actor.SetPosition(10.0f, 10.0f);
2693 Stage::GetCurrent().Add(actor);
2695 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2696 RenderTask task = taskList.GetTask( 0u );
2698 // flush the queue and render once
2699 application.SendNotification();
2700 application.Render();
2701 application.SendNotification();
2702 application.Render();
2710 float screenX = 50.0f;
2711 float screenY = 50.0f;
2713 DALI_TEST_CHECK( actor.ScreenToLocal(localX, localY, screenX, screenY) );
2715 DALI_TEST_CHECK( task.ViewportToLocal(actor, screenX, screenY, rtLocalX, rtLocalY ) );
2717 DALI_TEST_EQUALS(localX, rtLocalX, 0.01f, TEST_LOCATION);
2718 DALI_TEST_EQUALS(localY, rtLocalY, 0.01f, TEST_LOCATION);
2724 int UtcDaliRenderTaskRequiresSync(void)
2726 TestApplication application;
2727 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
2729 RenderTask newTask = taskList.CreateTask();
2730 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, false );
2732 DALI_TEST_EQUALS( newTask.GetProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), false, TEST_LOCATION );
2733 DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< bool >( newTask, RenderTask::Property::REQUIRES_SYNC ), false, TEST_LOCATION );
2735 newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true );
2737 DALI_TEST_EQUALS( newTask.GetProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), true, TEST_LOCATION );
2738 DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< bool >( newTask, RenderTask::Property::REQUIRES_SYNC ), true, TEST_LOCATION );