X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-Scene.cpp;h=fad981939d4c67b523707efae876874cbea9d817;hb=d353bae63798f48237dc24c078c2e8cb2aa0bc62;hp=11d55a61c7a5ed36c376d1aace0d4d7abee794e8;hpb=52aff821ed3dc357937e58e70a83260418a194c2;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-Scene.cpp b/automated-tests/src/dali/utc-Dali-Scene.cpp index 11d55a6..fad9819 100644 --- a/automated-tests/src/dali/utc-Dali-Scene.cpp +++ b/automated-tests/src/dali/utc-Dali-Scene.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 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. @@ -142,8 +142,7 @@ struct TouchFunctor if ( signalData.createNewScene ) { - TestRenderSurface* surface = new TestRenderSurface( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); // This is a leak, but we need to keep the surface alive till the end - Dali::Integration::Scene scene = Dali::Integration::Scene::New( *surface ); + Dali::Integration::Scene scene = Dali::Integration::Scene::New( Size( 480.0f, 800.0f ) ); DALI_TEST_CHECK( scene ); signalData.newSceneCreated = true; @@ -407,8 +406,7 @@ int UtcDaliSceneDiscard(void) tet_infoline("Testing Dali::Scene::Discard"); // Create a new Scene - TestRenderSurface surface( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); - Dali::Integration::Scene scene = Dali::Integration::Scene::New( surface ); + Dali::Integration::Scene scene = Dali::Integration::Scene::New( Size( 480.0f, 800.0f ) ); DALI_TEST_CHECK( scene ); // One reference of scene kept here and the other one kept in the Core @@ -478,8 +476,7 @@ int UtcDaliSceneRootLayerAndSceneAlignment(void) TestApplication application; // Create a Scene - TestRenderSurface surface( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); - Dali::Integration::Scene scene = Dali::Integration::Scene::New( surface ); + Dali::Integration::Scene scene = Dali::Integration::Scene::New( Size( 480.0f, 800.0f ) ); DALI_TEST_CHECK( scene ); // One reference of scene kept here and the other one kept in the Core @@ -514,8 +511,7 @@ int UtcDaliSceneRootLayerAndSceneAlignment(void) DALI_TEST_CHECK( rootLayer.GetBaseObject().ReferenceCount() == 1 ); // Create a new Scene while the root layer of the deleted scene is still alive - TestRenderSurface surface2( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); - Dali::Integration::Scene newScene = Dali::Integration::Scene::New( surface2 ); + Dali::Integration::Scene newScene = Dali::Integration::Scene::New( Size( 480.0f, 800.0f ) ); DALI_TEST_CHECK( newScene ); // Render and notify. @@ -536,43 +532,6 @@ int UtcDaliSceneRootLayerAndSceneAlignment(void) END_TEST; } -int UtcDaliSceneDeleteSurface(void) -{ - TestApplication application; - - // Create the render surface for the scene - TestRenderSurface* renderSurface = new TestRenderSurface( Dali::PositionSize( 0, 0, 480.0f, 800.0f ) ); - - // Create a Scene - Dali::Integration::Scene scene = Dali::Integration::Scene::New( *renderSurface ); - DALI_TEST_CHECK( scene ); - - // Render and notify. - application.SendNotification(); - application.Render(0); - - // Add a renderable actor to the scene - auto actor = CreateRenderableActor(); - scene.Add( actor ); - - // Render and notify. - application.SendNotification(); - application.Render(0); - - // Notify the Core that the render surface will be deleted. - application.GetCore().SurfaceDeleted( renderSurface ); - - // Delete the render surface - delete renderSurface; - renderSurface = nullptr; - - // Render and notify. - application.SendNotification(); - application.Render(0); - - END_TEST; -} - int UtcDaliSceneEventProcessingFinishedP(void) { TestApplication application; @@ -916,54 +875,6 @@ int UtcDaliSceneSignalWheelEventP(void) END_TEST; } -int UtcDaliSceneEnsureEmptySceneCleared(void) -{ - tet_infoline( "Ensure we clear the newly added window" ); - - TestApplication application; - - // Create a new scene and set the background colors of both the new and the main scenes - auto defaultScene = application.GetScene(); - defaultScene.SetBackgroundColor( Color::WHITE ); - - TestRenderSurface surface( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); - auto newScene = Integration::Scene::New( surface ); - newScene.SetBackgroundColor( Color::RED ); - - // Need to create a renderable as we don't start rendering until we have at least one - // We don't need to add this to any scene - auto actor = CreateRenderableActor(); - - auto& glAbstraction = application.GetGlAbstraction(); - auto clearCountBefore = glAbstraction.GetClearCountCalled(); - - application.SendNotification(); - application.Render(); - - DALI_TEST_EQUALS( glAbstraction.GetClearCountCalled(), clearCountBefore + 2, TEST_LOCATION ); - - // Add the actor to the main scene - defaultScene.Add( actor ); - - application.SendNotification(); - application.Render(); - - // Add another scene and set its background color, ensure we clear it to the appropriate color - - TestRenderSurface surface2( PositionSize( 0.0f, 0.0f, 480.0f, 800.0f ) ); - auto thirdScene = Integration::Scene::New( surface2 ); - thirdScene.SetBackgroundColor( Color::BLUE ); - - clearCountBefore = glAbstraction.GetClearCountCalled(); - - application.SendNotification(); - application.Render(); - - DALI_TEST_EQUALS( glAbstraction.GetClearCountCalled(), clearCountBefore + 3, TEST_LOCATION ); - - END_TEST; -} - int UtcDaliSceneSurfaceResizedDefaultScene(void) { tet_infoline( "Ensure resizing of the surface is handled properly" ); @@ -971,18 +882,17 @@ int UtcDaliSceneSurfaceResizedDefaultScene(void) TestApplication application; auto defaultScene = application.GetScene(); - Integration::RenderSurface* defaultSurface = defaultScene.GetSurface(); - DALI_TEST_CHECK( defaultSurface ); + DALI_TEST_CHECK( defaultScene ); - // Ensure stage size matches the surface size + // Ensure stage size matches the scene size auto stage = Stage::GetCurrent(); - DALI_TEST_EQUALS( stage.GetSize(), Vector2( defaultSurface->GetPositionSize().width, defaultSurface->GetPositionSize().height ), TEST_LOCATION ); + DALI_TEST_EQUALS( stage.GetSize(), defaultScene.GetSize(), TEST_LOCATION ); - // Resize the surface and inform the scene accordingly + // Resize the scene Vector2 newSize( 1000.0f, 2000.0f ); DALI_TEST_CHECK( stage.GetSize() != newSize ); - defaultSurface->MoveResize( PositionSize( 0, 0, newSize.width, newSize.height ) ); - defaultScene.SurfaceResized( false ); + + defaultScene.SurfaceResized( newSize.width, newSize.height, 0, false ); DALI_TEST_EQUALS( stage.GetSize(), newSize, TEST_LOCATION ); DALI_TEST_EQUALS( defaultScene.GetSize(), newSize, TEST_LOCATION ); @@ -1015,19 +925,17 @@ int UtcDaliSceneSurfaceResizedDefaultSceneViewport(void) glAbstraction.ResetViewportCallStack(); auto defaultScene = application.GetScene(); - Integration::RenderSurface* defaultSurface = defaultScene.GetSurface(); - DALI_TEST_CHECK( defaultSurface ); + DALI_TEST_CHECK( defaultScene ); - // Ensure stage size matches the surface size + // Ensure stage size matches the scene size auto stage = Stage::GetCurrent(); - DALI_TEST_EQUALS( stage.GetSize(), Vector2( defaultSurface->GetPositionSize().width, defaultSurface->GetPositionSize().height ), TEST_LOCATION ); + DALI_TEST_EQUALS( stage.GetSize(), defaultScene.GetSize(), TEST_LOCATION ); - // Resize the surface and inform the scene accordingly + // Resize the scene Vector2 newSize( 1000.0f, 2000.0f ); std::string viewportParams( "0, 0, 1000, 2000" ); // to match newSize DALI_TEST_CHECK( stage.GetSize() != newSize ); - defaultSurface->MoveResize( PositionSize( 0, 0, newSize.width, newSize.height ) ); - defaultScene.SurfaceResized(); + defaultScene.SurfaceResized( newSize.width, newSize.height, 0, false ); DALI_TEST_EQUALS( stage.GetSize(), newSize, TEST_LOCATION ); DALI_TEST_EQUALS( defaultScene.GetSize(), newSize, TEST_LOCATION ); @@ -1089,18 +997,16 @@ int UtcDaliSceneSurfaceResizedMultipleRenderTasks(void) DALI_TEST_EQUALS( initialHeight, testHeight, TEST_LOCATION ); auto defaultScene = application.GetScene(); - Integration::RenderSurface* defaultSurface = defaultScene.GetSurface(); - DALI_TEST_CHECK( defaultSurface ); + DALI_TEST_CHECK( defaultScene ); - // Ensure stage size matches the surface size - DALI_TEST_EQUALS( stage.GetSize(), Vector2( defaultSurface->GetPositionSize().width, defaultSurface->GetPositionSize().height ), TEST_LOCATION ); + // Ensure stage size matches the scene size + DALI_TEST_EQUALS( stage.GetSize(), defaultScene.GetSize(), TEST_LOCATION ); - // Resize the surface and inform the scene accordingly - Vector2 newSize( 800.0f, 480.0f ); - std::string viewportParams( "0, 0, 800, 480" ); // to match newSize + // Resize the scene + Vector2 newSize( 1000.0f, 2000.0f ); + std::string viewportParams( "0, 0, 1000, 2000" ); // to match newSize DALI_TEST_CHECK( stage.GetSize() != newSize ); - defaultSurface->MoveResize( PositionSize( 0, 0, newSize.width, newSize.height ) ); - defaultScene.SurfaceResized(); + defaultScene.SurfaceResized( newSize.width, newSize.height, 0, false ); DALI_TEST_EQUALS( stage.GetSize(), newSize, TEST_LOCATION ); DALI_TEST_EQUALS( defaultScene.GetSize(), newSize, TEST_LOCATION ); @@ -1129,9 +1035,7 @@ int UtcDaliSceneSurfaceResizedAdditionalScene(void) TestApplication application; Vector2 originalSurfaceSize( 500.0f, 1000.0f ); - TestRenderSurface surface( PositionSize( 0.0f, 0.0f, originalSurfaceSize.width, originalSurfaceSize.height ) ); - - auto scene = Integration::Scene::New( surface ); + auto scene = Integration::Scene::New( Size( originalSurfaceSize.width, originalSurfaceSize.height ) ); // Ensure stage size does NOT match the surface size auto stage = Stage::GetCurrent(); @@ -1142,8 +1046,8 @@ int UtcDaliSceneSurfaceResizedAdditionalScene(void) // Resize the surface and inform the scene accordingly Vector2 newSize( 1000.0f, 2000.0f ); DALI_TEST_CHECK( stage.GetSize() != newSize ); - surface.MoveResize( PositionSize( 0, 0, newSize.width, newSize.height ) ); - scene.SurfaceResized( false ); + + scene.SurfaceResized( newSize.width, newSize.height, 0, false ); // Ensure the stage hasn't been resized DALI_TEST_EQUALS( stage.GetSize(), stageSize, TEST_LOCATION ); @@ -1152,34 +1056,6 @@ int UtcDaliSceneSurfaceResizedAdditionalScene(void) END_TEST; } -int UtcDaliSceneSetSurface(void) -{ - tet_infoline( "Scene::SetSurface test" ); - - TestApplication application; - - // Create a scene with a surface and ensure the size and surface is set correctly on the scene - Vector2 surfaceSize( 480.0f, 800.0f ); - TestRenderSurface surface( PositionSize( 0.0f, 0.0f, surfaceSize.width, surfaceSize.height ) ); - auto scene = Integration::Scene::New( surface ); - DALI_TEST_EQUALS( scene.GetSize(), surfaceSize, TEST_LOCATION ); - DALI_TEST_CHECK( scene.GetSurface() == &surface ); - - // Create a new surface and set that on the scene - Vector2 newSurfaceSize( 1000.0f, 1000.0f ); - TestRenderSurface newSurface( PositionSize( 0.0f, 0.0f, newSurfaceSize.width, newSurfaceSize.height ) ); - scene.SetSurface( newSurface ); - DALI_TEST_EQUALS( scene.GetSize(), newSurfaceSize, TEST_LOCATION ); - DALI_TEST_CHECK( scene.GetSurface() == &newSurface ); - - // Ensure setting the same surface again doesn't have any side effects - scene.SetSurface( newSurface ); - DALI_TEST_EQUALS( scene.GetSize(), newSurfaceSize, TEST_LOCATION ); - DALI_TEST_CHECK( scene.GetSurface() == &newSurface ); - - END_TEST; -} - int UtcDaliSceneKeyEventGeneratedSignalP(void) { TestApplication application; @@ -1232,3 +1108,63 @@ int UtcDaliSceneKeyEventGeneratedSignalP(void) DALI_TEST_CHECK( event4.state == static_cast( data.receivedKeyEvent.state ) ); END_TEST; } + +int UtcDaliSceneEnsureReplacedSurfaceKeepsClearColor(void) +{ + tet_infoline( "Ensure we keep background color when the scene surface is replaced " ); + + TestApplication application; + + // Create a new scene and set the background color of the main scene + auto defaultScene = application.GetScene(); + defaultScene.SetBackgroundColor( Color::BLUE ); + + // Need to create a renderable as we don't start rendering until we have at least one + // We don't need to add this to any scene + auto actor = CreateRenderableActor(); + + auto& glAbstraction = application.GetGlAbstraction(); + auto clearCountBefore = glAbstraction.GetClearCountCalled(); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( glAbstraction.GetClearCountCalled(), clearCountBefore + 1, TEST_LOCATION ); + DALI_TEST_EQUALS( glAbstraction.GetLastClearColor(), Color::BLUE, TEST_LOCATION ); + + defaultScene.SurfaceReplaced(); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( glAbstraction.GetClearCountCalled(), clearCountBefore + 2, TEST_LOCATION ); + DALI_TEST_EQUALS( glAbstraction.GetLastClearColor(), Color::BLUE, TEST_LOCATION ); + + // Check when the main render task viewport is set the clear color is clipped using scissors + TraceCallStack& scissorTrace = glAbstraction.GetScissorTrace(); + TraceCallStack& enabledDisableTrace = glAbstraction.GetEnableDisableTrace(); + scissorTrace.Enable( true ); + enabledDisableTrace.Enable( true ); + + defaultScene.GetRenderTaskList().GetTask( 0 ).SetViewport( Viewport( 0.0f, 0.0f, 100.0f, 100.0f ) ); + + application.SendNotification(); + application.Render(); + + // Check scissor test was enabled. + DALI_TEST_CHECK( enabledDisableTrace.FindMethodAndParams( "Enable", "3089" ) ); // 3089 = 0xC11 (GL_SCISSOR_TEST) + + // Check the scissor was set, and the coordinates are correct. + DALI_TEST_CHECK( scissorTrace.FindMethodAndParams( "Scissor", "0, 700, 100, 100" ) ); + + DALI_TEST_EQUALS( glAbstraction.GetClearCountCalled(), clearCountBefore + 3, TEST_LOCATION ); + DALI_TEST_EQUALS( glAbstraction.GetLastClearColor(), Color::BLUE, TEST_LOCATION ); + + scissorTrace.Enable( false ); + scissorTrace.Reset(); + + enabledDisableTrace.Enable( false ); + enabledDisableTrace.Reset(); + + END_TEST; +}