2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <dali/dali.h>
22 #include <dali-test-suite-utils.h>
23 #include <dali/integration-api/debug.h>
27 void utc_dali_render_task_startup(void)
29 test_return_value = TET_UNDEF;
32 void utc_dali_render_task_cleanup(void)
34 test_return_value = TET_PASS;
37 namespace // unnamed namespace
40 class TestNativeImage : public NativeImage
45 TestNativeImage(int width, int height)
50 virtual bool GlExtensionCreate() {return true;};
53 * Destroy the GL resource for the NativeImage.
54 * e.g. For the EglImageKHR extension, this corresponds to calling eglDestroyImageKHR()
55 * @pre There is a GL context for the current thread.
57 virtual void GlExtensionDestroy() {};
60 * Use the NativeImage as a texture for rendering
61 * @pre There is a GL context for the current thread.
62 * @return A GL error code
64 virtual unsigned int TargetTexture() {return 0;};
67 * Called in each NativeTexture::Bind() call to allow implementation specific operations.
68 * The correct texture sampler has already been bound before the function gets called.
69 * @pre glAbstraction is being used by context in current thread
71 virtual void PrepareTexture() {}
74 * Returns the width of the NativeImage
77 virtual unsigned int GetWidth() const {return mWidth;}
80 * Returns the height of the NativeImage
83 virtual unsigned int GetHeight() const {return mHeight;}
86 * Returns the internal pixel NativeImage::PixelFormat of the NativeImage
87 * @return pixel format
89 virtual Pixel::Format GetPixelFormat() const { return Pixel::RGBA8888; }
95 const int RENDER_FRAME_INTERVAL = 16; ///< Duration of each frame in ms. (at approx 60FPS)
98 * Simulate time passed by.
100 * @note this will always process at least 1 frame (1/60 sec)
102 * @param application Test application instance
103 * @param duration Time to pass in milliseconds.
104 * @return The actual time passed in milliseconds
106 int Wait(TestApplication& application, int duration = 0)
110 for(int i = 0; i <= ( duration / RENDER_FRAME_INTERVAL); i++)
112 application.SendNotification();
113 application.Render(RENDER_FRAME_INTERVAL);
114 time += RENDER_FRAME_INTERVAL;
120 struct RenderTaskFinished
122 RenderTaskFinished( bool& finished )
123 : finished( finished )
127 void operator()( RenderTask& renderTask )
135 struct RenderTaskFinishedRemoveSource
137 RenderTaskFinishedRemoveSource( bool& finished )
138 : finished( finished ),
143 void operator()( RenderTask& renderTask )
145 DALI_TEST_CHECK(finishedOnce == false);
148 Actor srcActor = renderTask.GetSourceActor();
149 UnparentAndReset(srcActor);
156 struct RenderTaskFinishedRenderAgain
158 RenderTaskFinishedRenderAgain( bool& finished )
159 : finished( finished ),
164 void operator()( RenderTask& renderTask )
166 DALI_TEST_CHECK(finishedOnce == false);
169 renderTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
177 bool TestScreenToFrameBufferFunction( Vector2& coordinates )
179 coordinates = coordinates + Vector2( 1, 2 );
184 ImageActor CreateLoadingImage(TestApplication& application, std::string filename, Image::LoadPolicy loadPolicy, Image::ReleasePolicy releasePolicy)
186 Image image = Image::New(filename, loadPolicy, releasePolicy);
187 DALI_TEST_CHECK( image );
188 application.SendNotification();
189 application.Render(16);
190 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
191 ImageActor actor = ImageActor::New(image);
192 actor.SetSize( 80, 80 );
193 application.SendNotification();
194 application.Render(16);
198 void CompleteImageLoad(TestApplication& application, Integration::ResourceId resourceId, Integration::ResourceTypeId requestType)
200 std::vector<GLuint> ids;
202 application.GetGlAbstraction().SetNextTextureIds( ids );
204 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
205 Integration::ResourcePointer resource(bitmap);
206 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
208 application.GetPlatform().SetResourceLoaded(resourceId, requestType, resource);
211 void FailImageLoad(TestApplication& application, Integration::ResourceId resourceId )
213 application.GetPlatform().SetResourceLoadFailed(resourceId, Integration::FailureUnknown);
216 void ReloadImage(TestApplication& application, Image image)
218 application.GetPlatform().ClearReadyResources();
219 application.GetPlatform().DiscardRequest();
220 application.GetPlatform().ResetTrace();
221 application.GetPlatform().SetClosestImageSize(Vector2(80.0f, 80.0f)); // Ensure reload is called.
225 RenderTask CreateRenderTask(TestApplication& application,
226 CameraActor offscreenCamera,
227 Actor rootActor, // Reset default render task to point at this actor
228 Actor secondRootActor, // Source actor
229 unsigned int refreshRate,
232 // Change main render task to use a different root
233 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
234 taskList.GetTask(0u).SetSourceActor( rootActor );
236 FrameBufferImage frameBufferImage;
239 NativeImagePtr testNativeImagePtr = new TestNativeImage(10, 10);
240 frameBufferImage= FrameBufferImage::New( *testNativeImagePtr.Get() );
244 frameBufferImage = FrameBufferImage::New( 10, 10 );
247 // Don't draw output framebuffer
249 RenderTask newTask = taskList.CreateTask();
250 newTask.SetCameraActor( offscreenCamera );
251 newTask.SetSourceActor( secondRootActor );
252 newTask.SetInputEnabled( false );
253 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
254 newTask.SetClearEnabled( true );
255 newTask.SetExclusive( true );
256 newTask.SetRefreshRate( refreshRate );
257 newTask.SetTargetFrameBuffer( frameBufferImage );
262 bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool testDrawn, bool& finishedSig, bool testFinished )
266 application.Render(16);
267 application.SendNotification();
269 bool sigPassed = false;
272 sigPassed = finishedSig;
276 sigPassed = ! finishedSig;
279 bool drawPassed = false;
282 drawPassed = callStack.FindMethod("DrawElements") || callStack.FindMethod("DrawArrays");
286 drawPassed = ! callStack.FindMethod("DrawElements") && ! callStack.FindMethod("DrawArrays") ;
289 tet_printf("UpdateRender: drawPassed:%s sigPassed:%s (Expected: %s %s)\n", drawPassed?"T":"F", sigPassed?"T":"F", testDrawn?"T":"F", testFinished?"T":"F");
291 return (sigPassed && drawPassed);
294 } // unnamed namespace
297 /****************************************************************************************************/
298 /****************************************************************************************************/
299 /******************************** TEST CASES BELOW **********************************************/
300 /****************************************************************************************************/
301 /****************************************************************************************************/
303 int UtcDaliRenderTaskDownCast(void)
305 TestApplication application;
307 tet_infoline("Testing RenderTask::DownCast()");
309 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
311 BaseHandle base = taskList.GetTask( 0u );
312 DALI_TEST_CHECK( base );
314 RenderTask task = RenderTask::DownCast( base );
315 DALI_TEST_CHECK( task );
317 // Try calling a method
318 DALI_TEST_CHECK( task.GetSourceActor() );
322 int UtcDaliRenderTaskSetSourceActor(void)
324 TestApplication application;
326 tet_infoline("Testing RenderTask::SetSourceActor()");
328 Stage stage = Stage::GetCurrent();
330 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
332 RenderTaskList taskList = stage.GetRenderTaskList();
334 RenderTask task = taskList.GetTask( 0u );
336 Actor actor = task.GetSourceActor();
337 DALI_TEST_CHECK( actor );
339 std::vector<GLuint> ids;
341 application.GetGlAbstraction().SetNextTextureIds( ids );
343 BitmapImage img = BitmapImage::New( 1,1 );
344 ImageActor newActor = ImageActor::New( img );
345 newActor.SetSize(1,1);
346 stage.Add( newActor );
348 Actor nonRenderableActor = Actor::New();
349 stage.Add( nonRenderableActor );
351 // Stop the newActor from being rendered by changing the source actor
352 DALI_TEST_CHECK( nonRenderableActor );
353 task.SetSourceActor( nonRenderableActor );
354 DALI_TEST_CHECK( task.GetSourceActor() != actor );
355 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
357 // Update & Render nothing!
358 application.GetGlAbstraction().ClearBoundTextures();
359 application.SendNotification();
360 application.Render();
362 // Check that nothing was rendered
363 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
365 // Set newActor as the new source Actor
366 task.SetSourceActor( newActor );
367 DALI_TEST_CHECK( task.GetSourceActor() != actor );
368 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
370 // Update & Render the newActor
371 application.GetGlAbstraction().ClearBoundTextures();
372 application.SendNotification();
373 application.Render();
375 // Check that the newActor was rendered
376 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
377 if ( boundTextures.size() )
379 DALI_TEST_EQUALS( boundTextures[0], 7u, TEST_LOCATION );
384 int UtcDaliRenderTaskSetSourceActorOffStage(void)
386 TestApplication application;
388 tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)");
390 Stage stage = Stage::GetCurrent();
392 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
394 RenderTaskList taskList = stage.GetRenderTaskList();
396 RenderTask task = taskList.GetTask( 0u );
398 Actor actor = task.GetSourceActor();
399 DALI_TEST_CHECK( actor );
401 std::vector<GLuint> ids;
402 GLuint expectedTextureId( 3 );
403 ids.push_back( expectedTextureId );
404 application.GetGlAbstraction().SetNextTextureIds( ids );
406 BitmapImage img = BitmapImage::New( 1,1 );
407 ImageActor newActor = ImageActor::New( img );
408 newActor.SetSize(1,1);
409 task.SetSourceActor( newActor );
410 // Don't add newActor to stage yet
412 // Update & Render with the actor initially off-stage
413 application.GetGlAbstraction().ClearBoundTextures();
414 application.SendNotification();
415 application.Render();
417 // Check that nothing was rendered
418 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
421 stage.Add( newActor );
423 // Update & Render with the actor on-stage
424 application.GetGlAbstraction().ClearBoundTextures();
425 application.SendNotification();
426 application.Render();
428 // Check that the newActor was rendered
429 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
430 if ( boundTextures.size() )
432 DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION );
435 // Now remove from stage
436 stage.Remove( newActor );
438 // Update & Render with the actor off-stage
439 application.GetGlAbstraction().ClearBoundTextures();
440 application.SendNotification();
441 application.Render();
445 int UtcDaliRenderTaskSetSourceActorEmpty(void)
447 TestApplication application;
449 tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)");
451 Stage stage = Stage::GetCurrent();
453 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
455 RenderTaskList taskList = stage.GetRenderTaskList();
457 RenderTask task = taskList.GetTask( 0u );
459 Actor actor = task.GetSourceActor();
460 DALI_TEST_CHECK( actor );
462 std::vector<GLuint> ids;
463 GLuint expectedTextureId( 5 );
464 ids.push_back( expectedTextureId );
465 application.GetGlAbstraction().SetNextTextureIds( ids );
467 BitmapImage img = BitmapImage::New( 1,1 );
468 ImageActor newActor = ImageActor::New( img );
469 newActor.SetSize(1,1);
470 stage.Add( newActor );
472 Actor nonRenderableActor = Actor::New();
473 stage.Add( nonRenderableActor );
475 // Set with empty handle
476 task.SetSourceActor( Actor() );
477 DALI_TEST_CHECK( ! task.GetSourceActor() );
479 // Update & Render nothing!
480 application.GetGlAbstraction().ClearBoundTextures();
481 application.SendNotification();
482 application.Render();
484 // Check that nothing was rendered
485 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
487 // Set with non-empty handle
488 task.SetSourceActor( newActor );
489 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
491 // Update & Render the newActor
492 application.GetGlAbstraction().ClearBoundTextures();
493 application.SendNotification();
494 application.Render();
496 // Check that the newActor was rendered
497 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
498 if ( boundTextures.size() )
500 DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION );
505 int UtcDaliRenderTaskGetSourceActor(void)
507 TestApplication application;
509 tet_infoline("Testing RenderTask::GetSourceActor()");
511 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
513 RenderTask task = taskList.GetTask( 0u );
515 Actor actor = task.GetSourceActor();
516 DALI_TEST_CHECK( actor );
518 // By default the entire scene should be rendered
519 Actor root = Stage::GetCurrent().GetLayer( 0 );
520 DALI_TEST_CHECK( root == actor );
524 int UtcDaliRenderTaskSetExclusive(void)
526 TestApplication application;
528 tet_infoline("Testing RenderTask::SetExclusive()");
530 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
532 // Manipulate the GenTextures behaviour, to identify different ImageActors
534 std::vector<GLuint> ids;
535 ids.push_back( 8 ); // 8 = actor1
536 ids.push_back( 9 ); // 9 = actor2
537 ids.push_back( 10 ); // 10 = actor3
538 application.GetGlAbstraction().SetNextTextureIds( ids );
540 BitmapImage img1 = BitmapImage::New( 1,1 );
541 ImageActor actor1 = ImageActor::New( img1 );
543 Stage::GetCurrent().Add( actor1 );
545 // Update & Render actor1
546 application.SendNotification();
547 application.Render();
549 // Check that the actor1 was rendered
550 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
551 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
553 if ( boundTextures.size() )
555 DALI_TEST_EQUALS( boundTextures[0], 8u/*unique to actor1*/, TEST_LOCATION );
558 BitmapImage img2 = BitmapImage::New( 1,1 );
559 ImageActor actor2 = ImageActor::New( img2 );
562 // Force actor2 to be rendered before actor1
563 Layer layer = Layer::New();
564 Stage::GetCurrent().Add( layer );
566 layer.LowerToBottom();
569 application.GetGlAbstraction().ClearBoundTextures();
570 application.SendNotification();
571 application.Render();
573 // Check that the actors were rendered
574 DALI_TEST_EQUALS( boundTextures.size(), 2u, TEST_LOCATION );
576 if ( boundTextures.size() )
578 DALI_TEST_EQUALS( boundTextures[0], 9u/*unique to actor2*/, TEST_LOCATION );
579 DALI_TEST_EQUALS( boundTextures[1], 8u/*unique to actor1*/, TEST_LOCATION );
582 BitmapImage img3 = BitmapImage::New( 1,1 );
583 ImageActor actor3 = ImageActor::New( img3 );
586 // Force actor3 to be rendered before actor2
587 layer = Layer::New();
588 Stage::GetCurrent().Add( layer );
590 layer.LowerToBottom();
592 // Update & Render all actors
593 application.GetGlAbstraction().ClearBoundTextures();
594 application.SendNotification();
595 application.Render();
597 // Check that the actors were rendered
598 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
600 if ( boundTextures.size() )
602 DALI_TEST_EQUALS( boundTextures[0], 10u/*unique to actor3*/, TEST_LOCATION );
603 DALI_TEST_EQUALS( boundTextures[1], 9u/*unique to actor2*/, TEST_LOCATION );
604 DALI_TEST_EQUALS( boundTextures[2], 8u/*unique to actor1*/, TEST_LOCATION );
607 // Both actors are now connected to the root node
608 // Setup 2 render-tasks - the first will render from the root-node, and the second from actor2
610 // Not exclusive is the default
611 RenderTask task1 = taskList.GetTask( 0u );
612 DALI_TEST_CHECK( false == task1.IsExclusive() );
614 RenderTask task2 = taskList.CreateTask();
615 DALI_TEST_CHECK( false == task2.IsExclusive() );
616 task2.SetSourceActor( actor2 );
618 // Task1 should render all actors, and task 2 should render only actor2
620 application.GetGlAbstraction().ClearBoundTextures();
621 application.SendNotification();
622 application.Render();
624 DALI_TEST_EQUALS( boundTextures.size(), 4u, TEST_LOCATION );
626 if ( boundTextures.size() == 4 )
628 // Test that task 1 renders actor3, then actor2 & then actor1
629 DALI_TEST_CHECK( boundTextures[0] == 10u );
630 DALI_TEST_CHECK( boundTextures[1] == 9u );
631 DALI_TEST_CHECK( boundTextures[2] == 8u );
633 // Test that task 2 renders actor2
634 DALI_TEST_EQUALS( boundTextures[3], 9u, TEST_LOCATION );
637 // Make actor2 exclusive to task2
639 task2.SetExclusive( true );
640 DALI_TEST_CHECK( true == task2.IsExclusive() );
642 // Task1 should render only actor1, and task 2 should render only actor2
644 application.GetGlAbstraction().ClearBoundTextures();
645 application.SendNotification();
646 application.Render();
648 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
649 if ( boundTextures.size() == 3 )
651 // Test that task 1 renders actor3 & actor1
652 DALI_TEST_CHECK( boundTextures[0] == 10u );
653 DALI_TEST_CHECK( boundTextures[1] == 8u );
655 // Test that task 2 renders actor2
656 DALI_TEST_CHECK( boundTextures[2] == 9u );
661 int UtcDaliRenderTaskIsExclusive(void)
663 TestApplication application;
665 tet_infoline("Testing RenderTask::IsExclusive()");
667 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
669 // Not exclusive is the default
670 RenderTask task = taskList.GetTask( 0u );
671 DALI_TEST_CHECK( false == task.IsExclusive() );
673 RenderTask newTask = taskList.CreateTask();
674 DALI_TEST_CHECK( false == newTask.IsExclusive() );
678 int UtcDaliRenderTaskSetInputEnabled(void)
680 TestApplication application;
682 tet_infoline("Testing RenderTask::SetInputEnabled()");
684 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
686 // Input is enabled by default
687 RenderTask task = taskList.GetTask( 0u );
688 DALI_TEST_CHECK( true == task.GetInputEnabled() );
690 task.SetInputEnabled( false );
691 DALI_TEST_CHECK( false == task.GetInputEnabled() );
693 task.SetInputEnabled( true );
694 DALI_TEST_CHECK( true == task.GetInputEnabled() );
698 int UtcDaliRenderTaskGetInputEnabled(void)
700 TestApplication application;
702 tet_infoline("Testing RenderTask::GetInputEnabled()");
704 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
706 // Input is enabled by default
707 RenderTask task = taskList.GetTask( 0u );
708 DALI_TEST_CHECK( true == task.GetInputEnabled() );
710 RenderTask newTask = taskList.CreateTask();
711 DALI_TEST_CHECK( true == newTask.GetInputEnabled() );
715 int UtcDaliRenderTaskSetCameraActor(void)
717 TestApplication application;
719 tet_infoline("Testing RenderTask::SetCameraActor()");
721 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
723 RenderTask task = taskList.GetTask( 0u );
725 Actor actor = task.GetCameraActor();
726 DALI_TEST_CHECK( actor );
728 CameraActor newActor = CameraActor::New();
729 DALI_TEST_CHECK( newActor );
731 task.SetCameraActor( newActor );
732 DALI_TEST_CHECK( task.GetCameraActor() != actor );
733 DALI_TEST_CHECK( task.GetCameraActor() == newActor );
737 int UtcDaliRenderTaskGetCameraActor(void)
739 TestApplication application;
741 tet_infoline("Testing RenderTask::GetCameraActor()");
743 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
745 RenderTask task = taskList.GetTask( 0u );
747 Actor actor = task.GetCameraActor();
748 DALI_TEST_CHECK( actor );
750 RenderTask newTask = taskList.CreateTask();
751 DALI_TEST_CHECK( actor == newTask.GetCameraActor() );
755 int UtcDaliRenderTaskSetTargetFrameBuffer(void)
757 TestApplication application;
759 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
761 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
763 RenderTask task = taskList.GetTask( 0u );
765 // By default render-tasks do not render off-screen
766 FrameBufferImage image = task.GetTargetFrameBuffer();
767 DALI_TEST_CHECK( !image );
769 FrameBufferImage newImage = FrameBufferImage::New();
771 task.SetTargetFrameBuffer( newImage );
772 DALI_TEST_CHECK( task.GetTargetFrameBuffer() == newImage );
776 int UtcDaliRenderTaskGetTargetFrameBuffer(void)
778 TestApplication application;
780 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
782 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
784 RenderTask task = taskList.GetTask( 0u );
786 // By default render-tasks do not render off-screen
787 FrameBufferImage image = task.GetTargetFrameBuffer();
788 DALI_TEST_CHECK( !image );
790 RenderTask newTask = taskList.CreateTask();
791 DALI_TEST_CHECK( !newTask.GetTargetFrameBuffer() );
795 int UtcDaliRenderTaskSetScreenToFrameBufferFunction(void)
797 TestApplication application;
799 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
801 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
803 RenderTask task = taskList.GetTask( 0u );
805 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
807 Vector2 coordinates( 5, 10 );
808 Vector2 convertedCoordinates( 6, 12 ); // + Vector(1, 2)
810 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
811 DALI_TEST_CHECK( func( coordinates ) );
812 DALI_TEST_CHECK( coordinates == convertedCoordinates );
814 task.SetScreenToFrameBufferFunction( RenderTask::FULLSCREEN_FRAMEBUFFER_FUNCTION );
815 func = task.GetScreenToFrameBufferFunction();
816 DALI_TEST_CHECK( func( coordinates ) );
818 task.SetScreenToFrameBufferFunction( RenderTask::DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION );
819 func = task.GetScreenToFrameBufferFunction();
820 DALI_TEST_CHECK( ! func( coordinates ) );
824 int UtcDaliRenderTaskGetScreenToFrameBufferFunction(void)
826 TestApplication application;
828 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction()");
830 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
832 RenderTask task = taskList.GetTask( 0u );
834 Vector2 originalCoordinates( 5, 10 );
835 Vector2 coordinates( 5, 10 );
837 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
838 DALI_TEST_CHECK( !func( coordinates ) ); // conversion should fail by default
839 DALI_TEST_CHECK( coordinates == originalCoordinates ); // coordinates should not be modified
844 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActor(void)
846 TestApplication application;
847 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor ");
849 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
850 RenderTask renderTask = taskList.CreateTask();
851 Actor mappingActor = Actor::New();
852 renderTask.SetScreenToFrameBufferMappingActor(mappingActor);
854 DALI_TEST_CHECK( mappingActor == renderTask.GetScreenToFrameBufferMappingActor() );
858 int UtcDaliRenderTaskSetViewport(void)
860 TestApplication application;
862 tet_infoline("Testing RenderTask::SetViewport()");
864 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
866 RenderTask task = taskList.GetTask( 0u );
868 Viewport viewport = task.GetViewport();
870 // By default the viewport should match the stage width/height
872 Vector2 stageSize = Stage::GetCurrent().GetSize();
873 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
874 DALI_TEST_CHECK( viewport == expectedViewport );
876 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
877 task.SetViewport( newViewport );
879 // Update (viewport is a property)
880 application.SendNotification();
881 application.Render();
883 DALI_TEST_CHECK( task.GetViewport() == newViewport );
887 int UtcDaliRenderTaskGetViewport(void)
889 TestApplication application;
891 tet_infoline("Testing RenderTask::GetViewport()");
893 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
895 RenderTask task = taskList.GetTask( 0u );
897 Viewport viewport = task.GetViewport();
899 // By default the viewport should match the stage width/height
901 Vector2 stageSize = Stage::GetCurrent().GetSize();
902 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
903 DALI_TEST_CHECK( viewport == expectedViewport );
905 RenderTask newTask = taskList.CreateTask();
906 DALI_TEST_CHECK( newTask.GetViewport() == expectedViewport );
910 int UtcDaliRenderTaskSetViewportPosition(void)
912 TestApplication application;
914 tet_infoline("Testing RenderTask::SetViewportPosition()");
916 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
918 RenderTask task = taskList.GetTask( 0u );
920 Viewport viewport = task.GetViewport();
922 // By default the viewport should match the stage width/height
924 Vector2 stageSize = Stage::GetCurrent().GetSize();
925 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
926 DALI_TEST_CHECK( viewport == expectedViewport );
929 Vector2 newPosition(25.0f, 50.0f);
930 task.SetViewportPosition( newPosition );
932 // Update (viewport is a property)
933 application.SendNotification();
934 application.Render();
936 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition, Math::MACHINE_EPSILON_1, TEST_LOCATION );
938 // Set by Property test
939 Vector2 newPosition2(32.0f, 32.0f);
940 task.SetProperty( RenderTask::VIEWPORT_POSITION, newPosition2 );
943 application.SendNotification();
944 application.Render();
946 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
948 Vector2 newPosition3(64.0f, 0.0f);
949 Animation animation = Animation::New(1.0f);
950 animation.AnimateTo( Property( task, RenderTask::VIEWPORT_POSITION ), newPosition3, AlphaFunctions::Linear );
953 // Perform 1000ms worth of updates at which point animation should have completed.
954 Wait(application, 1000);
955 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
959 int UtcDaliRenderTaskSetViewportSize(void)
961 TestApplication application;
963 tet_infoline("Testing RenderTask::SetViewportSize()");
965 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
967 RenderTask task = taskList.GetTask( 0u );
969 Viewport viewport = task.GetViewport();
971 // By default the viewport should match the stage width/height
973 Vector2 stageSize = Stage::GetCurrent().GetSize();
974 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
975 DALI_TEST_CHECK( viewport == expectedViewport );
977 Vector2 newSize(128.0f, 64.0f);
978 task.SetViewportSize( newSize );
980 // Update (viewport is a property)
981 application.SendNotification();
982 application.Render();
984 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize, Math::MACHINE_EPSILON_1, TEST_LOCATION );
986 // Set by Property test
987 Vector2 newSize2(50.0f, 50.0f);
988 task.SetProperty( RenderTask::VIEWPORT_SIZE, newSize2 );
991 application.SendNotification();
992 application.Render();
994 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
996 Vector2 newSize3(10.0f, 10.0f);
997 Animation animation = Animation::New(1.0f);
998 animation.AnimateTo( Property( task, RenderTask::VIEWPORT_SIZE ), newSize3, AlphaFunctions::Linear );
1001 // Perform 1000ms worth of updates at which point animation should have completed.
1002 Wait(application, 1000);
1003 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1008 int UtcDaliRenderTaskSetClearColor(void)
1010 TestApplication application;
1012 tet_infoline("Testing RenderTask::SetClearColor()");
1014 Vector4 testColor( 1.0f, 2.0f, 3.0f, 4.0f );
1015 Vector4 testColor2( 5.0f, 6.0f, 7.0f, 8.0f );
1017 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1019 RenderTask task = taskList.GetTask( 0u );
1020 DALI_TEST_CHECK( task.GetClearColor() != testColor );
1022 task.SetClearColor( testColor );
1027 DALI_TEST_EQUALS( task.GetClearColor(), testColor, TEST_LOCATION );
1029 task.SetProperty( RenderTask::CLEAR_COLOR, testColor2 );
1034 DALI_TEST_EQUALS( task.GetClearColor(), testColor2, TEST_LOCATION );
1038 int UtcDaliRenderTaskGetClearColor(void)
1040 TestApplication application;
1042 tet_infoline("Testing RenderTask::GetClearColor()");
1044 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1045 RenderTask task = taskList.GetTask( 0u );
1046 DALI_TEST_EQUALS( task.GetClearColor(), RenderTask::DEFAULT_CLEAR_COLOR, TEST_LOCATION );
1050 int UtcDaliRenderTaskSetClearEnabled(void)
1052 TestApplication application;
1054 tet_infoline("Testing RenderTask::SetClearEnabled()");
1056 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1058 RenderTask task = taskList.GetTask( 0u );
1059 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1061 task.SetClearEnabled( true );
1062 DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION );
1064 task.SetClearEnabled( false );
1065 DALI_TEST_EQUALS( task.GetClearEnabled(), false, TEST_LOCATION );
1069 int UtcDaliRenderTaskGetClearEnabled(void)
1071 TestApplication application;
1073 tet_infoline("Testing RenderTask::GetClearEnabled()");
1075 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1077 RenderTask task = taskList.GetTask( 0u );
1078 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1082 int UtcDaliRenderTaskSetRefreshRate(void)
1084 TestApplication application;
1086 tet_infoline("Testing RenderTask::SetRefreshRate()");
1088 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1090 // By default tasks will be processed every frame
1091 RenderTask task = taskList.GetTask( 0u );
1092 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1094 task.SetRefreshRate( 2u ); // every-other frame
1095 DALI_TEST_CHECK( 2u == task.GetRefreshRate() );
1097 task.SetRefreshRate( RenderTask::REFRESH_ALWAYS );
1098 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1102 int UtcDaliRenderTaskGetRefreshRate(void)
1104 TestApplication application;
1106 tet_infoline("Testing RenderTask::GetRefreshRate()");
1108 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1110 // By default tasks will be processed every frame
1111 RenderTask task = taskList.GetTask( 0u );
1112 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1114 RenderTask newTask = taskList.CreateTask();
1115 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == newTask.GetRefreshRate() );
1119 int UtcDaliRenderTaskSignalFinished(void)
1121 TestApplication application;
1123 tet_infoline("Testing RenderTask::SignalFinished()");
1125 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1126 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1128 CameraActor offscreenCameraActor = CameraActor::New();
1130 Stage::GetCurrent().Add( offscreenCameraActor );
1132 BitmapImage image = BitmapImage::New( 10, 10 );
1133 ImageActor rootActor = ImageActor::New( image );
1134 rootActor.SetSize( 10, 10 );
1135 Stage::GetCurrent().Add( rootActor );
1137 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1138 NativeImagePtr testNativeImagePtr = new TestNativeImage(10, 10);
1139 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
1141 // Flush all outstanding messages
1142 application.SendNotification();
1143 application.Render();
1145 RenderTask newTask = taskList.CreateTask();
1146 newTask.SetCameraActor( offscreenCameraActor );
1147 newTask.SetSourceActor( rootActor );
1148 newTask.SetInputEnabled( false );
1149 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
1150 newTask.SetClearEnabled( true );
1151 newTask.SetExclusive( true );
1152 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
1153 newTask.SetTargetFrameBuffer( frameBufferImage );
1155 // Framebuffer doesn't actually get created until Connected, i.e. by previous line
1157 bool finished = false;
1158 RenderTaskFinished renderTaskFinished( finished );
1159 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1161 // Flush the queue and render.
1162 application.SendNotification();
1164 // 1 render to process render task, then wait for sync before finished msg is sent
1165 // from update to the event thread.
1167 application.Render();
1168 application.SendNotification();
1169 DALI_TEST_CHECK( !finished );
1171 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1172 DALI_TEST_CHECK( lastSyncObj != NULL );
1174 application.Render();
1175 DALI_TEST_EQUALS( (application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1176 application.SendNotification();
1177 DALI_TEST_CHECK( !finished );
1179 application.Render();
1180 DALI_TEST_EQUALS( (application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1181 application.SendNotification();
1182 DALI_TEST_CHECK( ! finished );
1184 sync.SetObjectSynced( lastSyncObj, true );
1186 application.Render();
1187 application.SendNotification();
1188 DALI_TEST_CHECK( !finished );
1190 application.Render();
1191 application.SendNotification();
1192 DALI_TEST_CHECK( finished );
1195 application.Render(); // Double check no more finished signal
1196 application.SendNotification();
1197 DALI_TEST_CHECK( ! finished );
1202 int UtcDaliRenderTaskContinuous01(void)
1204 TestApplication application;
1206 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not staged)\nPOST:continuous renders, no Finished signal");
1208 // SETUP AN OFFSCREEN RENDER TASK
1209 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1210 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1211 drawTrace.Enable(true);
1213 Actor rootActor = Actor::New();
1214 Stage::GetCurrent().Add( rootActor );
1216 CameraActor offscreenCameraActor = CameraActor::New();
1217 Stage::GetCurrent().Add( offscreenCameraActor );
1219 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1220 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1221 Integration::ResourceId imageRequestId = imageRequest->GetId();
1222 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1224 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1225 bool finished = false;
1226 RenderTaskFinished renderTaskFinished( finished );
1227 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1228 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1229 application.SendNotification();
1231 // START PROCESS/RENDER Input, Expected Input, Expected
1232 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1233 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1235 // ADD SOURCE ACTOR TO STAGE - expect continuous renders to start, no finished signal
1236 Stage::GetCurrent().Add(secondRootActor);
1237 application.SendNotification();
1239 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
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 ) );
1243 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1244 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1249 int UtcDaliRenderTaskContinuous02(void)
1251 TestApplication application;
1253 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not visible)\nPOST:continuous renders, no Finished signal");
1255 // SETUP AN OFFSCREEN RENDER TASK
1256 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1257 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1258 drawTrace.Enable(true);
1260 Actor rootActor = Actor::New();
1261 Stage::GetCurrent().Add( rootActor );
1263 CameraActor offscreenCameraActor = CameraActor::New();
1264 Stage::GetCurrent().Add( offscreenCameraActor );
1266 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1267 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1268 Integration::ResourceId imageRequestId = imageRequest->GetId();
1269 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1270 Stage::GetCurrent().Add(secondRootActor);
1271 secondRootActor.SetVisible(false);
1273 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1274 bool finished = false;
1275 RenderTaskFinished renderTaskFinished( finished );
1276 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1277 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1278 application.SendNotification();
1280 // START PROCESS/RENDER Input, Expected Input, Expected
1281 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1282 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1284 // MAKE SOURCE ACTOR VISIBLE - expect continuous renders to start, no finished signal
1285 secondRootActor.SetVisible(true);
1286 application.SendNotification();
1288 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
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 ) );
1292 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1293 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1297 int UtcDaliRenderTaskContinuous03(void)
1299 TestApplication application;
1301 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (camera actor not staged)\nPOST:continuous renders, no Finished signal");
1303 // SETUP AN OFFSCREEN RENDER TASK
1304 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1305 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1306 drawTrace.Enable(true);
1308 Actor rootActor = Actor::New();
1309 Stage::GetCurrent().Add( rootActor );
1311 CameraActor offscreenCameraActor = CameraActor::New();
1312 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1313 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1314 Integration::ResourceId imageRequestId = imageRequest->GetId();
1315 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1316 Stage::GetCurrent().Add(secondRootActor);
1318 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1319 bool finished = false;
1320 RenderTaskFinished renderTaskFinished( finished );
1321 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1322 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1323 application.SendNotification();
1325 // START PROCESS/RENDER Input, Expected Input, Expected
1326 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1327 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1329 // ADD CAMERA ACTOR TO STAGE - expect continuous renders to start, no finished signal
1330 Stage::GetCurrent().Add( offscreenCameraActor );
1331 application.SendNotification();
1333 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
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 ) );
1337 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1338 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1343 int UtcDaliRenderTaskContinuous04(void)
1345 TestApplication application;
1347 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: Resource not ready\nPOST:continuous renders, no Finished signal");
1349 // SETUP AN OFFSCREEN RENDER TASK
1350 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1351 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1352 drawTrace.Enable(true);
1354 Actor rootActor = Actor::New();
1355 Stage::GetCurrent().Add( rootActor );
1357 CameraActor offscreenCameraActor = CameraActor::New();
1358 Stage::GetCurrent().Add( offscreenCameraActor );
1359 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1360 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1361 Integration::ResourceId imageRequestId = imageRequest->GetId();
1362 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1363 Stage::GetCurrent().Add(secondRootActor);
1365 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1366 bool finished = false;
1367 RenderTaskFinished renderTaskFinished( finished );
1368 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1369 application.SendNotification();
1371 // START PROCESS/RENDER Input, Expected Input, Expected
1372 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1373 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1375 // FINISH RESOURCE LOADING - expect continuous renders to start, no finished signal
1376 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1377 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1379 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1380 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1381 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1382 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1383 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1387 int UtcDaliRenderTaskContinuous05(void)
1389 TestApplication application;
1391 tet_infoline("Testing RenderTask Render Continuous, every 3 frames using loading image\nPRE: Resources not ready\nPOST:continuous renders, no Finished signal");
1393 // SETUP AN OFFSCREEN RENDER TASK
1394 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1395 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1396 drawTrace.Enable(true);
1398 Actor rootActor = Actor::New();
1399 Stage::GetCurrent().Add( rootActor );
1401 CameraActor offscreenCameraActor = CameraActor::New();
1402 Stage::GetCurrent().Add( offscreenCameraActor );
1403 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1404 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1405 Integration::ResourceId imageRequestId = imageRequest->GetId();
1406 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1407 Stage::GetCurrent().Add(secondRootActor);
1409 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, 3, true);
1410 bool finished = false;
1411 RenderTaskFinished renderTaskFinished( finished );
1412 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1413 application.SendNotification();
1415 // START PROCESS/RENDER Input, Expected Input, Expected
1416 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1417 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1419 // FINISH RESOURCE LOADING - expect continuous renders to start, no finished signal
1420 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1421 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1422 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1423 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1424 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1425 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1426 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1430 int UtcDaliRenderTaskContinuous06(void)
1432 TestApplication application;
1434 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");
1436 // SETUP AN OFFSCREEN RENDER TASK
1437 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1438 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1439 drawTrace.Enable(true);
1441 Actor rootActor = Actor::New();
1442 Stage::GetCurrent().Add( rootActor );
1444 CameraActor offscreenCameraActor = CameraActor::New();
1445 Stage::GetCurrent().Add( offscreenCameraActor );
1446 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1447 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1448 Integration::ResourceId imageRequestId = imageRequest->GetId();
1449 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1450 Stage::GetCurrent().Add(secondRootActor);
1452 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1453 bool finished = false;
1454 RenderTaskFinished renderTaskFinished( finished );
1455 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1456 application.SendNotification();
1458 // START PROCESS/RENDER Input, Expected Input, Expected
1459 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1460 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1462 // FINISH RESOURCE LOADING - expect continuous renders to start, no finished signal
1463 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1464 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1465 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1468 newTask.SetRefreshRate(3); // Input, Expected Input, Expected
1469 application.SendNotification();
1470 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1471 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1472 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1473 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1474 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1475 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1476 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1477 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1479 newTask.SetRefreshRate(RenderTask::REFRESH_ALWAYS); // Should render every frame immediately
1480 application.SendNotification();
1481 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1482 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1483 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1488 int UtcDaliRenderTaskOnce01(void)
1490 TestApplication application;
1492 tet_infoline("Testing RenderTask Render Once GlSync, using loading image\nPRE: Resources not ready, Source not visible\nPOST: Finished signal sent once only");
1494 // SETUP AN OFFSCREEN RENDER TASK
1495 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1496 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1497 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1498 drawTrace.Enable(true);
1500 Actor rootActor = Actor::New();
1501 Stage::GetCurrent().Add( rootActor );
1503 CameraActor offscreenCameraActor = CameraActor::New();
1504 Stage::GetCurrent().Add( offscreenCameraActor );
1505 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1506 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1507 Integration::ResourceId imageRequestId = imageRequest->GetId();
1508 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1510 Stage::GetCurrent().Add(secondRootActor);
1511 secondRootActor.SetVisible(false);
1513 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
1514 bool finished = false;
1515 RenderTaskFinished renderTaskFinished( finished );
1516 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1517 application.SendNotification();
1519 // START PROCESS/RENDER Input, Expected Input, Expected
1520 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1521 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1523 // MAKE SOURCE VISIBLE
1524 secondRootActor.SetVisible(true);
1525 application.SendNotification();
1526 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1527 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1529 // FINISH RESOURCE LOADING - expect no rendering yet
1530 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1531 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1532 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1533 DALI_TEST_CHECK( lastSyncObj != NULL );
1535 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1536 sync.SetObjectSynced( lastSyncObj, true );
1537 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1538 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1540 // Finished rendering - expect no more renders, no more signals:
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 ) );
1545 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1546 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1550 int UtcDaliRenderTaskOnce02(void)
1552 TestApplication application;
1554 tet_infoline("Testing RenderTask Render Once GlSync, using loading image. Switch from render always after ready to render once\n"
1555 "PRE: Render task ready, Image not loaded\n"
1556 "POST: Finished signal sent only once");
1558 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1559 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1560 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1561 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1562 drawTrace.Enable(true);
1564 Actor rootActor = Actor::New();
1565 Stage::GetCurrent().Add( rootActor );
1567 CameraActor offscreenCameraActor = CameraActor::New();
1568 Stage::GetCurrent().Add( offscreenCameraActor );
1569 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1570 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1571 Integration::ResourceId imageRequestId = imageRequest->GetId();
1572 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1573 Stage::GetCurrent().Add(secondRootActor);
1575 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1576 bool finished = false;
1577 RenderTaskFinished renderTaskFinished( finished );
1578 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1579 application.SendNotification();
1581 // START PROCESS/RENDER Input, Expected Input, Expected
1582 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1583 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1585 // FINISH RESOURCE LOADING
1586 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1587 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1588 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1590 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1591 application.SendNotification(); // Input, Expected Input, Expected
1592 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1593 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1594 DALI_TEST_CHECK( lastSyncObj != NULL );
1596 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1597 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1598 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1599 sync.SetObjectSynced( lastSyncObj, true );
1600 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1601 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1603 // Finished rendering - expect no more renders, no more signals:
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 ) );
1608 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1609 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1614 int UtcDaliRenderTaskOnce03(void)
1616 TestApplication application;
1618 tet_infoline("Testing RenderTask Render Once GlSync\n"
1619 "Switch from Render always after ready to render once with resources unready\n"
1620 "PRE: Everything ready to render\n"
1621 "POST: Finished signal sent once");
1623 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1624 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1625 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1626 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1627 drawTrace.Enable(true);
1629 Actor rootActor = Actor::New();
1630 Stage::GetCurrent().Add( rootActor );
1632 CameraActor offscreenCameraActor = CameraActor::New();
1633 Stage::GetCurrent().Add( offscreenCameraActor );
1634 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1635 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1636 Integration::ResourceId imageRequestId = imageRequest->GetId();
1637 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1638 Stage::GetCurrent().Add(secondRootActor);
1640 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1641 bool finished = false;
1642 RenderTaskFinished renderTaskFinished( finished );
1643 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1644 application.SendNotification();
1646 // START PROCESS/RENDER Input, Expected Input, Expected
1647 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1648 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1650 // CHANGE TO RENDER ONCE
1651 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1652 application.SendNotification(); // Input, Expected Input, Expected
1653 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1654 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1656 // FINISH RESOURCE LOADING
1657 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1658 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1659 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1660 DALI_TEST_CHECK( lastSyncObj != NULL );
1662 sync.SetObjectSynced( lastSyncObj, true );
1663 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1664 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1666 // Finished rendering - expect no more renders, no more signals:
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 ) );
1671 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1672 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1677 //int UtcDaliRenderTaskOnce04(void)
1679 TestApplication application;
1681 tet_infoline("Testing RenderTask Render Once GlSync\n"
1682 "During RenderOnce, make ready resources unready before sending first finished signal\n"
1683 "PRE: Everything ready.\n"
1684 "POST: Finished signal sent only once");
1686 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1687 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1688 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1689 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1690 drawTrace.Enable(true);
1692 Actor rootActor = Actor::New();
1693 Stage::GetCurrent().Add( rootActor );
1695 CameraActor offscreenCameraActor = CameraActor::New();
1696 Stage::GetCurrent().Add( offscreenCameraActor );
1697 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1698 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1699 Integration::ResourceId imageRequestId = imageRequest->GetId();
1700 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1701 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1702 application.Render();
1704 Stage::GetCurrent().Add(secondRootActor);
1706 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1707 bool finished = false;
1708 RenderTaskFinished renderTaskFinished( finished );
1709 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1710 application.SendNotification();
1712 // START PROCESS/RENDER Input, Expected Input, Expected
1713 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1714 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1716 // CHANGE TO RENDER ONCE, RESOURCES BECOME NOT READY
1717 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1720 ReloadImage(application, secondRootActor.GetImage());
1721 application.SendNotification(); // Input, Expected Input, Expected
1723 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1724 DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION);
1725 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1727 // FINISH RESOURCE LOADING
1728 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1729 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1730 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1731 DALI_TEST_CHECK( lastSyncObj != NULL );
1733 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1734 sync.SetObjectSynced( lastSyncObj, true );
1735 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1736 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1738 // Finished rendering - expect no more renders, no more signals:
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 ) );
1743 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1744 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1749 int UtcDaliRenderTaskOnce05(void)
1751 TestApplication application;
1753 tet_infoline("Testing RenderTask Render Once GLSync\n"
1754 "Render once, Second call to SetRefreshRate(ONCE) triggers only one more finished signal\n"
1755 "PRE: Everything ready\n"
1756 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
1758 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1759 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1760 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1761 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1762 drawTrace.Enable(true);
1764 Actor rootActor = Actor::New();
1765 Stage::GetCurrent().Add( rootActor );
1767 CameraActor offscreenCameraActor = CameraActor::New();
1768 Stage::GetCurrent().Add( offscreenCameraActor );
1769 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1770 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1771 Integration::ResourceId imageRequestId = imageRequest->GetId();
1772 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1773 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1774 application.Render();
1776 Stage::GetCurrent().Add(secondRootActor);
1778 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1779 bool finished = false;
1780 RenderTaskFinished renderTaskFinished( finished );
1781 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1782 application.SendNotification();
1784 // START PROCESS/RENDER Input, Expected Input, Expected
1785 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1786 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1788 // CHANGE TO RENDER ONCE,
1789 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1790 application.SendNotification();
1791 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1792 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1793 DALI_TEST_CHECK( lastSyncObj != NULL );
1795 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1796 sync.SetObjectSynced( lastSyncObj, true );
1797 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1798 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1799 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1800 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1802 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1803 application.SendNotification();
1804 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1805 lastSyncObj = sync.GetLastSyncObject();
1806 DALI_TEST_CHECK( lastSyncObj != NULL );
1808 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1809 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1810 sync.SetObjectSynced( lastSyncObj, true );
1811 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1812 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
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 ) );
1816 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1817 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1821 int UtcDaliRenderTaskOnce06(void)
1823 TestApplication application;
1825 tet_infoline("Testing RenderTask Render Once GLSync\n"
1826 "Render once, Call to SetRefreshRate(ONCE) in Finished signal callback triggers "
1827 "another render & another finished signal\n"
1828 "PRE: Everything ready\n"
1829 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
1832 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1833 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1834 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1835 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1836 drawTrace.Enable(true);
1838 Actor rootActor = Actor::New();
1839 Stage::GetCurrent().Add( rootActor );
1841 CameraActor offscreenCameraActor = CameraActor::New();
1842 Stage::GetCurrent().Add( offscreenCameraActor );
1843 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1844 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1845 Integration::ResourceId imageRequestId = imageRequest->GetId();
1846 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1847 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1848 application.Render();
1850 Stage::GetCurrent().Add(secondRootActor);
1852 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1853 bool finished = false;
1855 ConnectionTracker connectionTracker;
1856 RenderTaskFinishedRenderAgain renderTaskFinishedRenderAgain( finished );
1857 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinishedRenderAgain );
1859 application.SendNotification();
1861 // START PROCESS/RENDER Input, Expected Input, Expected
1862 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1863 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1864 DALI_TEST_CHECK( lastSyncObj == NULL );
1866 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1868 // CHANGE TO RENDER ONCE,
1869 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1870 application.SendNotification();
1871 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1872 lastSyncObj = sync.GetLastSyncObject();
1873 DALI_TEST_CHECK( lastSyncObj != NULL );
1875 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1876 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1878 sync.SetObjectSynced( lastSyncObj, true );
1879 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1880 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1881 application.SendNotification();
1883 // Expect SetRefreshRate to have been called again
1884 // Prevent next finished signal calling refresh once again
1885 RenderTaskFinished renderTaskFinished( finished );
1886 connectionTracker.DisconnectAll();
1887 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinished );
1888 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1889 lastSyncObj = sync.GetLastSyncObject();
1890 DALI_TEST_CHECK( lastSyncObj != NULL );
1892 sync.SetObjectSynced( lastSyncObj, true );
1893 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1894 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1896 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1897 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1898 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1899 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1904 int UtcDaliRenderTaskOnce07(void)
1906 TestApplication application;
1908 tet_infoline("Testing RenderTask Render Once GlSync\n"
1909 "SetRefreshRate(ONCE) again before first finished signal has been sent.\n"
1910 "PRE: resources ready\n"
1911 "POST: Only 1 finished signal sent.");
1913 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1914 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1915 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1916 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1917 drawTrace.Enable(true);
1919 Actor rootActor = Actor::New();
1920 Stage::GetCurrent().Add( rootActor );
1922 CameraActor offscreenCameraActor = CameraActor::New();
1923 Stage::GetCurrent().Add( offscreenCameraActor );
1924 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1925 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1926 Integration::ResourceId imageRequestId = imageRequest->GetId();
1927 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1928 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1929 application.Render();
1931 Stage::GetCurrent().Add(secondRootActor);
1933 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1934 bool finished = false;
1935 RenderTaskFinished renderTaskFinished( finished );
1936 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1937 application.SendNotification();
1939 // START PROCESS/RENDER Input, Expected Input, Expected
1940 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1941 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1943 // CHANGE TO RENDER ONCE,
1944 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1945 application.SendNotification();
1946 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1947 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1948 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1950 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1951 application.SendNotification();
1952 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
1953 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1954 DALI_TEST_CHECK( lastSyncObj != NULL );
1956 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1957 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1958 sync.SetObjectSynced( lastSyncObj, true );
1959 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1960 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
1962 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1963 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1964 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1965 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
1971 int UtcDaliRenderTaskOnce08(void)
1973 TestApplication application;
1975 tet_infoline("Testing RenderTask Render Once GlSync\n"
1976 "SetRefreshRate(ONCE), resource load failed completes render task.\n"
1977 "PRE: resources not ready\n"
1978 "POST: Only 1 finished signal sent.");
1980 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1981 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1982 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1983 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1984 drawTrace.Enable(true);
1986 Actor rootActor = Actor::New();
1987 Stage::GetCurrent().Add( rootActor );
1989 CameraActor offscreenCameraActor = CameraActor::New();
1990 Stage::GetCurrent().Add( offscreenCameraActor );
1991 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1992 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1993 Integration::ResourceId imageRequestId = imageRequest->GetId();
1994 Stage::GetCurrent().Add(secondRootActor);
1996 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1997 bool finished = false;
1998 RenderTaskFinished renderTaskFinished( finished );
1999 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2000 application.SendNotification();
2002 // START PROCESS/RENDER Input, Expected Input, Expected
2003 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2004 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2006 // CHANGE TO RENDER ONCE,
2007 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2008 application.SendNotification();
2009 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2010 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2011 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2013 FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete
2014 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) ); // nothing to draw
2015 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
2016 DALI_TEST_CHECK( lastSyncObj != NULL );
2018 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2019 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2020 sync.SetObjectSynced( lastSyncObj, true );
2021 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2022 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2024 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2025 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2026 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2027 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2033 int UtcDaliRenderTaskOnceNoSync01(void)
2035 TestApplication application;
2037 tet_infoline("Testing RenderTask Render Once, using loading image\nPRE: Resources not ready, Source not visible\nPOST: Finished signal sent once only");
2039 // SETUP AN OFFSCREEN RENDER TASK
2040 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2041 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2042 drawTrace.Enable(true);
2044 Actor rootActor = Actor::New();
2045 Stage::GetCurrent().Add( rootActor );
2047 CameraActor offscreenCameraActor = CameraActor::New();
2048 Stage::GetCurrent().Add( offscreenCameraActor );
2049 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2050 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2051 Integration::ResourceId imageRequestId = imageRequest->GetId();
2052 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2054 Stage::GetCurrent().Add(secondRootActor);
2055 secondRootActor.SetVisible(false);
2057 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2058 bool finished = false;
2059 RenderTaskFinished renderTaskFinished( finished );
2060 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2061 application.SendNotification();
2063 // START PROCESS/RENDER Input, Expected Input, Expected
2064 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2065 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2067 // MAKE SOURCE VISIBLE
2068 secondRootActor.SetVisible(true);
2069 application.SendNotification();
2070 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2071 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2073 // FINISH RESOURCE LOADING - expect immediate rendering yet
2074 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2075 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2076 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2077 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2078 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2079 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2083 int UtcDaliRenderTaskOnceNoSync02(void)
2085 TestApplication application;
2087 tet_infoline("Testing RenderTask Render Once, using loading image. Switch from render always after ready to render once\n"
2088 "PRE: Render task ready, Image not loaded\n"
2089 "POST: Finished signal sent only once");
2091 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2092 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2093 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2094 drawTrace.Enable(true);
2096 Actor rootActor = Actor::New();
2097 Stage::GetCurrent().Add( rootActor );
2099 CameraActor offscreenCameraActor = CameraActor::New();
2100 Stage::GetCurrent().Add( offscreenCameraActor );
2101 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2102 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2103 Integration::ResourceId imageRequestId = imageRequest->GetId();
2104 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2105 Stage::GetCurrent().Add(secondRootActor);
2107 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2108 bool finished = false;
2109 RenderTaskFinished renderTaskFinished( finished );
2110 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2111 application.SendNotification();
2113 // START PROCESS/RENDER Input, Expected Input, Expected
2114 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2115 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2117 // FINISH RESOURCE LOADING
2118 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2119 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2120 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2122 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2123 application.SendNotification(); // Input, Expected Input, Expected
2124 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2125 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2126 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2127 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2128 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2129 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2134 int UtcDaliRenderTaskOnceNoSync03(void)
2136 TestApplication application;
2138 tet_infoline("Testing RenderTask Render Once\n"
2139 "Switch from Render always after ready to render once with resources unready\n"
2140 "PRE: Everything ready to render\n"
2141 "POST: Finished signal sent once");
2143 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2144 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2145 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2146 drawTrace.Enable(true);
2148 Actor rootActor = Actor::New();
2149 Stage::GetCurrent().Add( rootActor );
2151 CameraActor offscreenCameraActor = CameraActor::New();
2152 Stage::GetCurrent().Add( offscreenCameraActor );
2153 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2154 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2155 Integration::ResourceId imageRequestId = imageRequest->GetId();
2156 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2157 Stage::GetCurrent().Add(secondRootActor);
2159 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2160 bool finished = false;
2161 RenderTaskFinished renderTaskFinished( finished );
2162 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2163 application.SendNotification();
2165 // START PROCESS/RENDER Input, Expected Input, Expected
2166 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2167 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2169 // CHANGE TO RENDER ONCE
2170 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2171 application.SendNotification(); // Input, Expected Input, Expected
2172 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2173 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2175 // FINISH RESOURCE LOADING
2176 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2177 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2178 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2179 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2180 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2181 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2186 //int UtcDaliRenderTaskOnceNoSync04(void)
2188 TestApplication application;
2190 tet_infoline("Testing RenderTask Render Once\n"
2191 "During RenderOnce, make ready resources unready before sending first finished signal\n"
2192 "PRE: Everything ready.\n"
2193 "POST: Finished signal sent only once");
2195 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2196 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2197 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2198 drawTrace.Enable(true);
2200 Actor rootActor = Actor::New();
2201 Stage::GetCurrent().Add( rootActor );
2203 CameraActor offscreenCameraActor = CameraActor::New();
2204 Stage::GetCurrent().Add( offscreenCameraActor );
2205 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2206 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2207 Integration::ResourceId imageRequestId = imageRequest->GetId();
2208 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2209 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2210 application.Render();
2212 Stage::GetCurrent().Add(secondRootActor);
2214 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2215 bool finished = false;
2216 RenderTaskFinished renderTaskFinished( finished );
2217 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2218 application.SendNotification();
2220 // START PROCESS/RENDER Input, Expected Input, Expected
2221 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2222 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2224 // CHANGE TO RENDER ONCE, RESOURCES BECOME NOT READY
2225 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2228 ReloadImage(application, secondRootActor.GetImage());
2229 application.SendNotification(); // Input, Expected Input, Expected
2231 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2232 DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION);
2233 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2235 // FINISH RESOURCE LOADING
2236 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2237 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, true ) );
2238 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2239 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2240 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2241 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2246 int UtcDaliRenderTaskOnceNoSync05(void)
2248 TestApplication application;
2250 tet_infoline("Testing RenderTask Render Once\n"
2251 "Render once, Second call to SetRefreshRate(ONCE) triggers only one more finished signal\n"
2252 "PRE: Everything ready\n"
2253 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
2255 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2256 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2257 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2258 drawTrace.Enable(true);
2260 Actor rootActor = Actor::New();
2261 Stage::GetCurrent().Add( rootActor );
2263 CameraActor offscreenCameraActor = CameraActor::New();
2264 Stage::GetCurrent().Add( offscreenCameraActor );
2265 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2266 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2267 Integration::ResourceId imageRequestId = imageRequest->GetId();
2268 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2269 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2270 application.Render();
2272 Stage::GetCurrent().Add(secondRootActor);
2274 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2275 bool finished = false;
2276 RenderTaskFinished renderTaskFinished( finished );
2277 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2278 application.SendNotification();
2280 // START PROCESS/RENDER Input, Expected Input, Expected
2281 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2282 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2284 // CHANGE TO RENDER ONCE,
2285 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2286 application.SendNotification();
2287 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2288 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2289 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2290 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2291 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2293 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2294 application.SendNotification();
2295 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2296 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2297 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2298 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2299 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2303 int UtcDaliRenderTaskOnceNoSync06(void)
2305 TestApplication application;
2307 tet_infoline("Testing RenderTask Render Once\n"
2308 "Render once, Call to SetRefreshRate(ONCE) in Finished signal callback triggers\n"
2309 "another render & another finished signal\n"
2310 "PRE: Everything ready\n"
2311 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
2314 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2315 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2316 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2317 drawTrace.Enable(true);
2319 Actor rootActor = Actor::New();
2320 Stage::GetCurrent().Add( rootActor );
2322 CameraActor offscreenCameraActor = CameraActor::New();
2323 Stage::GetCurrent().Add( offscreenCameraActor );
2324 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2325 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2326 Integration::ResourceId imageRequestId = imageRequest->GetId();
2327 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2328 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2329 application.Render();
2331 Stage::GetCurrent().Add(secondRootActor);
2333 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2334 bool finished = false;
2336 ConnectionTracker connectionTracker;
2337 RenderTaskFinishedRenderAgain renderTaskFinishedRenderAgain( finished );
2338 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinishedRenderAgain );
2340 application.SendNotification();
2342 // START PROCESS/RENDER Input, Expected Input, Expected
2343 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2344 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2346 // CHANGE TO RENDER ONCE,
2347 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2348 application.SendNotification();
2349 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2350 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2352 // Expect SetRefreshRate to have been called again
2353 // Prevent next finished signal calling refresh once again
2354 RenderTaskFinished renderTaskFinished( finished );
2355 connectionTracker.DisconnectAll();
2356 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinished );
2358 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2359 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2360 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2361 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2362 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2367 int UtcDaliRenderTaskOnceNoSync07(void)
2369 TestApplication application;
2371 tet_infoline("Testing RenderTask Render Once\n"
2372 "SetRefreshRate(ONCE) again before first finished signal has been sent.\n"
2373 "PRE: resources ready\n"
2374 "POST: Only 1 finished signal sent.");
2376 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2377 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2378 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2379 drawTrace.Enable(true);
2381 Actor rootActor = Actor::New();
2382 Stage::GetCurrent().Add( rootActor );
2384 CameraActor offscreenCameraActor = CameraActor::New();
2385 Stage::GetCurrent().Add( offscreenCameraActor );
2386 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2387 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2388 Integration::ResourceId imageRequestId = imageRequest->GetId();
2389 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2390 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2391 application.Render();
2393 Stage::GetCurrent().Add(secondRootActor);
2395 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2396 bool finished = false;
2397 RenderTaskFinished renderTaskFinished( finished );
2398 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2399 application.SendNotification();
2401 // START PROCESS/RENDER Input, Expected Input, Expected
2402 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2403 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2405 // CHANGE TO RENDER ONCE,
2406 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2407 application.SendNotification();
2408 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2409 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2410 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2412 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2413 application.SendNotification();
2414 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false ) );
2415 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
2416 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2417 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2418 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2422 int UtcDaliRenderTaskOnceNoSync08(void)
2424 TestApplication application;
2426 tet_infoline("Testing RenderTask Render Once\n"
2427 "SetRefreshRate(ONCE), resource load failed, completes render task.\n"
2428 "PRE: resources not ready\n"
2429 "POST: Only 1 finished signal sent.");
2431 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2432 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2433 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2434 drawTrace.Enable(true);
2436 Actor rootActor = Actor::New();
2437 Stage::GetCurrent().Add( rootActor );
2439 CameraActor offscreenCameraActor = CameraActor::New();
2440 Stage::GetCurrent().Add( offscreenCameraActor );
2441 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2442 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2443 Integration::ResourceId imageRequestId = imageRequest->GetId();
2444 Stage::GetCurrent().Add(secondRootActor);
2446 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2447 bool finished = false;
2448 RenderTaskFinished renderTaskFinished( finished );
2449 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2450 application.SendNotification();
2452 // START PROCESS/RENDER Input, Expected Input, Expected
2453 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2454 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2456 // CHANGE TO RENDER ONCE,
2457 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2458 application.SendNotification();
2459 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2460 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2461 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2463 FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete
2464 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) ); // nothing to draw
2465 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true ) );
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 ) );
2469 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2470 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false ) );
2476 int UtcDaliRenderTaskOnceChain01(void)
2478 TestApplication application;
2480 tet_infoline("Testing RenderTask Render Once Chained render tasks\n"
2481 "SetRefreshRate(ONCE), resource load completes, both render tasks render.\n"
2482 "PRE: resources not ready\n"
2483 "POST: 2 finished signals sent.");
2485 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2486 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2487 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2488 drawTrace.Enable(true);
2490 Actor defaultRootActor = Actor::New(); // Root for default RT
2491 Stage::GetCurrent().Add( defaultRootActor );
2493 CameraActor offscreenCameraActor = CameraActor::New();
2494 Stage::GetCurrent().Add( offscreenCameraActor );
2495 ImageActor firstRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2496 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2497 Integration::ResourceId imageRequestId = imageRequest->GetId();
2498 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2499 Stage::GetCurrent().Add(firstRootActor);
2501 // first render task
2502 RenderTask firstTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, firstRootActor, RenderTask::REFRESH_ONCE, false);
2503 bool firstFinished = false;
2504 RenderTaskFinished renderTask1Finished( firstFinished );
2505 firstTask.FinishedSignal().Connect( &application, renderTask1Finished );
2507 // Second render task
2508 FrameBufferImage fbo = firstTask.GetTargetFrameBuffer();
2509 ImageActor secondRootActor = ImageActor::New( fbo );
2510 Stage::GetCurrent().Add(secondRootActor);
2511 RenderTask secondTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2512 bool secondFinished = false;
2513 RenderTaskFinished renderTask2Finished( secondFinished );
2514 secondTask.FinishedSignal().Connect( &application, renderTask2Finished );
2516 application.SendNotification();
2518 // START PROCESS/RENDER Input, Expected Input, Expected
2519 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false ) );
2520 DALI_TEST_CHECK( secondFinished == false );
2521 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false ) );
2522 DALI_TEST_CHECK( secondFinished == false );
2524 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2525 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false ) );
2526 DALI_TEST_CHECK( secondFinished == false );
2527 application.GetPlatform().ClearReadyResources();
2529 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, true ) );
2530 DALI_TEST_CHECK( secondFinished == true );
2532 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 );
2539 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, false ) );
2540 DALI_TEST_CHECK( secondFinished == false );
2545 int UtcDaliRenderTaskProperties(void)
2547 TestApplication application;
2549 RenderTask task = Stage::GetCurrent().GetRenderTaskList().CreateTask();
2551 Property::IndexContainer indices;
2552 task.GetPropertyIndices( indices );
2553 DALI_TEST_CHECK( ! indices.empty() );
2554 DALI_TEST_EQUALS( indices.size(), task.GetPropertyCount(), TEST_LOCATION );