X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-Shader.cpp;h=dacfd96dd0ec217c4906da390646e705e856ec1a;hb=72d3e464f0fdaaf6db6206873408e8d845f02cd4;hp=dc82a47a312540df20d48d19950efd01854d7477;hpb=b2d687369c19f14d76be52ced7f1dcc30116d2c1;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-Shader.cpp b/automated-tests/src/dali/utc-Dali-Shader.cpp index dc82a47..dacfd96 100644 --- a/automated-tests/src/dali/utc-Dali-Shader.cpp +++ b/automated-tests/src/dali/utc-Dali-Shader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 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. @@ -19,7 +19,9 @@ #include #include +#include #include +#include using namespace Dali; @@ -44,6 +46,13 @@ static const char* FragmentSource = "This is a custom fragment shader\n" "made on purpose to look nothing like a normal fragment shader inside dali\n"; + +void TestConstraintNoBlue( Vector4& current, const PropertyInputContainer& inputs ) +{ + current.b = 0.0f; +} + + } // anon namespace @@ -65,6 +74,27 @@ int UtcDaliShaderMethodNew02(void) END_TEST; } +int UtcDaliShaderAssignmentOperator(void) +{ + TestApplication application; + + Shader shader1 = Shader::New(VertexSource, FragmentSource); + + Shader shader2; + + DALI_TEST_CHECK(!(shader1 == shader2)); + + shader2 = shader1; + + DALI_TEST_CHECK(shader1 == shader2); + + shader2 = Shader::New(VertexSource, FragmentSource);; + + DALI_TEST_CHECK(!(shader1 == shader2)); + + END_TEST; +} + int UtcDaliShaderDownCast01(void) { TestApplication application; @@ -86,3 +116,262 @@ int UtcDaliShaderDownCast02(void) DALI_TEST_EQUALS( (bool)shader, false, TEST_LOCATION ); END_TEST; } + +int UtcDaliShaderConstraint01(void) +{ + TestApplication application; + + tet_infoline("Test that a non-uniform shader property can be constrained"); + + Shader shader = Shader::New(VertexSource, FragmentSource); + Geometry geometry = CreateQuadGeometry(); + Renderer renderer = Renderer::New( geometry, shader ); + + Actor actor = Actor::New(); + actor.AddRenderer(renderer); + actor.SetSize(400, 400); + Stage::GetCurrent().Add(actor); + + Vector4 initialColor = Color::WHITE; + Property::Index colorIndex = shader.RegisterProperty( "uFadeColor", initialColor ); + + application.SendNotification(); + application.Render(0); + DALI_TEST_EQUALS( shader.GetProperty(colorIndex), initialColor, TEST_LOCATION ); + + // Apply constraint + Constraint constraint = Constraint::New( shader, colorIndex, TestConstraintNoBlue ); + constraint.Apply(); + application.SendNotification(); + application.Render(0); + + // Expect no blue component in either buffer - yellow + DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector4 >( shader, colorIndex ), Color::YELLOW, TEST_LOCATION ); + application.Render(0); + DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector4 >( shader, colorIndex ), Color::YELLOW, TEST_LOCATION ); + + shader.RemoveConstraints(); + shader.SetProperty(colorIndex, Color::WHITE ); + application.SendNotification(); + application.Render(0); + DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector4 >( shader, colorIndex ), Color::WHITE, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliShaderConstraint02(void) +{ + TestApplication application; + + tet_infoline("Test that a uniform map shader property can be constrained"); + + Shader shader = Shader::New(VertexSource, FragmentSource); + Geometry geometry = CreateQuadGeometry(); + Renderer renderer = Renderer::New( geometry, shader ); + + Actor actor = Actor::New(); + actor.AddRenderer(renderer); + actor.SetSize(400, 400); + Stage::GetCurrent().Add(actor); + application.SendNotification(); + application.Render(0); + + Vector4 initialColor = Color::WHITE; + Property::Index colorIndex = shader.RegisterProperty( "uFadeColor", initialColor ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + application.SendNotification(); + application.Render(0); + + Vector4 actualValue(Vector4::ZERO); + DALI_TEST_CHECK( gl.GetUniformValue( "uFadeColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, initialColor, TEST_LOCATION ); + + // Apply constraint + Constraint constraint = Constraint::New( shader, colorIndex, TestConstraintNoBlue ); + constraint.Apply(); + application.SendNotification(); + application.Render(0); + + // Expect no blue component in either buffer - yellow + DALI_TEST_CHECK( gl.GetUniformValue( "uFadeColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, Color::YELLOW, TEST_LOCATION ); + + application.Render(0); + DALI_TEST_CHECK( gl.GetUniformValue( "uFadeColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, Color::YELLOW, TEST_LOCATION ); + + shader.RemoveConstraints(); + shader.SetProperty(colorIndex, Color::WHITE ); + application.SendNotification(); + application.Render(0); + + DALI_TEST_CHECK( gl.GetUniformValue( "uFadeColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, Color::WHITE, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliShaderAnimatedProperty01(void) +{ + TestApplication application; + + tet_infoline("Test that a non-uniform shader property can be animated"); + + Shader shader = Shader::New(VertexSource, FragmentSource); + Geometry geometry = CreateQuadGeometry(); + Renderer renderer = Renderer::New( geometry, shader ); + + Actor actor = Actor::New(); + actor.AddRenderer(renderer); + actor.SetSize(400, 400); + Stage::GetCurrent().Add(actor); + + Vector4 initialColor = Color::WHITE; + Property::Index colorIndex = shader.RegisterProperty( "uFadeColor", initialColor ); + + application.SendNotification(); + application.Render(0); + DALI_TEST_EQUALS( shader.GetProperty(colorIndex), initialColor, TEST_LOCATION ); + + Animation animation = Animation::New(1.0f); + KeyFrames keyFrames = KeyFrames::New(); + keyFrames.Add(0.0f, initialColor); + keyFrames.Add(1.0f, Color::TRANSPARENT); + animation.AnimateBetween( Property( shader, colorIndex ), keyFrames ); + animation.Play(); + + application.SendNotification(); + application.Render(500); + + DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector4 >( shader, colorIndex ), Color::WHITE * 0.5f, TEST_LOCATION ); + + application.Render(500); + + DALI_TEST_EQUALS( DevelHandle::GetCurrentProperty< Vector4 >( shader, colorIndex ), Color::TRANSPARENT, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliShaderAnimatedProperty02(void) +{ + TestApplication application; + + tet_infoline("Test that a uniform map shader property can be animated"); + + Shader shader = Shader::New(VertexSource, FragmentSource); + Geometry geometry = CreateQuadGeometry(); + Renderer renderer = Renderer::New( geometry, shader ); + + Actor actor = Actor::New(); + actor.AddRenderer(renderer); + actor.SetSize(400, 400); + Stage::GetCurrent().Add(actor); + application.SendNotification(); + application.Render(0); + + Vector4 initialColor = Color::WHITE; + Property::Index colorIndex = shader.RegisterProperty( "uFadeColor", initialColor ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + application.SendNotification(); + application.Render(0); + + Vector4 actualValue(Vector4::ZERO); + DALI_TEST_CHECK( gl.GetUniformValue( "uFadeColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, initialColor, TEST_LOCATION ); + + Animation animation = Animation::New(1.0f); + KeyFrames keyFrames = KeyFrames::New(); + keyFrames.Add(0.0f, initialColor); + keyFrames.Add(1.0f, Color::TRANSPARENT); + animation.AnimateBetween( Property( shader, colorIndex ), keyFrames ); + animation.Play(); + + application.SendNotification(); + application.Render(500); + + DALI_TEST_CHECK( gl.GetUniformValue( "uFadeColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, Color::WHITE * 0.5f, TEST_LOCATION ); + + application.Render(500); + DALI_TEST_CHECK( gl.GetUniformValue( "uFadeColor", actualValue ) ); + DALI_TEST_EQUALS( actualValue, Color::TRANSPARENT, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliShaderProgramProperty(void) +{ + TestApplication application; + + tet_infoline("Test get/set progam property"); + + Shader shader = Shader::New("", ""); + std::string hintSet = "MODIFIES_GEOMETRY"; + + Property::Map map; + map["vertex"] = VertexSource; + map["fragment"] = FragmentSource; + map["hints"] = hintSet; + + shader.SetProperty( Shader::Property::PROGRAM, Property::Value(map) ); + + Property::Value value = shader.GetProperty(Shader::Property::PROGRAM); + DALI_TEST_CHECK( value.GetType() == Property::MAP); + const Property::Map* outMap = value.GetMap(); + + std::string v = (*outMap)["vertex"].Get(); + std::string f = (*outMap)["fragment"].Get(); + std::string h = (*outMap)["hints"].Get(); + + DALI_TEST_CHECK( v == VertexSource ); + DALI_TEST_CHECK( f == FragmentSource ); + DALI_TEST_CHECK( h == hintSet ); + + value = DevelHandle::GetCurrentProperty( shader, Shader::Property::PROGRAM ); + DALI_TEST_CHECK( value.GetType() == Property::MAP); + outMap = value.GetMap(); + + v = (*outMap)["vertex"].Get(); + f = (*outMap)["fragment"].Get(); + h = (*outMap)["hints"].Get(); + + DALI_TEST_CHECK( v == VertexSource ); + DALI_TEST_CHECK( f == FragmentSource ); + DALI_TEST_CHECK( h == hintSet ); + + std::string hintGot; + + hintSet = "OUTPUT_IS_TRANSPARENT,MODIFIES_GEOMETRY"; + map["hints"] = hintSet; + shader.SetProperty( Shader::Property::PROGRAM, Property::Value(map) ); + value = shader.GetProperty(Shader::Property::PROGRAM); + hintGot = (*value.GetMap())["hints"].Get(); + DALI_TEST_CHECK( hintGot == hintSet ); + + hintSet = "OUTPUT_IS_TRANSPARENT"; + map["hints"] = hintSet; + shader.SetProperty( Shader::Property::PROGRAM, Property::Value(map) ); + value = shader.GetProperty(Shader::Property::PROGRAM); + hintGot = (*value.GetMap())["hints"].Get(); + DALI_TEST_CHECK( hintGot == hintSet ); + + hintSet = "NONE"; + map["hints"] = hintSet; + shader.SetProperty( Shader::Property::PROGRAM, Property::Value(map) ); + value = shader.GetProperty(Shader::Property::PROGRAM); + hintGot = (*value.GetMap())["hints"].Get(); + DALI_TEST_CHECK( hintGot == hintSet ); + + hintSet = ""; + map["hints"] = hintSet; + shader.SetProperty( Shader::Property::PROGRAM, Property::Value(map) ); + value = shader.GetProperty(Shader::Property::PROGRAM); + hintGot = (*value.GetMap())["hints"].Get(); + DALI_TEST_CHECK( hintGot == "NONE" ); + + END_TEST; +}