X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-Renderer.cpp;h=222885ab12b2b492214aedccd15c550ed2e021f5;hb=e97ce3673ceda34d252bb13a320a7947a552c1ac;hp=4f64bb88e3f5c77e070aab3e1d7aaf1fc8dde8ff;hpb=3fc7efff68de13a8d1d423422ac408b77a28f232;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-Renderer.cpp b/automated-tests/src/dali/utc-Dali-Renderer.cpp index 4f64bb8..222885a 100644 --- a/automated-tests/src/dali/utc-Dali-Renderer.cpp +++ b/automated-tests/src/dali/utc-Dali-Renderer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * Copyright (c) 2019 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. @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -204,12 +205,13 @@ int UtcDaliRendererDefaultProperties(void) DALI_PROPERTY( "stencilOperationOnZFail", INTEGER, true, false, false, Dali::Renderer::Property::STENCIL_OPERATION_ON_Z_FAIL ) DALI_PROPERTY( "stencilOperationOnZPass", INTEGER, true, false, false, Dali::Renderer::Property::STENCIL_OPERATION_ON_Z_PASS ) DALI_PROPERTY( "opacity", FLOAT, true, true, true, Dali::DevelRenderer::Property::OPACITY ) + DALI_PROPERTY( "renderingBehavior", INTEGER, true, false, false, Dali::DevelRenderer::Property::RENDERING_BEHAVIOR ) */ Geometry geometry = CreateQuadGeometry(); Shader shader = CreateShader(); Renderer renderer = Renderer::New(geometry, shader); - DALI_TEST_EQUALS( renderer.GetPropertyCount(), 25, TEST_LOCATION ); + DALI_TEST_EQUALS( renderer.GetPropertyCount(), 26, TEST_LOCATION ); TEST_RENDERER_PROPERTY( renderer, "depthIndex", Property::INTEGER, true, false, false, Renderer::Property::DEPTH_INDEX, TEST_LOCATION ); TEST_RENDERER_PROPERTY( renderer, "faceCullingMode", Property::INTEGER, true, false, false, Renderer::Property::FACE_CULLING_MODE, TEST_LOCATION ); @@ -236,6 +238,7 @@ int UtcDaliRendererDefaultProperties(void) TEST_RENDERER_PROPERTY( renderer, "stencilOperationOnZFail", Property::INTEGER, true, false, false, Renderer::Property::STENCIL_OPERATION_ON_Z_FAIL, TEST_LOCATION ); TEST_RENDERER_PROPERTY( renderer, "stencilOperationOnZPass", Property::INTEGER, true, false, false, Renderer::Property::STENCIL_OPERATION_ON_Z_PASS, TEST_LOCATION ); TEST_RENDERER_PROPERTY( renderer, "opacity", Property::FLOAT, true, true, true, DevelRenderer::Property::OPACITY, TEST_LOCATION ); + TEST_RENDERER_PROPERTY( renderer, "renderingBehavior", Property::INTEGER, true, false, false, DevelRenderer::Property::RENDERING_BEHAVIOR, TEST_LOCATION ); END_TEST; } @@ -451,7 +454,7 @@ int UtcDaliRendererBlendOptions01(void) Actor actor = Actor::New(); // set a transparent actor color so that blending is enabled - actor.SetOpacity( 0.5f ); + actor.SetProperty( DevelActor::Property::OPACITY, 0.5f ); actor.AddRenderer(renderer); actor.SetSize(400, 400); Stage::GetCurrent().Add(actor); @@ -496,7 +499,7 @@ int UtcDaliRendererBlendOptions02(void) Renderer renderer = Renderer::New( geometry, shader ); Actor actor = Actor::New(); - actor.SetOpacity( 0.5f ); // enable blending + actor.SetProperty( DevelActor::Property::OPACITY, 0.5f ); // enable blending actor.AddRenderer(renderer); actor.SetSize(400, 400); Stage::GetCurrent().Add(actor); @@ -567,7 +570,7 @@ int UtcDaliRendererBlendOptions04(void) Renderer renderer = Renderer::New( geometry, shader ); Actor actor = Actor::New(); - actor.SetOpacity( 0.1f ); + actor.SetProperty( DevelActor::Property::OPACITY, 0.1f ); actor.AddRenderer(renderer); actor.SetSize(400, 400); Stage::GetCurrent().Add(actor); @@ -612,7 +615,7 @@ int UtcDaliRendererSetBlendMode01(void) Renderer renderer = Renderer::New( geometry, shader ); Actor actor = Actor::New(); - actor.SetOpacity( 0.98f ); + actor.SetProperty( DevelActor::Property::OPACITY, 0.98f ); actor.AddRenderer(renderer); actor.SetSize(400, 400); Stage::GetCurrent().Add(actor); @@ -644,7 +647,7 @@ int UtcDaliRendererSetBlendMode01b(void) Renderer renderer = Renderer::New( geometry, shader ); Actor actor = Actor::New(); - actor.SetOpacity( 0.0f ); + actor.SetProperty( DevelActor::Property::OPACITY, 0.0f ); actor.AddRenderer(renderer); actor.SetSize(400, 400); Stage::GetCurrent().Add(actor); @@ -679,7 +682,7 @@ int UtcDaliRendererSetBlendMode02(void) Renderer renderer = Renderer::New( geometry, shader ); Actor actor = Actor::New(); - actor.SetOpacity( 0.15f ); + actor.SetProperty( DevelActor::Property::OPACITY, 0.15f ); actor.AddRenderer(renderer); actor.SetSize(400, 400); Stage::GetCurrent().Add(actor); @@ -711,7 +714,7 @@ int UtcDaliRendererSetBlendMode03(void) Renderer renderer = Renderer::New( geometry, shader ); Actor actor = Actor::New(); - actor.SetOpacity( 0.75f ); + actor.SetProperty( DevelActor::Property::OPACITY, 0.75f ); actor.AddRenderer(renderer); actor.SetSize(400, 400); Stage::GetCurrent().Add(actor); @@ -776,7 +779,7 @@ int UtcDaliRendererSetBlendMode04b(void) Actor actor = Actor::New(); actor.AddRenderer(renderer); actor.SetSize(400, 400); - actor.SetColor( Vector4(1.0f, 0.0f, 1.0f, 0.5f) ); + actor.SetProperty( Actor::Property::COLOR, Vector4(1.0f, 0.0f, 1.0f, 0.5f) ); Stage::GetCurrent().Add(actor); renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::AUTO); @@ -808,7 +811,7 @@ int UtcDaliRendererSetBlendMode04c(void) Actor actor = Actor::New(); actor.AddRenderer(renderer); actor.SetSize(400, 400); - actor.SetColor( Color::MAGENTA ); + actor.SetProperty( Actor::Property::COLOR, Color::MAGENTA ); Stage::GetCurrent().Add(actor); renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::AUTO); @@ -1041,7 +1044,7 @@ int UtcDaliRendererPreMultipledAlpha(void) Actor actor = Actor::New(); actor.AddRenderer(renderer); actor.SetSize(400, 400); - actor.SetColor( Vector4(1.0f, 0.0f, 1.0f, 0.5f) ); + actor.SetProperty( Actor::Property::COLOR, Vector4(1.0f, 0.0f, 1.0f, 0.5f) ); Stage::GetCurrent().Add(actor); Property::Value value = renderer.GetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA ); @@ -1578,8 +1581,8 @@ Renderer CreateRenderer( Actor actor, Geometry geometry, Shader shader, int dept Actor CreateActor( Actor parent, int siblingOrder, const char* location ) { Actor actor = Actor::New(); - actor.SetAnchorPoint(AnchorPoint::CENTER); - actor.SetParentOrigin(AnchorPoint::CENTER); + actor.SetProperty( Actor::Property::ANCHOR_POINT,AnchorPoint::CENTER); + actor.SetProperty( Actor::Property::PARENT_ORIGIN,AnchorPoint::CENTER); actor.SetPosition(0.0f,0.0f); actor.SetSize(100, 100); parent.Add(actor); @@ -1868,18 +1871,18 @@ int UtcDaliRendererRenderOrder2DLayerOverlay(void) */ Actor actor0 = CreateActor( root, 0, TEST_LOCATION ); - actor0.SetDrawMode( DrawMode::OVERLAY_2D ); + actor0.SetProperty( Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D ); Renderer renderer0 = CreateRenderer( actor0, geometry, shader, 0 ); Actor actor1 = CreateActor( root, 0, TEST_LOCATION ); - actor1.SetDrawMode( DrawMode::OVERLAY_2D ); + actor1.SetProperty( Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D ); Renderer renderer1 = CreateRenderer( actor1, geometry, shader, 0 ); Actor actor2 = CreateActor( root, 0, TEST_LOCATION ); Renderer renderer2 = CreateRenderer( actor2, geometry, shader, 0 ); Actor actor3 = CreateActor( root, 0, TEST_LOCATION ); - actor3.SetDrawMode( DrawMode::OVERLAY_2D ); + actor3.SetProperty( Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D ); Renderer renderer3 = CreateRenderer( actor3, geometry, shader, 0 ); Actor actor4 = CreateActor( root, 0, TEST_LOCATION ); @@ -2336,9 +2339,9 @@ int UtcDaliRendererSetDepthTestMode(void) DALI_TEST_CHECK( glEnableDisableStack.FindMethodAndParams( "Enable", GetDepthTestString() ) ); DALI_TEST_CHECK( !glEnableDisableStack.FindMethodAndParams( "Disable", GetDepthTestString() ) ); - // Change the layer behavior to LAYER_2D. + // Change the layer behavior to LAYER_UI. // Note this will also disable depth testing for the layer by default, we test this first. - Stage::GetCurrent().GetRootLayer().SetBehavior( Layer::LAYER_2D ); + Stage::GetCurrent().GetRootLayer().SetBehavior( Layer::LAYER_UI ); glEnableDisableStack.Reset(); application.SendNotification(); @@ -2824,7 +2827,7 @@ int UtcDaliRendererOpacity(void) Actor actor = Actor::New(); actor.AddRenderer( renderer ); actor.SetSize( 400, 400 ); - actor.SetColor( Vector4( 1.0f, 0.0f, 1.0f, 1.0f ) ); + actor.SetProperty( Actor::Property::COLOR, Vector4( 1.0f, 0.0f, 1.0f, 1.0f ) ); Stage::GetCurrent().Add( actor ); Property::Value value = renderer.GetProperty( DevelRenderer::Property::OPACITY ); @@ -2872,7 +2875,7 @@ int UtcDaliRendererOpacityAnimation(void) Actor actor = Actor::New(); actor.AddRenderer( renderer ); actor.SetSize( 400, 400 ); - actor.SetColor( Vector4( 1.0f, 0.0f, 1.0f, 1.0f ) ); + actor.SetProperty( Actor::Property::COLOR, Vector4( 1.0f, 0.0f, 1.0f, 1.0f ) ); Stage::GetCurrent().Add( actor ); application.SendNotification(); @@ -2894,9 +2897,10 @@ int UtcDaliRendererOpacityAnimation(void) DALI_TEST_CHECK( value.Get( opacity ) ); DALI_TEST_EQUALS( opacity, 0.0f, Dali::Math::MACHINE_EPSILON_1, TEST_LOCATION ); + // Need to clear the animation before setting the property as the animation value is baked and will override any previous setters + animation.Clear(); renderer.SetProperty( DevelRenderer::Property::OPACITY, 0.1f ); - animation.Clear(); animation.AnimateBy( Property( renderer, DevelRenderer::Property::OPACITY ), 0.5f ); animation.Play(); @@ -2906,6 +2910,7 @@ int UtcDaliRendererOpacityAnimation(void) value = renderer.GetProperty( DevelRenderer::Property::OPACITY ); DALI_TEST_CHECK( value.Get( opacity ) ); DALI_TEST_EQUALS( opacity, 0.6f, Dali::Math::MACHINE_EPSILON_1, TEST_LOCATION ); + DALI_TEST_EQUALS( opacity, renderer.GetCurrentProperty( DevelRenderer::Property::OPACITY ).Get< float >(), Dali::Math::MACHINE_EPSILON_1, TEST_LOCATION ); END_TEST; } @@ -2936,3 +2941,119 @@ int UtcDaliRendererInvalidProperty(void) END_TEST; } + +int UtcDaliRendererRenderingBehavior(void) +{ + TestApplication application; + + tet_infoline( "Test RENDERING_BEHAVIOR property" ); + + Geometry geometry = CreateQuadGeometry(); + Shader shader = Shader::New( "vertexSrc", "fragmentSrc" ); + Renderer renderer = Renderer::New( geometry, shader ); + + Actor actor = Actor::New(); + actor.AddRenderer( renderer ); + actor.SetSize( 400, 400 ); + actor.SetProperty( Actor::Property::COLOR, Vector4( 1.0f, 0.0f, 1.0f, 1.0f ) ); + Stage::GetCurrent().Add( actor ); + + Property::Value value = renderer.GetProperty( DevelRenderer::Property::RENDERING_BEHAVIOR ); + int renderingBehavior; + DALI_TEST_CHECK( value.Get( renderingBehavior ) ); + DALI_TEST_EQUALS( static_cast< DevelRenderer::Rendering::Type >( renderingBehavior ), DevelRenderer::Rendering::IF_REQUIRED, TEST_LOCATION ); + + application.SendNotification(); + application.Render(); + + uint32_t updateStatus = application.GetUpdateStatus(); + + DALI_TEST_CHECK( !( updateStatus & Integration::KeepUpdating::STAGE_KEEP_RENDERING ) ); + + renderer.SetProperty( DevelRenderer::Property::RENDERING_BEHAVIOR, DevelRenderer::Rendering::CONTINUOUSLY ); + + value = renderer.GetProperty( DevelRenderer::Property::RENDERING_BEHAVIOR ); + DALI_TEST_CHECK( value.Get( renderingBehavior ) ); + DALI_TEST_EQUALS( static_cast< DevelRenderer::Rendering::Type >( renderingBehavior ), DevelRenderer::Rendering::CONTINUOUSLY, TEST_LOCATION ); + + // Render and check the update status + application.SendNotification(); + application.Render(); + + updateStatus = application.GetUpdateStatus(); + + DALI_TEST_CHECK( updateStatus & Integration::KeepUpdating::STAGE_KEEP_RENDERING ); + + value = renderer.GetCurrentProperty( DevelRenderer::Property::RENDERING_BEHAVIOR ); + DALI_TEST_CHECK( value.Get( renderingBehavior ) ); + DALI_TEST_EQUALS( static_cast< DevelRenderer::Rendering::Type >( renderingBehavior ), DevelRenderer::Rendering::CONTINUOUSLY, TEST_LOCATION ); + + // Render again and check the update status + application.SendNotification(); + application.Render(); + + updateStatus = application.GetUpdateStatus(); + + DALI_TEST_CHECK( updateStatus & Integration::KeepUpdating::STAGE_KEEP_RENDERING ); + + // Change rendering behavior + renderer.SetProperty( DevelRenderer::Property::RENDERING_BEHAVIOR, DevelRenderer::Rendering::IF_REQUIRED ); + + // Render and check the update status + application.SendNotification(); + application.Render(); + + updateStatus = application.GetUpdateStatus(); + + DALI_TEST_CHECK( !( updateStatus & Integration::KeepUpdating::STAGE_KEEP_RENDERING ) ); + + END_TEST; +} + +int UtcDaliRendererRegenerateUniformMap(void) +{ + TestApplication application; + + tet_infoline( "Test regenerating uniform map when attaching renderer to the node" ); + + Geometry geometry = CreateQuadGeometry(); + Shader shader = Shader::New( "vertexSrc", "fragmentSrc" ); + Renderer renderer = Renderer::New( geometry, shader ); + + Actor actor = Actor::New(); + actor.AddRenderer( renderer ); + actor.SetSize( 400, 400 ); + actor.SetProperty( Actor::Property::COLOR, Vector4( 1.0f, 0.0f, 1.0f, 1.0f ) ); + Stage::GetCurrent().Add( actor ); + + application.SendNotification(); + application.Render(); + + actor.RemoveRenderer( renderer ); + shader = Shader::New( "vertexSrc", "fragmentSrc" ); + shader.RegisterProperty( "opacity", 0.5f ); + renderer.SetShader( shader ); + + Stage::GetCurrent().KeepRendering( 1.0f ); + + // Update for several frames + application.SendNotification(); + application.Render(); + application.SendNotification(); + application.Render(); + application.SendNotification(); + application.Render(); + application.SendNotification(); + application.Render(); + + // Add Renderer + actor.AddRenderer( renderer ); + application.SendNotification(); + application.Render(); + + // Nothing to test here, the test must not crash + auto updateStatus = application.GetUpdateStatus(); + DALI_TEST_CHECK( updateStatus & Integration::KeepUpdating::STAGE_KEEP_RENDERING ); + + END_TEST; +}