2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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/dali.h>
21 #include <dali-test-suite-utils.h>
22 #include <dali/integration-api/debug.h>
26 void utc_dali_render_task_startup(void)
28 test_return_value = TET_UNDEF;
31 void utc_dali_render_task_cleanup(void)
33 test_return_value = TET_PASS;
36 namespace // unnamed namespace
39 class TestNativeImage : public NativeImage
44 TestNativeImage(int width, int height)
49 virtual bool GlExtensionCreate() {return true;};
52 * Destroy the GL resource for the NativeImage.
53 * e.g. For the EglImageKHR extension, this corresponds to calling eglDestroyImageKHR()
54 * @pre There is a GL context for the current thread.
56 virtual void GlExtensionDestroy() {};
59 * Use the NativeImage as a texture for rendering
60 * @pre There is a GL context for the current thread.
61 * @return A GL error code
63 virtual unsigned int TargetTexture() {return 0;};
66 * Called in each NativeTexture::Bind() call to allow implementation specific operations.
67 * The correct texture sampler has already been bound before the function gets called.
68 * @pre glAbstraction is being used by context in current thread
70 virtual void PrepareTexture() {}
73 * Returns the width of the NativeImage
76 virtual unsigned int GetWidth() const {return mWidth;}
79 * Returns the height of the NativeImage
82 virtual unsigned int GetHeight() const {return mHeight;}
85 * Returns the internal pixel NativeImage::PixelFormat of the NativeImage
86 * @return pixel format
88 virtual Pixel::Format GetPixelFormat() const { return Pixel::RGBA8888; }
94 const int RENDER_FRAME_INTERVAL = 16; ///< Duration of each frame in ms. (at approx 60FPS)
97 * Simulate time passed by.
99 * @note this will always process at least 1 frame (1/60 sec)
101 * @param application Test application instance
102 * @param duration Time to pass in milliseconds.
103 * @return The actual time passed in milliseconds
105 int Wait(TestApplication& application, int duration = 0)
109 for(int i = 0; i <= ( duration / RENDER_FRAME_INTERVAL); i++)
111 application.SendNotification();
112 application.Render(RENDER_FRAME_INTERVAL);
113 time += RENDER_FRAME_INTERVAL;
119 struct RenderTaskFinished
121 RenderTaskFinished( bool& finished )
122 : finished( finished )
126 void operator()( RenderTask& renderTask )
134 struct RenderTaskFinishedRemoveSource
136 RenderTaskFinishedRemoveSource( bool& finished )
137 : finished( finished ),
142 void operator()( RenderTask& renderTask )
144 DALI_TEST_CHECK(finishedOnce == false);
147 Actor srcActor = renderTask.GetSourceActor();
148 UnparentAndReset(srcActor);
155 struct RenderTaskFinishedRenderAgain
157 RenderTaskFinishedRenderAgain( bool& finished )
158 : finished( finished ),
163 void operator()( RenderTask& renderTask )
165 DALI_TEST_CHECK(finishedOnce == false);
168 renderTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
176 bool TestScreenToFrameBufferFunction( Vector2& coordinates )
178 coordinates = coordinates + Vector2( 1, 2 );
183 ImageActor CreateLoadingImage(TestApplication& application, std::string filename, Image::LoadPolicy loadPolicy, Image::ReleasePolicy releasePolicy)
185 Image image = Image::New(filename, loadPolicy, releasePolicy);
186 DALI_TEST_CHECK( image );
187 application.SendNotification();
188 application.Render(16);
189 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
190 ImageActor actor = ImageActor::New(image);
191 actor.SetSize( 80, 80 );
192 application.SendNotification();
193 application.Render(16);
197 void CompleteImageLoad(TestApplication& application, Integration::ResourceId resourceId, Integration::ResourceTypeId requestType)
199 std::vector<GLuint> ids;
201 application.GetGlAbstraction().SetNextTextureIds( ids );
203 Integration::ImageDataPtr bitmap = Integration::NewBitmapImageData( 80, 80, Pixel::RGBA8888 );
204 Integration::ResourcePointer resource(bitmap);
206 application.GetPlatform().SetResourceLoaded(resourceId, requestType, resource);
209 void FailImageLoad(TestApplication& application, Integration::ResourceId resourceId )
211 application.GetPlatform().SetResourceLoadFailed(resourceId, Integration::FailureUnknown);
214 void ReloadImage(TestApplication& application, Image image)
216 application.GetPlatform().ClearReadyResources();
217 application.GetPlatform().DiscardRequest();
218 application.GetPlatform().ResetTrace();
219 application.GetPlatform().SetClosestImageSize(Vector2(80.0f, 80.0f)); // Ensure reload is called.
223 RenderTask CreateRenderTask(TestApplication& application,
224 CameraActor offscreenCamera,
225 Actor rootActor, // Reset default render task to point at this actor
226 Actor secondRootActor, // Source actor
227 unsigned int refreshRate,
230 // Change main render task to use a different root
231 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
232 taskList.GetTask(0u).SetSourceActor( rootActor );
234 FrameBufferImage frameBufferImage;
237 NativeImagePtr testNativeImagePtr = new TestNativeImage(10, 10);
238 frameBufferImage= FrameBufferImage::New( *testNativeImagePtr.Get() );
242 frameBufferImage = FrameBufferImage::New( 10, 10 );
245 // Don't draw output framebuffer
247 RenderTask newTask = taskList.CreateTask();
248 newTask.SetCameraActor( offscreenCamera );
249 newTask.SetSourceActor( secondRootActor );
250 newTask.SetInputEnabled( false );
251 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
252 newTask.SetClearEnabled( true );
253 newTask.SetExclusive( true );
254 newTask.SetRefreshRate( refreshRate );
255 newTask.SetTargetFrameBuffer( frameBufferImage );
260 bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool testDrawn, bool& finishedSig, bool testFinished )
264 application.Render(16);
265 application.SendNotification();
267 bool sigPassed = false;
270 sigPassed = finishedSig;
274 sigPassed = ! finishedSig;
277 bool drawPassed = false;
280 drawPassed = callStack.FindMethod("DrawElements") || callStack.FindMethod("DrawArrays");
284 drawPassed = ! callStack.FindMethod("DrawElements") && ! callStack.FindMethod("DrawArrays") ;
287 tet_printf("UpdateRender: drawPassed:%s sigPassed:%s (Expected: %s %s)\n", drawPassed?"T":"F", sigPassed?"T":"F", testDrawn?"T":"F", testFinished?"T":"F");
289 return (sigPassed && drawPassed);
292 } // unnamed namespace
295 /****************************************************************************************************/
296 /****************************************************************************************************/
297 /******************************** TEST CASES BELOW **********************************************/
298 /****************************************************************************************************/
299 /****************************************************************************************************/
301 int UtcDaliRenderTaskDownCast(void)
303 TestApplication application;
305 tet_infoline("Testing RenderTask::DownCast()");
307 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
309 BaseHandle base = taskList.GetTask( 0u );
310 DALI_TEST_CHECK( base );
312 RenderTask task = RenderTask::DownCast( base );
313 DALI_TEST_CHECK( task );
315 // Try calling a method
316 DALI_TEST_CHECK( task.GetSourceActor() );
320 int UtcDaliRenderTaskSetSourceActor(void)
322 TestApplication application;
324 tet_infoline("Testing RenderTask::SetSourceActor()");
326 Stage stage = Stage::GetCurrent();
328 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
330 RenderTaskList taskList = stage.GetRenderTaskList();
332 RenderTask task = taskList.GetTask( 0u );
334 Actor actor = task.GetSourceActor();
335 DALI_TEST_CHECK( actor );
337 std::vector<GLuint> ids;
339 application.GetGlAbstraction().SetNextTextureIds( ids );
341 BitmapImage img = BitmapImage::New( 1,1 );
342 ImageActor newActor = ImageActor::New( img );
343 newActor.SetSize(1,1);
344 stage.Add( newActor );
346 Actor nonRenderableActor = Actor::New();
347 stage.Add( nonRenderableActor );
349 // Stop the newActor from being rendered by changing the source actor
350 DALI_TEST_CHECK( nonRenderableActor );
351 task.SetSourceActor( nonRenderableActor );
352 DALI_TEST_CHECK( task.GetSourceActor() != actor );
353 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
355 // Update & Render nothing!
356 application.GetGlAbstraction().ClearBoundTextures();
357 application.SendNotification();
358 application.Render();
360 // Check that nothing was rendered
361 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
363 // Set newActor as the new source Actor
364 task.SetSourceActor( newActor );
365 DALI_TEST_CHECK( task.GetSourceActor() != actor );
366 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
368 // Update & Render the newActor
369 application.GetGlAbstraction().ClearBoundTextures();
370 application.SendNotification();
371 application.Render();
373 // Check that the newActor was rendered
374 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
375 if ( boundTextures.size() )
377 DALI_TEST_EQUALS( boundTextures[0], 7u, TEST_LOCATION );
382 int UtcDaliRenderTaskSetSourceActorOffStage(void)
384 TestApplication application;
386 tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)");
388 Stage stage = Stage::GetCurrent();
390 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
392 RenderTaskList taskList = stage.GetRenderTaskList();
394 RenderTask task = taskList.GetTask( 0u );
396 Actor actor = task.GetSourceActor();
397 DALI_TEST_CHECK( actor );
399 std::vector<GLuint> ids;
400 GLuint expectedTextureId( 3 );
401 ids.push_back( expectedTextureId );
402 application.GetGlAbstraction().SetNextTextureIds( ids );
404 BitmapImage img = BitmapImage::New( 1,1 );
405 ImageActor newActor = ImageActor::New( img );
406 newActor.SetSize(1,1);
407 task.SetSourceActor( newActor );
408 // Don't add newActor to stage yet
410 // Update & Render with the actor initially off-stage
411 application.GetGlAbstraction().ClearBoundTextures();
412 application.SendNotification();
413 application.Render();
415 // Check that nothing was rendered
416 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
419 stage.Add( newActor );
421 // Update & Render with the actor on-stage
422 application.GetGlAbstraction().ClearBoundTextures();
423 application.SendNotification();
424 application.Render();
426 // Check that the newActor was rendered
427 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
428 if ( boundTextures.size() )
430 DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION );
433 // Now remove from stage
434 stage.Remove( newActor );
436 // Update & Render with the actor off-stage
437 application.GetGlAbstraction().ClearBoundTextures();
438 application.SendNotification();
439 application.Render();
443 int UtcDaliRenderTaskSetSourceActorEmpty(void)
445 TestApplication application;
447 tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)");
449 Stage stage = Stage::GetCurrent();
451 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
453 RenderTaskList taskList = stage.GetRenderTaskList();
455 RenderTask task = taskList.GetTask( 0u );
457 Actor actor = task.GetSourceActor();
458 DALI_TEST_CHECK( actor );
460 std::vector<GLuint> ids;
461 GLuint expectedTextureId( 5 );
462 ids.push_back( expectedTextureId );
463 application.GetGlAbstraction().SetNextTextureIds( ids );
465 BitmapImage img = BitmapImage::New( 1,1 );
466 ImageActor newActor = ImageActor::New( img );
467 newActor.SetSize(1,1);
468 stage.Add( newActor );
470 Actor nonRenderableActor = Actor::New();
471 stage.Add( nonRenderableActor );
473 // Set with empty handle
474 task.SetSourceActor( Actor() );
475 DALI_TEST_CHECK( ! task.GetSourceActor() );
477 // Update & Render nothing!
478 application.GetGlAbstraction().ClearBoundTextures();
479 application.SendNotification();
480 application.Render();
482 // Check that nothing was rendered
483 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
485 // Set with non-empty handle
486 task.SetSourceActor( newActor );
487 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
489 // Update & Render the newActor
490 application.GetGlAbstraction().ClearBoundTextures();
491 application.SendNotification();
492 application.Render();
494 // Check that the newActor was rendered
495 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
496 if ( boundTextures.size() )
498 DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION );
503 int UtcDaliRenderTaskGetSourceActor(void)
505 TestApplication application;
507 tet_infoline("Testing RenderTask::GetSourceActor()");
509 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
511 RenderTask task = taskList.GetTask( 0u );
513 Actor actor = task.GetSourceActor();
514 DALI_TEST_CHECK( actor );
516 // By default the entire scene should be rendered
517 Actor root = Stage::GetCurrent().GetLayer( 0 );
518 DALI_TEST_CHECK( root == actor );
522 int UtcDaliRenderTaskSetExclusive(void)
524 TestApplication application;
526 tet_infoline("Testing RenderTask::SetExclusive()");
528 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
530 // Manipulate the GenTextures behaviour, to identify different ImageActors
532 std::vector<GLuint> ids;
533 ids.push_back( 8 ); // 8 = actor1
534 ids.push_back( 9 ); // 9 = actor2
535 ids.push_back( 10 ); // 10 = actor3
536 application.GetGlAbstraction().SetNextTextureIds( ids );
538 BitmapImage img1 = BitmapImage::New( 1,1 );
539 ImageActor actor1 = ImageActor::New( img1 );
541 Stage::GetCurrent().Add( actor1 );
543 // Update & Render actor1
544 application.SendNotification();
545 application.Render();
547 // Check that the actor1 was rendered
548 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
549 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
551 if ( boundTextures.size() )
553 DALI_TEST_EQUALS( boundTextures[0], 8u/*unique to actor1*/, TEST_LOCATION );
556 BitmapImage img2 = BitmapImage::New( 1,1 );
557 ImageActor actor2 = ImageActor::New( img2 );
560 // Force actor2 to be rendered before actor1
561 Layer layer = Layer::New();
562 Stage::GetCurrent().Add( layer );
564 layer.LowerToBottom();
567 application.GetGlAbstraction().ClearBoundTextures();
568 application.SendNotification();
569 application.Render();
571 // Check that the actors were rendered
572 DALI_TEST_EQUALS( boundTextures.size(), 2u, TEST_LOCATION );
574 if ( boundTextures.size() )
576 DALI_TEST_EQUALS( boundTextures[0], 9u/*unique to actor2*/, TEST_LOCATION );
577 DALI_TEST_EQUALS( boundTextures[1], 8u/*unique to actor1*/, TEST_LOCATION );
580 BitmapImage img3 = BitmapImage::New( 1,1 );
581 ImageActor actor3 = ImageActor::New( img3 );
584 // Force actor3 to be rendered before actor2
585 layer = Layer::New();
586 Stage::GetCurrent().Add( layer );
588 layer.LowerToBottom();
590 // Update & Render all actors
591 application.GetGlAbstraction().ClearBoundTextures();
592 application.SendNotification();
593 application.Render();
595 // Check that the actors were rendered
596 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
598 if ( boundTextures.size() )
600 DALI_TEST_EQUALS( boundTextures[0], 10u/*unique to actor3*/, TEST_LOCATION );
601 DALI_TEST_EQUALS( boundTextures[1], 9u/*unique to actor2*/, TEST_LOCATION );
602 DALI_TEST_EQUALS( boundTextures[2], 8u/*unique to actor1*/, TEST_LOCATION );
605 // Both actors are now connected to the root node
606 // Setup 2 render-tasks - the first will render from the root-node, and the second from actor2
608 // Not exclusive is the default
609 RenderTask task1 = taskList.GetTask( 0u );
610 DALI_TEST_CHECK( false == task1.IsExclusive() );
612 RenderTask task2 = taskList.CreateTask();
613 DALI_TEST_CHECK( false == task2.IsExclusive() );
614 task2.SetSourceActor( actor2 );
616 // Task1 should render all actors, and task 2 should render only actor2
618 application.GetGlAbstraction().ClearBoundTextures();
619 application.SendNotification();
620 application.Render();
622 DALI_TEST_EQUALS( boundTextures.size(), 4u, TEST_LOCATION );
624 if ( boundTextures.size() == 4 )
626 // Test that task 1 renders actor3, then actor2 & then actor1
627 DALI_TEST_CHECK( boundTextures[0] == 10u );
628 DALI_TEST_CHECK( boundTextures[1] == 9u );
629 DALI_TEST_CHECK( boundTextures[2] == 8u );
631 // Test that task 2 renders actor2
632 DALI_TEST_EQUALS( boundTextures[3], 9u, TEST_LOCATION );
635 // Make actor2 exclusive to task2
637 task2.SetExclusive( true );
638 DALI_TEST_CHECK( true == task2.IsExclusive() );
640 // Task1 should render only actor1, and task 2 should render only actor2
642 application.GetGlAbstraction().ClearBoundTextures();
643 application.SendNotification();
644 application.Render();
646 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
647 if ( boundTextures.size() == 3 )
649 // Test that task 1 renders actor3 & actor1
650 DALI_TEST_CHECK( boundTextures[0] == 10u );
651 DALI_TEST_CHECK( boundTextures[1] == 8u );
653 // Test that task 2 renders actor2
654 DALI_TEST_CHECK( boundTextures[2] == 9u );
659 int UtcDaliRenderTaskIsExclusive(void)
661 TestApplication application;
663 tet_infoline("Testing RenderTask::IsExclusive()");
665 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
667 // Not exclusive is the default
668 RenderTask task = taskList.GetTask( 0u );
669 DALI_TEST_CHECK( false == task.IsExclusive() );
671 RenderTask newTask = taskList.CreateTask();
672 DALI_TEST_CHECK( false == newTask.IsExclusive() );
676 int UtcDaliRenderTaskSetInputEnabled(void)
678 TestApplication application;
680 tet_infoline("Testing RenderTask::SetInputEnabled()");
682 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
684 // Input is enabled by default
685 RenderTask task = taskList.GetTask( 0u );
686 DALI_TEST_CHECK( true == task.GetInputEnabled() );
688 task.SetInputEnabled( false );
689 DALI_TEST_CHECK( false == task.GetInputEnabled() );
691 task.SetInputEnabled( true );
692 DALI_TEST_CHECK( true == task.GetInputEnabled() );
696 int UtcDaliRenderTaskGetInputEnabled(void)
698 TestApplication application;
700 tet_infoline("Testing RenderTask::GetInputEnabled()");
702 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
704 // Input is enabled by default
705 RenderTask task = taskList.GetTask( 0u );
706 DALI_TEST_CHECK( true == task.GetInputEnabled() );
708 RenderTask newTask = taskList.CreateTask();
709 DALI_TEST_CHECK( true == newTask.GetInputEnabled() );
713 int UtcDaliRenderTaskSetCameraActor(void)
715 TestApplication application;
717 tet_infoline("Testing RenderTask::SetCameraActor()");
719 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
721 RenderTask task = taskList.GetTask( 0u );
723 Actor actor = task.GetCameraActor();
724 DALI_TEST_CHECK( actor );
726 CameraActor newActor = CameraActor::New();
727 DALI_TEST_CHECK( newActor );
729 task.SetCameraActor( newActor );
730 DALI_TEST_CHECK( task.GetCameraActor() != actor );
731 DALI_TEST_CHECK( task.GetCameraActor() == newActor );
735 int UtcDaliRenderTaskGetCameraActor(void)
737 TestApplication application;
739 tet_infoline("Testing RenderTask::GetCameraActor()");
741 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
743 RenderTask task = taskList.GetTask( 0u );
745 Actor actor = task.GetCameraActor();
746 DALI_TEST_CHECK( actor );
748 RenderTask newTask = taskList.CreateTask();
749 DALI_TEST_CHECK( actor == newTask.GetCameraActor() );
753 int UtcDaliRenderTaskSetTargetFrameBuffer(void)
755 TestApplication application;
757 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
759 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
761 RenderTask task = taskList.GetTask( 0u );
763 // By default render-tasks do not render off-screen
764 FrameBufferImage image = task.GetTargetFrameBuffer();
765 DALI_TEST_CHECK( !image );
767 FrameBufferImage newImage = FrameBufferImage::New();
769 task.SetTargetFrameBuffer( newImage );
770 DALI_TEST_CHECK( task.GetTargetFrameBuffer() == newImage );
774 int UtcDaliRenderTaskGetTargetFrameBuffer(void)
776 TestApplication application;
778 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
780 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
782 RenderTask task = taskList.GetTask( 0u );
784 // By default render-tasks do not render off-screen
785 FrameBufferImage image = task.GetTargetFrameBuffer();
786 DALI_TEST_CHECK( !image );
788 RenderTask newTask = taskList.CreateTask();
789 DALI_TEST_CHECK( !newTask.GetTargetFrameBuffer() );
793 int UtcDaliRenderTaskSetScreenToFrameBufferFunction(void)
795 TestApplication application;
797 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
799 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
801 RenderTask task = taskList.GetTask( 0u );
803 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
805 Vector2 coordinates( 5, 10 );
806 Vector2 convertedCoordinates( 6, 12 ); // + Vector(1, 2)
808 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
809 DALI_TEST_CHECK( func( coordinates ) );
810 DALI_TEST_CHECK( coordinates == convertedCoordinates );
812 task.SetScreenToFrameBufferFunction( RenderTask::FULLSCREEN_FRAMEBUFFER_FUNCTION );
813 func = task.GetScreenToFrameBufferFunction();
814 DALI_TEST_CHECK( func( coordinates ) );
816 task.SetScreenToFrameBufferFunction( RenderTask::DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION );
817 func = task.GetScreenToFrameBufferFunction();
818 DALI_TEST_CHECK( ! func( coordinates ) );
822 int UtcDaliRenderTaskGetScreenToFrameBufferFunction(void)
824 TestApplication application;
826 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction()");
828 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
830 RenderTask task = taskList.GetTask( 0u );
832 Vector2 originalCoordinates( 5, 10 );
833 Vector2 coordinates( 5, 10 );
835 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
836 DALI_TEST_CHECK( !func( coordinates ) ); // conversion should fail by default
837 DALI_TEST_CHECK( coordinates == originalCoordinates ); // coordinates should not be modified
842 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActor(void)
844 TestApplication application;
845 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor ");
847 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
848 RenderTask renderTask = taskList.CreateTask();
849 Actor mappingActor = Actor::New();
850 renderTask.SetScreenToFrameBufferMappingActor(mappingActor);
852 DALI_TEST_CHECK( mappingActor == renderTask.GetScreenToFrameBufferMappingActor() );
856 int UtcDaliRenderTaskSetViewport(void)
858 TestApplication application;
860 tet_infoline("Testing RenderTask::SetViewport()");
862 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
864 RenderTask task = taskList.GetTask( 0u );
866 Viewport viewport = task.GetViewport();
868 // By default the viewport should match the stage width/height
870 Vector2 stageSize = Stage::GetCurrent().GetSize();
871 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
872 DALI_TEST_CHECK( viewport == expectedViewport );
874 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
875 task.SetViewport( newViewport );
877 // Update (viewport is a property)
878 application.SendNotification();
879 application.Render();
881 DALI_TEST_CHECK( task.GetViewport() == newViewport );
885 int UtcDaliRenderTaskGetViewport(void)
887 TestApplication application;
889 tet_infoline("Testing RenderTask::GetViewport()");
891 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
893 RenderTask task = taskList.GetTask( 0u );
895 Viewport viewport = task.GetViewport();
897 // By default the viewport should match the stage width/height
899 Vector2 stageSize = Stage::GetCurrent().GetSize();
900 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
901 DALI_TEST_CHECK( viewport == expectedViewport );
903 RenderTask newTask = taskList.CreateTask();
904 DALI_TEST_CHECK( newTask.GetViewport() == expectedViewport );
908 int UtcDaliRenderTaskSetViewportPosition(void)
910 TestApplication application;
912 tet_infoline("Testing RenderTask::SetViewportPosition()");
914 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
916 RenderTask task = taskList.GetTask( 0u );
918 Viewport viewport = task.GetViewport();
920 // By default the viewport should match the stage width/height
922 Vector2 stageSize = Stage::GetCurrent().GetSize();
923 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
924 DALI_TEST_CHECK( viewport == expectedViewport );
927 Vector2 newPosition(25.0f, 50.0f);
928 task.SetViewportPosition( newPosition );
930 // Update (viewport is a property)
931 application.SendNotification();
932 application.Render();
934 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition, Math::MACHINE_EPSILON_1, TEST_LOCATION );
936 // Set by Property test
937 Vector2 newPosition2(32.0f, 32.0f);
938 task.SetProperty( RenderTask::VIEWPORT_POSITION, newPosition2 );
941 application.SendNotification();
942 application.Render();
944 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
946 Vector2 newPosition3(64.0f, 0.0f);
947 Animation animation = Animation::New(1.0f);
948 animation.AnimateTo( Property( task, RenderTask::VIEWPORT_POSITION ), newPosition3, AlphaFunctions::Linear );
951 // Perform 1000ms worth of updates at which point animation should have completed.
952 Wait(application, 1000);
953 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
957 int UtcDaliRenderTaskSetViewportSize(void)
959 TestApplication application;
961 tet_infoline("Testing RenderTask::SetViewportSize()");
963 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
965 RenderTask task = taskList.GetTask( 0u );
967 Viewport viewport = task.GetViewport();
969 // By default the viewport should match the stage width/height
971 Vector2 stageSize = Stage::GetCurrent().GetSize();
972 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
973 DALI_TEST_CHECK( viewport == expectedViewport );
975 Vector2 newSize(128.0f, 64.0f);
976 task.SetViewportSize( newSize );
978 // Update (viewport is a property)
979 application.SendNotification();
980 application.Render();
982 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize, Math::MACHINE_EPSILON_1, TEST_LOCATION );
984 // Set by Property test
985 Vector2 newSize2(50.0f, 50.0f);
986 task.SetProperty( RenderTask::VIEWPORT_SIZE, newSize2 );
989 application.SendNotification();
990 application.Render();
992 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
994 Vector2 newSize3(10.0f, 10.0f);
995 Animation animation = Animation::New(1.0f);
996 animation.AnimateTo( Property( task, RenderTask::VIEWPORT_SIZE ), newSize3, AlphaFunctions::Linear );
999 // Perform 1000ms worth of updates at which point animation should have completed.
1000 Wait(application, 1000);
1001 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1006 int UtcDaliRenderTaskSetClearColor(void)
1008 TestApplication application;
1010 tet_infoline("Testing RenderTask::SetClearColor()");
1012 Vector4 testColor( 1.0f, 2.0f, 3.0f, 4.0f );
1013 Vector4 testColor2( 5.0f, 6.0f, 7.0f, 8.0f );
1015 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1017 RenderTask task = taskList.GetTask( 0u );
1018 DALI_TEST_CHECK( task.GetClearColor() != testColor );
1020 task.SetClearColor( testColor );
1025 DALI_TEST_EQUALS( task.GetClearColor(), testColor, TEST_LOCATION );
1027 task.SetProperty( RenderTask::CLEAR_COLOR, testColor2 );
1032 DALI_TEST_EQUALS( task.GetClearColor(), testColor2, TEST_LOCATION );
1036 int UtcDaliRenderTaskGetClearColor(void)
1038 TestApplication application;
1040 tet_infoline("Testing RenderTask::GetClearColor()");
1042 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1043 RenderTask task = taskList.GetTask( 0u );
1044 DALI_TEST_EQUALS( task.GetClearColor(), RenderTask::DEFAULT_CLEAR_COLOR, TEST_LOCATION );
1048 int UtcDaliRenderTaskSetClearEnabled(void)
1050 TestApplication application;
1052 tet_infoline("Testing RenderTask::SetClearEnabled()");
1054 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1056 RenderTask task = taskList.GetTask( 0u );
1057 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1059 task.SetClearEnabled( true );
1060 DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION );
1062 task.SetClearEnabled( false );
1063 DALI_TEST_EQUALS( task.GetClearEnabled(), false, TEST_LOCATION );
1067 int UtcDaliRenderTaskGetClearEnabled(void)
1069 TestApplication application;
1071 tet_infoline("Testing RenderTask::GetClearEnabled()");
1073 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1075 RenderTask task = taskList.GetTask( 0u );
1076 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1080 int UtcDaliRenderTaskSetRefreshRate(void)
1082 TestApplication application;
1084 tet_infoline("Testing RenderTask::SetRefreshRate()");
1086 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1088 // By default tasks will be processed every frame
1089 RenderTask task = taskList.GetTask( 0u );
1090 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1092 task.SetRefreshRate( 2u ); // every-other frame
1093 DALI_TEST_CHECK( 2u == task.GetRefreshRate() );
1095 task.SetRefreshRate( RenderTask::REFRESH_ALWAYS );
1096 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1100 int UtcDaliRenderTaskGetRefreshRate(void)
1102 TestApplication application;
1104 tet_infoline("Testing RenderTask::GetRefreshRate()");
1106 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1108 // By default tasks will be processed every frame
1109 RenderTask task = taskList.GetTask( 0u );
1110 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1112 RenderTask newTask = taskList.CreateTask();
1113 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == newTask.GetRefreshRate() );
1117 int UtcDaliRenderTaskSignalFinished(void)
1119 TestApplication application;
1121 tet_infoline("Testing RenderTask::SignalFinished()");
1123 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1124 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1126 CameraActor offscreenCameraActor = CameraActor::New();
1128 Stage::GetCurrent().Add( offscreenCameraActor );
1130 BitmapImage image = BitmapImage::New( 10, 10 );
1131 ImageActor rootActor = ImageActor::New( image );
1132 rootActor.SetSize( 10, 10 );
1133 Stage::GetCurrent().Add( rootActor );
1135 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1136 NativeImagePtr testNativeImagePtr = new TestNativeImage(10, 10);
1137 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
1139 // Flush all outstanding messages
1140 application.SendNotification();
1141 application.Render();
1143 RenderTask newTask = taskList.CreateTask();
1144 newTask.SetCameraActor( offscreenCameraActor );
1145 newTask.SetSourceActor( rootActor );
1146 newTask.SetInputEnabled( false );
1147 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
1148 newTask.SetClearEnabled( true );
1149 newTask.SetExclusive( true );
1150 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
1151 newTask.SetTargetFrameBuffer( frameBufferImage );
1153 // Framebuffer doesn't actually get created until Connected, i.e. by previous line
1155 bool finished = false;
1156 RenderTaskFinished renderTaskFinished( finished );
1157 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1159 // Flush the queue and render.
1160 application.SendNotification();
1162 // 1 render to process render task, then wait for sync before finished msg is sent
1163 // from update to the event thread.
1165 application.Render();
1166 application.SendNotification();
1167 DALI_TEST_CHECK( !finished );
1169 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1170 DALI_TEST_CHECK( lastSyncObj != NULL );
1172 application.Render();
1173 DALI_TEST_EQUALS( (application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1174 application.SendNotification();
1175 DALI_TEST_CHECK( !finished );
1177 application.Render();
1178 DALI_TEST_EQUALS( (application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1179 application.SendNotification();
1180 DALI_TEST_CHECK( ! finished );
1182 sync.SetObjectSynced( lastSyncObj, true );
1184 application.Render();
1185 application.SendNotification();
1186 DALI_TEST_CHECK( !finished );
1188 application.Render();
1189 application.SendNotification();
1190 DALI_TEST_CHECK( finished );
1193 application.Render(); // Double check no more finished signal
1194 application.SendNotification();
1195 DALI_TEST_CHECK( ! finished );
1200 int UtcDaliRenderTaskContinuous01(void)
1202 TestApplication application;
1204 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not staged)\nPOST:continuous renders, no Finished signal");
1206 // SETUP AN OFFSCREEN RENDER TASK
1207 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1208 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1209 drawTrace.Enable(true);
1211 Actor rootActor = Actor::New();
1212 Stage::GetCurrent().Add( rootActor );
1214 CameraActor offscreenCameraActor = CameraActor::New();
1215 Stage::GetCurrent().Add( offscreenCameraActor );
1217 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1218 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1219 Integration::ResourceId imageRequestId = imageRequest->GetId();
1220 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1222 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1223 bool finished = false;
1224 RenderTaskFinished renderTaskFinished( finished );
1225 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1226 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1227 application.SendNotification();
1229 // START PROCESS/RENDER Input, Expected Input, Expected
1230 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1231 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1233 // ADD SOURCE ACTOR TO STAGE - expect continuous renders to start, no finished signal
1234 Stage::GetCurrent().Add(secondRootActor);
1235 application.SendNotification();
1237 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1238 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1239 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1240 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1241 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1242 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1247 int UtcDaliRenderTaskContinuous02(void)
1249 TestApplication application;
1251 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not visible)\nPOST:continuous renders, no Finished signal");
1253 // SETUP AN OFFSCREEN RENDER TASK
1254 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1255 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1256 drawTrace.Enable(true);
1258 Actor rootActor = Actor::New();
1259 Stage::GetCurrent().Add( rootActor );
1261 CameraActor offscreenCameraActor = CameraActor::New();
1262 Stage::GetCurrent().Add( offscreenCameraActor );
1264 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1265 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1266 Integration::ResourceId imageRequestId = imageRequest->GetId();
1267 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1268 Stage::GetCurrent().Add(secondRootActor);
1269 secondRootActor.SetVisible(false);
1271 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1272 bool finished = false;
1273 RenderTaskFinished renderTaskFinished( finished );
1274 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1275 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1276 application.SendNotification();
1278 // START PROCESS/RENDER Input, Expected Input, Expected
1279 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1280 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1282 // MAKE SOURCE ACTOR VISIBLE - expect continuous renders to start, no finished signal
1283 secondRootActor.SetVisible(true);
1284 application.SendNotification();
1286 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1287 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1288 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1289 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1290 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1291 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1295 int UtcDaliRenderTaskContinuous03(void)
1297 TestApplication application;
1299 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (camera actor not staged)\nPOST:continuous renders, no Finished signal");
1301 // SETUP AN OFFSCREEN RENDER TASK
1302 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1303 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1304 drawTrace.Enable(true);
1306 Actor rootActor = Actor::New();
1307 Stage::GetCurrent().Add( rootActor );
1309 CameraActor offscreenCameraActor = CameraActor::New();
1310 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1311 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1312 Integration::ResourceId imageRequestId = imageRequest->GetId();
1313 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1314 Stage::GetCurrent().Add(secondRootActor);
1316 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1317 bool finished = false;
1318 RenderTaskFinished renderTaskFinished( finished );
1319 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1320 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1321 application.SendNotification();
1323 // START PROCESS/RENDER Input, Expected Input, Expected
1324 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1325 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1327 // ADD CAMERA ACTOR TO STAGE - expect continuous renders to start, no finished signal
1328 Stage::GetCurrent().Add( offscreenCameraActor );
1329 application.SendNotification();
1331 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1332 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1333 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1334 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1335 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1336 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1341 int UtcDaliRenderTaskContinuous04(void)
1343 TestApplication application;
1345 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: Resource not ready\nPOST:continuous renders, no Finished signal");
1347 // SETUP AN OFFSCREEN RENDER TASK
1348 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1349 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1350 drawTrace.Enable(true);
1352 Actor rootActor = Actor::New();
1353 Stage::GetCurrent().Add( rootActor );
1355 CameraActor offscreenCameraActor = CameraActor::New();
1356 Stage::GetCurrent().Add( offscreenCameraActor );
1357 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1358 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1359 Integration::ResourceId imageRequestId = imageRequest->GetId();
1360 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1361 Stage::GetCurrent().Add(secondRootActor);
1363 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1364 bool finished = false;
1365 RenderTaskFinished renderTaskFinished( finished );
1366 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1367 application.SendNotification();
1369 // START PROCESS/RENDER Input, Expected Input, Expected
1370 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1371 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1373 // FINISH RESOURCE LOADING - expect continuous renders to start, no finished signal
1374 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1375 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1377 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1378 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1379 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1380 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1381 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1385 int UtcDaliRenderTaskContinuous05(void)
1387 TestApplication application;
1389 tet_infoline("Testing RenderTask Render Continuous, every 3 frames using loading image\nPRE: Resources not ready\nPOST:continuous renders, no Finished signal");
1391 // SETUP AN OFFSCREEN RENDER TASK
1392 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1393 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1394 drawTrace.Enable(true);
1396 Actor rootActor = Actor::New();
1397 Stage::GetCurrent().Add( rootActor );
1399 CameraActor offscreenCameraActor = CameraActor::New();
1400 Stage::GetCurrent().Add( offscreenCameraActor );
1401 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1402 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1403 Integration::ResourceId imageRequestId = imageRequest->GetId();
1404 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1405 Stage::GetCurrent().Add(secondRootActor);
1407 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, 3, true);
1408 bool finished = false;
1409 RenderTaskFinished renderTaskFinished( finished );
1410 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1411 application.SendNotification();
1413 // START PROCESS/RENDER Input, Expected Input, Expected
1414 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1415 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1417 // FINISH RESOURCE LOADING - expect continuous renders to start, no finished signal
1418 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1419 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1420 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1421 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1422 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1423 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1424 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1428 int UtcDaliRenderTaskContinuous06(void)
1430 TestApplication application;
1432 tet_infoline("Testing RenderTask Render Continuous, every 3 frames using loading image\nPRE: Render Always, Resources not ready\nPOST:continuous renders at reduced freq, no Finished signal");
1434 // SETUP AN OFFSCREEN RENDER TASK
1435 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1436 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1437 drawTrace.Enable(true);
1439 Actor rootActor = Actor::New();
1440 Stage::GetCurrent().Add( rootActor );
1442 CameraActor offscreenCameraActor = CameraActor::New();
1443 Stage::GetCurrent().Add( offscreenCameraActor );
1444 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1445 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1446 Integration::ResourceId imageRequestId = imageRequest->GetId();
1447 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1448 Stage::GetCurrent().Add(secondRootActor);
1450 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1451 bool finished = false;
1452 RenderTaskFinished renderTaskFinished( finished );
1453 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1454 application.SendNotification();
1456 // START PROCESS/RENDER Input, Expected Input, Expected
1457 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1458 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1460 // FINISH RESOURCE LOADING - expect continuous renders to start, no finished signal
1461 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1462 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1463 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1466 newTask.SetRefreshRate(3); // Input, Expected Input, Expected
1467 application.SendNotification();
1468 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1469 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1470 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1471 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1472 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1473 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1474 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1475 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1477 newTask.SetRefreshRate(RenderTask::REFRESH_ALWAYS); // Should render every frame immediately
1478 application.SendNotification();
1479 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1480 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1481 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1486 int UtcDaliRenderTaskOnce01(void)
1488 TestApplication application;
1490 tet_infoline("Testing RenderTask Render Once GlSync, using loading image\nPRE: Resources not ready, Source not visible\nPOST: Finished signal sent once only");
1492 // SETUP AN OFFSCREEN RENDER TASK
1493 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1494 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1495 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1496 drawTrace.Enable(true);
1498 Actor rootActor = Actor::New();
1499 Stage::GetCurrent().Add( rootActor );
1501 CameraActor offscreenCameraActor = CameraActor::New();
1502 Stage::GetCurrent().Add( offscreenCameraActor );
1503 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1504 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1505 Integration::ResourceId imageRequestId = imageRequest->GetId();
1506 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1508 Stage::GetCurrent().Add(secondRootActor);
1509 secondRootActor.SetVisible(false);
1511 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
1512 bool finished = false;
1513 RenderTaskFinished renderTaskFinished( finished );
1514 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1515 application.SendNotification();
1517 // START PROCESS/RENDER Input, Expected Input, Expected
1518 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1519 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1521 // MAKE SOURCE VISIBLE
1522 secondRootActor.SetVisible(true);
1523 application.SendNotification();
1524 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1525 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1527 // FINISH RESOURCE LOADING - expect no rendering yet
1528 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1529 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1530 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1531 DALI_TEST_CHECK( lastSyncObj != NULL );
1533 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1534 sync.SetObjectSynced( lastSyncObj, true );
1535 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1536 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1538 // Finished rendering - expect no more renders, no more signals:
1539 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1540 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1541 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1542 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1543 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1544 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1548 int UtcDaliRenderTaskOnce02(void)
1550 TestApplication application;
1552 tet_infoline("Testing RenderTask Render Once GlSync, using loading image. Switch from render always after ready to render once\n"
1553 "PRE: Render task ready, Image not loaded\n"
1554 "POST: Finished signal sent only once");
1556 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1557 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1558 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1559 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1560 drawTrace.Enable(true);
1562 Actor rootActor = Actor::New();
1563 Stage::GetCurrent().Add( rootActor );
1565 CameraActor offscreenCameraActor = CameraActor::New();
1566 Stage::GetCurrent().Add( offscreenCameraActor );
1567 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1568 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1569 Integration::ResourceId imageRequestId = imageRequest->GetId();
1570 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1571 Stage::GetCurrent().Add(secondRootActor);
1573 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1574 bool finished = false;
1575 RenderTaskFinished renderTaskFinished( finished );
1576 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1577 application.SendNotification();
1579 // START PROCESS/RENDER Input, Expected Input, Expected
1580 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1581 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1583 // FINISH RESOURCE LOADING
1584 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1585 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1586 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1588 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1589 application.SendNotification(); // Input, Expected Input, Expected
1590 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1591 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1592 DALI_TEST_CHECK( lastSyncObj != NULL );
1594 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1595 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1596 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1597 sync.SetObjectSynced( lastSyncObj, true );
1598 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1599 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1601 // Finished rendering - expect no more renders, no more signals:
1602 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1603 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1604 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1605 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1606 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1607 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1612 int UtcDaliRenderTaskOnce03(void)
1614 TestApplication application;
1616 tet_infoline("Testing RenderTask Render Once GlSync\n"
1617 "Switch from Render always after ready to render once with resources unready\n"
1618 "PRE: Everything ready to render\n"
1619 "POST: Finished signal sent once");
1621 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1622 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1623 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1624 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1625 drawTrace.Enable(true);
1627 Actor rootActor = Actor::New();
1628 Stage::GetCurrent().Add( rootActor );
1630 CameraActor offscreenCameraActor = CameraActor::New();
1631 Stage::GetCurrent().Add( offscreenCameraActor );
1632 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1633 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1634 Integration::ResourceId imageRequestId = imageRequest->GetId();
1635 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1636 Stage::GetCurrent().Add(secondRootActor);
1638 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1639 bool finished = false;
1640 RenderTaskFinished renderTaskFinished( finished );
1641 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1642 application.SendNotification();
1644 // START PROCESS/RENDER Input, Expected Input, Expected
1645 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1646 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1648 // CHANGE TO RENDER ONCE
1649 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1650 application.SendNotification(); // Input, Expected Input, Expected
1651 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1652 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1654 // FINISH RESOURCE LOADING
1655 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1656 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1657 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1658 DALI_TEST_CHECK( lastSyncObj != NULL );
1660 sync.SetObjectSynced( lastSyncObj, true );
1661 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1662 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1664 // Finished rendering - expect no more renders, no more signals:
1665 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1666 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1667 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1668 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1669 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1670 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1675 //int UtcDaliRenderTaskOnce04(void)
1677 TestApplication application;
1679 tet_infoline("Testing RenderTask Render Once GlSync\n"
1680 "During RenderOnce, make ready resources unready before sending first finished signal\n"
1681 "PRE: Everything ready.\n"
1682 "POST: Finished signal sent only once");
1684 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1685 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1686 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1687 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1688 drawTrace.Enable(true);
1690 Actor rootActor = Actor::New();
1691 Stage::GetCurrent().Add( rootActor );
1693 CameraActor offscreenCameraActor = CameraActor::New();
1694 Stage::GetCurrent().Add( offscreenCameraActor );
1695 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1696 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1697 Integration::ResourceId imageRequestId = imageRequest->GetId();
1698 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1699 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1700 application.Render();
1702 Stage::GetCurrent().Add(secondRootActor);
1704 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1705 bool finished = false;
1706 RenderTaskFinished renderTaskFinished( finished );
1707 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1708 application.SendNotification();
1710 // START PROCESS/RENDER Input, Expected Input, Expected
1711 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1712 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1714 // CHANGE TO RENDER ONCE, RESOURCES BECOME NOT READY
1715 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1718 ReloadImage(application, secondRootActor.GetImage());
1719 application.SendNotification(); // Input, Expected Input, Expected
1721 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1722 DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION);
1723 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1725 // FINISH RESOURCE LOADING
1726 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1727 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1728 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1729 DALI_TEST_CHECK( lastSyncObj != NULL );
1731 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1732 sync.SetObjectSynced( lastSyncObj, true );
1733 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1734 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1736 // Finished rendering - expect no more renders, no more signals:
1737 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1738 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1739 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1740 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1741 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1742 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1747 int UtcDaliRenderTaskOnce05(void)
1749 TestApplication application;
1751 tet_infoline("Testing RenderTask Render Once GLSync\n"
1752 "Render once, Second call to SetRefreshRate(ONCE) triggers only one more finished signal\n"
1753 "PRE: Everything ready\n"
1754 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
1756 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1757 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1758 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1759 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1760 drawTrace.Enable(true);
1762 Actor rootActor = Actor::New();
1763 Stage::GetCurrent().Add( rootActor );
1765 CameraActor offscreenCameraActor = CameraActor::New();
1766 Stage::GetCurrent().Add( offscreenCameraActor );
1767 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1768 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1769 Integration::ResourceId imageRequestId = imageRequest->GetId();
1770 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1771 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1772 application.Render();
1774 Stage::GetCurrent().Add(secondRootActor);
1776 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1777 bool finished = false;
1778 RenderTaskFinished renderTaskFinished( finished );
1779 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1780 application.SendNotification();
1782 // START PROCESS/RENDER Input, Expected Input, Expected
1783 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1784 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1786 // CHANGE TO RENDER ONCE,
1787 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1788 application.SendNotification();
1789 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1790 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1791 DALI_TEST_CHECK( lastSyncObj != NULL );
1793 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1794 sync.SetObjectSynced( lastSyncObj, true );
1795 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1796 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1797 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1798 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1800 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1801 application.SendNotification();
1802 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1803 lastSyncObj = sync.GetLastSyncObject();
1804 DALI_TEST_CHECK( lastSyncObj != NULL );
1806 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1807 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1808 sync.SetObjectSynced( lastSyncObj, true );
1809 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1810 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1811 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1812 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1813 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1814 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1815 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1819 int UtcDaliRenderTaskOnce06(void)
1821 TestApplication application;
1823 tet_infoline("Testing RenderTask Render Once GLSync\n"
1824 "Render once, Call to SetRefreshRate(ONCE) in Finished signal callback triggers "
1825 "another render & another finished signal\n"
1826 "PRE: Everything ready\n"
1827 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
1830 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1831 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1832 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1833 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1834 drawTrace.Enable(true);
1836 Actor rootActor = Actor::New();
1837 Stage::GetCurrent().Add( rootActor );
1839 CameraActor offscreenCameraActor = CameraActor::New();
1840 Stage::GetCurrent().Add( offscreenCameraActor );
1841 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1842 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1843 Integration::ResourceId imageRequestId = imageRequest->GetId();
1844 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1845 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1846 application.Render();
1848 Stage::GetCurrent().Add(secondRootActor);
1850 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1851 bool finished = false;
1853 ConnectionTracker connectionTracker;
1854 RenderTaskFinishedRenderAgain renderTaskFinishedRenderAgain( finished );
1855 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinishedRenderAgain );
1857 application.SendNotification();
1859 // START PROCESS/RENDER Input, Expected Input, Expected
1860 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1861 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1862 DALI_TEST_CHECK( lastSyncObj == NULL );
1864 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1866 // CHANGE TO RENDER ONCE,
1867 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1868 application.SendNotification();
1869 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1870 lastSyncObj = sync.GetLastSyncObject();
1871 DALI_TEST_CHECK( lastSyncObj != NULL );
1873 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1874 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1876 sync.SetObjectSynced( lastSyncObj, true );
1877 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1878 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1879 application.SendNotification();
1881 // Expect SetRefreshRate to have been called again
1882 // Prevent next finished signal calling refresh once again
1883 RenderTaskFinished renderTaskFinished( finished );
1884 connectionTracker.DisconnectAll();
1885 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinished );
1886 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1887 lastSyncObj = sync.GetLastSyncObject();
1888 DALI_TEST_CHECK( lastSyncObj != NULL );
1890 sync.SetObjectSynced( lastSyncObj, true );
1891 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1892 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1894 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1895 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1896 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1897 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1902 int UtcDaliRenderTaskOnce07(void)
1904 TestApplication application;
1906 tet_infoline("Testing RenderTask Render Once GlSync\n"
1907 "SetRefreshRate(ONCE) again before first finished signal has been sent.\n"
1908 "PRE: resources ready\n"
1909 "POST: Only 1 finished signal sent.");
1911 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1912 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1913 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
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 );
1922 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1923 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1924 Integration::ResourceId imageRequestId = imageRequest->GetId();
1925 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1926 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1927 application.Render();
1929 Stage::GetCurrent().Add(secondRootActor);
1931 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1932 bool finished = false;
1933 RenderTaskFinished renderTaskFinished( finished );
1934 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1935 application.SendNotification();
1937 // START PROCESS/RENDER Input, Expected Input, Expected
1938 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1939 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1941 // CHANGE TO RENDER ONCE,
1942 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1943 application.SendNotification();
1944 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1945 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1946 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1948 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1949 application.SendNotification();
1950 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1951 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1952 DALI_TEST_CHECK( lastSyncObj != NULL );
1954 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1955 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1956 sync.SetObjectSynced( lastSyncObj, true );
1957 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1958 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1960 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1961 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1962 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1963 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1969 int UtcDaliRenderTaskOnce08(void)
1971 TestApplication application;
1973 tet_infoline("Testing RenderTask Render Once GlSync\n"
1974 "SetRefreshRate(ONCE), resource load failed completes render task.\n"
1975 "PRE: resources not ready\n"
1976 "POST: Only 1 finished signal sent.");
1978 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1979 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1980 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1981 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1982 drawTrace.Enable(true);
1984 Actor rootActor = Actor::New();
1985 Stage::GetCurrent().Add( rootActor );
1987 CameraActor offscreenCameraActor = CameraActor::New();
1988 Stage::GetCurrent().Add( offscreenCameraActor );
1989 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1990 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1991 Integration::ResourceId imageRequestId = imageRequest->GetId();
1992 Stage::GetCurrent().Add(secondRootActor);
1994 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1995 bool finished = false;
1996 RenderTaskFinished renderTaskFinished( finished );
1997 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1998 application.SendNotification();
2000 // START PROCESS/RENDER Input, Expected Input, Expected
2001 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2002 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2004 // CHANGE TO RENDER ONCE,
2005 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2006 application.SendNotification();
2007 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2008 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2009 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2011 FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete
2012 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) ); // nothing to draw
2013 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2014 DALI_TEST_CHECK( lastSyncObj != NULL );
2016 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2017 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2018 sync.SetObjectSynced( lastSyncObj, true );
2019 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2020 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2022 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2023 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2024 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2025 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2031 int UtcDaliRenderTaskOnceNoSync01(void)
2033 TestApplication application;
2035 tet_infoline("Testing RenderTask Render Once, using loading image\nPRE: Resources not ready, Source not visible\nPOST: Finished signal sent once only");
2037 // SETUP AN OFFSCREEN RENDER TASK
2038 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2039 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2040 drawTrace.Enable(true);
2042 Actor rootActor = Actor::New();
2043 Stage::GetCurrent().Add( rootActor );
2045 CameraActor offscreenCameraActor = CameraActor::New();
2046 Stage::GetCurrent().Add( offscreenCameraActor );
2047 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2048 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2049 Integration::ResourceId imageRequestId = imageRequest->GetId();
2050 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2052 Stage::GetCurrent().Add(secondRootActor);
2053 secondRootActor.SetVisible(false);
2055 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2056 bool finished = false;
2057 RenderTaskFinished renderTaskFinished( finished );
2058 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2059 application.SendNotification();
2061 // START PROCESS/RENDER Input, Expected Input, Expected
2062 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2063 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2065 // MAKE SOURCE VISIBLE
2066 secondRootActor.SetVisible(true);
2067 application.SendNotification();
2068 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2069 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2071 // FINISH RESOURCE LOADING - expect immediate rendering yet
2072 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2073 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2074 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2075 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2076 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2077 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2081 int UtcDaliRenderTaskOnceNoSync02(void)
2083 TestApplication application;
2085 tet_infoline("Testing RenderTask Render Once, using loading image. Switch from render always after ready to render once\n"
2086 "PRE: Render task ready, Image not loaded\n"
2087 "POST: Finished signal sent only once");
2089 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2090 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2091 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2092 drawTrace.Enable(true);
2094 Actor rootActor = Actor::New();
2095 Stage::GetCurrent().Add( rootActor );
2097 CameraActor offscreenCameraActor = CameraActor::New();
2098 Stage::GetCurrent().Add( offscreenCameraActor );
2099 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2100 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2101 Integration::ResourceId imageRequestId = imageRequest->GetId();
2102 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2103 Stage::GetCurrent().Add(secondRootActor);
2105 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2106 bool finished = false;
2107 RenderTaskFinished renderTaskFinished( finished );
2108 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2109 application.SendNotification();
2111 // START PROCESS/RENDER Input, Expected Input, Expected
2112 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2113 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2115 // FINISH RESOURCE LOADING
2116 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2117 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2118 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2120 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2121 application.SendNotification(); // Input, Expected Input, Expected
2122 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2123 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2124 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2125 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2126 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2127 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2132 int UtcDaliRenderTaskOnceNoSync03(void)
2134 TestApplication application;
2136 tet_infoline("Testing RenderTask Render Once\n"
2137 "Switch from Render always after ready to render once with resources unready\n"
2138 "PRE: Everything ready to render\n"
2139 "POST: Finished signal sent once");
2141 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2142 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2143 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2144 drawTrace.Enable(true);
2146 Actor rootActor = Actor::New();
2147 Stage::GetCurrent().Add( rootActor );
2149 CameraActor offscreenCameraActor = CameraActor::New();
2150 Stage::GetCurrent().Add( offscreenCameraActor );
2151 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2152 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2153 Integration::ResourceId imageRequestId = imageRequest->GetId();
2154 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2155 Stage::GetCurrent().Add(secondRootActor);
2157 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2158 bool finished = false;
2159 RenderTaskFinished renderTaskFinished( finished );
2160 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2161 application.SendNotification();
2163 // START PROCESS/RENDER Input, Expected Input, Expected
2164 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2165 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2167 // CHANGE TO RENDER ONCE
2168 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2169 application.SendNotification(); // Input, Expected Input, Expected
2170 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2171 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2173 // FINISH RESOURCE LOADING
2174 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2175 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2176 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2177 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2178 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2179 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2184 //int UtcDaliRenderTaskOnceNoSync04(void)
2186 TestApplication application;
2188 tet_infoline("Testing RenderTask Render Once\n"
2189 "During RenderOnce, make ready resources unready before sending first finished signal\n"
2190 "PRE: Everything ready.\n"
2191 "POST: Finished signal sent only once");
2193 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2194 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2195 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2196 drawTrace.Enable(true);
2198 Actor rootActor = Actor::New();
2199 Stage::GetCurrent().Add( rootActor );
2201 CameraActor offscreenCameraActor = CameraActor::New();
2202 Stage::GetCurrent().Add( offscreenCameraActor );
2203 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2204 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2205 Integration::ResourceId imageRequestId = imageRequest->GetId();
2206 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2207 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2208 application.Render();
2210 Stage::GetCurrent().Add(secondRootActor);
2212 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2213 bool finished = false;
2214 RenderTaskFinished renderTaskFinished( finished );
2215 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2216 application.SendNotification();
2218 // START PROCESS/RENDER Input, Expected Input, Expected
2219 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2220 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2222 // CHANGE TO RENDER ONCE, RESOURCES BECOME NOT READY
2223 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2226 ReloadImage(application, secondRootActor.GetImage());
2227 application.SendNotification(); // Input, Expected Input, Expected
2229 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2230 DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION);
2231 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2233 // FINISH RESOURCE LOADING
2234 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2235 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, true ) );
2236 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2237 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2238 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2239 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2244 int UtcDaliRenderTaskOnceNoSync05(void)
2246 TestApplication application;
2248 tet_infoline("Testing RenderTask Render Once\n"
2249 "Render once, Second call to SetRefreshRate(ONCE) triggers only one more finished signal\n"
2250 "PRE: Everything ready\n"
2251 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
2253 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2254 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2255 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2256 drawTrace.Enable(true);
2258 Actor rootActor = Actor::New();
2259 Stage::GetCurrent().Add( rootActor );
2261 CameraActor offscreenCameraActor = CameraActor::New();
2262 Stage::GetCurrent().Add( offscreenCameraActor );
2263 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2264 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2265 Integration::ResourceId imageRequestId = imageRequest->GetId();
2266 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2267 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2268 application.Render();
2270 Stage::GetCurrent().Add(secondRootActor);
2272 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2273 bool finished = false;
2274 RenderTaskFinished renderTaskFinished( finished );
2275 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2276 application.SendNotification();
2278 // START PROCESS/RENDER Input, Expected Input, Expected
2279 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2280 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2282 // CHANGE TO RENDER ONCE,
2283 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2284 application.SendNotification();
2285 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2286 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2287 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2288 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2289 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2291 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2292 application.SendNotification();
2293 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2294 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2295 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2296 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2297 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2301 int UtcDaliRenderTaskOnceNoSync06(void)
2303 TestApplication application;
2305 tet_infoline("Testing RenderTask Render Once\n"
2306 "Render once, Call to SetRefreshRate(ONCE) in Finished signal callback triggers\n"
2307 "another render & another finished signal\n"
2308 "PRE: Everything ready\n"
2309 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
2312 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2313 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2314 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2315 drawTrace.Enable(true);
2317 Actor rootActor = Actor::New();
2318 Stage::GetCurrent().Add( rootActor );
2320 CameraActor offscreenCameraActor = CameraActor::New();
2321 Stage::GetCurrent().Add( offscreenCameraActor );
2322 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2323 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2324 Integration::ResourceId imageRequestId = imageRequest->GetId();
2325 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2326 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2327 application.Render();
2329 Stage::GetCurrent().Add(secondRootActor);
2331 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2332 bool finished = false;
2334 ConnectionTracker connectionTracker;
2335 RenderTaskFinishedRenderAgain renderTaskFinishedRenderAgain( finished );
2336 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinishedRenderAgain );
2338 application.SendNotification();
2340 // START PROCESS/RENDER Input, Expected Input, Expected
2341 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2342 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2344 // CHANGE TO RENDER ONCE,
2345 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2346 application.SendNotification();
2347 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2348 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2350 // Expect SetRefreshRate to have been called again
2351 // Prevent next finished signal calling refresh once again
2352 RenderTaskFinished renderTaskFinished( finished );
2353 connectionTracker.DisconnectAll();
2354 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinished );
2356 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2357 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2358 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2359 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2360 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2365 int UtcDaliRenderTaskOnceNoSync07(void)
2367 TestApplication application;
2369 tet_infoline("Testing RenderTask Render Once\n"
2370 "SetRefreshRate(ONCE) again before first finished signal has been sent.\n"
2371 "PRE: resources ready\n"
2372 "POST: Only 1 finished signal 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 rootActor = Actor::New();
2380 Stage::GetCurrent().Add( rootActor );
2382 CameraActor offscreenCameraActor = CameraActor::New();
2383 Stage::GetCurrent().Add( offscreenCameraActor );
2384 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2385 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2386 Integration::ResourceId imageRequestId = imageRequest->GetId();
2387 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2388 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2389 application.Render();
2391 Stage::GetCurrent().Add(secondRootActor);
2393 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2394 bool finished = false;
2395 RenderTaskFinished renderTaskFinished( finished );
2396 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2397 application.SendNotification();
2399 // START PROCESS/RENDER Input, Expected Input, Expected
2400 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2401 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2403 // CHANGE TO RENDER ONCE,
2404 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2405 application.SendNotification();
2406 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2407 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2408 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2410 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2411 application.SendNotification();
2412 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2413 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2414 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2415 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2416 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2420 int UtcDaliRenderTaskOnceNoSync08(void)
2422 TestApplication application;
2424 tet_infoline("Testing RenderTask Render Once\n"
2425 "SetRefreshRate(ONCE), resource load failed, completes render task.\n"
2426 "PRE: resources not ready\n"
2427 "POST: Only 1 finished signal sent.");
2429 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2430 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2431 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2432 drawTrace.Enable(true);
2434 Actor rootActor = Actor::New();
2435 Stage::GetCurrent().Add( rootActor );
2437 CameraActor offscreenCameraActor = CameraActor::New();
2438 Stage::GetCurrent().Add( offscreenCameraActor );
2439 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2440 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2441 Integration::ResourceId imageRequestId = imageRequest->GetId();
2442 Stage::GetCurrent().Add(secondRootActor);
2444 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2445 bool finished = false;
2446 RenderTaskFinished renderTaskFinished( finished );
2447 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2448 application.SendNotification();
2450 // START PROCESS/RENDER Input, Expected Input, Expected
2451 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2452 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2454 // CHANGE TO RENDER ONCE,
2455 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2456 application.SendNotification();
2457 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2458 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2459 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2461 FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete
2462 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) ); // nothing to draw
2463 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2464 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2465 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2466 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2467 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2468 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2474 int UtcDaliRenderTaskOnceChain01(void)
2476 TestApplication application;
2478 tet_infoline("Testing RenderTask Render Once Chained render tasks\n"
2479 "SetRefreshRate(ONCE), resource load completes, both render tasks render.\n"
2480 "PRE: resources not ready\n"
2481 "POST: 2 finished signals sent.");
2483 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2484 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2485 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2486 drawTrace.Enable(true);
2488 Actor defaultRootActor = Actor::New(); // Root for default RT
2489 Stage::GetCurrent().Add( defaultRootActor );
2491 CameraActor offscreenCameraActor = CameraActor::New();
2492 Stage::GetCurrent().Add( offscreenCameraActor );
2493 ImageActor firstRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2494 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2495 Integration::ResourceId imageRequestId = imageRequest->GetId();
2496 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2497 Stage::GetCurrent().Add(firstRootActor);
2499 // first render task
2500 RenderTask firstTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, firstRootActor, RenderTask::REFRESH_ONCE, false);
2501 bool firstFinished = false;
2502 RenderTaskFinished renderTask1Finished( firstFinished );
2503 firstTask.FinishedSignal().Connect( &application, renderTask1Finished );
2505 // Second render task
2506 FrameBufferImage fbo = firstTask.GetTargetFrameBuffer();
2507 ImageActor secondRootActor = ImageActor::New( fbo );
2508 Stage::GetCurrent().Add(secondRootActor);
2509 RenderTask secondTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2510 bool secondFinished = false;
2511 RenderTaskFinished renderTask2Finished( secondFinished );
2512 secondTask.FinishedSignal().Connect( &application, renderTask2Finished );
2514 application.SendNotification();
2516 // START PROCESS/RENDER Input, Expected Input, Expected
2517 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false ) );
2518 DALI_TEST_CHECK( secondFinished == false );
2519 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false ) );
2520 DALI_TEST_CHECK( secondFinished == false );
2522 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2523 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false ) );
2524 DALI_TEST_CHECK( secondFinished == false );
2525 application.GetPlatform().ClearReadyResources();
2527 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, true ) );
2528 DALI_TEST_CHECK( secondFinished == true );
2530 secondFinished = false;
2531 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, false ) );
2532 DALI_TEST_CHECK( secondFinished == false );
2533 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, false ) );
2534 DALI_TEST_CHECK( secondFinished == false );
2535 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, false ) );
2536 DALI_TEST_CHECK( secondFinished == false );
2537 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, false ) );
2538 DALI_TEST_CHECK( secondFinished == false );
2543 int UtcDaliRenderTaskProperties(void)
2545 TestApplication application;
2547 RenderTask task = Stage::GetCurrent().GetRenderTaskList().CreateTask();
2549 Property::IndexContainer indices;
2550 task.GetPropertyIndices( indices );
2551 DALI_TEST_CHECK( ! indices.empty() );
2552 DALI_TEST_EQUALS( indices.size(), task.GetPropertyCount(), TEST_LOCATION );