X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-RenderTask.cpp;h=e5ea26b035cc15d3cf097b7f38ee4403d02e080c;hb=79881246746f65474b24ea4fe14151ccef8df3f4;hp=647594f357910284dc0223e303e7bfdcff05a9ab;hpb=8d88b3be741a3907eae18b7274406a22f2fdad9c;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-RenderTask.cpp b/automated-tests/src/dali/utc-Dali-RenderTask.cpp index 647594f..e5ea26b 100644 --- a/automated-tests/src/dali/utc-Dali-RenderTask.cpp +++ b/automated-tests/src/dali/utc-Dali-RenderTask.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -169,56 +169,30 @@ bool TestScreenToFrameBufferFunction( Vector2& coordinates ) return true; } -Actor CreateLoadingActor(TestApplication& application, std::string filename, ResourceImage::LoadPolicy loadPolicy, Image::ReleasePolicy releasePolicy) +Actor CreateRenderableActorSuccess(TestApplication& application, std::string filename) { - Image image = ResourceImage::New(filename, loadPolicy, releasePolicy); - DALI_TEST_CHECK( image ); - application.SendNotification(); - application.Render(16); - DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) ); + PrepareResourceImage( application, 80u, 80u, Pixel::RGBA8888 ); + Image image = ResourceImage::New(filename); Actor actor = CreateRenderableActor(image); actor.SetSize( 80, 80 ); - application.SendNotification(); - application.Render(16); return actor; } -Image CreateLoadingImage(TestApplication& application, std::string filename, ResourceImage::LoadPolicy loadPolicy, Image::ReleasePolicy releasePolicy) +Actor CreateRenderableActorFailed(TestApplication& application, std::string filename) { - Image image = ResourceImage::New(filename, loadPolicy, releasePolicy); + Image image = ResourceImage::New(filename); DALI_TEST_CHECK( image ); - application.SendNotification(); - application.Render(16); - DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) ); - - return image; -} - -void CompleteImageLoad(TestApplication& application, Integration::ResourceId resourceId, Integration::ResourceTypeId requestType) -{ - std::vector ids; - ids.push_back( 23 ); - application.GetGlAbstraction().SetNextTextureIds( ids ); - - Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD ); - Integration::ResourcePointer resource(bitmap); - bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80); - - application.GetPlatform().SetResourceLoaded(resourceId, requestType, resource); -} - -void FailImageLoad(TestApplication& application, Integration::ResourceId resourceId ) -{ - application.GetPlatform().SetResourceLoadFailed(resourceId, Integration::FailureUnknown); + Actor actor = CreateRenderableActor(image); + actor.SetSize( 80, 80 ); + return actor; } -void ReloadImage(TestApplication& application, ResourceImage image) +Image CreateResourceImage(TestApplication& application, std::string filename) { - application.GetPlatform().ClearReadyResources(); - application.GetPlatform().DiscardRequest(); - application.GetPlatform().ResetTrace(); - application.GetPlatform().SetClosestImageSize(Vector2(80.0f, 80.0f)); // Ensure reload is called. - image.Reload(); + PrepareResourceImage( application, 80u, 80u, Pixel::RGBA8888 ); + Image image = ResourceImage::New(filename); + DALI_TEST_CHECK( image ); + return image; } RenderTask CreateRenderTask(TestApplication& application, @@ -312,41 +286,6 @@ bool UpdateRender(TestApplication& application, TraceCallStack& callStack, bool return result; } -// The functor to be used in the hit-test algorithm to check whether the actor is hittable. -bool IsActorHittableFunction(Actor actor, Dali::HitTestAlgorithm::TraverseType type) -{ - bool hittable = false; - - switch (type) - { - case Dali::HitTestAlgorithm::CHECK_ACTOR: - { - // Check whether the actor is visible and not fully transparent. - if( actor.IsVisible() - && actor.GetCurrentWorldColor().a > 0.01f) // not FULLY_TRANSPARENT - { - - hittable = true; - } - break; - } - case Dali::HitTestAlgorithm::DESCEND_ACTOR_TREE: - { - if( actor.IsVisible() ) // Actor is visible, if not visible then none of its children are visible. - { - hittable = true; - } - break; - } - default: - { - break; - } - } - - return hittable; -} - } // unnamed namespace @@ -416,20 +355,12 @@ int UtcDaliRenderTaskSetSourceActorP01(void) tet_infoline("Testing RenderTask::SetSourceActor() Positive - check that setting a non-renderable actor stops existing source actor being rendered "); Stage stage = Stage::GetCurrent(); - - const std::vector& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 ); - RenderTaskList taskList = stage.GetRenderTaskList(); - RenderTask task = taskList.GetTask( 0u ); Actor actor = task.GetSourceActor(); DALI_TEST_CHECK( actor ); - std::vector ids; - ids.push_back( 7 ); - application.GetGlAbstraction().SetNextTextureIds( ids ); - BufferImage img = BufferImage::New( 1,1 ); Actor newActor = CreateRenderableActor( img ); newActor.SetSize(1,1); @@ -444,13 +375,17 @@ int UtcDaliRenderTaskSetSourceActorP01(void) DALI_TEST_CHECK( task.GetSourceActor() != actor ); DALI_TEST_CHECK( task.GetSourceActor() == nonRenderableActor ); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& drawTrace = gl.GetDrawTrace(); + drawTrace.Enable(true); + // Update & Render nothing! application.GetGlAbstraction().ClearBoundTextures(); application.SendNotification(); application.Render(); // Check that nothing was rendered - DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION ); + DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION ); END_TEST; } @@ -464,8 +399,6 @@ int UtcDaliRenderTaskSetSourceActorP02(void) Stage stage = Stage::GetCurrent(); - const std::vector& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 ); - RenderTaskList taskList = stage.GetRenderTaskList(); RenderTask task = taskList.GetTask( 0u ); @@ -473,9 +406,6 @@ int UtcDaliRenderTaskSetSourceActorP02(void) Actor actor = task.GetSourceActor(); DALI_TEST_CHECK( actor ); - std::vector ids; - ids.push_back( 7 ); - application.GetGlAbstraction().SetNextTextureIds( ids ); BufferImage img = BufferImage::New( 1,1 ); Actor newActor = CreateRenderableActor( img ); @@ -485,6 +415,10 @@ int UtcDaliRenderTaskSetSourceActorP02(void) Actor nonRenderableActor = Actor::New(); stage.Add( nonRenderableActor ); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& drawTrace = gl.GetDrawTrace(); + drawTrace.Enable(true); + // Stop the newActor from being rendered by changing the source actor DALI_TEST_CHECK( nonRenderableActor ); task.SetSourceActor( nonRenderableActor ); @@ -497,7 +431,8 @@ int UtcDaliRenderTaskSetSourceActorP02(void) application.Render(); // Check that nothing was rendered - DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION ); + DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION ); + drawTrace.Reset(); // Set newActor as the new source Actor task.SetSourceActor( newActor ); @@ -510,11 +445,7 @@ int UtcDaliRenderTaskSetSourceActorP02(void) application.Render(); // Check that the newActor was rendered - DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION ); - if ( boundTextures.size() ) - { - DALI_TEST_EQUALS( boundTextures[0], 7u, TEST_LOCATION ); - } + DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION ); END_TEST; } @@ -525,20 +456,15 @@ int UtcDaliRenderTaskSetSourceActorOffStage(void) tet_infoline("Testing RenderTask::SetSourceActor (on/off stage testing)"); Stage stage = Stage::GetCurrent(); - - const std::vector& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 ); - RenderTaskList taskList = stage.GetRenderTaskList(); - RenderTask task = taskList.GetTask( 0u ); Actor actor = task.GetSourceActor(); DALI_TEST_CHECK( actor ); - std::vector ids; - GLuint expectedTextureId( 3 ); - ids.push_back( expectedTextureId ); - application.GetGlAbstraction().SetNextTextureIds( ids ); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& drawTrace = gl.GetDrawTrace(); + drawTrace.Enable(true); BufferImage img = BufferImage::New( 1,1 ); Actor newActor = CreateRenderableActor( img ); @@ -547,12 +473,11 @@ int UtcDaliRenderTaskSetSourceActorOffStage(void) // Don't add newActor to stage yet //' // Update & Render with the actor initially off-stage - application.GetGlAbstraction().ClearBoundTextures(); application.SendNotification(); application.Render(); // Check that nothing was rendered - DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION ); + DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION ); // Now add to stage stage.Add( newActor ); @@ -563,19 +488,17 @@ int UtcDaliRenderTaskSetSourceActorOffStage(void) application.Render(); // Check that the newActor was rendered - DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION ); - if ( boundTextures.size() ) - { - DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION ); - } + DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION ); + drawTrace.Reset(); // Now remove from stage stage.Remove( newActor ); // Update & Render with the actor off-stage - application.GetGlAbstraction().ClearBoundTextures(); application.SendNotification(); application.Render(); + DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION ); + END_TEST; } @@ -586,21 +509,12 @@ int UtcDaliRenderTaskSetSourceActorEmpty(void) tet_infoline("Testing RenderTask::SetSourceActor (empty handle case)"); Stage stage = Stage::GetCurrent(); - - const std::vector& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 ); - RenderTaskList taskList = stage.GetRenderTaskList(); - RenderTask task = taskList.GetTask( 0u ); Actor actor = task.GetSourceActor(); DALI_TEST_CHECK( actor ); - std::vector ids; - GLuint expectedTextureId( 5 ); - ids.push_back( expectedTextureId ); - application.GetGlAbstraction().SetNextTextureIds( ids ); - BufferImage img = BufferImage::New( 1,1 ); Actor newActor = CreateRenderableActor( img ); newActor.SetSize(1,1); @@ -613,13 +527,16 @@ int UtcDaliRenderTaskSetSourceActorEmpty(void) task.SetSourceActor( Actor() ); DALI_TEST_CHECK( ! task.GetSourceActor() ); + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& drawTrace = gl.GetDrawTrace(); + drawTrace.Enable(true); + // Update & Render nothing! - application.GetGlAbstraction().ClearBoundTextures(); application.SendNotification(); application.Render(); // Check that nothing was rendered - DALI_TEST_EQUALS( boundTextures.size(), 0u, TEST_LOCATION ); + DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 0, TEST_LOCATION ); // Set with non-empty handle task.SetSourceActor( newActor ); @@ -631,11 +548,42 @@ int UtcDaliRenderTaskSetSourceActorEmpty(void) application.Render(); // Check that the newActor was rendered - DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION ); - if ( boundTextures.size() ) - { - DALI_TEST_EQUALS( boundTextures[0], expectedTextureId, TEST_LOCATION ); - } + DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION ); + END_TEST; +} + +int UtcDaliRenderTaskSetSourceActorDestroyed(void) +{ + TestApplication application; + + tet_infoline( "Testing RenderTask::SetSourceActor - Set a source actor and destroy the source actor" ); + + Stage stage = Stage::GetCurrent(); + RenderTaskList taskList = stage.GetRenderTaskList(); + RenderTask task = taskList.GetTask( 0u ); + + Actor actor = task.GetSourceActor(); + DALI_TEST_CHECK( actor ); + + BufferImage img = BufferImage::New( 1,1 ); + Actor newActor = CreateRenderableActor( img ); + newActor.SetSize(1,1); + stage.Add( newActor ); + + task.SetSourceActor( newActor ); + + DALI_TEST_CHECK( task.GetSourceActor() != actor ); + DALI_TEST_CHECK( task.GetSourceActor() == newActor ); + + application.SendNotification(); + application.Render(); + + // Destroy the source actor + stage.Remove( newActor ); + newActor.Reset(); + + DALI_TEST_CHECK( !task.GetSourceActor() ); // The source actor should be an empty handle. + END_TEST; } @@ -686,7 +634,7 @@ int UtcDaliRenderTaskGetSourceActorN(void) { Actor actor = task.GetSourceActor(); } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -722,11 +670,16 @@ int UtcDaliRenderTaskSetExclusive(void) // Check that the actor1 was rendered const std::vector& boundTextures = application.GetGlAbstraction().GetBoundTextures( GL_TEXTURE0 ); - DALI_TEST_EQUALS( boundTextures.size(), 1u, TEST_LOCATION ); + DALI_TEST_GREATER( boundTextures.size(), static_cast::size_type>( 0 ), TEST_LOCATION ); if ( boundTextures.size() ) { - DALI_TEST_EQUALS( boundTextures[0], 8u/*unique to actor1*/, TEST_LOCATION ); + int c = 0; + DALI_TEST_EQUALS( boundTextures[c++], 8u/*unique to actor1*/, TEST_LOCATION ); + if( boundTextures.size() > 1 ) + { + DALI_TEST_EQUALS( boundTextures[c++], 8u/*unique to actor1*/, TEST_LOCATION ); + } } BufferImage img2 = BufferImage::New( 1,1 ); @@ -745,12 +698,17 @@ int UtcDaliRenderTaskSetExclusive(void) application.Render(); // Check that the actors were rendered - DALI_TEST_EQUALS( boundTextures.size(), 2u, TEST_LOCATION ); + DALI_TEST_GREATER( boundTextures.size(), static_cast::size_type>( 1 ), TEST_LOCATION ); if ( boundTextures.size() ) { - DALI_TEST_EQUALS( boundTextures[0], 9u/*unique to actor2*/, TEST_LOCATION ); - DALI_TEST_EQUALS( boundTextures[1], 8u/*unique to actor1*/, TEST_LOCATION ); + int c = 0; + DALI_TEST_EQUALS( boundTextures[c++], 9u/*unique to actor2*/, TEST_LOCATION ); + if( boundTextures.size() > 2 ) + { + DALI_TEST_EQUALS( boundTextures[c++], 9u/*unique to actor1*/, TEST_LOCATION ); + } + DALI_TEST_EQUALS( boundTextures[c++], 8u/*unique to actor1*/, TEST_LOCATION ); } BufferImage img3 = BufferImage::New( 1,1 ); @@ -769,13 +727,18 @@ int UtcDaliRenderTaskSetExclusive(void) application.Render(); // Check that the actors were rendered - DALI_TEST_EQUALS( boundTextures.size(), 3u, TEST_LOCATION ); + DALI_TEST_GREATER( boundTextures.size(), static_cast::size_type>( 2 ), TEST_LOCATION ); if ( boundTextures.size() ) { - DALI_TEST_EQUALS( boundTextures[0], 10u/*unique to actor3*/, TEST_LOCATION ); - DALI_TEST_EQUALS( boundTextures[1], 9u/*unique to actor2*/, TEST_LOCATION ); - DALI_TEST_EQUALS( boundTextures[2], 8u/*unique to actor1*/, TEST_LOCATION ); + int c = 0; + DALI_TEST_EQUALS( boundTextures[c++], 10u/*unique to actor3*/, TEST_LOCATION ); + if( boundTextures.size() > 3 ) + { + DALI_TEST_EQUALS( boundTextures[c++], 10u/*unique to actor2*/, TEST_LOCATION ); + } + DALI_TEST_EQUALS( boundTextures[c++], 9u/*unique to actor2*/, TEST_LOCATION ); + DALI_TEST_EQUALS( boundTextures[c++], 8u/*unique to actor1*/, TEST_LOCATION ); } // Both actors are now connected to the root node @@ -829,6 +792,12 @@ int UtcDaliRenderTaskSetExclusive(void) // Test that task 2 renders actor2 DALI_TEST_CHECK( boundTextures[2] == 9u ); } + + // Create a renderable actor and replace the source actor in task2 + auto actor4 = CreateRenderableActor(); + task2.SetSourceActor( actor3 ); + DALI_TEST_EQUALS( actor3, task2.GetSourceActor(), TEST_LOCATION ); + END_TEST; } @@ -885,7 +854,7 @@ int UtcDaliRenderTaskSetExclusiveN(void) { task.SetExclusive(true); } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -938,9 +907,9 @@ int UtcDaliRenderTaskIsExclusiveN(void) try { bool x = task.IsExclusive(); - x=x; + (void) x; } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1033,6 +1002,29 @@ int UtcDaliRenderTaskSetCameraActorN(void) END_TEST; } +int UtcDaliRenderTaskSetCameraActorDestroyed(void) +{ + TestApplication application; + + tet_infoline( "Testing RenderTask::SetCameraActor - Set a camera actor and destroy the camera actor" ); + + Stage stage = Stage::GetCurrent(); + RenderTaskList taskList = stage.GetRenderTaskList(); + RenderTask task = taskList.GetTask( 0u ); + + CameraActor newCameraActor = CameraActor::New(); + task.SetCameraActor( newCameraActor ); + + DALI_TEST_EQUALS( task.GetCameraActor(), newCameraActor, TEST_LOCATION ); + + // Destroy the camera actor + newCameraActor.Reset(); + + CameraActor camera = task.GetCameraActor(); + DALI_TEST_CHECK( !camera ); // The camera actor should be an empty handle. + + END_TEST; +} int UtcDaliRenderTaskGetCameraActorP(void) { @@ -1062,7 +1054,7 @@ int UtcDaliRenderTaskGetCameraActorN(void) { Actor actor = task.GetCameraActor(); } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1238,7 +1230,7 @@ int UtcDaliRenderTaskSetScreenToFrameBufferFunctionN(void) { task.SetScreenToFrameBufferFunction( TestScreenToFrameBufferFunction ); } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1275,9 +1267,9 @@ int UtcDaliRenderTaskGetScreenToFrameBufferFunctionN(void) try { RenderTask::ScreenToFrameBufferFunction func = task.GetScreenToFrameBufferFunction(); - func=func; + (void) func; } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1312,7 +1304,7 @@ int UtcDaliRenderTaskGetScreenToFrameBufferMappingActorN(void) Actor mappingActor; task.SetScreenToFrameBufferMappingActor(mappingActor); } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1378,9 +1370,9 @@ int UtcDaliRenderTaskGetViewportN(void) try { Viewport viewport = task.GetViewport(); - viewport = viewport; + (void) viewport; } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1425,7 +1417,7 @@ int UtcDaliRenderTaskSetViewportN(void) Viewport newViewport( 0, 0, stageSize.width * 0.5f, stageSize.height * 0.5f ); task.SetViewport( newViewport ); } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1466,21 +1458,47 @@ int UtcDaliRenderTaskSetViewportPosition(void) // Set by Property test Vector2 newPosition2(32.0f, 32.0f); task.SetProperty( RenderTask::Property::VIEWPORT_POSITION, newPosition2 ); + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition, TEST_LOCATION ); // still the old position // Update application.SendNotification(); application.Render(); DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition2, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION ); Vector2 newPosition3(64.0f, 0.0f); Animation animation = Animation::New(1.0f); animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_POSITION ), newPosition3, AlphaFunction::LINEAR ); animation.Play(); + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition2, TEST_LOCATION ); + // Perform 1000ms worth of updates at which point animation should have completed. Wait(application, 1000); DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + + // Create another animation which animates by a certain value + const Vector2 newPosition4( 75.0f, 45.0f ); + const Vector2 relativePosition( newPosition4 - newPosition3 ); + animation = Animation::New( 1.0f ); + animation.AnimateBy( Property( task, RenderTask::Property::VIEWPORT_POSITION ), relativePosition ); + animation.Play(); + + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition3, TEST_LOCATION ); + + // Perform 1000ms worth of updates at which point animation should have completed. + Wait(application, 1000); + DALI_TEST_EQUALS( task.GetCurrentViewportPosition(), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_POSITION ), newPosition4, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + END_TEST; } @@ -1514,21 +1532,46 @@ int UtcDaliRenderTaskSetViewportSize(void) // Set by Property test Vector2 newSize2(50.0f, 50.0f); task.SetProperty( RenderTask::Property::VIEWPORT_SIZE, newSize2 ); + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize, TEST_LOCATION ); // still the old position // Update application.SendNotification(); application.Render(); DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize2, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION ); Vector2 newSize3(10.0f, 10.0f); Animation animation = Animation::New(1.0f); animation.AnimateTo( Property( task, RenderTask::Property::VIEWPORT_SIZE ), newSize3, AlphaFunction::LINEAR ); animation.Play(); + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize2, TEST_LOCATION ); + // Perform 1000ms worth of updates at which point animation should have completed. Wait(application, 1000); DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + + // Create another animation which animates by a certain value + const Vector2 newSize4( 75.0f, 45.0f ); + const Vector2 relativeSize( newSize4 - newSize3 ); + animation = Animation::New( 1.0f ); + animation.AnimateBy( Property( task, RenderTask::Property::VIEWPORT_SIZE ), relativeSize ); + animation.Play(); + + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize3, TEST_LOCATION ); + + // Perform 1000ms worth of updates at which point animation should have completed. + Wait(application, 1000); + DALI_TEST_EQUALS( task.GetCurrentViewportSize(), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetProperty< Vector2 >( RenderTask::Property::VIEWPORT_SIZE ), newSize4, Math::MACHINE_EPSILON_1, TEST_LOCATION ); END_TEST; } @@ -1555,11 +1598,44 @@ int UtcDaliRenderTaskSetClearColorP(void) DALI_TEST_EQUALS( task.GetClearColor(), testColor, TEST_LOCATION ); task.SetProperty( RenderTask::Property::CLEAR_COLOR, testColor2 ); + DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor, TEST_LOCATION ); // still the old color // Wait a frame. Wait(application); DALI_TEST_EQUALS( task.GetClearColor(), testColor2, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION ); + + Vector4 newColor3(10.0f, 10.0f, 20.0f, 30.0f); + Animation animation = Animation::New(1.0f); + animation.AnimateTo( Property( task, RenderTask::Property::CLEAR_COLOR ), newColor3, AlphaFunction::LINEAR ); + animation.Play(); + + DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), testColor2, TEST_LOCATION ); + + // Perform 1000ms worth of updates at which point animation should have completed. + Wait(application, 1000); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_1, TEST_LOCATION ); + + // Create another animation which animates by a certain value + const Vector4 newColor4( 0.45f, 0.35f, 0.25f, 0.1f ); + const Vector4 relativeColor( newColor4 - newColor3 ); + animation = Animation::New( 1.0f ); + animation.AnimateBy( Property( task, RenderTask::Property::CLEAR_COLOR ), relativeColor ); + animation.Play(); + + DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor3, Math::MACHINE_EPSILON_10, TEST_LOCATION ); + + // Perform 1000ms worth of updates at which point animation should have completed. + Wait(application, 1000); + DALI_TEST_EQUALS( task.GetCurrentProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION ); + DALI_TEST_EQUALS( task.GetProperty< Vector4 >( RenderTask::Property::CLEAR_COLOR ), newColor4, Math::MACHINE_EPSILON_10, TEST_LOCATION ); + END_TEST; } @@ -1574,7 +1650,7 @@ int UtcDaliRenderTaskSetClearColorN(void) { task.SetClearColor( Vector4::ZERO ); } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1604,9 +1680,9 @@ int UtcDaliRenderTaskGetClearColorN(void) try { Vector4 color = task.GetClearColor(); - color = color; + (void) color; } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1623,13 +1699,13 @@ int UtcDaliRenderTaskSetClearEnabledP(void) RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); RenderTask task = taskList.GetTask( 0u ); - DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false - - task.SetClearEnabled( true ); - DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION ); + DALI_TEST_CHECK( task.GetClearEnabled() ); // defaults to true task.SetClearEnabled( false ); DALI_TEST_EQUALS( task.GetClearEnabled(), false, TEST_LOCATION ); + + task.SetClearEnabled( true ); + DALI_TEST_EQUALS( task.GetClearEnabled(), true, TEST_LOCATION ); END_TEST; } @@ -1644,7 +1720,7 @@ int UtcDaliRenderTaskSetClearEnabledN(void) { task.SetClearEnabled(true); } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1661,7 +1737,7 @@ int UtcDaliRenderTaskGetClearEnabledP(void) RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); RenderTask task = taskList.GetTask( 0u ); - DALI_TEST_CHECK( !task.GetClearEnabled() ); // defaults to false + DALI_TEST_CHECK( task.GetClearEnabled() ); // defaults to true END_TEST; } @@ -1676,9 +1752,9 @@ int UtcDaliRenderTaskGetClearEnabledN(void) try { bool x = task.GetClearEnabled(); - x=x; + (void) x; } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1714,7 +1790,7 @@ int UtcDaliRenderTaskSetCullModeN(void) { task.SetCullMode( false ); } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1744,9 +1820,9 @@ int UtcDaliRenderTaskGetCullModeN(void) try { bool x = task.GetCullMode(); - x=x; + (void) x; } - catch (Dali::DaliException(e)) + catch (Dali::DaliException& e) { DALI_TEST_PRINT_ASSERT( e ); DALI_TEST_ASSERT(e, "RenderTask handle is empty", TEST_LOCATION); @@ -1862,7 +1938,6 @@ int UtcDaliRenderTaskSignalFinished(void) application.Render(); application.SendNotification(); DALI_TEST_CHECK( finished ); - finished = false; DALI_TEST_EQUALS( application.GetUpdateStatus(), 0, TEST_LOCATION ); END_TEST; @@ -1883,19 +1958,14 @@ int UtcDaliRenderTaskContinuous01(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; + Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg"); RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); bool finished = false; RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete application.SendNotification(); // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating @@ -1926,13 +1996,10 @@ int UtcDaliRenderTaskContinuous02(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; + Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg"); Stage::GetCurrent().Add(secondRootActor); secondRootActor.SetVisible(false); @@ -1940,7 +2007,6 @@ int UtcDaliRenderTaskContinuous02(void) bool finished = false; RenderTaskFinished renderTaskFinished( finished ); newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete application.SendNotification(); // START PROCESS/RENDER Input, Expected Input, Expected, KeepUpdating @@ -1970,18 +2036,14 @@ int UtcDaliRenderTaskContinuous03(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); + Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg"); Stage::GetCurrent().Add(secondRootActor); RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); bool finished = false; RenderTaskFinished renderTaskFinished( finished ); newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete application.SendNotification(); // START PROCESS/RENDER Input, Expected Input, Expected @@ -2002,46 +2064,7 @@ int UtcDaliRenderTaskContinuous04(void) { TestApplication application; - tet_infoline("Testing RenderTask Render Continuous using loading image\nPRE: Resource not ready\nPOST:continuous renders, no Finished signal"); - - // SETUP AN OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - Stage::GetCurrent().Add(secondRootActor); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // FINISH RESOURCE LOADING - expect 'continuous' renders to start, no finished signal - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - END_TEST; -} - -int UtcDaliRenderTaskContinous05(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Continuous using Mesh which accesses texture through sampler with loading image\n" - "PRE: Resource not ready\nPOST:continuous renders, no Finished signal"); + tet_infoline("Testing RenderTask Render Continuous using loaded image"); // SETUP AN OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); @@ -2051,24 +2074,9 @@ int UtcDaliRenderTaskContinous05(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - - Shader shader = CreateShader(); - - - Image image = CreateLoadingImage(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - TextureSet textureSet = CreateTextureSet( image ); - - Geometry geometry = CreateQuadGeometry(); - Renderer renderer = Renderer::New(geometry, shader); - renderer.SetTextures( textureSet ); - Actor secondRootActor = Actor::New(); - secondRootActor.AddRenderer(renderer); - secondRootActor.SetSize(100, 100); + Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg"); Stage::GetCurrent().Add(secondRootActor); RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); @@ -2078,22 +2086,15 @@ int UtcDaliRenderTaskContinous05(void) application.SendNotification(); // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // FINISH RESOURCE LOADING - expect 'continuous' renders to start, no finished signal - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - + DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); END_TEST; } - int UtcDaliRenderTaskOnce01(void) { TestApplication application; - tet_infoline("Testing RenderTask Render Once GlSync, using loading image\nPRE: Resources not ready, Source not visible\nPOST: Finished signal sent once only"); + tet_infoline("Testing RenderTask Render Once GlSync, using loaded image"); // SETUP AN OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); @@ -2104,12 +2105,9 @@ int UtcDaliRenderTaskOnce01(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; + Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg"); Stage::GetCurrent().Add(secondRootActor); @@ -2119,26 +2117,13 @@ int UtcDaliRenderTaskOnce01(void) newTask.FinishedSignal().Connect( &application, renderTaskFinished ); application.SendNotification(); - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // MAKE SOURCE VISIBLE - secondRootActor.SetVisible(true); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - // FINISH RESOURCE LOADING - expect no rendering yet - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); DALI_TEST_CHECK( lastSyncObj != NULL ); - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); sync.SetObjectSynced( lastSyncObj, true ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); + + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); END_TEST; } @@ -2147,8 +2132,7 @@ int UtcDaliRenderTaskOnce02(void) { TestApplication application; - tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loading image.\n" - "PRE: Resources not ready\nPOST: Finished signal sent once only"); + tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n"); // SETUP AN OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); @@ -2159,14 +2143,11 @@ int UtcDaliRenderTaskOnce02(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); Shader shader = CreateShader(); - Image image = CreateLoadingImage(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; + Image image = CreateResourceImage(application, "aFile.jpg"); TextureSet textureSet = CreateTextureSet( image ); Geometry geometry = CreateQuadGeometry(); @@ -2183,21 +2164,14 @@ int UtcDaliRenderTaskOnce02(void) newTask.FinishedSignal().Connect( &application, renderTaskFinished ); application.SendNotification(); - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - // FINISH RESOURCE LOADING - expect no rendering yet - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj != NULL ); + Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + DALI_TEST_CHECK( lastSyncObj != NULL ); + sync.SetObjectSynced( lastSyncObj, true ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); - sync.SetObjectSynced( lastSyncObj, true ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); END_TEST; } @@ -2206,9 +2180,7 @@ int UtcDaliRenderTaskOnce03(void) { TestApplication application; - tet_infoline("Testing RenderTask Render Once GlSync, using loading image. Switch from render always after ready to render once\n" - "PRE: Render task ready, Image not loaded\n" - "POST: Finished signal sent only once"); + tet_infoline("Testing RenderTask Render Once GlSync, using loaded image. Switch from render always after ready to render once\n"); // SETUP A CONTINUOUS OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); @@ -2219,80 +2191,9 @@ int UtcDaliRenderTaskOnce03(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - Stage::GetCurrent().Add(secondRootActor); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // FINISH RESOURCE LOADING - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); // Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj != NULL ); - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - sync.SetObjectSynced( lastSyncObj, true ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - - END_TEST; -} - - -int UtcDaliRenderTaskOnce04(void) -{ - TestApplication application; - tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loading image.\n" - "Switch from render always after ready to render once\n" - "PRE: Render task ready, Image not loaded\n" - "POST: Finished signal sent only once"); - - // SETUP AN OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - - Shader shader = CreateShader(); - Image image = CreateLoadingImage(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - TextureSet textureSet = CreateTextureSet( image ); - - Geometry geometry = CreateQuadGeometry(); - Renderer renderer = Renderer::New(geometry, shader); - renderer.SetTextures( textureSet ); - Actor secondRootActor = Actor::New(); - secondRootActor.AddRenderer(renderer); - secondRootActor.SetSize(100, 100); + Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg"); Stage::GetCurrent().Add(secondRootActor); RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); @@ -2301,714 +2202,85 @@ int UtcDaliRenderTaskOnce04(void) newTask.FinishedSignal().Connect( &application, renderTaskFinished ); application.SendNotification(); - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // FINISH RESOURCE LOADING - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); // Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj != NULL ); - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - sync.SetObjectSynced( lastSyncObj, true ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - - END_TEST; -} - -int UtcDaliRenderTaskOnce05(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Once GlSync\n" - "Switch from Render always after ready to render once with resources unready\n" - "PRE: Everything ready to render\n" - "POST: Finished signal sent once"); - - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - Stage::GetCurrent().Add(secondRootActor); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); application.SendNotification(); - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // CHANGE TO RENDER ONCE - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); // Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - // FINISH RESOURCE LOADING - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); DALI_TEST_CHECK( lastSyncObj != NULL ); - application.GetPlatform().ClearReadyResources(); - sync.SetObjectSynced( lastSyncObj, true ); - // Expect: No draw - we've just drawn our render task once, above. No finished signal - - // we won't read the gl sync until the next frame. Continue rendering - we're waiting for - // the sync - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // Expect: 1 final draw - this Update doesn't update the scene, hence render instructions - // from last frame but 1 are still present. - // Finished signal should be true - we've just done the sync. - // Should now stop rendering and updating - nothing left to do. - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, true, false, __LINE__ ) ); - - END_TEST; -} - -#if 0 -//int UtcDaliRenderTaskOnce06(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Once GlSync\n" - "During RenderOnce, make ready resources unready before sending first finished signal\n" - "PRE: Everything ready.\n" - "POST: Finished signal sent only once"); - - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - application.Render(); - - Stage::GetCurrent().Add(secondRootActor); - application.GetPlatform().ClearReadyResources(); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - - // CHANGE TO RENDER ONCE, RESOURCES BECOME NOT READY - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - - // Doesn't work... - ReloadImage(application, secondRootActor.GetImage()); - application.SendNotification(); // Input, Expected Input, Expected - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // FINISH RESOURCE LOADING - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj != NULL ); - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - sync.SetObjectSynced( lastSyncObj, true ); DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, true, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - // Finished rendering - expect no more renders, no more signals: - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); END_TEST; } -#endif - -int UtcDaliRenderTaskOnce07(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Once GLSync\n" - "Render once, Second call to SetRefreshRate(ONCE) triggers only one more finished signal\n" - "PRE: Everything ready\n" - "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)"); - - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - application.Render(); - application.GetPlatform().ClearReadyResources(); - - Stage::GetCurrent().Add(secondRootActor); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - - // CHANGE TO RENDER ONCE, - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj != NULL ); - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - sync.SetObjectSynced( lastSyncObj, true ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj != NULL ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - sync.SetObjectSynced( lastSyncObj, true ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - END_TEST; -} -int UtcDaliRenderTaskOnce08(void) +int UtcDaliRenderTaskOnce04(void) { TestApplication application; + tet_infoline("Testing RenderTask Render Once GlSync, using Mesh which accesses texture through sampler with loaded image.\n" + "Switch from render always after ready to render once\n" + ); - tet_infoline("Testing RenderTask Render Once GLSync\n" - "Render once, Call to SetRefreshRate(ONCE) in Finished signal callback triggers " - "another render & another finished signal\n" - "PRE: Everything ready\n" - "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)"); - - - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - sync.GetTrace().Enable(true); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - application.Render(); - application.GetPlatform().ClearReadyResources(); - - Stage::GetCurrent().Add(secondRootActor); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, /*GL-SYNC*/ true); - bool finished = false; - - ConnectionTracker connectionTracker; - RenderTaskFinishedRenderAgain renderTaskFinishedRenderAgain( finished ); - newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinishedRenderAgain ); - - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj == NULL ); - DALI_TEST_EQUALS( sync.GetTrace().CountMethod( "CreateSyncObject" ), 0, TEST_LOCATION ); - - - // CHANGE TO RENDER ONCE, - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj != NULL ); - DALI_TEST_EQUALS( sync.GetNumberOfSyncObjects(), 1, TEST_LOCATION ); - DALI_TEST_EQUALS( sync.GetTrace().CountMethod( "CreateSyncObject" ), 1, TEST_LOCATION ); - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - - DALI_TEST_EQUALS( sync.GetNumberOfSyncObjects(), 1, TEST_LOCATION ); - DALI_TEST_EQUALS( sync.GetTrace().CountMethod( "CreateSyncObject" ), 1, TEST_LOCATION ); - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - DALI_TEST_EQUALS( sync.GetNumberOfSyncObjects(), 1, TEST_LOCATION ); - DALI_TEST_EQUALS( sync.GetTrace().CountMethod( "CreateSyncObject" ), 1, TEST_LOCATION ); - - sync.SetObjectSynced( lastSyncObj, true ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - application.SendNotification(); - - // Expect SetRefreshRate to have been called again - // Prevent next finished signal calling refresh once again - RenderTaskFinished renderTaskFinished( finished ); - connectionTracker.DisconnectAll(); - newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinished ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj != NULL ); - - sync.SetObjectSynced( lastSyncObj, true ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - END_TEST; -} - - -int UtcDaliRenderTaskOnce09(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Once GlSync\n" - "SetRefreshRate(ONCE) again before first finished signal has been sent.\n" - "PRE: resources ready\n" - "POST: Only 1 finished signal sent."); - - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - application.Render(); - application.GetPlatform().ClearReadyResources(); - - Stage::GetCurrent().Add(secondRootActor); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - - // CHANGE TO RENDER ONCE, - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj != NULL ); - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - sync.SetObjectSynced( lastSyncObj, true ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - - END_TEST; -} - -int UtcDaliRenderTaskOnce10(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Once GlSync\n" - "SetRefreshRate(ONCE), resource load failed completes render task.\n" - "PRE: resources not ready\n" - "POST: Only 1 finished signal sent."); - - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Stage::GetCurrent().Add(secondRootActor); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // CHANGE TO RENDER ONCE, - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - tet_printf(" FailImageLoad\n"); - - FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); // nothing to draw - application.SendNotification(); - - // load is now failed so there's nothing more to render in the render task - // Expect finished signal, as all resources are complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - - END_TEST; -} - -int UtcDaliRenderTaskOnceNoSync01(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Once, using loading image\nPRE: Resources not ready, Source not visible\nPOST: Finished signal sent once only"); - - // SETUP AN OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - - Stage::GetCurrent().Add(secondRootActor); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // FINISH RESOURCE LOADING - expect immediate rendering yet - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - END_TEST; -} - -int UtcDaliRenderTaskOnceNoSync02(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n" - "PRE: Resources not ready\nPOST: Finished signal sent once only"); - // SETUP AN OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - - Shader shader = CreateShader(); - Image image = CreateLoadingImage(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - TextureSet textureSet = CreateTextureSet( image ); - - Geometry geometry = CreateQuadGeometry(); - Renderer renderer = Renderer::New(geometry, shader); - renderer.SetTextures( textureSet ); - Actor secondRootActor = Actor::New(); - secondRootActor.AddRenderer(renderer); - secondRootActor.SetSize(100, 100); - Stage::GetCurrent().Add(secondRootActor); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // FINISH RESOURCE LOADING - expect immediate rendering yet - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - - END_TEST; -} - -int UtcDaliRenderTaskOnceNoSync03(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Once, using loading image. Switch from render always after ready to render once\n" - "PRE: Render task ready, Image not loaded\n" - "POST: Finished signal sent only once"); - - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - Stage::GetCurrent().Add(secondRootActor); - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // FINISH RESOURCE LOADING - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); - - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); // Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - END_TEST; -} - -int UtcDaliRenderTaskOnceNoSync04(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n" - "Switch from render always after ready to render once\n" - "PRE: Render task ready, Image not loaded\n" - "POST: Finished signal sent only once"); - - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); - drawTrace.Enable(true); - - Actor rootActor = Actor::New(); - Stage::GetCurrent().Add( rootActor ); - - CameraActor offscreenCameraActor = CameraActor::New(); - Stage::GetCurrent().Add( offscreenCameraActor ); - - Shader shader = CreateShader(); - Image image = CreateLoadingImage(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - TextureSet textureSet = CreateTextureSet( image ); - - Geometry geometry = CreateQuadGeometry(); - Renderer renderer = Renderer::New(geometry, shader); - renderer.SetTextures( textureSet ); - Actor secondRootActor = Actor::New(); - secondRootActor.AddRenderer(renderer); - secondRootActor.SetSize(100, 100); - Stage::GetCurrent().Add(secondRootActor); - - - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false); - bool finished = false; - RenderTaskFinished renderTaskFinished( finished ); - newTask.FinishedSignal().Connect( &application, renderTaskFinished ); - application.SendNotification(); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj == NULL ); - - // FINISH RESOURCE LOADING - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); - - lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj == NULL ); - - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); // Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - - lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj == NULL ); - - END_TEST; -} - -int UtcDaliRenderTaskOnceNoSync05(void) -{ - TestApplication application; - - tet_infoline("Testing RenderTask Render Once\n" - "Switch from Render always after ready to render once with resources unready\n" - "PRE: Everything ready to render\n" - "POST: Finished signal sent once"); - - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK + // SETUP AN OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); + TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); drawTrace.Enable(true); Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; + + Shader shader = CreateShader(); + Image image = CreateResourceImage(application, "aFile.jpg"); + TextureSet textureSet = CreateTextureSet( image ); + + Geometry geometry = CreateQuadGeometry(); + Renderer renderer = Renderer::New(geometry, shader); + renderer.SetTextures( textureSet ); + Actor secondRootActor = Actor::New(); + secondRootActor.AddRenderer(renderer); + secondRootActor.SetSize(100, 100); Stage::GetCurrent().Add(secondRootActor); - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false); + RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, true); bool finished = false; RenderTaskFinished renderTaskFinished( finished ); newTask.FinishedSignal().Connect( &application, renderTaskFinished ); application.SendNotification(); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); - DALI_TEST_CHECK( lastSyncObj == NULL ); - - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - // CHANGE TO RENDER ONCE newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); // Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); + application.SendNotification(); + + DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); + + Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + DALI_TEST_CHECK( lastSyncObj != NULL ); + sync.SetObjectSynced( lastSyncObj, true ); + + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - // FINISH RESOURCE LOADING - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); END_TEST; } -#if 0 -//int UtcDaliRenderTaskOnceNoSync06(void) +int UtcDaliRenderTaskOnceNoSync01(void) { TestApplication application; - tet_infoline("Testing RenderTask Render Once\n" - "During RenderOnce, make ready resources unready before sending first finished signal\n" - "PRE: Everything ready.\n" - "POST: Finished signal sent only once"); + tet_infoline("Testing RenderTask Render Once, \nPRE: Resources ready\nPOST: Finished signal sent once only"); - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK + // SETUP AN OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); drawTrace.Enable(true); @@ -3016,61 +2288,29 @@ int UtcDaliRenderTaskOnceNoSync05(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - application.Render(); - application.GetPlatform().ClearReadyResources(); - + Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg"); Stage::GetCurrent().Add(secondRootActor); - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false); + RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false); bool finished = false; RenderTaskFinished renderTaskFinished( finished ); newTask.FinishedSignal().Connect( &application, renderTaskFinished ); application.SendNotification(); - // START PROCESS/RENDER Input, Expected Input, Expected DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - - // CHANGE TO RENDER ONCE, RESOURCES BECOME NOT READY - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - - // Doesn't work... - ReloadImage(application, secondRootActor.GetImage()); - application.SendNotification(); // Input, Expected Input, Expected - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_EQUALS( secondRootActor.GetImage().GetLoadingState(), Dali::ResourceLoading, TEST_LOCATION); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - // FINISH RESOURCE LOADING - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, true, true, __LINE__ ) ); - application.GetPlatform().ClearReadyResources(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); END_TEST; } -#endif -int UtcDaliRenderTaskOnceNoSync07(void) +int UtcDaliRenderTaskOnceNoSync02(void) { TestApplication application; - tet_infoline("Testing RenderTask Render Once\n" - "Render once, Second call to SetRefreshRate(ONCE) triggers only one more finished signal\n" - "PRE: Everything ready\n" - "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)"); - - // SETUP A CONTINUOUS OFFSCREEN RENDER TASK + tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loaded image.\n" + "PRE: Resources ready\nPOST: Finished signal sent once only"); + // SETUP AN OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); drawTrace.Enable(true); @@ -3078,50 +2318,41 @@ int UtcDaliRenderTaskOnceNoSync07(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - application.Render(); - application.GetPlatform().ClearReadyResources(); + Shader shader = CreateShader(); + Image image = CreateResourceImage(application, "aFile.jpg"); + TextureSet textureSet = CreateTextureSet( image ); + + Geometry geometry = CreateQuadGeometry(); + Renderer renderer = Renderer::New(geometry, shader); + renderer.SetTextures( textureSet ); + Actor secondRootActor = Actor::New(); + secondRootActor.AddRenderer(renderer); + secondRootActor.SetSize(100, 100); Stage::GetCurrent().Add(secondRootActor); - RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false); + RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, false); bool finished = false; RenderTaskFinished renderTaskFinished( finished ); newTask.FinishedSignal().Connect( &application, renderTaskFinished ); application.SendNotification(); - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - - // CHANGE TO RENDER ONCE, - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); + application.GetPlatform().ClearReadyResources(); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); END_TEST; } -int UtcDaliRenderTaskOnceNoSync08(void) +int UtcDaliRenderTaskOnceNoSync03(void) { TestApplication application; - tet_infoline("Testing RenderTask Render Once\n" - "Render once, Call to SetRefreshRate(ONCE) in Finished signal callback triggers\n" - "another render & another finished signal\n" - "PRE: Everything ready\n" - "POST: exactly 1 finished signal per call to SetRefreshRate(ONCE)"); - + tet_infoline("Testing RenderTask Render Once, using loaded image. Switch from render always after ready to render once\n" + "PRE: Render task ready, Image loaded\n" + "POST: Finished signal sent only once"); // SETUP A CONTINUOUS OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); @@ -3131,56 +2362,34 @@ int UtcDaliRenderTaskOnceNoSync08(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - application.Render(); - application.GetPlatform().ClearReadyResources(); - + Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg"); Stage::GetCurrent().Add(secondRootActor); RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false); bool finished = false; - - ConnectionTracker connectionTracker; - RenderTaskFinishedRenderAgain renderTaskFinishedRenderAgain( finished ); - newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinishedRenderAgain ); - + RenderTaskFinished renderTaskFinished( finished ); + newTask.FinishedSignal().Connect( &application, renderTaskFinished ); application.SendNotification(); - // START PROCESS/RENDER Input, Expected Input, Expected DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); - // CHANGE TO RENDER ONCE, newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); - - // Expect SetRefreshRate to have been called again - // Prevent next finished signal calling refresh once again - RenderTaskFinished renderTaskFinished( finished ); - connectionTracker.DisconnectAll(); - newTask.FinishedSignal().Connect( &connectionTracker, renderTaskFinished ); - + application.SendNotification(); // Input, Expected Input, Expected DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); END_TEST; } - -int UtcDaliRenderTaskOnceNoSync09(void) +int UtcDaliRenderTaskOnceNoSync04(void) { TestApplication application; - tet_infoline("Testing RenderTask Render Once\n" - "SetRefreshRate(ONCE) again before first finished signal has been sent.\n" - "PRE: resources ready\n" - "POST: Only 1 finished signal sent."); + tet_infoline("Testing RenderTask Render Once, using Mesh which accesses texture through sampler with loading image.\n" + "Switch from render always after ready to render once\n" + "PRE: Render task ready, Image not loaded\n" + "POST: Finished signal sent only once"); // SETUP A CONTINUOUS OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); @@ -3190,48 +2399,52 @@ int UtcDaliRenderTaskOnceNoSync09(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; - CompleteImageLoad(application, imageRequestId, imageType); // Need to run update again for this to complete - application.Render(); - application.GetPlatform().ClearReadyResources(); + Shader shader = CreateShader(); + Image image = CreateResourceImage(application, "aFile.jpg"); + TextureSet textureSet = CreateTextureSet( image ); + + Geometry geometry = CreateQuadGeometry(); + Renderer renderer = Renderer::New(geometry, shader); + renderer.SetTextures( textureSet ); + Actor secondRootActor = Actor::New(); + secondRootActor.AddRenderer(renderer); + secondRootActor.SetSize(100, 100); Stage::GetCurrent().Add(secondRootActor); + RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false); bool finished = false; RenderTaskFinished renderTaskFinished( finished ); newTask.FinishedSignal().Connect( &application, renderTaskFinished ); application.SendNotification(); - // START PROCESS/RENDER Input, Expected Input, Expected DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); + TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); + Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + DALI_TEST_CHECK( lastSyncObj == NULL ); - // CHANGE TO RENDER ONCE, newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); + application.SendNotification(); // Input, Expected Input, Expected DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); + + lastSyncObj = sync.GetLastSyncObject(); + DALI_TEST_CHECK( lastSyncObj == NULL ); - newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); END_TEST; } -int UtcDaliRenderTaskOnceNoSync10(void) +int UtcDaliRenderTaskOnceNoSync05(void) { TestApplication application; tet_infoline("Testing RenderTask Render Once\n" "SetRefreshRate(ONCE), resource load failed, completes render task.\n" - "PRE: resources not ready\n" - "POST: Only 1 finished signal sent."); + "PRE: resources failed to load\n" + "POST: No finished signal sent."); // SETUP A CONTINUOUS OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); @@ -3241,11 +2454,9 @@ int UtcDaliRenderTaskOnceNoSync10(void) Actor rootActor = Actor::New(); Stage::GetCurrent().Add( rootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - Actor secondRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); + Actor secondRootActor = CreateRenderableActorFailed(application, "aFile.jpg"); Stage::GetCurrent().Add(secondRootActor); RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ALWAYS, false); @@ -3255,19 +2466,11 @@ int UtcDaliRenderTaskOnceNoSync10(void) application.SendNotification(); // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); // CHANGE TO RENDER ONCE, newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); - application.SendNotification(); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); - - FailImageLoad(application, imageRequestId); // Need to run Update again for this to complete - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, false, true, __LINE__ ) ); // nothing to draw - DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, finished, true, false, __LINE__ ) ); + DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, finished, false, false, __LINE__ ) ); END_TEST; } @@ -3280,7 +2483,7 @@ int UtcDaliRenderTaskOnceChain01(void) tet_infoline("Testing RenderTask Render Once Chained render tasks\n" "SetRefreshRate(ONCE), resource load completes, both render tasks render.\n" - "PRE: resources not ready\n" + "PRE: resources ready\n" "POST: 2 finished signals sent."); // SETUP A CONTINUOUS OFFSCREEN RENDER TASK @@ -3291,12 +2494,9 @@ int UtcDaliRenderTaskOnceChain01(void) Actor defaultRootActor = Actor::New(); // Root for default RT Stage::GetCurrent().Add( defaultRootActor ); - CameraActor offscreenCameraActor = CameraActor::New(); + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); Stage::GetCurrent().Add( offscreenCameraActor ); - Actor firstRootActor = CreateLoadingActor(application, "aFile.jpg", ResourceImage::IMMEDIATE, Image::UNUSED); - Integration::ResourceRequest* imageRequest = application.GetPlatform().GetRequest(); - Integration::ResourceId imageRequestId = imageRequest->GetId(); - Integration::ResourceTypeId imageType = imageRequest->GetType()->id; + Actor firstRootActor = CreateRenderableActorSuccess(application, "aFile.jpg"); Stage::GetCurrent().Add(firstRootActor); // first render task @@ -3316,24 +2516,14 @@ int UtcDaliRenderTaskOnceChain01(void) application.SendNotification(); - // START PROCESS/RENDER Input, Expected Input, Expected - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( firstFinished == false ); - DALI_TEST_CHECK( secondFinished == false ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false, true, __LINE__ ) ); - DALI_TEST_CHECK( firstFinished == false ); - DALI_TEST_CHECK( secondFinished == false ); - - CompleteImageLoad(application, imageRequestId, imageType); + //Both render tasks are executed. DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, false, true, __LINE__ ) ); DALI_TEST_CHECK( firstFinished == false ); DALI_TEST_CHECK( secondFinished == false ); - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, firstFinished, true, true, __LINE__ ) ); + //Nothing else to render and both render task should have finished now + DALI_TEST_CHECK( UpdateRender(application, drawTrace, false, firstFinished, true, false, __LINE__ ) ); DALI_TEST_CHECK( firstFinished == true ); - DALI_TEST_CHECK( secondFinished == false ); - - DALI_TEST_CHECK( UpdateRender(application, drawTrace, true, secondFinished, true, false, __LINE__ ) ); DALI_TEST_CHECK( secondFinished == true ); END_TEST; @@ -3352,78 +2542,6 @@ int UtcDaliRenderTaskProperties(void) END_TEST; } -int UtcDaliRenderTaskSetScreenToFrameBufferMappingActor(void) -{ - TestApplication application; - tet_infoline("Testing RenderTask::SetScreenToFrameBufferMappingActor "); - - Stage stage = Stage::GetCurrent(); - Size stageSize = stage.GetSize(); - Actor mappingActor = Actor::New(); - Vector2 scale( 0.6f, 0.75f); - Vector2 offset( stageSize.x*0.1f, stageSize.y*0.15f); - mappingActor.SetSize( stageSize * scale ); - mappingActor.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - mappingActor.SetPosition( offset.x, offset.y ); - stage.Add( mappingActor ); - - Actor offscreenActor = Actor::New(); - offscreenActor.SetSize( stageSize ); - offscreenActor.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - stage.Add( offscreenActor ); - - RenderTaskList taskList = stage.GetRenderTaskList(); - RenderTask renderTask = taskList.CreateTask(); - FrameBufferImage frameBufferImage = FrameBufferImage::New(stageSize.width*scale.x, stageSize.height*scale.y, Pixel::A8, Image::NEVER); - renderTask.SetSourceActor( offscreenActor ); - renderTask.SetExclusive( true ); - renderTask.SetInputEnabled( true ); - renderTask.SetTargetFrameBuffer( frameBufferImage ); - renderTask.SetRefreshRate( RenderTask::REFRESH_ONCE ); - renderTask.SetScreenToFrameBufferMappingActor( mappingActor ); - application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); - - // Render and notify - application.SendNotification(); - application.Render(); - application.Render(); - application.SendNotification(); - - Vector2 screenCoordinates( stageSize.x * 0.05f, stageSize.y * 0.05f ); - Dali::HitTestAlgorithm::Results results; - DALI_TEST_CHECK( !results.actor ); - DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION ); - // miss expected, results not changed - DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) ); - DALI_TEST_CHECK( !results.actor ); - DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION ); - - screenCoordinates.x = stageSize.x * 0.265f; - screenCoordinates.y = stageSize.y * 0.33f; - results.actor = Actor(); - results.actorCoordinates = Vector2::ZERO; - // hit expected, results changed - DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) ); - DALI_TEST_CHECK( results.actor == offscreenActor ); - DALI_TEST_EQUALS( (screenCoordinates-offset)/scale , results.actorCoordinates, 0.1f, TEST_LOCATION ); - - screenCoordinates.x = stageSize.x * 0.435f; - screenCoordinates.y = stageSize.y * 0.52f; - // hit expected, results changed - DALI_TEST_CHECK( true == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) ); - DALI_TEST_CHECK( results.actor == offscreenActor ); - const Vector2 expectedCoordinates = (screenCoordinates-offset)/scale; - DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION ); - - screenCoordinates.x = stageSize.x * 0.65f; - screenCoordinates.y = stageSize.y * 0.95f; - // miss expected, results not changed - DALI_TEST_CHECK( false == Dali::HitTestAlgorithm::HitTest( renderTask, screenCoordinates, results, IsActorHittableFunction ) ); - DALI_TEST_CHECK( results.actor == offscreenActor ); - DALI_TEST_EQUALS( expectedCoordinates , results.actorCoordinates, 0.1f, TEST_LOCATION ); - END_TEST; -} - int UtcDaliRenderTaskFinishInvisibleSourceActor(void) { TestApplication application; @@ -3552,7 +2670,7 @@ int UtcDaliRenderTaskFinishMissingImage(void) int UtcDaliRenderTaskWorldToViewport(void) { - TestApplication application( static_cast(400), static_cast(400) ); // square surface + TestApplication application( 400u, 400u ); // square surface RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); @@ -3645,3 +2763,110 @@ int UtcDaliRenderTaskViewportToLocal(void) END_TEST; } + +int UtcDaliRenderTaskOffscreenViewportToLocal(void) +{ + TestApplication application; + Actor actor = Actor::New(); + actor.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + actor.SetSize( 100.0f, 100.0f ); + actor.SetPosition( 10.0f, 10.0f ); + Stage::GetCurrent().Add( actor ); + + RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); + RenderTask task = taskList.CreateTask(); + + FrameBufferImage newFrameBuffer = FrameBufferImage::New( 10, 10 ); + task.SetTargetFrameBuffer( newFrameBuffer ); + task.SetSourceActor( actor ); + task.SetScreenToFrameBufferMappingActor( actor ); + + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); + Stage::GetCurrent().Add( offscreenCameraActor ); + task.SetCameraActor( offscreenCameraActor ); + + // flush the queue and render once + application.SendNotification(); + application.Render(); + application.SendNotification(); + application.Render(); + + float localX; + float localY; + + float rtLocalX; + float rtLocalY; + + float screenX = 50.0f; + float screenY = 50.0f; + + DALI_TEST_CHECK( actor.ScreenToLocal(localX, localY, screenX, screenY) ); + + DALI_TEST_CHECK( task.ViewportToLocal(actor, screenX, screenY, rtLocalX, rtLocalY ) ); + + DALI_TEST_EQUALS(localX, rtLocalX, 0.01f, TEST_LOCATION); + DALI_TEST_EQUALS(localY, rtLocalY, 0.01f, TEST_LOCATION); + + END_TEST; +} + +int UtcDaliRenderTaskRequiresSync(void) +{ + TestApplication application; + RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); + + RenderTask newTask = taskList.CreateTask(); + newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, false ); + + DALI_TEST_EQUALS( newTask.GetProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), false, TEST_LOCATION ); + DALI_TEST_EQUALS( newTask.GetCurrentProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), false, TEST_LOCATION ); + + newTask.SetProperty( RenderTask::Property::REQUIRES_SYNC, true ); + + DALI_TEST_EQUALS( newTask.GetProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( newTask.GetCurrentProperty< bool >( RenderTask::Property::REQUIRES_SYNC ), true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliRenderTaskSetClearEnabled(void) +{ + TestApplication application; + + tet_infoline("UtcDaliRenderTaskSetClearEnabled"); + + application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE ); + TestGlAbstraction& gl = application.GetGlAbstraction(); + + Actor renderableActor = CreateRenderableActorSuccess( application, "aFile.jpg" ); + Stage::GetCurrent().Add( renderableActor ); + + Actor rootActor = Actor::New(); + Stage::GetCurrent().Add( rootActor ); + + CameraActor offscreenCameraActor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) ); + Stage::GetCurrent().Add( offscreenCameraActor ); + + Actor sourceActor = CreateRenderableActorSuccess( application, "aFile.jpg" ); + Stage::GetCurrent().Add( sourceActor ); + + RenderTask newTask = CreateRenderTask( application, offscreenCameraActor, rootActor, sourceActor, RenderTask::REFRESH_ALWAYS, false ); + + DALI_TEST_EQUALS( gl.GetClearCountCalled(), 0, TEST_LOCATION ); + + application.SendNotification(); + application.Render(); + + // glClear should be called twice - default task and the new task. + DALI_TEST_EQUALS( gl.GetClearCountCalled(), 2, TEST_LOCATION ); + + newTask.SetClearEnabled( false ); + + application.SendNotification(); + application.Render(); + + // The count should increase by 1 - default task only. + DALI_TEST_EQUALS( gl.GetClearCountCalled(), 3, TEST_LOCATION ); + + END_TEST; +}