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/public-api/dali-core.h>
22 #include <dali-test-suite-utils.h>
23 #include <dali/integration-api/debug.h>
25 #define BOOLSTR(x) ((x)?"T":"F")
30 void utc_dali_render_task_startup(void)
32 test_return_value = TET_UNDEF;
35 void utc_dali_render_task_cleanup(void)
37 test_return_value = TET_PASS;
40 namespace // unnamed namespace
43 class TestNativeImage : public NativeImage
48 TestNativeImage(int width, int height)
53 virtual bool GlExtensionCreate() {return true;};
56 * Destroy the GL resource for the NativeImage.
57 * e.g. For the EglImageKHR extension, this corresponds to calling eglDestroyImageKHR()
58 * @pre There is a GL context for the current thread.
60 virtual void GlExtensionDestroy() {};
63 * Use the NativeImage as a texture for rendering
64 * @pre There is a GL context for the current thread.
65 * @return A GL error code
67 virtual unsigned int TargetTexture() {return 0;};
70 * Called in each NativeTexture::Bind() call to allow implementation specific operations.
71 * The correct texture sampler has already been bound before the function gets called.
72 * @pre glAbstraction is being used by context in current thread
74 virtual void PrepareTexture() {}
77 * Returns the width of the NativeImage
80 virtual unsigned int GetWidth() const {return mWidth;}
83 * Returns the height of the NativeImage
86 virtual unsigned int GetHeight() const {return mHeight;}
89 * Returns the internal pixel NativeImage::PixelFormat of the NativeImage
90 * @return pixel format
92 virtual Pixel::Format GetPixelFormat() const { return Pixel::RGBA8888; }
98 const int RENDER_FRAME_INTERVAL = 16; ///< Duration of each frame in ms. (at approx 60FPS)
101 * Simulate time passed by.
103 * @note this will always process at least 1 frame (1/60 sec)
105 * @param application Test application instance
106 * @param duration Time to pass in milliseconds.
107 * @return The actual time passed in milliseconds
109 int Wait(TestApplication& application, int duration = 0)
113 for(int i = 0; i <= ( duration / RENDER_FRAME_INTERVAL); i++)
115 application.SendNotification();
116 application.Render(RENDER_FRAME_INTERVAL);
117 time += RENDER_FRAME_INTERVAL;
123 struct RenderTaskFinished
125 RenderTaskFinished( bool& finished )
126 : finished( finished )
130 void operator()( RenderTask& renderTask )
138 struct RenderTaskFinishedRemoveSource
140 RenderTaskFinishedRemoveSource( bool& finished )
141 : finished( finished ),
146 void operator()( RenderTask& renderTask )
148 DALI_TEST_CHECK(finishedOnce == false);
151 Actor srcActor = renderTask.GetSourceActor();
152 UnparentAndReset(srcActor);
159 struct RenderTaskFinishedRenderAgain
161 RenderTaskFinishedRenderAgain( bool& finished )
162 : finished( finished ),
167 void operator()( RenderTask& renderTask )
169 DALI_TEST_CHECK(finishedOnce == false);
172 renderTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
180 bool TestScreenToFrameBufferFunction( Vector2& coordinates )
182 coordinates = coordinates + Vector2( 1, 2 );
187 ImageActor CreateLoadingImage(TestApplication& application, std::string filename, Image::LoadPolicy loadPolicy, Image::ReleasePolicy releasePolicy)
189 Image image = Image::New(filename, loadPolicy, releasePolicy);
190 DALI_TEST_CHECK( image );
191 application.SendNotification();
192 application.Render(16);
193 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
194 ImageActor actor = ImageActor::New(image);
195 actor.SetSize( 80, 80 );
196 application.SendNotification();
197 application.Render(16);
201 void CompleteImageLoad(TestApplication& application, Integration::ResourceId resourceId, Integration::ResourceTypeId requestType)
203 std::vector<GLuint> ids;
205 application.GetGlAbstraction().SetNextTextureIds( ids );
207 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::DISCARD );
208 Integration::ResourcePointer resource(bitmap);
209 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
211 application.GetPlatform().SetResourceLoaded(resourceId, requestType, resource);
214 void FailImageLoad(TestApplication& application, Integration::ResourceId resourceId )
216 application.GetPlatform().SetResourceLoadFailed(resourceId, Integration::FailureUnknown);
219 void ReloadImage(TestApplication& application, Image image)
221 application.GetPlatform().ClearReadyResources();
222 application.GetPlatform().DiscardRequest();
223 application.GetPlatform().ResetTrace();
224 application.GetPlatform().SetClosestImageSize(Vector2(80.0f, 80.0f)); // Ensure reload is called.
228 RenderTask CreateRenderTask(TestApplication& application,
229 CameraActor offscreenCamera,
230 Actor rootActor, // Reset default render task to point at this actor
231 Actor secondRootActor, // Source actor
232 unsigned int refreshRate,
235 // Change main render task to use a different root
236 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
237 taskList.GetTask(0u).SetSourceActor( rootActor );
239 FrameBufferImage frameBufferImage;
242 NativeImagePtr testNativeImagePtr = new TestNativeImage(10, 10);
243 frameBufferImage= FrameBufferImage::New( *testNativeImagePtr.Get() );
247 frameBufferImage = FrameBufferImage::New( 10, 10 );
250 // Don't draw output framebuffer
252 RenderTask newTask = taskList.CreateTask();
253 newTask.SetCameraActor( offscreenCamera );
254 newTask.SetSourceActor( secondRootActor );
255 newTask.SetInputEnabled( false );
256 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
257 newTask.SetClearEnabled( true );
258 newTask.SetExclusive( true );
259 newTask.SetRefreshRate( refreshRate );
260 newTask.SetTargetFrameBuffer( frameBufferImage );
264 bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool testDrawn, bool& finishedSig, bool testFinished, bool testKeepUpdating )
268 application.Render(16);
269 application.SendNotification();
271 bool sigPassed = false;
274 sigPassed = finishedSig;
278 sigPassed = ! finishedSig;
281 bool drawResult = callStack.FindMethod("DrawElements") || callStack.FindMethod("DrawArrays");
283 bool drawPassed = false;
286 drawPassed = drawResult;
290 drawPassed = !drawResult;
293 bool keepUpdating = (application.GetUpdateStatus() != 0);
294 bool keepUpdatingPassed = false;
295 if( testKeepUpdating )
297 keepUpdatingPassed = keepUpdating;
301 keepUpdatingPassed = !keepUpdating;
304 bool result = (sigPassed && drawPassed && keepUpdatingPassed);
306 tet_printf("UpdateRender: Expected: Draw:%s Signal:%s Keep Updating: %s Actual: Draw:%s Signal:%s KeepUpdating: %s %s\n",
307 BOOLSTR(testDrawn), BOOLSTR(testFinished), BOOLSTR(testKeepUpdating),
308 BOOLSTR(drawResult), BOOLSTR(finishedSig), BOOLSTR(keepUpdating),
309 result ? "Passed":"Failed");
314 } // unnamed namespace
317 /****************************************************************************************************/
318 /****************************************************************************************************/
319 /******************************** TEST CASES BELOW **********************************************/
320 /****************************************************************************************************/
321 /****************************************************************************************************/
323 int UtcDaliRenderTaskDownCast(void)
325 TestApplication application;
327 tet_infoline("Testing RenderTask::DownCast()");
329 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
331 BaseHandle base = taskList.GetTask( 0u );
332 DALI_TEST_CHECK( base );
334 RenderTask task = RenderTask::DownCast( base );
335 DALI_TEST_CHECK( task );
337 // Try calling a method
338 DALI_TEST_CHECK( task.GetSourceActor() );
342 int UtcDaliRenderTaskSetSourceActor(void)
344 TestApplication application;
346 tet_infoline("Testing RenderTask::SetSourceActor()");
348 Stage stage = Stage::GetCurrent();
350 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
352 RenderTaskList taskList = stage.GetRenderTaskList();
354 RenderTask task = taskList.GetTask( 0u );
356 Actor actor = task.GetSourceActor();
357 DALI_TEST_CHECK( actor );
359 std::vector<GLuint> ids;
361 application.GetGlAbstraction().SetNextTextureIds( ids );
363 BitmapImage img = BitmapImage::New( 1,1 );
364 ImageActor newActor = ImageActor::New( img );
365 newActor.SetSize(1,1);
366 stage.Add( newActor );
368 Actor nonRenderableActor = Actor::New();
369 stage.Add( nonRenderableActor );
371 // Stop the newActor from being rendered by changing the source actor
372 DALI_TEST_CHECK( nonRenderableActor );
373 task.SetSourceActor( nonRenderableActor );
374 DALI_TEST_CHECK( task.GetSourceActor() != actor );
375 DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor );
377 // Update & Render nothing!
378 application.GetGlAbstraction().ClearBoundTextures();
379 application.SendNotification();
380 application.Render();
382 // Check that nothing was rendered
383 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
385 // Set newActor as the new source Actor
386 task.SetSourceActor( newActor );
387 DALI_TEST_CHECK( task.GetSourceActor() != actor );
388 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
390 // Update & Render the newActor
391 application.GetGlAbstraction().ClearBoundTextures();
392 application.SendNotification();
393 application.Render();
395 // Check that the newActor was rendered
396 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
397 if ( boundTextures.size() )
399 DALI_TEST_EQUALS( boundTextures[0], 7u, TEST_LOCATION );
404 int UtcDaliRenderTaskSetSourceActorOffStage(void)
406 TestApplication application;
408 tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)");
410 Stage stage = Stage::GetCurrent();
412 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
414 RenderTaskList taskList = stage.GetRenderTaskList();
416 RenderTask task = taskList.GetTask( 0u );
418 Actor actor = task.GetSourceActor();
419 DALI_TEST_CHECK( actor );
421 std::vector<GLuint> ids;
422 GLuint expectedTextureId( 3 );
423 ids.push_back( expectedTextureId );
424 application.GetGlAbstraction().SetNextTextureIds( ids );
426 BitmapImage img = BitmapImage::New( 1,1 );
427 ImageActor newActor = ImageActor::New( img );
428 newActor.SetSize(1,1);
429 task.SetSourceActor( newActor );
430 // Don't add newActor to stage yet
432 // Update & Render with the actor initially off-stage
433 application.GetGlAbstraction().ClearBoundTextures();
434 application.SendNotification();
435 application.Render();
437 // Check that nothing was rendered
438 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
441 stage.Add( newActor );
443 // Update & Render with the actor on-stage
444 application.GetGlAbstraction().ClearBoundTextures();
445 application.SendNotification();
446 application.Render();
448 // Check that the newActor was rendered
449 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
450 if ( boundTextures.size() )
452 DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION );
455 // Now remove from stage
456 stage.Remove( newActor );
458 // Update & Render with the actor off-stage
459 application.GetGlAbstraction().ClearBoundTextures();
460 application.SendNotification();
461 application.Render();
465 int UtcDaliRenderTaskSetSourceActorEmpty(void)
467 TestApplication application;
469 tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)");
471 Stage stage = Stage::GetCurrent();
473 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
475 RenderTaskList taskList = stage.GetRenderTaskList();
477 RenderTask task = taskList.GetTask( 0u );
479 Actor actor = task.GetSourceActor();
480 DALI_TEST_CHECK( actor );
482 std::vector<GLuint> ids;
483 GLuint expectedTextureId( 5 );
484 ids.push_back( expectedTextureId );
485 application.GetGlAbstraction().SetNextTextureIds( ids );
487 BitmapImage img = BitmapImage::New( 1,1 );
488 ImageActor newActor = ImageActor::New( img );
489 newActor.SetSize(1,1);
490 stage.Add( newActor );
492 Actor nonRenderableActor = Actor::New();
493 stage.Add( nonRenderableActor );
495 // Set with empty handle
496 task.SetSourceActor( Actor() );
497 DALI_TEST_CHECK( ! task.GetSourceActor() );
499 // Update & Render nothing!
500 application.GetGlAbstraction().ClearBoundTextures();
501 application.SendNotification();
502 application.Render();
504 // Check that nothing was rendered
505 DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION );
507 // Set with non-empty handle
508 task.SetSourceActor( newActor );
509 DALI_TEST_CHECK( task.GetSourceActor() == newActor );
511 // Update & Render the newActor
512 application.GetGlAbstraction().ClearBoundTextures();
513 application.SendNotification();
514 application.Render();
516 // Check that the newActor was rendered
517 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
518 if ( boundTextures.size() )
520 DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION );
525 int UtcDaliRenderTaskGetSourceActor(void)
527 TestApplication application;
529 tet_infoline("Testing RenderTask::GetSourceActor()");
531 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
533 RenderTask task = taskList.GetTask( 0u );
535 Actor actor = task.GetSourceActor();
536 DALI_TEST_CHECK( actor );
538 // By default the entire scene should be rendered
539 Actor root = Stage::GetCurrent().GetLayer( 0 );
540 DALI_TEST_CHECK( root == actor );
544 int UtcDaliRenderTaskSetExclusive(void)
546 TestApplication application;
548 tet_infoline("Testing RenderTask::SetExclusive()");
550 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
552 // Manipulate the GenTextures behaviour, to identify different ImageActors
554 std::vector<GLuint> ids;
555 ids.push_back( 8 ); // 8 = actor1
556 ids.push_back( 9 ); // 9 = actor2
557 ids.push_back( 10 ); // 10 = actor3
558 application.GetGlAbstraction().SetNextTextureIds( ids );
560 BitmapImage img1 = BitmapImage::New( 1,1 );
561 ImageActor actor1 = ImageActor::New( img1 );
563 Stage::GetCurrent().Add( actor1 );
565 // Update & Render actor1
566 application.SendNotification();
567 application.Render();
569 // Check that the actor1 was rendered
570 const std::vector<GLuint>& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 );
571 DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION );
573 if ( boundTextures.size() )
575 DALI_TEST_EQUALS( boundTextures[0], 8u/*unique to actor1*/, TEST_LOCATION );
578 BitmapImage img2 = BitmapImage::New( 1,1 );
579 ImageActor actor2 = ImageActor::New( img2 );
582 // Force actor2 to be rendered before actor1
583 Layer layer = Layer::New();
584 Stage::GetCurrent().Add( layer );
586 layer.LowerToBottom();
589 application.GetGlAbstraction().ClearBoundTextures();
590 application.SendNotification();
591 application.Render();
593 // Check that the actors were rendered
594 DALI_TEST_EQUALS( boundTextures.size(), 2u, TEST_LOCATION );
596 if ( boundTextures.size() )
598 DALI_TEST_EQUALS( boundTextures[0], 9u/*unique to actor2*/, TEST_LOCATION );
599 DALI_TEST_EQUALS( boundTextures[1], 8u/*unique to actor1*/, TEST_LOCATION );
602 BitmapImage img3 = BitmapImage::New( 1,1 );
603 ImageActor actor3 = ImageActor::New( img3 );
606 // Force actor3 to be rendered before actor2
607 layer = Layer::New();
608 Stage::GetCurrent().Add( layer );
610 layer.LowerToBottom();
612 // Update & Render all actors
613 application.GetGlAbstraction().ClearBoundTextures();
614 application.SendNotification();
615 application.Render();
617 // Check that the actors were rendered
618 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
620 if ( boundTextures.size() )
622 DALI_TEST_EQUALS( boundTextures[0], 10u/*unique to actor3*/, TEST_LOCATION );
623 DALI_TEST_EQUALS( boundTextures[1], 9u/*unique to actor2*/, TEST_LOCATION );
624 DALI_TEST_EQUALS( boundTextures[2], 8u/*unique to actor1*/, TEST_LOCATION );
627 // Both actors are now connected to the root node
628 // Setup 2 render-tasks - the first will render from the root-node, and the second from actor2
630 // Not exclusive is the default
631 RenderTask task1 = taskList.GetTask( 0u );
632 DALI_TEST_CHECK( false == task1.IsExclusive() );
634 RenderTask task2 = taskList.CreateTask();
635 DALI_TEST_CHECK( false == task2.IsExclusive() );
636 task2.SetSourceActor( actor2 );
638 // Task1 should render all actors, and task 2 should render only actor2
640 application.GetGlAbstraction().ClearBoundTextures();
641 application.SendNotification();
642 application.Render();
644 DALI_TEST_EQUALS( boundTextures.size(), 4u, TEST_LOCATION );
646 if ( boundTextures.size() == 4 )
648 // Test that task 1 renders actor3, then actor2 & then actor1
649 DALI_TEST_CHECK( boundTextures[0] == 10u );
650 DALI_TEST_CHECK( boundTextures[1] == 9u );
651 DALI_TEST_CHECK( boundTextures[2] == 8u );
653 // Test that task 2 renders actor2
654 DALI_TEST_EQUALS( boundTextures[3], 9u, TEST_LOCATION );
657 // Make actor2 exclusive to task2
659 task2.SetExclusive( true );
660 DALI_TEST_CHECK( true == task2.IsExclusive() );
662 // Task1 should render only actor1, and task 2 should render only actor2
664 application.GetGlAbstraction().ClearBoundTextures();
665 application.SendNotification();
666 application.Render();
668 DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION );
669 if ( boundTextures.size() == 3 )
671 // Test that task 1 renders actor3 & actor1
672 DALI_TEST_CHECK( boundTextures[0] == 10u );
673 DALI_TEST_CHECK( boundTextures[1] == 8u );
675 // Test that task 2 renders actor2
676 DALI_TEST_CHECK( boundTextures[2] == 9u );
681 int UtcDaliRenderTaskIsExclusive(void)
683 TestApplication application;
685 tet_infoline("Testing RenderTask::IsExclusive()");
687 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
689 // Not exclusive is the default
690 RenderTask task = taskList.GetTask( 0u );
691 DALI_TEST_CHECK( false == task.IsExclusive() );
693 RenderTask newTask = taskList.CreateTask();
694 DALI_TEST_CHECK( false == newTask.IsExclusive() );
698 int UtcDaliRenderTaskSetInputEnabled(void)
700 TestApplication application;
702 tet_infoline("Testing RenderTask::SetInputEnabled()");
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 task.SetInputEnabled( false );
711 DALI_TEST_CHECK( false == task.GetInputEnabled() );
713 task.SetInputEnabled( true );
714 DALI_TEST_CHECK( true == task.GetInputEnabled() );
718 int UtcDaliRenderTaskGetInputEnabled(void)
720 TestApplication application;
722 tet_infoline("Testing RenderTask::GetInputEnabled()");
724 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
726 // Input is enabled by default
727 RenderTask task = taskList.GetTask( 0u );
728 DALI_TEST_CHECK( true == task.GetInputEnabled() );
730 RenderTask newTask = taskList.CreateTask();
731 DALI_TEST_CHECK( true == newTask.GetInputEnabled() );
735 int UtcDaliRenderTaskSetCameraActor(void)
737 TestApplication application;
739 tet_infoline("Testing RenderTask::SetCameraActor()");
741 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
743 RenderTask task = taskList.GetTask( 0u );
745 Actor actor = task.GetCameraActor();
746 DALI_TEST_CHECK( actor );
748 CameraActor newActor = CameraActor::New();
749 DALI_TEST_CHECK( newActor );
751 task.SetCameraActor( newActor );
752 DALI_TEST_CHECK( task.GetCameraActor() != actor );
753 DALI_TEST_CHECK( task.GetCameraActor() == newActor );
757 int UtcDaliRenderTaskGetCameraActor(void)
759 TestApplication application;
761 tet_infoline("Testing RenderTask::GetCameraActor()");
763 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
765 RenderTask task = taskList.GetTask( 0u );
767 Actor actor = task.GetCameraActor();
768 DALI_TEST_CHECK( actor );
770 RenderTask newTask = taskList.CreateTask();
771 DALI_TEST_CHECK( actor == newTask.GetCameraActor() );
775 int UtcDaliRenderTaskSetTargetFrameBuffer(void)
777 TestApplication application;
779 tet_infoline("Testing RenderTask::SetTargetFrameBuffer()");
781 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
783 RenderTask task = taskList.GetTask( 0u );
785 // By default render-tasks do not render off-screen
786 FrameBufferImage image = task.GetTargetFrameBuffer();
787 DALI_TEST_CHECK( !image );
789 FrameBufferImage newImage = FrameBufferImage::New();
791 task.SetTargetFrameBuffer( newImage );
792 DALI_TEST_CHECK( task.GetTargetFrameBuffer() == newImage );
796 int UtcDaliRenderTaskGetTargetFrameBuffer(void)
798 TestApplication application;
800 tet_infoline("Testing RenderTask::GetTargetFrameBuffer()");
802 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
804 RenderTask task = taskList.GetTask( 0u );
806 // By default render-tasks do not render off-screen
807 FrameBufferImage image = task.GetTargetFrameBuffer();
808 DALI_TEST_CHECK( !image );
810 RenderTask newTask = taskList.CreateTask();
811 DALI_TEST_CHECK( !newTask.GetTargetFrameBuffer() );
815 int UtcDaliRenderTaskSetScreenToFrameBufferFunction(void)
817 TestApplication application;
819 tet_infoline("Testing RenderTask::SetScreenToFrameBufferFunction()");
821 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
823 RenderTask task = taskList.GetTask( 0u );
825 task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction );
827 Vector2 coordinates( 5, 10 );
828 Vector2 convertedCoordinates( 6, 12 ); // + Vector(1, 2)
830 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
831 DALI_TEST_CHECK( func( coordinates ) );
832 DALI_TEST_CHECK( coordinates == convertedCoordinates );
834 task.SetScreenToFrameBufferFunction( RenderTask::FULLSCREEN_FRAMEBUFFER_FUNCTION );
835 func = task.GetScreenToFrameBufferFunction();
836 DALI_TEST_CHECK( func( coordinates ) );
838 task.SetScreenToFrameBufferFunction( RenderTask::DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION );
839 func = task.GetScreenToFrameBufferFunction();
840 DALI_TEST_CHECK( ! func( coordinates ) );
844 int UtcDaliRenderTaskGetScreenToFrameBufferFunction(void)
846 TestApplication application;
848 tet_infoline("Testing RenderTask::GetScreenToFrameBufferFunction()");
850 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
852 RenderTask task = taskList.GetTask( 0u );
854 Vector2 originalCoordinates( 5, 10 );
855 Vector2 coordinates( 5, 10 );
857 RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction();
858 DALI_TEST_CHECK( !func( coordinates ) ); // conversion should fail by default
859 DALI_TEST_CHECK( coordinates == originalCoordinates ); // coordinates should not be modified
864 int UtcDaliRenderTaskGetScreenToFrameBufferMappingActor(void)
866 TestApplication application;
867 tet_infoline("Testing RenderTask::GetScreenToFrameBufferMappingActor ");
869 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
870 RenderTask renderTask = taskList.CreateTask();
871 Actor mappingActor = Actor::New();
872 renderTask.SetScreenToFrameBufferMappingActor(mappingActor);
874 DALI_TEST_CHECK( mappingActor == renderTask.GetScreenToFrameBufferMappingActor() );
878 int UtcDaliRenderTaskSetViewport(void)
880 TestApplication application;
882 tet_infoline("Testing RenderTask::SetViewport()");
884 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
886 RenderTask task = taskList.GetTask( 0u );
888 Viewport viewport = task.GetViewport();
890 // By default the viewport should match the stage width/height
892 Vector2 stageSize = Stage::GetCurrent().GetSize();
893 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
894 DALI_TEST_CHECK( viewport == expectedViewport );
896 Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f );
897 task.SetViewport( newViewport );
899 // Update (viewport is a property)
900 application.SendNotification();
901 application.Render();
903 DALI_TEST_CHECK( task.GetViewport() == newViewport );
907 int UtcDaliRenderTaskGetViewport(void)
909 TestApplication application;
911 tet_infoline("Testing RenderTask::GetViewport()");
913 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
915 RenderTask task = taskList.GetTask( 0u );
917 Viewport viewport = task.GetViewport();
919 // By default the viewport should match the stage width/height
921 Vector2 stageSize = Stage::GetCurrent().GetSize();
922 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
923 DALI_TEST_CHECK( viewport == expectedViewport );
925 RenderTask newTask = taskList.CreateTask();
926 DALI_TEST_CHECK( newTask.GetViewport() == expectedViewport );
930 int UtcDaliRenderTaskSetViewportPosition(void)
932 TestApplication application;
934 tet_infoline("Testing RenderTask::SetViewportPosition()");
936 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
938 RenderTask task = taskList.GetTask( 0u );
940 Viewport viewport = task.GetViewport();
942 // By default the viewport should match the stage width/height
944 Vector2 stageSize = Stage::GetCurrent().GetSize();
945 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
946 DALI_TEST_CHECK( viewport == expectedViewport );
949 Vector2 newPosition(25.0f, 50.0f);
950 task.SetViewportPosition( newPosition );
952 // Update (viewport is a property)
953 application.SendNotification();
954 application.Render();
956 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition, Math::MACHINE_EPSILON_1, TEST_LOCATION );
958 // Set by Property test
959 Vector2 newPosition2(32.0f, 32.0f);
960 task.SetProperty( RenderTask::VIEWPORT_POSITION, newPosition2 );
963 application.SendNotification();
964 application.Render();
966 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
968 Vector2 newPosition3(64.0f, 0.0f);
969 Animation animation = Animation::New(1.0f);
970 animation.AnimateTo( Property( task, RenderTask::VIEWPORT_POSITION ), newPosition3, AlphaFunctions::Linear );
973 // Perform 1000ms worth of updates at which point animation should have completed.
974 Wait(application, 1000);
975 DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
979 int UtcDaliRenderTaskSetViewportSize(void)
981 TestApplication application;
983 tet_infoline("Testing RenderTask::SetViewportSize()");
985 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
987 RenderTask task = taskList.GetTask( 0u );
989 Viewport viewport = task.GetViewport();
991 // By default the viewport should match the stage width/height
993 Vector2 stageSize = Stage::GetCurrent().GetSize();
994 Viewport expectedViewport( 0, 0, stageSize.width, stageSize.height );
995 DALI_TEST_CHECK( viewport == expectedViewport );
997 Vector2 newSize(128.0f, 64.0f);
998 task.SetViewportSize( newSize );
1000 // Update (viewport is a property)
1001 application.SendNotification();
1002 application.Render();
1004 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1006 // Set by Property test
1007 Vector2 newSize2(50.0f, 50.0f);
1008 task.SetProperty( RenderTask::VIEWPORT_SIZE, newSize2 );
1011 application.SendNotification();
1012 application.Render();
1014 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize2, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1016 Vector2 newSize3(10.0f, 10.0f);
1017 Animation animation = Animation::New(1.0f);
1018 animation.AnimateTo( Property( task, RenderTask::VIEWPORT_SIZE ), newSize3, AlphaFunctions::Linear );
1021 // Perform 1000ms worth of updates at which point animation should have completed.
1022 Wait(application, 1000);
1023 DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION );
1028 int UtcDaliRenderTaskSetClearColor(void)
1030 TestApplication application;
1032 tet_infoline("Testing RenderTask::SetClearColor()");
1034 Vector4 testColor( 1.0f, 2.0f, 3.0f, 4.0f );
1035 Vector4 testColor2( 5.0f, 6.0f, 7.0f, 8.0f );
1037 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1039 RenderTask task = taskList.GetTask( 0u );
1040 DALI_TEST_CHECK( task.GetClearColor() != testColor );
1042 task.SetClearColor( testColor );
1047 DALI_TEST_EQUALS( task.GetClearColor(), testColor, TEST_LOCATION );
1049 task.SetProperty( RenderTask::CLEAR_COLOR, testColor2 );
1054 DALI_TEST_EQUALS( task.GetClearColor(), testColor2, TEST_LOCATION );
1058 int UtcDaliRenderTaskGetClearColor(void)
1060 TestApplication application;
1062 tet_infoline("Testing RenderTask::GetClearColor()");
1064 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1065 RenderTask task = taskList.GetTask( 0u );
1066 DALI_TEST_EQUALS( task.GetClearColor(), RenderTask::DEFAULT_CLEAR_COLOR, TEST_LOCATION );
1070 int UtcDaliRenderTaskSetClearEnabled(void)
1072 TestApplication application;
1074 tet_infoline("Testing RenderTask::SetClearEnabled()");
1076 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1078 RenderTask task = taskList.GetTask( 0u );
1079 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1081 task.SetClearEnabled( true );
1082 DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION );
1084 task.SetClearEnabled( false );
1085 DALI_TEST_EQUALS( task.GetClearEnabled(), false, TEST_LOCATION );
1089 int UtcDaliRenderTaskGetClearEnabled(void)
1091 TestApplication application;
1093 tet_infoline("Testing RenderTask::GetClearEnabled()");
1095 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1097 RenderTask task = taskList.GetTask( 0u );
1098 DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false
1102 int UtcDaliRenderTaskSetRefreshRate(void)
1104 TestApplication application;
1106 tet_infoline("Testing RenderTask::SetRefreshRate()");
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 task.SetRefreshRate( 2u ); // every-other frame
1115 DALI_TEST_CHECK( 2u == task.GetRefreshRate() );
1117 task.SetRefreshRate( RenderTask::REFRESH_ALWAYS );
1118 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1122 int UtcDaliRenderTaskGetRefreshRate(void)
1124 TestApplication application;
1126 tet_infoline("Testing RenderTask::GetRefreshRate()");
1128 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1130 // By default tasks will be processed every frame
1131 RenderTask task = taskList.GetTask( 0u );
1132 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == task.GetRefreshRate() );
1134 RenderTask newTask = taskList.CreateTask();
1135 DALI_TEST_CHECK( RenderTask::REFRESH_ALWAYS == newTask.GetRefreshRate() );
1139 int UtcDaliRenderTaskSignalFinished(void)
1141 TestApplication application;
1143 tet_infoline("Testing RenderTask::SignalFinished()");
1145 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1146 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1148 CameraActor offscreenCameraActor = CameraActor::New();
1150 Stage::GetCurrent().Add( offscreenCameraActor );
1152 BitmapImage image = BitmapImage::New( 10, 10 );
1153 ImageActor rootActor = ImageActor::New( image );
1154 rootActor.SetSize( 10, 10 );
1155 Stage::GetCurrent().Add( rootActor );
1157 RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
1158 NativeImagePtr testNativeImagePtr = new TestNativeImage(10, 10);
1159 FrameBufferImage frameBufferImage = FrameBufferImage::New( *testNativeImagePtr.Get() );
1161 // Flush all outstanding messages
1162 application.SendNotification();
1163 application.Render();
1165 RenderTask newTask = taskList.CreateTask();
1166 newTask.SetCameraActor( offscreenCameraActor );
1167 newTask.SetSourceActor( rootActor );
1168 newTask.SetInputEnabled( false );
1169 newTask.SetClearColor( Vector4( 0.f, 0.f, 0.f, 0.f ) );
1170 newTask.SetClearEnabled( true );
1171 newTask.SetExclusive( true );
1172 newTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
1173 newTask.SetTargetFrameBuffer( frameBufferImage );
1175 // Framebuffer doesn't actually get created until Connected, i.e. by previous line
1177 bool finished = false;
1178 RenderTaskFinished renderTaskFinished( finished );
1179 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1181 // Flush the queue and render.
1182 application.SendNotification();
1184 // 1 render to process render task, then wait for sync before finished msg is sent
1185 // from update to the event thread.
1187 application.Render();
1188 application.SendNotification();
1189 DALI_TEST_CHECK( !finished );
1191 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1192 DALI_TEST_CHECK( lastSyncObj != NULL );
1194 application.Render();
1195 DALI_TEST_EQUALS( (application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1196 application.SendNotification();
1197 DALI_TEST_CHECK( !finished );
1199 application.Render();
1200 DALI_TEST_EQUALS( (application.GetUpdateStatus() & Integration::KeepUpdating::RENDER_TASK_SYNC), Integration::KeepUpdating::RENDER_TASK_SYNC, TEST_LOCATION );
1201 application.SendNotification();
1202 DALI_TEST_CHECK( ! finished );
1204 sync.SetObjectSynced( lastSyncObj, true );
1206 application.Render();
1207 application.SendNotification();
1208 DALI_TEST_CHECK( !finished );
1210 application.Render();
1211 application.SendNotification();
1212 DALI_TEST_CHECK( finished );
1215 application.Render(); // Double check no more finished signal
1216 application.SendNotification();
1217 DALI_TEST_CHECK( ! finished );
1222 int UtcDaliRenderTaskContinuous01(void)
1224 TestApplication application;
1226 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not staged)\nPOST:continuous renders, no Finished signal");
1228 // SETUP AN OFFSCREEN RENDER TASK
1229 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1230 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1231 drawTrace.Enable(true);
1233 Actor rootActor = Actor::New();
1234 Stage::GetCurrent().Add( rootActor );
1236 CameraActor offscreenCameraActor = CameraActor::New();
1237 Stage::GetCurrent().Add( offscreenCameraActor );
1239 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1240 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1241 Integration::ResourceId imageRequestId = imageRequest->GetId();
1242 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1244 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1245 bool finished = false;
1246 RenderTaskFinished renderTaskFinished( finished );
1247 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1248 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1249 application.SendNotification();
1251 // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating
1252 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1253 application.GetPlatform().ClearReadyResources();
1255 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false ) );
1257 // ADD SOURCE ACTOR TO STAGE - expect continuous renders to start, no finished signal
1258 Stage::GetCurrent().Add(secondRootActor);
1259 application.SendNotification();
1261 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1262 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1263 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
1268 int UtcDaliRenderTaskContinuous02(void)
1270 TestApplication application;
1272 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (source actor not visible)\nPOST:continuous renders, no Finished signal");
1274 // SETUP AN OFFSCREEN RENDER TASK
1275 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1276 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1277 drawTrace.Enable(true);
1279 Actor rootActor = Actor::New();
1280 Stage::GetCurrent().Add( rootActor );
1282 CameraActor offscreenCameraActor = CameraActor::New();
1283 Stage::GetCurrent().Add( offscreenCameraActor );
1285 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1286 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1287 Integration::ResourceId imageRequestId = imageRequest->GetId();
1288 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1289 Stage::GetCurrent().Add(secondRootActor);
1290 secondRootActor.SetVisible(false);
1292 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1293 bool finished = false;
1294 RenderTaskFinished renderTaskFinished( finished );
1295 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1296 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1297 application.SendNotification();
1299 // START PROCESS/RENDER Input, Expected Input, Expected
1300 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1301 application.GetPlatform().ClearReadyResources();
1302 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false ) );
1304 // MAKE SOURCE ACTOR VISIBLE - expect continuous renders to start, no finished signal
1305 secondRootActor.SetVisible(true);
1306 application.SendNotification();
1308 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1309 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1310 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
1314 int UtcDaliRenderTaskContinuous03(void)
1316 TestApplication application;
1318 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: render task not ready (camera actor not staged)\nPOST:continuous renders, no Finished signal");
1320 // SETUP AN OFFSCREEN RENDER TASK
1321 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1322 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1323 drawTrace.Enable(true);
1325 Actor rootActor = Actor::New();
1326 Stage::GetCurrent().Add( rootActor );
1328 CameraActor offscreenCameraActor = CameraActor::New();
1329 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1330 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1331 Integration::ResourceId imageRequestId = imageRequest->GetId();
1332 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1333 Stage::GetCurrent().Add(secondRootActor);
1335 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1336 bool finished = false;
1337 RenderTaskFinished renderTaskFinished( finished );
1338 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1339 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1340 application.SendNotification();
1342 // START PROCESS/RENDER Input, Expected Input, Expected
1343 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1344 application.GetPlatform().ClearReadyResources();
1345 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, false ) );
1347 // ADD CAMERA ACTOR TO STAGE - expect continuous renders to start, no finished signal
1348 Stage::GetCurrent().Add( offscreenCameraActor );
1349 application.SendNotification();
1351 // CONTINUE PROCESS/RENDER Input, Expected Input, Expected
1352 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1353 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
1358 int UtcDaliRenderTaskContinuous04(void)
1360 TestApplication application;
1362 tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: Resource not ready\nPOST:continuous renders, no Finished signal");
1364 // SETUP AN OFFSCREEN RENDER TASK
1365 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1366 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1367 drawTrace.Enable(true);
1369 Actor rootActor = Actor::New();
1370 Stage::GetCurrent().Add( rootActor );
1372 CameraActor offscreenCameraActor = CameraActor::New();
1373 Stage::GetCurrent().Add( offscreenCameraActor );
1374 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1375 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1376 Integration::ResourceId imageRequestId = imageRequest->GetId();
1377 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1378 Stage::GetCurrent().Add(secondRootActor);
1380 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1381 bool finished = false;
1382 RenderTaskFinished renderTaskFinished( finished );
1383 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1384 application.SendNotification();
1386 // START PROCESS/RENDER Input, Expected Input, Expected
1387 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1388 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1390 // FINISH RESOURCE LOADING - expect 'continuous' renders to start, no finished signal
1391 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1392 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
1397 int UtcDaliRenderTaskOnce01(void)
1399 TestApplication application;
1401 tet_infoline("Testing RenderTask Render Once GlSync, using loading image\nPRE: Resources not ready, Source not visible\nPOST: Finished signal sent once only");
1403 // SETUP AN OFFSCREEN RENDER TASK
1404 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1405 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1406 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1407 drawTrace.Enable(true);
1409 Actor rootActor = Actor::New();
1410 Stage::GetCurrent().Add( rootActor );
1412 CameraActor offscreenCameraActor = CameraActor::New();
1413 Stage::GetCurrent().Add( offscreenCameraActor );
1414 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1415 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1416 Integration::ResourceId imageRequestId = imageRequest->GetId();
1417 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1419 Stage::GetCurrent().Add(secondRootActor);
1420 secondRootActor.SetVisible(false);
1422 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true);
1423 bool finished = false;
1424 RenderTaskFinished renderTaskFinished( finished );
1425 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1426 application.SendNotification();
1428 // START PROCESS/RENDER Input, Expected Input, Expected
1429 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1430 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1432 // MAKE SOURCE VISIBLE
1433 secondRootActor.SetVisible(true);
1434 application.SendNotification();
1435 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1436 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1438 // FINISH RESOURCE LOADING - expect no rendering yet
1439 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1440 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1441 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1442 DALI_TEST_CHECK( lastSyncObj != NULL );
1444 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1445 application.GetPlatform().ClearReadyResources();
1446 sync.SetObjectSynced( lastSyncObj, true );
1447 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1448 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
1452 int UtcDaliRenderTaskOnce02(void)
1454 TestApplication application;
1456 tet_infoline("Testing RenderTask Render Once GlSync, using loading image. Switch from render always after ready to render once\n"
1457 "PRE: Render task ready, Image not loaded\n"
1458 "POST: Finished signal sent only once");
1460 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1461 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1462 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1463 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1464 drawTrace.Enable(true);
1466 Actor rootActor = Actor::New();
1467 Stage::GetCurrent().Add( rootActor );
1469 CameraActor offscreenCameraActor = CameraActor::New();
1470 Stage::GetCurrent().Add( offscreenCameraActor );
1471 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1472 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1473 Integration::ResourceId imageRequestId = imageRequest->GetId();
1474 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1475 Stage::GetCurrent().Add(secondRootActor);
1477 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1478 bool finished = false;
1479 RenderTaskFinished renderTaskFinished( finished );
1480 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1481 application.SendNotification();
1483 // START PROCESS/RENDER Input, Expected Input, Expected
1484 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1485 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1487 // FINISH RESOURCE LOADING
1488 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1489 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
1490 application.GetPlatform().ClearReadyResources();
1491 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
1493 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1494 application.SendNotification(); // Input, Expected Input, Expected
1495 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1496 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1497 DALI_TEST_CHECK( lastSyncObj != NULL );
1499 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1500 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1501 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1502 sync.SetObjectSynced( lastSyncObj, true );
1503 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1504 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
1510 int UtcDaliRenderTaskOnce03(void)
1512 TestApplication application;
1514 tet_infoline("Testing RenderTask Render Once GlSync\n"
1515 "Switch from Render always after ready to render once with resources unready\n"
1516 "PRE: Everything ready to render\n"
1517 "POST: Finished signal sent once");
1519 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1520 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1521 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1522 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1523 drawTrace.Enable(true);
1525 Actor rootActor = Actor::New();
1526 Stage::GetCurrent().Add( rootActor );
1528 CameraActor offscreenCameraActor = CameraActor::New();
1529 Stage::GetCurrent().Add( offscreenCameraActor );
1530 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1531 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1532 Integration::ResourceId imageRequestId = imageRequest->GetId();
1533 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1534 Stage::GetCurrent().Add(secondRootActor);
1536 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1537 bool finished = false;
1538 RenderTaskFinished renderTaskFinished( finished );
1539 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1540 application.SendNotification();
1542 // START PROCESS/RENDER Input, Expected Input, Expected
1543 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1544 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1546 // CHANGE TO RENDER ONCE
1547 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1548 application.SendNotification(); // Input, Expected Input, Expected
1549 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1550 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1552 // FINISH RESOURCE LOADING
1553 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1554 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1555 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1556 DALI_TEST_CHECK( lastSyncObj != NULL );
1557 application.GetPlatform().ClearReadyResources();
1559 sync.SetObjectSynced( lastSyncObj, true );
1560 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1561 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
1567 //int UtcDaliRenderTaskOnce04(void)
1569 TestApplication application;
1571 tet_infoline("Testing RenderTask Render Once GlSync\n"
1572 "During RenderOnce, make ready resources unready before sending first finished signal\n"
1573 "PRE: Everything ready.\n"
1574 "POST: Finished signal sent only once");
1576 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1577 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1578 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1579 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1580 drawTrace.Enable(true);
1582 Actor rootActor = Actor::New();
1583 Stage::GetCurrent().Add( rootActor );
1585 CameraActor offscreenCameraActor = CameraActor::New();
1586 Stage::GetCurrent().Add( offscreenCameraActor );
1587 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1588 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1589 Integration::ResourceId imageRequestId = imageRequest->GetId();
1590 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1591 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1592 application.Render();
1594 Stage::GetCurrent().Add(secondRootActor);
1595 application.GetPlatform().ClearReadyResources();
1597 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1598 bool finished = false;
1599 RenderTaskFinished renderTaskFinished( finished );
1600 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1601 application.SendNotification();
1603 // START PROCESS/RENDER Input, Expected Input, Expected
1604 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1605 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1607 // CHANGE TO RENDER ONCE, RESOURCES BECOME NOT READY
1608 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1611 ReloadImage(application, secondRootActor.GetImage());
1612 application.SendNotification(); // Input, Expected Input, Expected
1614 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1615 DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION);
1616 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1618 // FINISH RESOURCE LOADING
1619 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1620 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1621 application.GetPlatform().ClearReadyResources();
1622 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1623 DALI_TEST_CHECK( lastSyncObj != NULL );
1625 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1626 sync.SetObjectSynced( lastSyncObj, true );
1627 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1628 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, true ) );
1630 // Finished rendering - expect no more renders, no more signals:
1631 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1632 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1633 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1634 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1635 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1636 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1641 int UtcDaliRenderTaskOnce05(void)
1643 TestApplication application;
1645 tet_infoline("Testing RenderTask Render Once GLSync\n"
1646 "Render once, Second call to SetRefreshRate(ONCE) triggers only one more finished signal\n"
1647 "PRE: Everything ready\n"
1648 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
1650 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1651 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1652 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1653 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1654 drawTrace.Enable(true);
1656 Actor rootActor = Actor::New();
1657 Stage::GetCurrent().Add( rootActor );
1659 CameraActor offscreenCameraActor = CameraActor::New();
1660 Stage::GetCurrent().Add( offscreenCameraActor );
1661 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1662 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1663 Integration::ResourceId imageRequestId = imageRequest->GetId();
1664 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1665 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1666 application.Render();
1667 application.GetPlatform().ClearReadyResources();
1669 Stage::GetCurrent().Add(secondRootActor);
1671 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1672 bool finished = false;
1673 RenderTaskFinished renderTaskFinished( finished );
1674 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1675 application.SendNotification();
1677 // START PROCESS/RENDER Input, Expected Input, Expected
1678 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1679 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
1681 // CHANGE TO RENDER ONCE,
1682 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1683 application.SendNotification();
1684 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1685 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1686 DALI_TEST_CHECK( lastSyncObj != NULL );
1688 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1689 sync.SetObjectSynced( lastSyncObj, true );
1690 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1691 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
1693 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1694 application.SendNotification();
1695 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1696 lastSyncObj = sync.GetLastSyncObject();
1697 DALI_TEST_CHECK( lastSyncObj != NULL );
1699 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1700 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1701 sync.SetObjectSynced( lastSyncObj, true );
1702 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1703 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
1707 int UtcDaliRenderTaskOnce06(void)
1709 TestApplication application;
1711 tet_infoline("Testing RenderTask Render Once GLSync\n"
1712 "Render once, Call to SetRefreshRate(ONCE) in Finished signal callback triggers "
1713 "another render & another finished signal\n"
1714 "PRE: Everything ready\n"
1715 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
1718 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1719 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1720 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1721 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1722 drawTrace.Enable(true);
1724 Actor rootActor = Actor::New();
1725 Stage::GetCurrent().Add( rootActor );
1727 CameraActor offscreenCameraActor = CameraActor::New();
1728 Stage::GetCurrent().Add( offscreenCameraActor );
1729 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1730 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1731 Integration::ResourceId imageRequestId = imageRequest->GetId();
1732 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1733 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1734 application.Render();
1735 application.GetPlatform().ClearReadyResources();
1737 Stage::GetCurrent().Add(secondRootActor);
1739 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1740 bool finished = false;
1742 ConnectionTracker connectionTracker;
1743 RenderTaskFinishedRenderAgain renderTaskFinishedRenderAgain( finished );
1744 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinishedRenderAgain );
1746 application.SendNotification();
1748 // Expect 2 frames to be drawn.
1749 // START PROCESS/RENDER Input, Expected Input, Expected
1750 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1751 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1752 DALI_TEST_CHECK( lastSyncObj == NULL );
1753 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
1755 // CHANGE TO RENDER ONCE,
1756 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1757 application.SendNotification();
1758 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1759 lastSyncObj = sync.GetLastSyncObject();
1760 DALI_TEST_CHECK( lastSyncObj != NULL );
1762 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1763 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1765 sync.SetObjectSynced( lastSyncObj, true );
1766 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1767 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
1768 application.SendNotification();
1770 // Expect SetRefreshRate to have been called again
1771 // Prevent next finished signal calling refresh once again
1772 RenderTaskFinished renderTaskFinished( finished );
1773 connectionTracker.DisconnectAll();
1774 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinished );
1775 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1776 lastSyncObj = sync.GetLastSyncObject();
1777 DALI_TEST_CHECK( lastSyncObj != NULL );
1779 sync.SetObjectSynced( lastSyncObj, true );
1780 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1781 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
1786 int UtcDaliRenderTaskOnce07(void)
1788 TestApplication application;
1790 tet_infoline("Testing RenderTask Render Once GlSync\n"
1791 "SetRefreshRate(ONCE) again before first finished signal has been sent.\n"
1792 "PRE: resources ready\n"
1793 "POST: Only 1 finished signal sent.");
1795 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1796 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1797 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1798 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1799 drawTrace.Enable(true);
1801 Actor rootActor = Actor::New();
1802 Stage::GetCurrent().Add( rootActor );
1804 CameraActor offscreenCameraActor = CameraActor::New();
1805 Stage::GetCurrent().Add( offscreenCameraActor );
1806 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1807 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1808 Integration::ResourceId imageRequestId = imageRequest->GetId();
1809 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1810 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1811 application.Render();
1812 application.GetPlatform().ClearReadyResources();
1814 Stage::GetCurrent().Add(secondRootActor);
1816 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1817 bool finished = false;
1818 RenderTaskFinished renderTaskFinished( finished );
1819 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1820 application.SendNotification();
1822 // START PROCESS/RENDER Input, Expected Input, Expected
1823 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1824 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
1826 // CHANGE TO RENDER ONCE,
1827 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1828 application.SendNotification();
1829 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1830 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1831 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1833 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1834 application.SendNotification();
1835 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1836 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1837 DALI_TEST_CHECK( lastSyncObj != NULL );
1839 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1840 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1841 sync.SetObjectSynced( lastSyncObj, true );
1842 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1843 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
1850 int UtcDaliRenderTaskOnce08(void)
1852 TestApplication application;
1854 tet_infoline("Testing RenderTask Render Once GlSync\n"
1855 "SetRefreshRate(ONCE), resource load failed completes render task.\n"
1856 "PRE: resources not ready\n"
1857 "POST: Only 1 finished signal sent.");
1859 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1860 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1861 TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction();
1862 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1863 drawTrace.Enable(true);
1865 Actor rootActor = Actor::New();
1866 Stage::GetCurrent().Add( rootActor );
1868 CameraActor offscreenCameraActor = CameraActor::New();
1869 Stage::GetCurrent().Add( offscreenCameraActor );
1870 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1871 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1872 Integration::ResourceId imageRequestId = imageRequest->GetId();
1873 Stage::GetCurrent().Add(secondRootActor);
1875 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true);
1876 bool finished = false;
1877 RenderTaskFinished renderTaskFinished( finished );
1878 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1879 application.SendNotification();
1881 // START PROCESS/RENDER Input, Expected Input, Expected
1882 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1883 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1885 // CHANGE TO RENDER ONCE,
1886 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1887 application.SendNotification();
1888 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1889 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1890 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1892 tet_printf(" FailImageLoad\n");
1894 FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete
1895 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) ); // nothing to draw
1896 application.SendNotification();
1898 // Drawing empty framebuffer, so will still get a GL sync
1899 Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject();
1900 DALI_TEST_CHECK( lastSyncObj != NULL );
1902 // Expect finished signal, as all resources are complete
1903 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, true, false ) );
1910 int UtcDaliRenderTaskOnceNoSync01(void)
1912 TestApplication application;
1914 tet_infoline("Testing RenderTask Render Once, using loading image\nPRE: Resources not ready, Source not visible\nPOST: Finished signal sent once only");
1916 // SETUP AN OFFSCREEN RENDER TASK
1917 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1918 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1919 drawTrace.Enable(true);
1921 Actor rootActor = Actor::New();
1922 Stage::GetCurrent().Add( rootActor );
1924 CameraActor offscreenCameraActor = CameraActor::New();
1925 Stage::GetCurrent().Add( offscreenCameraActor );
1926 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1927 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1928 Integration::ResourceId imageRequestId = imageRequest->GetId();
1929 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1931 Stage::GetCurrent().Add(secondRootActor);
1932 secondRootActor.SetVisible(false);
1934 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
1935 bool finished = false;
1936 RenderTaskFinished renderTaskFinished( finished );
1937 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1938 application.SendNotification();
1940 // START PROCESS/RENDER Input, Expected Input, Expected
1941 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1942 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1944 // MAKE SOURCE VISIBLE
1945 secondRootActor.SetVisible(true);
1946 application.SendNotification();
1947 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1948 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1950 // FINISH RESOURCE LOADING - expect immediate rendering yet
1951 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1952 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
1953 application.GetPlatform().ClearReadyResources();
1954 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
1958 int UtcDaliRenderTaskOnceNoSync02(void)
1960 TestApplication application;
1962 tet_infoline("Testing RenderTask Render Once, using loading image. Switch from render always after ready to render once\n"
1963 "PRE: Render task ready, Image not loaded\n"
1964 "POST: Finished signal sent only once");
1966 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
1967 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
1968 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
1969 drawTrace.Enable(true);
1971 Actor rootActor = Actor::New();
1972 Stage::GetCurrent().Add( rootActor );
1974 CameraActor offscreenCameraActor = CameraActor::New();
1975 Stage::GetCurrent().Add( offscreenCameraActor );
1976 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
1977 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
1978 Integration::ResourceId imageRequestId = imageRequest->GetId();
1979 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
1980 Stage::GetCurrent().Add(secondRootActor);
1982 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
1983 bool finished = false;
1984 RenderTaskFinished renderTaskFinished( finished );
1985 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
1986 application.SendNotification();
1988 // START PROCESS/RENDER Input, Expected Input, Expected
1989 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1990 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
1992 // FINISH RESOURCE LOADING
1993 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
1994 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
1995 application.GetPlatform().ClearReadyResources();
1997 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
1998 application.SendNotification(); // Input, Expected Input, Expected
1999 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2000 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
2005 int UtcDaliRenderTaskOnceNoSync03(void)
2007 TestApplication application;
2009 tet_infoline("Testing RenderTask Render Once\n"
2010 "Switch from Render always after ready to render once with resources unready\n"
2011 "PRE: Everything ready to render\n"
2012 "POST: Finished signal sent once");
2014 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2015 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2016 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2017 drawTrace.Enable(true);
2019 Actor rootActor = Actor::New();
2020 Stage::GetCurrent().Add( rootActor );
2022 CameraActor offscreenCameraActor = CameraActor::New();
2023 Stage::GetCurrent().Add( offscreenCameraActor );
2024 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2025 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2026 Integration::ResourceId imageRequestId = imageRequest->GetId();
2027 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2028 Stage::GetCurrent().Add(secondRootActor);
2030 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2031 bool finished = false;
2032 RenderTaskFinished renderTaskFinished( finished );
2033 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2034 application.SendNotification();
2036 // START PROCESS/RENDER Input, Expected Input, Expected
2037 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2038 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2040 // CHANGE TO RENDER ONCE
2041 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2042 application.SendNotification(); // Input, Expected Input, Expected
2043 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2044 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2046 // FINISH RESOURCE LOADING
2047 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2048 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2049 application.GetPlatform().ClearReadyResources();
2050 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
2055 //int UtcDaliRenderTaskOnceNoSync04(void)
2057 TestApplication application;
2059 tet_infoline("Testing RenderTask Render Once\n"
2060 "During RenderOnce, make ready resources unready before sending first finished signal\n"
2061 "PRE: Everything ready.\n"
2062 "POST: Finished signal sent only once");
2064 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2065 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2066 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2067 drawTrace.Enable(true);
2069 Actor rootActor = Actor::New();
2070 Stage::GetCurrent().Add( rootActor );
2072 CameraActor offscreenCameraActor = CameraActor::New();
2073 Stage::GetCurrent().Add( offscreenCameraActor );
2074 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2075 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2076 Integration::ResourceId imageRequestId = imageRequest->GetId();
2077 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2078 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2079 application.Render();
2080 application.GetPlatform().ClearReadyResources();
2082 Stage::GetCurrent().Add(secondRootActor);
2084 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2085 bool finished = false;
2086 RenderTaskFinished renderTaskFinished( finished );
2087 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2088 application.SendNotification();
2090 // START PROCESS/RENDER Input, Expected Input, Expected
2091 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2092 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
2094 // CHANGE TO RENDER ONCE, RESOURCES BECOME NOT READY
2095 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2098 ReloadImage(application, secondRootActor.GetImage());
2099 application.SendNotification(); // Input, Expected Input, Expected
2101 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2102 DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION);
2103 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2105 // FINISH RESOURCE LOADING
2106 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2107 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, true, true ) );
2108 application.GetPlatform().ClearReadyResources();
2109 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2110 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2111 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2112 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2117 int UtcDaliRenderTaskOnceNoSync05(void)
2119 TestApplication application;
2121 tet_infoline("Testing RenderTask Render Once\n"
2122 "Render once, Second call to SetRefreshRate(ONCE) triggers only one more finished signal\n"
2123 "PRE: Everything ready\n"
2124 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
2126 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2127 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2128 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2129 drawTrace.Enable(true);
2131 Actor rootActor = Actor::New();
2132 Stage::GetCurrent().Add( rootActor );
2134 CameraActor offscreenCameraActor = CameraActor::New();
2135 Stage::GetCurrent().Add( offscreenCameraActor );
2136 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2137 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2138 Integration::ResourceId imageRequestId = imageRequest->GetId();
2139 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2140 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2141 application.Render();
2142 application.GetPlatform().ClearReadyResources();
2144 Stage::GetCurrent().Add(secondRootActor);
2146 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2147 bool finished = false;
2148 RenderTaskFinished renderTaskFinished( finished );
2149 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2150 application.SendNotification();
2152 // START PROCESS/RENDER Input, Expected Input, Expected
2153 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2154 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
2156 // CHANGE TO RENDER ONCE,
2157 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2158 application.SendNotification();
2159 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2160 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
2162 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2163 application.SendNotification();
2164 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2165 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
2169 int UtcDaliRenderTaskOnceNoSync06(void)
2171 TestApplication application;
2173 tet_infoline("Testing RenderTask Render Once\n"
2174 "Render once, Call to SetRefreshRate(ONCE) in Finished signal callback triggers\n"
2175 "another render & another finished signal\n"
2176 "PRE: Everything ready\n"
2177 "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)");
2180 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2181 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2182 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2183 drawTrace.Enable(true);
2185 Actor rootActor = Actor::New();
2186 Stage::GetCurrent().Add( rootActor );
2188 CameraActor offscreenCameraActor = CameraActor::New();
2189 Stage::GetCurrent().Add( offscreenCameraActor );
2190 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2191 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2192 Integration::ResourceId imageRequestId = imageRequest->GetId();
2193 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2194 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2195 application.Render();
2196 application.GetPlatform().ClearReadyResources();
2198 Stage::GetCurrent().Add(secondRootActor);
2200 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2201 bool finished = false;
2203 ConnectionTracker connectionTracker;
2204 RenderTaskFinishedRenderAgain renderTaskFinishedRenderAgain( finished );
2205 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinishedRenderAgain );
2207 application.SendNotification();
2209 // START PROCESS/RENDER Input, Expected Input, Expected
2210 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2211 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
2213 // CHANGE TO RENDER ONCE,
2214 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2215 application.SendNotification();
2216 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2217 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
2219 // Expect SetRefreshRate to have been called again
2220 // Prevent next finished signal calling refresh once again
2221 RenderTaskFinished renderTaskFinished( finished );
2222 connectionTracker.DisconnectAll();
2223 newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinished );
2225 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2226 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
2231 int UtcDaliRenderTaskOnceNoSync07(void)
2233 TestApplication application;
2235 tet_infoline("Testing RenderTask Render Once\n"
2236 "SetRefreshRate(ONCE) again before first finished signal has been sent.\n"
2237 "PRE: resources ready\n"
2238 "POST: Only 1 finished signal sent.");
2240 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2241 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2242 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2243 drawTrace.Enable(true);
2245 Actor rootActor = Actor::New();
2246 Stage::GetCurrent().Add( rootActor );
2248 CameraActor offscreenCameraActor = CameraActor::New();
2249 Stage::GetCurrent().Add( offscreenCameraActor );
2250 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2251 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2252 Integration::ResourceId imageRequestId = imageRequest->GetId();
2253 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2254 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2255 application.Render();
2256 application.GetPlatform().ClearReadyResources();
2258 Stage::GetCurrent().Add(secondRootActor);
2260 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2261 bool finished = false;
2262 RenderTaskFinished renderTaskFinished( finished );
2263 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2264 application.SendNotification();
2266 // START PROCESS/RENDER Input, Expected Input, Expected
2267 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2268 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false ) );
2270 // CHANGE TO RENDER ONCE,
2271 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2272 application.SendNotification();
2273 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2274 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
2276 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2277 application.SendNotification();
2278 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true ) );
2279 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
2283 int UtcDaliRenderTaskOnceNoSync08(void)
2285 TestApplication application;
2287 tet_infoline("Testing RenderTask Render Once\n"
2288 "SetRefreshRate(ONCE), resource load failed, completes render task.\n"
2289 "PRE: resources not ready\n"
2290 "POST: Only 1 finished signal sent.");
2292 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2293 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2294 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2295 drawTrace.Enable(true);
2297 Actor rootActor = Actor::New();
2298 Stage::GetCurrent().Add( rootActor );
2300 CameraActor offscreenCameraActor = CameraActor::New();
2301 Stage::GetCurrent().Add( offscreenCameraActor );
2302 ImageActor secondRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2303 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2304 Integration::ResourceId imageRequestId = imageRequest->GetId();
2305 Stage::GetCurrent().Add(secondRootActor);
2307 RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false);
2308 bool finished = false;
2309 RenderTaskFinished renderTaskFinished( finished );
2310 newTask.FinishedSignal().Connect( &application, renderTaskFinished );
2311 application.SendNotification();
2313 // START PROCESS/RENDER Input, Expected Input, Expected
2314 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2315 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2317 // CHANGE TO RENDER ONCE,
2318 newTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
2319 application.SendNotification();
2320 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2321 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2322 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) );
2324 FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete
2325 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true ) ); // nothing to draw
2326 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false ) );
2333 int UtcDaliRenderTaskOnceChain01(void)
2335 TestApplication application;
2337 tet_infoline("Testing RenderTask Render Once Chained render tasks\n"
2338 "SetRefreshRate(ONCE), resource load completes, both render tasks render.\n"
2339 "PRE: resources not ready\n"
2340 "POST: 2 finished signals sent.");
2342 // SETUP A CONTINUOUS OFFSCREEN RENDER TASK
2343 application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
2344 TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace();
2345 drawTrace.Enable(true);
2347 Actor defaultRootActor = Actor::New(); // Root for default RT
2348 Stage::GetCurrent().Add( defaultRootActor );
2350 CameraActor offscreenCameraActor = CameraActor::New();
2351 Stage::GetCurrent().Add( offscreenCameraActor );
2352 ImageActor firstRootActor = CreateLoadingImage(application, "aFile.jpg", Image::Immediate, Image::Unused);
2353 Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest();
2354 Integration::ResourceId imageRequestId = imageRequest->GetId();
2355 Integration::ResourceTypeId imageType = imageRequest->GetType()->id;
2356 Stage::GetCurrent().Add(firstRootActor);
2358 // first render task
2359 RenderTask firstTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, firstRootActor, RenderTask::REFRESH_ONCE, false);
2360 bool firstFinished = false;
2361 RenderTaskFinished renderTask1Finished( firstFinished );
2362 firstTask.FinishedSignal().Connect( &application, renderTask1Finished );
2364 // Second render task
2365 FrameBufferImage fbo = firstTask.GetTargetFrameBuffer();
2366 ImageActor secondRootActor = ImageActor::New( fbo );
2367 Stage::GetCurrent().Add(secondRootActor);
2368 RenderTask secondTask = CreateRenderTask(application, offscreenCameraActor, defaultRootActor, secondRootActor, RenderTask::REFRESH_ONCE, false);
2369 bool secondFinished = false;
2370 RenderTaskFinished renderTask2Finished( secondFinished );
2371 secondTask.FinishedSignal().Connect( &application, renderTask2Finished );
2373 application.SendNotification();
2375 // START PROCESS/RENDER Input, Expected Input, Expected
2376 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false, true ) );
2377 DALI_TEST_CHECK( secondFinished == false );
2378 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false, true ) );
2379 DALI_TEST_CHECK( secondFinished == false );
2381 CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete
2382 DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false, true ) );
2383 DALI_TEST_CHECK( secondFinished == false );
2384 application.GetPlatform().ClearReadyResources();
2386 DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, true, false ) );
2387 DALI_TEST_CHECK( secondFinished == true );
2392 int UtcDaliRenderTaskProperties(void)
2394 TestApplication application;
2396 RenderTask task = Stage::GetCurrent().GetRenderTaskList().CreateTask();
2398 Property::IndexContainer indices;
2399 task.GetPropertyIndices( indices );
2400 DALI_TEST_CHECK( ! indices.empty() );
2401 DALI_TEST_EQUALS( indices.size(), task.GetPropertyCount(), TEST_LOCATION );