X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-Renderer.cpp;h=0dcdfa8976283dddf6d38980da6a5b190cc7794a;hb=7f12510950d4463804f541f038769101afc9d9a3;hp=0d93f913c7efc1687093f39a6ab40037e0730056;hpb=f192e26faa7ffe5b8c52ab4cd28e5c4fdc7e2d76;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 0d93f91..0dcdfa8 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) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 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. @@ -16,6 +16,8 @@ */ // EXTERNAL INCLUDES +#include + #include #include #include @@ -991,15 +993,15 @@ int UtcDaliRendererConstraint01(void) application.Render(0); // Expect no blue component in either buffer - yellow - DALI_TEST_EQUALS( renderer.GetProperty(colorIndex), Color::YELLOW, TEST_LOCATION ); + DALI_TEST_EQUALS( renderer.GetCurrentProperty< Vector4 >( colorIndex ), Color::YELLOW, TEST_LOCATION ); application.Render(0); - DALI_TEST_EQUALS( renderer.GetProperty(colorIndex), Color::YELLOW, TEST_LOCATION ); + DALI_TEST_EQUALS( renderer.GetCurrentProperty< Vector4 >( colorIndex ), Color::YELLOW, TEST_LOCATION ); renderer.RemoveConstraints(); renderer.SetProperty(colorIndex, Color::WHITE ); application.SendNotification(); application.Render(0); - DALI_TEST_EQUALS( renderer.GetProperty(colorIndex), Color::WHITE, TEST_LOCATION ); + DALI_TEST_EQUALS( renderer.GetCurrentProperty< Vector4 >( colorIndex ), Color::WHITE, TEST_LOCATION ); END_TEST; } @@ -1090,11 +1092,11 @@ int UtcDaliRendererAnimatedProperty01(void) application.SendNotification(); application.Render(500); - DALI_TEST_EQUALS( renderer.GetProperty(colorIndex), Color::WHITE * 0.5f, TEST_LOCATION ); + DALI_TEST_EQUALS( renderer.GetCurrentProperty< Vector4 >( colorIndex ), Color::WHITE * 0.5f, TEST_LOCATION ); application.Render(500); - DALI_TEST_EQUALS( renderer.GetProperty(colorIndex), Color::TRANSPARENT, TEST_LOCATION ); + DALI_TEST_EQUALS( renderer.GetCurrentProperty< Vector4 >( colorIndex ), Color::TRANSPARENT, TEST_LOCATION ); END_TEST; } @@ -1400,6 +1402,33 @@ int UtcDaliRendererUniformMapMultipleUniforms02(void) END_TEST; } + +Renderer CreateRenderer( Actor actor, Geometry geometry, Shader shader, int depthIndex ) +{ + Image image0 = BufferImage::New( 64, 64, Pixel::RGB888 ); + TextureSet textureSet0 = CreateTextureSet( image0 ); + Renderer renderer0 = Renderer::New( geometry, shader ); + renderer0.SetTextures( textureSet0 ); + renderer0.SetProperty( Renderer::Property::DEPTH_INDEX, depthIndex ); + actor.AddRenderer(renderer0); + return renderer0; +} + + +Actor CreateActor( Actor parent, int siblingOrder, const char* location ) +{ + Actor actor0 = Actor::New(); + actor0.SetAnchorPoint(AnchorPoint::CENTER); + actor0.SetParentOrigin(AnchorPoint::CENTER); + actor0.SetPosition(0.0f,0.0f); + actor0.SetSize(100, 100); + actor0.SetProperty( Dali::DevelActor::Property::SIBLING_ORDER, siblingOrder ); + DALI_TEST_EQUALS( actor0.GetProperty( Dali::DevelActor::Property::SIBLING_ORDER), siblingOrder, TEST_INNER_LOCATION(location) ); + parent.Add(actor0); + + return actor0; +} + int UtcDaliRendererRenderOrder2DLayer(void) { TestApplication application; @@ -1408,59 +1437,20 @@ int UtcDaliRendererRenderOrder2DLayer(void) Shader shader = Shader::New("VertexSource", "FragmentSource"); Geometry geometry = CreateQuadGeometry(); - Actor actor0 = Actor::New(); - actor0.SetAnchorPoint(AnchorPoint::CENTER); - actor0.SetParentOrigin(AnchorPoint::CENTER); - actor0.SetPosition(0.0f,0.0f); - Image image0 = BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet0 = CreateTextureSet( image0 ); - Renderer renderer0 = Renderer::New( geometry, shader ); - renderer0.SetTextures( textureSet0 ); - actor0.AddRenderer(renderer0); - actor0.SetSize(1, 1); - Stage::GetCurrent().Add(actor0); - application.SendNotification(); - application.Render(0); + Actor root = Stage::GetCurrent().GetRootLayer(); - Actor actor1 = Actor::New(); - actor1.SetAnchorPoint(AnchorPoint::CENTER); - actor1.SetParentOrigin(AnchorPoint::CENTER); - actor1.SetPosition(0.0f,0.0f); - Image image1= BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet1 = CreateTextureSet( image1 ); - Renderer renderer1 = Renderer::New( geometry, shader ); - renderer1.SetTextures( textureSet1 ); - actor1.AddRenderer(renderer1); - actor1.SetSize(1, 1); - Stage::GetCurrent().Add(actor1); - application.SendNotification(); - application.Render(0); + Actor actor0 = CreateActor( root, 0, TEST_LOCATION ); + Renderer renderer0 = CreateRenderer( actor0, geometry, shader, 0 ); - Actor actor2 = Actor::New(); - actor2.SetAnchorPoint(AnchorPoint::CENTER); - actor2.SetParentOrigin(AnchorPoint::CENTER); - actor2.SetPosition(0.0f,0.0f); - Image image2= BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet2 = CreateTextureSet( image2 ); - Renderer renderer2 = Renderer::New( geometry, shader ); - renderer2.SetTextures( textureSet2 ); - actor2.AddRenderer(renderer2); - actor2.SetSize(1, 1); - Stage::GetCurrent().Add(actor2); - application.SendNotification(); - application.Render(0); + Actor actor1 = CreateActor( root, 0, TEST_LOCATION ); + 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 ); + Renderer renderer3 = CreateRenderer( actor3, geometry, shader, 0 ); - Actor actor3 = Actor::New(); - actor3.SetAnchorPoint(AnchorPoint::CENTER); - actor3.SetParentOrigin(AnchorPoint::CENTER); - actor3.SetPosition(0.0f,0.0f); - Image image3 = BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet3 = CreateTextureSet( image3 ); - Renderer renderer3 = Renderer::New( geometry, shader ); - renderer3.SetTextures( textureSet3 ); - actor3.AddRenderer(renderer3); - actor3.SetSize(1, 1); - Stage::GetCurrent().Add(actor3); application.SendNotification(); application.Render(0); @@ -1539,81 +1529,20 @@ int UtcDaliRendererRenderOrder2DLayerMultipleRenderers(void) Shader shader = Shader::New("VertexSource", "FragmentSource"); Geometry geometry = CreateQuadGeometry(); - Actor actor0 = Actor::New(); - actor0.SetAnchorPoint(AnchorPoint::CENTER); - actor0.SetParentOrigin(AnchorPoint::CENTER); - actor0.SetPosition(0.0f,0.0f); - actor0.SetSize(1, 1); - Stage::GetCurrent().Add(actor0); - - Actor actor1 = Actor::New(); - actor1.SetAnchorPoint(AnchorPoint::CENTER); - actor1.SetParentOrigin(AnchorPoint::CENTER); - actor1.SetPosition(0.0f,0.0f); - actor1.SetSize(1, 1); - actor0.Add(actor1); - - //Renderer0 - Image image0 = BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet0 = CreateTextureSet( image0 ); - Renderer renderer0 = Renderer::New( geometry, shader ); - renderer0.SetTextures( textureSet0 ); - renderer0.SetProperty( Renderer::Property::DEPTH_INDEX, 2 ); - actor0.AddRenderer(renderer0); - application.SendNotification(); - application.Render(0); - - //Renderer1 - Image image1= BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet1 = CreateTextureSet( image1 ); - Renderer renderer1 = Renderer::New( geometry, shader ); - renderer1.SetTextures( textureSet1 ); - renderer1.SetProperty( Renderer::Property::DEPTH_INDEX, 0 ); - actor0.AddRenderer(renderer1); - application.SendNotification(); - application.Render(0); + Actor root = Stage::GetCurrent().GetRootLayer(); - //Renderer2 - Image image2= BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet2 = CreateTextureSet( image2 ); - Renderer renderer2 = Renderer::New( geometry, shader ); - renderer2.SetTextures( textureSet2 ); - renderer2.SetProperty( Renderer::Property::DEPTH_INDEX, 1 ); - actor0.AddRenderer(renderer2); - application.SendNotification(); - application.Render(0); + Actor actor0 = CreateActor( root, 0, TEST_LOCATION ); + Actor actor1 = CreateActor( actor0, 0, TEST_LOCATION ); + Renderer renderer0 = CreateRenderer( actor0, geometry, shader, 2 ); + Renderer renderer1 = CreateRenderer( actor0, geometry, shader, 0 ); + Renderer renderer2 = CreateRenderer( actor0, geometry, shader, 1 ); + Renderer renderer3 = CreateRenderer( actor1, geometry, shader, 1 ); + Renderer renderer4 = CreateRenderer( actor1, geometry, shader, 0 ); + Renderer renderer5 = CreateRenderer( actor1, geometry, shader, -1 ); - //Renderer3 - Image image3 = BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet3 = CreateTextureSet( image3 ); - Renderer renderer3 = Renderer::New( geometry, shader ); - renderer3.SetTextures( textureSet3 ); - renderer3.SetProperty( Renderer::Property::DEPTH_INDEX, 1 ); - actor1.AddRenderer(renderer3); application.SendNotification(); application.Render(0); - //Renderer4 - Image image4= BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet4 = CreateTextureSet( image4 ); - Renderer renderer4 = Renderer::New( geometry, shader ); - renderer4.SetTextures( textureSet4 ); - renderer4.SetProperty( Renderer::Property::DEPTH_INDEX, 0 ); - actor1.AddRenderer(renderer4); - application.SendNotification(); - application.Render(0); - - //Renderer5 - Image image5= BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet5 = CreateTextureSet( image5 ); - Renderer renderer5 = Renderer::New( geometry, shader ); - renderer5.SetTextures( textureSet5 ); - renderer5.SetProperty( Renderer::Property::DEPTH_INDEX, -1 ); - actor1.AddRenderer(renderer5); - application.SendNotification(); - application.Render(0); - - TestGlAbstraction& gl = application.GetGlAbstraction(); gl.EnableTextureCallTrace(true); application.SendNotification(); @@ -1645,87 +1574,118 @@ int UtcDaliRendererRenderOrder2DLayerMultipleRenderers(void) END_TEST; } -int UtcDaliRendererRenderOrder2DLayerOverlay(void) + +int UtcDaliRendererRenderOrder2DLayerSiblingOrder(void) { TestApplication application; - tet_infoline("Test the rendering order in a 2D layer is correct for overlays"); + tet_infoline("Test the rendering order in a 2D layer is correct using sibling order"); + + /* + * Creates the following hierarchy: + * + * Layer + * / \ + * / \ + * / \ + * / \ + * / \ + * actor0 (SIBLING_ORDER:1) actor1 (SIBLING_ORDER:0) + * / | \ / | \ + * / | \ / | \ + * / | \ / | \ + * renderer0 renderer1 actor2 renderer2 renderer3 renderer4 + * DI:2 DI:0 | DI:0 DI:1 DI:2 + * | + * renderer5 + * DI:-1 + * + * actor0 has sibling order 1 + * actor1 has sibling order 0 + * actor2 has sibling order 0 + * + * renderer0 has depth index 2 + * renderer1 has depth index 0 + * + * renderer2 has depth index 0 + * renderer3 has depth index 1 + * renderer4 has depth index 2 + * + * renderer5 has depth index -1 + * + * Expected rendering order: renderer2 - renderer3 - renderer4 - renderer1 - renderer0 - renderer5 + */ Shader shader = Shader::New("VertexSource", "FragmentSource"); Geometry geometry = CreateQuadGeometry(); + Actor root = Stage::GetCurrent().GetRootLayer(); + Actor actor0 = CreateActor( root, 1, TEST_LOCATION ); + Actor actor1 = CreateActor( root, 0, TEST_LOCATION ); + Actor actor2 = CreateActor( actor0, 0, TEST_LOCATION ); - Actor actor0 = Actor::New(); - actor0.SetAnchorPoint(AnchorPoint::CENTER); - actor0.SetParentOrigin(AnchorPoint::CENTER); - Image image0 = BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet0 = CreateTextureSet( image0 ); - Renderer renderer0 = Renderer::New( geometry, shader ); - renderer0.SetTextures( textureSet0 ); - actor0.AddRenderer(renderer0); - actor0.SetPosition(0.0f,0.0f); - actor0.SetSize(100, 100); - Stage::GetCurrent().Add(actor0); - actor0.SetDrawMode( DrawMode::OVERLAY_2D ); - application.SendNotification(); - application.Render(0); + Renderer renderer0 = CreateRenderer( actor0, geometry, shader, 2 ); + Renderer renderer1 = CreateRenderer( actor0, geometry, shader, 0 ); + Renderer renderer2 = CreateRenderer( actor1, geometry, shader, 0 ); + Renderer renderer3 = CreateRenderer( actor1, geometry, shader, 1 ); + Renderer renderer4 = CreateRenderer( actor1, geometry, shader, 2 ); + Renderer renderer5 = CreateRenderer( actor2, geometry, shader, -1 ); - Actor actor1 = Actor::New(); - actor1.SetAnchorPoint(AnchorPoint::CENTER); - actor1.SetParentOrigin(AnchorPoint::CENTER); - Image image1= BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet1 = CreateTextureSet( image1 ); - Renderer renderer1 = Renderer::New( geometry, shader ); - renderer1.SetTextures( textureSet1 ); - actor1.SetPosition(0.0f,0.0f); - actor1.AddRenderer(renderer1); - actor1.SetSize(100, 100); - Stage::GetCurrent().Add(actor1); - actor1.SetDrawMode( DrawMode::OVERLAY_2D ); application.SendNotification(); - application.Render(0); + application.Render(); - Actor actor2 = Actor::New(); - actor2.SetAnchorPoint(AnchorPoint::CENTER); - actor2.SetParentOrigin(AnchorPoint::CENTER); - Image image2= BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet2 = CreateTextureSet( image2 ); - Renderer renderer2 = Renderer::New( geometry, shader ); - renderer2.SetTextures( textureSet2 ); - actor2.AddRenderer(renderer2); - actor2.SetPosition(0.0f,0.0f); - actor2.SetSize(100, 100); - Stage::GetCurrent().Add(actor2); + TestGlAbstraction& gl = application.GetGlAbstraction(); + gl.EnableTextureCallTrace(true); application.SendNotification(); application.Render(0); - Actor actor3 = Actor::New(); - actor3.SetAnchorPoint(AnchorPoint::CENTER); - actor3.SetParentOrigin(AnchorPoint::CENTER); - Image image3 = BufferImage::New( 64, 64, Pixel::RGB888 ); - TextureSet textureSet3 = CreateTextureSet( image3 ); - Renderer renderer3 = Renderer::New( geometry, shader ); - renderer3.SetTextures( textureSet3 ); - actor3.SetPosition(0.0f,0.0f); - actor3.AddRenderer(renderer3); - actor3.SetSize(100, 100); - Stage::GetCurrent().Add(actor3); - actor3.SetDrawMode( DrawMode::OVERLAY_2D ); - application.SendNotification(); - application.Render(0); + int textureBindIndex[6]; + for( unsigned int i(0); i<6; ++i ) + { + std::stringstream params; + params << GL_TEXTURE_2D<<", "< void CheckEnumerationProperty( Renderer& renderer, Property::Index propertyIndex, T initialValue, T firstCheckEnumeration, T secondCheckEnumeration, std::string secondCheckString ) { DALI_TEST_CHECK( renderer.GetProperty( propertyIndex ) == static_cast( initialValue ) ); + DALI_TEST_CHECK( renderer.GetCurrentProperty< int >( propertyIndex ) == static_cast( initialValue ) ); renderer.SetProperty( propertyIndex, firstCheckEnumeration ); DALI_TEST_CHECK( renderer.GetProperty( propertyIndex ) == static_cast( firstCheckEnumeration ) ); + DALI_TEST_CHECK( renderer.GetCurrentProperty< int >( propertyIndex ) == static_cast( firstCheckEnumeration ) ); renderer.SetProperty( propertyIndex, secondCheckString ); DALI_TEST_CHECK( renderer.GetProperty( propertyIndex ) == static_cast( secondCheckEnumeration ) ); + DALI_TEST_CHECK( renderer.GetCurrentProperty< int >( propertyIndex ) == static_cast( secondCheckEnumeration ) ); } int UtcDaliRendererEnumProperties(void) @@ -2292,6 +2274,9 @@ int UtcDaliRendererSetRenderModeToUseStencilBuffer(void) DALI_TEST_CHECK( glStencilFunctionStack.FindMethod( methodString ) ); // Test the COLOR_STENCIL RenderMode as it also enables the stencil buffer. + // First set a mode to turn off the stencil buffer, so the enable is required. + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::COLOR ); + ResetDebugAndFlush( application, glEnableDisableStack, glStencilFunctionStack ); renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::COLOR_STENCIL ); ResetDebugAndFlush( application, glEnableDisableStack, glStencilFunctionStack ); @@ -2558,3 +2543,53 @@ int UtcDaliRendererSetStencilMask(void) END_TEST; } + +int UtcDaliRendererWrongNumberOfTextures(void) +{ + TestApplication application; + tet_infoline("Test renderer does render even if number of textures is different than active samplers in the shader"); + + //Create a TextureSet with 4 textures (One more texture in the texture set than active samplers) + //@note Shaders in the test suit have 3 active samplers. See TestGlAbstraction::GetActiveUniform() + Texture texture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, 64u, 64u ); + TextureSet textureSet = CreateTextureSet(); + textureSet.SetTexture(0, texture ); + textureSet.SetTexture(1, texture ); + textureSet.SetTexture(2, texture ); + textureSet.SetTexture(3, texture ); + Shader shader = Shader::New("VertexSource", "FragmentSource"); + Geometry geometry = CreateQuadGeometry(); + Renderer renderer = Renderer::New( geometry, shader ); + renderer.SetTextures( textureSet ); + + Actor actor= Actor::New(); + actor.AddRenderer(renderer); + actor.SetPosition(0.0f,0.0f); + actor.SetSize(100, 100); + Stage::GetCurrent().Add(actor); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& drawTrace = gl.GetDrawTrace(); + drawTrace.Reset(); + drawTrace.Enable(true); + + application.SendNotification(); + application.Render(0); + + //Test we do the drawcall when TextureSet has more textures than there are active samplers in the shader + DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION ); + + //Create a TextureSet with 1 texture (two more active samplers than texture in the texture set) + //@note Shaders in the test suit have 3 active samplers. See TestGlAbstraction::GetActiveUniform() + textureSet = CreateTextureSet(); + renderer.SetTextures( textureSet ); + textureSet.SetTexture(0, texture ); + drawTrace.Reset(); + application.SendNotification(); + application.Render(0); + + //Test we do the drawcall when TextureSet has less textures than there are active samplers in the shader. + DALI_TEST_EQUALS( drawTrace.CountMethod("DrawElements"), 1, TEST_LOCATION ); + + END_TEST; +}