Changed Toolkit shader effects to be a static function returning a 53/39553/13
authorFerran Sole <ferran.sole@samsung.com>
Mon, 18 May 2015 14:31:11 +0000 (15:31 +0100)
committerFerran Sole <ferran.sole@samsung.com>
Mon, 1 Jun 2015 09:27:37 +0000 (10:27 +0100)
Dali::ShaderEffect instead of inheriting directly from ShaderEffect

Change-Id: Ie01b1ea7b9cc8caa72a14b27e08ebfc887551635

100 files changed:
automated-tests/src/dali-toolkit/CMakeLists.txt
automated-tests/src/dali-toolkit/utc-Dali-BendyEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-BlindEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-CarouselEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-DisplacementEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-DissolveEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-DistanceFieldEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-IrisEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-MaskEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-NinePatchMaskEffect.cpp
automated-tests/src/dali-toolkit/utc-Dali-OverlayEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-PageTurnEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-PageTurnView.cpp
automated-tests/src/dali-toolkit/utc-Dali-Ripple2DEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-RippleEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-ShaderEffects.cpp [new file with mode: 0644]
automated-tests/src/dali-toolkit/utc-Dali-ShearEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-SoftButtonEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-SpotEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-SquareDissolveEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-SuperBlurView.cpp
automated-tests/src/dali-toolkit/utc-Dali-SwirlEffect.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-WaterEffect.cpp [deleted file]
build/tizen/dali-toolkit/Makefile.am
dali-toolkit/dali-toolkit.h
dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp
dali-toolkit/internal/controls/buttons/check-box-button-impl.h
dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h [new file with mode: 0644]
dali-toolkit/internal/controls/page-turn-view/page-turn-effect.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h [new file with mode: 0644]
dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.cpp
dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp
dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.h
dali-toolkit/internal/file.list
dali-toolkit/internal/shader-effects/page-turn-effect-impl.cpp [deleted file]
dali-toolkit/internal/shader-effects/page-turn-effect-impl.h [deleted file]
dali-toolkit/internal/shader-effects/water-effect-impl.cpp [deleted file]
dali-toolkit/internal/shader-effects/water-effect-impl.h [deleted file]
dali-toolkit/public-api/file.list
dali-toolkit/public-api/shader-effects/alpha-discard-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/alpha-discard-effect.h
dali-toolkit/public-api/shader-effects/bendy-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/bendy-effect.h
dali-toolkit/public-api/shader-effects/blind-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/blind-effect.h
dali-toolkit/public-api/shader-effects/bouncing-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/bouncing-effect.h
dali-toolkit/public-api/shader-effects/bubble-effect/bubble-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/bubble-effect/bubble-effect.h [deleted file]
dali-toolkit/public-api/shader-effects/bubble-effect/color-adjuster.cpp [deleted file]
dali-toolkit/public-api/shader-effects/bubble-effect/color-adjuster.h [deleted file]
dali-toolkit/public-api/shader-effects/carousel-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/carousel-effect.h
dali-toolkit/public-api/shader-effects/displacement-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/displacement-effect.h
dali-toolkit/public-api/shader-effects/dissolve-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/dissolve-effect.h
dali-toolkit/public-api/shader-effects/dissolve-local-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/dissolve-local-effect.h
dali-toolkit/public-api/shader-effects/distance-field-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/distance-field-effect.h
dali-toolkit/public-api/shader-effects/image-region-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/image-region-effect.h
dali-toolkit/public-api/shader-effects/iris-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/iris-effect.h
dali-toolkit/public-api/shader-effects/mask-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/mask-effect.h
dali-toolkit/public-api/shader-effects/mirror-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/mirror-effect.h
dali-toolkit/public-api/shader-effects/motion-blur-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/motion-blur-effect.h
dali-toolkit/public-api/shader-effects/motion-stretch-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/motion-stretch-effect.h
dali-toolkit/public-api/shader-effects/nine-patch-mask-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/nine-patch-mask-effect.h
dali-toolkit/public-api/shader-effects/overlay-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/overlay-effect.h
dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.h [deleted file]
dali-toolkit/public-api/shader-effects/page-turn-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/page-turn-effect.h [deleted file]
dali-toolkit/public-api/shader-effects/quadratic-bezier.cpp [deleted file]
dali-toolkit/public-api/shader-effects/quadratic-bezier.h
dali-toolkit/public-api/shader-effects/ripple-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/ripple-effect.h
dali-toolkit/public-api/shader-effects/ripple2d-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/ripple2d-effect.h
dali-toolkit/public-api/shader-effects/shear-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/shear-effect.h
dali-toolkit/public-api/shader-effects/soft-button-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/soft-button-effect.h
dali-toolkit/public-api/shader-effects/spot-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/spot-effect.h
dali-toolkit/public-api/shader-effects/square-dissolve-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/square-dissolve-effect.h
dali-toolkit/public-api/shader-effects/swirl-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/swirl-effect.h
dali-toolkit/public-api/shader-effects/water-effect.cpp [deleted file]
dali-toolkit/public-api/shader-effects/water-effect.h [deleted file]
docs/content/programming-guide/shader-intro.h

index 2b30d02..20932d6 100644 (file)
@@ -8,56 +8,39 @@ SET(CAPI_LIB "dali-toolkit")
 # List of test case sources (Only these get parsed for test cases)
 SET(TC_SOURCES
    utc-Dali-Alignment.cpp
-   utc-Dali-BendyEffect.cpp
-   utc-Dali-BlindEffect.cpp
    utc-Dali-BloomView.cpp
    utc-Dali-BubbleEmitter.cpp
    utc-Dali-Builder.cpp
-   utc-Dali-CarouselEffect.cpp
    utc-Dali-CheckBoxButton.cpp
    utc-Dali-CubeTransitionEffect.cpp
-   utc-Dali-DisplacementEffect.cpp
-   utc-Dali-DistanceFieldEffect.cpp
    utc-Dali-GaussianBlurView.cpp
    utc-Dali-JsonParser.cpp
    utc-Dali-KeyInputFocusManager.cpp
-   utc-Dali-OverlayEffect.cpp
-   utc-Dali-PageTurnEffect.cpp
    utc-Dali-PageTurnView.cpp
    utc-Dali-ScrollBar.cpp
    utc-Dali-ScrollView.cpp
+   utc-Dali-ShaderEffects.cpp
    utc-Dali-ShadowView.cpp
-   utc-Dali-ShearEffect.cpp
    utc-Dali-Slider.cpp
-   utc-Dali-SoftButtonEffect.cpp
-   utc-Dali-SpotEffect.cpp
-   utc-Dali-SquareDissolveEffect.cpp
    utc-Dali-TableView.cpp
    utc-Dali-TextField.cpp
    utc-Dali-TextLabel.cpp
    utc-Dali-ToolBar.cpp
-   utc-Dali-WaterEffect.cpp
    utc-Dali-Button.cpp
    utc-Dali-Control.cpp
    utc-Dali-ControlImpl.cpp
    utc-Dali-DefaultControls.cpp
-   utc-Dali-DissolveEffect.cpp
    utc-Dali-FocusManager.cpp
-   utc-Dali-IrisEffect.cpp
    utc-Dali-ItemLayout.cpp
    utc-Dali-ItemView.cpp
    utc-Dali-KeyboardFocusManager.cpp
-   utc-Dali-MaskEffect.cpp
    utc-Dali-NinePatchMaskEffect.cpp
    utc-Dali-Popup.cpp
    utc-Dali-PushButton.cpp
    utc-Dali-RadioButton.cpp
-   utc-Dali-Ripple2DEffect.cpp
-   utc-Dali-RippleEffect.cpp
    utc-Dali-ScrollViewEffect.cpp
    utc-Dali-StyleManager.cpp
    utc-Dali-SuperBlurView.cpp
-   utc-Dali-SwirlEffect.cpp
 )
 
 # Append list of test harness files (Won't get parsed for test cases)
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-BendyEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-BendyEffect.cpp
deleted file mode 100644 (file)
index 426afda..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-
-using namespace Dali;
-
-
-void bendy_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void bendy_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliBendyUninitializedEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::BendyEffect effect;
-
-  try
-  {
-    // New() must be called to create a BendyEffect or it wont be valid.
-    effect.SetRadius( 2.0f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliBendyPropertyNamesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::BendyEffect effect = Toolkit::BendyEffect::New();
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetCenterPropertyName(), "uCenter", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetDirectionPropertyName(), "uDirection", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetRadiusPropertyName(), "uRadius", TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliBendyDefaultValuesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::BendyEffect effect = Toolkit::BendyEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  Vector2 topLeft( Stage::GetCurrent().GetSize() * 0.5f );
-  topLeft.y = -topLeft.y;
-
-  // Gets converted to opengl view space
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetCenterPropertyName().c_str(),
-          topLeft ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetDirectionPropertyName().c_str(),
-          Vector2(0.0f, 0.0f) ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetRadiusPropertyName().c_str(),
-          0.0f ) );
-  END_TEST;
-}
-
-int UtcDaliBendyCustomValuesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::BendyEffect effect = Toolkit::BendyEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  Vector2 direction(1.0f, 1.0f);
-  effect.SetCenter( Vector2(480.0f, 800.0f) );
-  effect.SetDirection( direction );
-  effect.SetRadius( 2.0f );
-
-  actor.SetShaderEffect(effect);
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render();
-
-  Vector2 bottomRight( Stage::GetCurrent().GetSize() * 0.5f );
-  bottomRight.x = -bottomRight.x;
-
-  // Gets converted to opengl viewport coordinates
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetCenterPropertyName().c_str(),
-          bottomRight ) );
-
-  direction.Normalize();
-  direction.x *= -1.0f;
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetDirectionPropertyName().c_str(),
-          direction ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetRadiusPropertyName().c_str(),
-          2.0f ) );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-BlindEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-BlindEffect.cpp
deleted file mode 100644 (file)
index d9d5be4..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-
-using namespace Dali;
-
-
-void blind_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void blind_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliBlindEffectUninitialized(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::BlindEffect effect;
-
-  try
-  {
-    // New() must be called to create a BlindEffect or it wont be valid.
-    effect.SetStep( 2.0f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliBlindEffectPropertyNames(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::BlindEffect effect = Toolkit::BlindEffect::New();
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetStepPropertyName(), "uStep", TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliBlindEffectDefaultValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::BlindEffect effect = Toolkit::BlindEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  // Gets converted to opengl viewport coordinates
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetStepPropertyName().c_str(),
-          0.0f ) );
-  END_TEST;
-}
-
-int UtcDaliBlindEffectCustomValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::BlindEffect effect = Toolkit::BlindEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  effect.SetStep( 2.0f );
-
-  actor.SetShaderEffect(effect);
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render();
-
-  // Gets converted to opengl viewport coordinates
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetStepPropertyName().c_str(),
-          2.0f ) );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-CarouselEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-CarouselEffect.cpp
deleted file mode 100644 (file)
index 8d6367a..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-
-
-void carousel_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void carousel_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliCarouselEffectUninitialized(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::CarouselEffect effect;
-
-  try
-  {
-    // New() must be called to create a CarouselEffect or it wont be valid.
-    effect.SetRadius( 100.0f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliCarouselEffectPropertyNames(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::CarouselEffect effect = Toolkit::CarouselEffect::New();
-
-  // Check the names, these names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetRadiusPropertyName(), "uRadius", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetCenterPropertyName(), "uCenter", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetAnglePerUnitPropertyName(), "uAnglePerUnit", TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliCarouselEffectDefaultValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::CarouselEffect effect = Toolkit::CarouselEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  const float radiusValue(0.0f);
-  const Vector2 centerValue(0.0f, 0.0f);
-  const Vector2 anglePerUnitValue(0.0f, 0.0f);
-
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetRadiusPropertyName().c_str(), radiusValue ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetCenterPropertyName().c_str(), centerValue ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetAnglePerUnitPropertyName().c_str(), anglePerUnitValue ) );
-  END_TEST;
-}
-
-int UtcDaliCarouselEffectCustomValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::CarouselEffect effect = Toolkit::CarouselEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  const float radiusValue(100.0f);
-  const Vector2 centerValue(150.0f, 200.0f);
-  const Vector2 anglePerUnitValue(0.1f, 0.25f);
-
-  effect.SetRadius( radiusValue );
-  effect.SetCenter( centerValue );
-  effect.SetAnglePerUnit( anglePerUnitValue );
-
-  actor.SetShaderEffect(effect);
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render();
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetRadiusPropertyName().c_str(), radiusValue ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetCenterPropertyName().c_str(), centerValue ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetAnglePerUnitPropertyName().c_str(), anglePerUnitValue ) );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-DisplacementEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-DisplacementEffect.cpp
deleted file mode 100644 (file)
index 522a6fe..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-using namespace Dali::Toolkit;
-
-namespace
-{
-const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg";
-} // namespace
-
-
-void utc_displacement_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void utc_displacement_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-// Negative test case for a method
-int UtcDaliDisplacementEffectUninitialized(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline("UtcDaliDisplacementEffectUninitialized");
-
-  Toolkit::DisplacementEffect effect;
-
-  try
-  {
-    // New() must be called to create a GaussianBlurView or it wont be valid.
-    effect.SetStateProperty( 1.0f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-// Positive test case for a method
-int UtcDaliDisplacementEffectNew(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline("UtcDaliDisplacementEffectNew");
-
-  Toolkit::DisplacementEffect effect = Toolkit::DisplacementEffect::New(Toolkit::DisplacementEffect::DISPLACED);
-  DALI_TEST_CHECK( effect );
-
-  Toolkit::DisplacementEffect effect2 = Toolkit::DisplacementEffect::New(Toolkit::DisplacementEffect::FIXED);
-  DALI_TEST_CHECK( effect2 );
-  END_TEST;
-}
-
-// Positive test case for a method
-int UtcDaliDisplacementEffectPropertyNames(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline("UtcDaliDisplacementEffectPropertyNames");
-
-  Toolkit::DisplacementEffect effect = Toolkit::DisplacementEffect::New(Toolkit::DisplacementEffect::DISPLACED);
-  DALI_TEST_CHECK( effect );
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetLightDirectionPropertyName(), "uLightDirection", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetAmbientLightColorPropertyName(), "uAmbientLightColor", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetDiffuseLightColorPropertyName(), "uDiffuseLightColor", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetLightingMultiplierPropertyName(), "uLightMultiplier", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetStatePropertyName(), "uState", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetHeightScalePropertyName(), "uHightScale", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetFixedNormalPropertyName(), "uFixedNormal", TEST_LOCATION );
-  END_TEST;
-}
-
-// Positive test case for a method
-int UtcDaliDisplacementEffectTestSetProperty(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline("UtcDaliDisplacementEffectTestSetProperty");
-
-  Toolkit::DisplacementEffect effect = Toolkit::DisplacementEffect::New(Toolkit::DisplacementEffect::DISPLACED);
-  DALI_TEST_CHECK( effect );
-
-  ImageActor actor = ImageActor::New( ResourceImage::New(TEST_IMAGE_FILE_NAME) );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  Toolkit::DisplacementEffect effect2 = Toolkit::DisplacementEffect::New(Toolkit::DisplacementEffect::FIXED);
-  DALI_TEST_CHECK( effect );
-
-  ImageActor actor2 = ImageActor::New( ResourceImage::New(TEST_IMAGE_FILE_NAME) );
-  actor2.SetSize( 100.0f, 100.0f );
-  actor2.SetShaderEffect( effect2 );
-  Stage::GetCurrent().Add( actor2 );
-
-  Vector3 testVector3 = Vector3(45.0f, 55.0f, 65.0f);
-  float testFloat = 0.623f;
-  effect.SetLightDirection(testVector3);
-  effect.SetAmbientLightColorProperty(testVector3);
-  effect.SetDiffuseLightColorProperty(testVector3);
-  effect.SetStateProperty(testFloat);
-  effect.SetLightingMultiplierProperty(testFloat);
-  effect.SetHeightScaleProperty(testFloat);
-
-  effect2.SetFixedNormalProperty(testVector3);
-
-  application.SendNotification();
-  application.Render(0);
-  application.SendNotification();
-  application.Render();
-
-  DALI_TEST_EQUALS( effect.GetProperty( effect.GetPropertyIndex( effect.GetLightDirectionPropertyName() ) ).Get<Vector3>(), testVector3, TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetProperty( effect.GetPropertyIndex( effect.GetAmbientLightColorPropertyName() ) ).Get<Vector3>(), testVector3, TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetProperty( effect.GetPropertyIndex( effect.GetDiffuseLightColorPropertyName() ) ).Get<Vector3>(), testVector3, TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetProperty( effect.GetPropertyIndex( effect.GetStatePropertyName().c_str() ) ).Get<float>(), testFloat, TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetProperty( effect.GetPropertyIndex( effect.GetLightingMultiplierPropertyName().c_str() ) ).Get<float>(), testFloat, TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetProperty( effect.GetPropertyIndex( effect.GetHeightScalePropertyName().c_str() ) ).Get<float>(), testFloat, TEST_LOCATION );
-
-  Vector3 normalizedVector3(testVector3);
-  normalizedVector3.Normalize();
-  DALI_TEST_EQUALS( effect2.GetProperty( effect2.GetPropertyIndex( effect2.GetFixedNormalPropertyName() ) ).Get<Vector3>(), normalizedVector3, TEST_LOCATION );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-DissolveEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-DissolveEffect.cpp
deleted file mode 100644 (file)
index 66a3664..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-
-// Need to override adaptor classes for toolkit test harness, so include
-// test harness headers before dali headers.
-#include <dali-toolkit-test-suite-utils.h>
-
-#include <dali.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-
-using namespace Dali;
-
-void utc_dali_toolkit_dissolve_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void utc_dali_toolkit_dissolve_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliDissolveUninitializedEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::DissolveEffect effect;
-
-  try
-  {
-    // New() must be called to create a DissolveEffect or it wont be valid.
-    effect.SetDistortion( 2.0f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliDissolvePropertyNamesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::DissolveEffect effectHighPrecision = Toolkit::DissolveEffect::New();
-  Toolkit::DissolveEffect effectMediumPrecision = Toolkit::DissolveEffect::New( false );
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effectHighPrecision.GetDistortionPropertyName(), "uPercentage", TEST_LOCATION );
-  DALI_TEST_EQUALS( effectMediumPrecision.GetDistortionPropertyName(), "uPercentage", TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliDissolveDefaultValuesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::DissolveEffect effect = Toolkit::DissolveEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  effect.SetCentralLine( Vector2(0.0,0.5), Vector2(1.0, -0.1) );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  Property::Index index = effect.GetPropertyIndex( effect.GetDistortionPropertyName());
-  float value;
-  (effect.GetProperty(index)).Get( value );
-  DALI_TEST_EQUALS(value, 0.f, TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliDissolveCustomValuesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::DissolveEffect effect = Toolkit::DissolveEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  effect.SetDistortion( 0.5f );
-
-  actor.SetShaderEffect(effect);
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render();
-
-  Property::Index index = effect.GetPropertyIndex( effect.GetDistortionPropertyName());
-  float value;
-  (effect.GetProperty(index)).Get( value );
-  DALI_TEST_EQUALS(value, 0.5f, TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliSetEffectImageEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::DissolveEffect effect = Toolkit::DissolveEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  Image effectImage = CreateBufferImage();
-  effect.SetEffectImage(effectImage);
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  Property::Index index = effect.GetPropertyIndex( effect.GetDistortionPropertyName());
-  float value;
-  (effect.GetProperty(index)).Get( value );
-  DALI_TEST_EQUALS(value, 0.f, TEST_LOCATION );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-DistanceFieldEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-DistanceFieldEffect.cpp
deleted file mode 100644 (file)
index 570793c..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-
-void utc_distance_field_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void utc_distance_field_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-namespace
-{
-// Create buffer image
-BufferImage CreateDistanceField()
-{
-  BufferImage image = BufferImage::New(256, 256, Pixel::RGBA8888);
-  BufferImage distanceFieldImage = BufferImage::New(256, 256, Pixel::L8);
-
-  PixelBuffer* pixbuf = image.GetBuffer();
-
-  for(size_t i=0; i<16; i++)
-  {
-    pixbuf[i*4+0] = 0xFF;
-    pixbuf[i*4+1] = 0xFF;
-    pixbuf[i*4+2] = 0xFF;
-    pixbuf[i*4+3] = 0xFF;
-  }
-
-  // GenerateDistanceFieldMap(distanceFieldImage.GetBuffer(), Size(256, 256), pixbuf, Size(256, 256), 8, 4);
-
-  return distanceFieldImage;
-}
-}
-
-int UtcDaliDistanceFieldEffectUninitialized(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::DistanceFieldEffect effect;
-
-  try
-  {
-    // New() must be called to create a DistanceField effect or it wont be valid.
-    effect.SetShadow( true );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliDistanceFieldEffectPropertyNames(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::DistanceFieldEffect effect = Toolkit::DistanceFieldEffect::New();
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetColorPropertyName(), "uColor", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetSmoothingPropertyName(), "uSmoothing", TEST_LOCATION );
-
-  // control flags
-  DALI_TEST_EQUALS( effect.GetOutlineEnablePropertyName(), "uDoOutline", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetGlowEnablePropertyName(), "uDoGlow", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetShadowEnablePropertyName(), "uDoShadow", TEST_LOCATION );
-
-  DALI_TEST_EQUALS( effect.GetGlowBoundaryPropertyName(), "uGlowBoundary", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetGlowColorPropertyName(), "uGlowColor", TEST_LOCATION );
-
-  DALI_TEST_EQUALS( effect.GetOutlineColorPropertyName(), "uOutlineColor", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetOutlineSizePropertyName(), "uOutlineParams", TEST_LOCATION );
-
-  DALI_TEST_EQUALS( effect.GetShadowColorPropertyName(), "uShadowColor", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetShadowOffsetPropertyName(), "uShadowOffset", TEST_LOCATION );
-
-  END_TEST;
-}
-
-int UtcDaliDistanceFieldEffectDefaultValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::DistanceFieldEffect effect = Toolkit::DistanceFieldEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateDistanceField();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetOutlineEnablePropertyName().c_str(),
-          0.0f ));
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetGlowEnablePropertyName().c_str(),
-          0.0f ));
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetShadowEnablePropertyName().c_str(),
-          0.0f ));
-  END_TEST;
-}
-
-int UtcDaliDistanceFieldEffectCustomValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::DistanceFieldEffect effect = Toolkit::DistanceFieldEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateDistanceField();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  effect.SetShadowColor(Color::YELLOW);
-  effect.SetGlowColor(Color::BLUE);
-
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  // Gets converted to opengl viewport coordinates
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetShadowColorPropertyName().c_str(),
-          Color::YELLOW ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetGlowColorPropertyName().c_str(),
-          Color::BLUE ) );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-IrisEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-IrisEffect.cpp
deleted file mode 100644 (file)
index 002601d..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-
-// Need to override adaptor classes for toolkit test harness, so include
-// test harness headers before dali headers.
-#include <dali-toolkit-test-suite-utils.h>
-
-#include <dali.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-
-void utc_dali_toolkit_iris_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void utc_dali_toolkit_iris_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliIrisEffectUninitialized(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::IrisEffect effect;
-
-  try
-  {
-    // New() must be called to create a IrisEffect or it wont be valid.
-    effect.SetRadius( 2.0f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliIrisEffectPropertyNames(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::IrisEffect effect = Toolkit::IrisEffect::New();
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetRadiusPropertyName(), "uRadius", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetCenterPropertyName(), "uCenter", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetBlendFactorPropertyName(), "uBlendFactor", TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliIrisEffectDefaultValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::IrisEffect effect = Toolkit::IrisEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  const float radiusValue(0.0f);
-  const Vector2 centerValue(0.5f, 0.5f);
-  const float blendFactorValue(100.0f);
-
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetRadiusPropertyName().c_str(), radiusValue ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetCenterPropertyName().c_str(), centerValue ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetBlendFactorPropertyName().c_str(), blendFactorValue ) );
-  END_TEST;
-}
-
-int UtcDaliIrisEffectCustomValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::IrisEffect effect = Toolkit::IrisEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  const float radiusValue(23.0f);
-  const Vector2 centerValue(0.2f, 0.7f);
-  const float blendFactorValue(10.0f);
-
-  effect.SetRadius( radiusValue );
-  effect.SetCenter( centerValue );
-  effect.SetBlendFactor( blendFactorValue );
-
-  actor.SetShaderEffect(effect);
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render();
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetRadiusPropertyName().c_str(), radiusValue ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetCenterPropertyName().c_str(), centerValue ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetBlendFactorPropertyName().c_str(), blendFactorValue ) );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-MaskEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-MaskEffect.cpp
deleted file mode 100644 (file)
index 49c346e..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-
-// Need to override adaptor classes for toolkit test harness, so include
-// test harness headers before dali headers.
-#include <dali-toolkit-test-suite-utils.h>
-
-#include <dali.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-
-void utc_dali_toolkit_mask_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void utc_dali_toolkit_mask_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliMaskEffectCreateEffect(void)
-{
-  ToolkitTestApplication application;
-
-  BufferImage image = CreateBufferImage();
-
-  ShaderEffect effect = Toolkit::MaskEffect::New( image );
-  DALI_TEST_CHECK( effect );
-  END_TEST;
-}
-
-int UtcDaliMaskEffectDestructor(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::MaskEffect* effect = new Toolkit::MaskEffect();
-  delete effect;
-
-  DALI_TEST_CHECK( true );
-  END_TEST;
-}
index dccba07..bec87ab 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <dali.h>
 #include <dali-toolkit/dali-toolkit.h>
+#include <dali-toolkit/public-api/shader-effects/nine-patch-mask-effect.h>
 
 using namespace Dali;
 
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-OverlayEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-OverlayEffect.cpp
deleted file mode 100644 (file)
index b5511ed..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-
-using namespace Dali;
-using namespace Dali::Toolkit;
-
-void overlay_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void overlay_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliOverlayConstructor(void)
-{
-  ToolkitTestApplication application;
-
-  BufferImage image = CreateBufferImage();
-
-  Toolkit::OverlayEffect effect = Toolkit::OverlayEffect::New( image );
-  DALI_TEST_CHECK( effect );
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  END_TEST;
-}
-
-int UtcDaliOverlayUninitializedEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::OverlayEffect effect;
-
-  try
-  {
-    BufferImage image = CreateBufferImage();
-
-    // New() must be called to create a OverlayEffect or it wont be valid.
-    effect.SetEffectImage( image );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-PageTurnEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-PageTurnEffect.cpp
deleted file mode 100644 (file)
index b1d5961..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-
-using namespace Dali;
-
-void page_turn_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void page_turn_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliPageTurnEffectApply(void)
-{
-  ToolkitTestApplication application;
-
-  BufferImage image = CreateBufferImage();
-
-  Toolkit::PageTurnEffect pageTurnEffect = Toolkit::PageTurnEffect::New();
-  Toolkit::PageTurnEffect pageTurnEffect2 = Toolkit::PageTurnEffect::New(false);
-
-  ImageActor pageActor = ImageActor::New( image );
-  ImageActor backPageActor = ImageActor::New( image );
-  pageActor.Add( backPageActor );
-
-  pageTurnEffect.SetIsTurningBack( true );
-  pageTurnEffect.SetShadowWidth( 0.0f );
-  pageTurnEffect.SetSpineShadowParameter( Vector2( 0.0f, 0.0f ) );
-
-  pageActor.SetShaderEffect( pageTurnEffect );
-  Stage::GetCurrent().Add( pageActor );
-
-  application.SendNotification();
-  application.Render();
-
-  const Vector2 pageSize( 0.0f, 0.0f );
-  pageTurnEffect.SetPageSize( pageSize );
-
-  const Vector2 originalCenter( 0.0f, 0.0f );
-  pageTurnEffect.SetOriginalCenter( originalCenter );
-
-  const Vector2 currentCenter( 0.0f, 0.0f );
-  pageTurnEffect.SetCurrentCenter( currentCenter );
-
-  application.SendNotification();
-  application.Render();
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-  DALI_TEST_CHECK( gl.CheckUniformValue( pageTurnEffect.GetPageSizePropertyName().c_str(), pageSize ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( pageTurnEffect.GetOriginalCenterPropertyName().c_str(), originalCenter ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( pageTurnEffect.GetCurrentCenterPropertyName().c_str(), currentCenter ) );
-  END_TEST;
-}
-
-int UtcDaliPageTurnEffectConstruct(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::PageTurnEffect* effect = new Toolkit::PageTurnEffect();
-  delete effect;
-
-  DALI_TEST_CHECK( true );
-  END_TEST;
-}
index 5fc9c90..c905b71 100644 (file)
@@ -371,7 +371,6 @@ int UtcDaliPageTurnViewEnterLeaveEditMode(void)
   factory.EnableOffscreenRendering( );
 
   PageTurnView pageTurnView = PageTurnLandscapeView::New( factory, PAGE_SIZE );
-  pageTurnView.SetRelayoutEnabled( false );
   pageTurnView.SetPositionInheritanceMode( USE_PARENT_POSITION );
   Stage::GetCurrent().Add( pageTurnView );
 
@@ -423,7 +422,6 @@ int UtcDaliPageTurnViewGetHitActor(void)
   factory.EnableOffscreenRendering( );
 
   PageTurnView pageTurnView = PageTurnPortraitView::New( factory, PAGE_SIZE );
-  pageTurnView.SetRelayoutEnabled( false );
   pageTurnView.SetParentOrigin( ParentOrigin::TOP_LEFT );
   pageTurnView.SetAnchorPoint( AnchorPoint::TOP_LEFT );
   Stage::GetCurrent().Add( pageTurnView );
@@ -460,7 +458,6 @@ int UtcDaliPageTurnViewRefresh(void)
   TestPageFactory factory(application);
   factory.EnableOffscreenRendering( );
   PageTurnView pageTurnView = PageTurnPortraitView::New( factory, PAGE_SIZE );
-  pageTurnView.SetRelayoutEnabled( false );
   pageTurnView.SetParentOrigin( ParentOrigin::TOP_LEFT );
   pageTurnView.SetAnchorPoint( AnchorPoint::TOP_LEFT );
   Stage::GetCurrent().Add( pageTurnView );
@@ -501,7 +498,6 @@ int UtcDaliPageTurnViewSignals(void)
   TestPageFactory factory(application);
   Vector2 size = Stage::GetCurrent().GetSize();
   PageTurnView portraitView = PageTurnPortraitView::New( factory, size );
-  portraitView.SetRelayoutEnabled( false );
   portraitView.SetPositionInheritanceMode( USE_PARENT_POSITION );
   Stage::GetCurrent().Add( portraitView );
 
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Ripple2DEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Ripple2DEffect.cpp
deleted file mode 100644 (file)
index 1fac593..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-
-// Need to override adaptor classes for toolkit test harness, so include
-// test harness headers before dali headers.
-#include <dali-toolkit-test-suite-utils.h>
-
-#include <dali.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-
-
-void utc_dali_toolkit_ripple_2d_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void utc_dali_toolkit_ripple_2d_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-int UtcDaliRipple2DEffectUninitialized(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::Ripple2DEffect effect;
-
-  try
-  {
-    // New() must be called to create a Ripple2DEffect or it wont be valid.
-    effect.SetAmplitude( 0.5f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliRipple2DEffectPropertyNames(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::Ripple2DEffect effect = Toolkit::Ripple2DEffect::New();
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetAmplitudePropertyName(), "uAmplitude", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetTimePropertyName(), "uTime", TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliRipple2DEffectDefaultValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::Ripple2DEffect effect = Toolkit::Ripple2DEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetAmplitudePropertyName().c_str(),
-          0.0f ) );
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetTimePropertyName().c_str(),
-          0.0f ) );
-  END_TEST;
-}
-
-int UtcDaliRipple2DEffectCustomValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::Ripple2DEffect effect = Toolkit::Ripple2DEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-
-  effect.SetAmplitude( 5.0f );
-  effect.SetTime( 2.0f );
-
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetAmplitudePropertyName().c_str(),
-          5.0f ) );
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetTimePropertyName().c_str(),
-          2.0f ) );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-RippleEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-RippleEffect.cpp
deleted file mode 100644 (file)
index 71db67d..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-
-// Need to override adaptor classes for toolkit test harness, so include
-// test harness headers before dali headers.
-#include <dali-toolkit-test-suite-utils.h>
-
-#include <dali.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-
-void utc_dali_toolkit_ripple_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void utc_dali_toolkit_ripple_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliRippleUninitializedEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::RippleEffect effect;
-
-  try
-  {
-    // New() must be called to create a RippleEffect or it wont be valid.
-    effect.SetAmplitude( 0.5f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliRipplePropertyNamesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::RippleEffect effect = Toolkit::RippleEffect::New();
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetAmplitudePropertyName(), "uAmplitude", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetCenterPropertyName(), "uCenter", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetTimePropertyName(), "uTime", TEST_LOCATION );
-
-  END_TEST;
-}
-
-int UtcDaliRippleDefaultValuesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::RippleEffect effect = Toolkit::RippleEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetAmplitudePropertyName().c_str(),
-          0.0f ) );
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetCenterPropertyName().c_str(),
-          Vector2( 0.0f, 0.0f ) ) );
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetTimePropertyName().c_str(),
-          0.0f ) );
-  END_TEST;
-}
-
-int UtcDaliRippleCustomValuesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::RippleEffect effect = Toolkit::RippleEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  effect.SetAmplitude( 0.5f );
-  effect.SetCenter( Vector2( 10.0f, 10.0f ) );
-  effect.SetTime( 2.0f );
-
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetAmplitudePropertyName().c_str(),
-          0.5f ) );
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetCenterPropertyName().c_str(),
-          Vector2( 10.0f, 10.0f ) ) );
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetTimePropertyName().c_str(),
-          2.0f ) );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ShaderEffects.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ShaderEffects.cpp
new file mode 100644 (file)
index 0000000..62f368d
--- /dev/null
@@ -0,0 +1,335 @@
+/*
+ * Copyright (c) 2015 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <iostream>
+#include <stdlib.h>
+#include <dali-toolkit-test-suite-utils.h>
+#include <dali-toolkit/dali-toolkit.h>
+
+using namespace Dali;
+
+int UtcDaliCreateAlphaDiscardEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateAlphaDiscardEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateBendyEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateBendyEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateBlindEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateBlindEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateBouncingEffect(void)
+{
+  ToolkitTestApplication application;
+
+  Vector4 color(1.0f,1.0f,1.0f,1.0f);
+
+  ShaderEffect effect = Toolkit::CreateBouncingEffect(color);
+  DALI_TEST_CHECK( effect );
+
+  Property::Value value = effect.GetProperty( effect.GetPropertyIndex("uAssignedColor"));
+  DALI_TEST_EQUALS( value.Get<Vector4>(), color, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliCreateCarouselEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateCarouselEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateDisplacementEffectDisplaced(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateDisplacementEffect(Toolkit::DISPLACEMENT_EFFECT_DISPLACED);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateDisplacementEffectFixed(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateDisplacementEffect(Toolkit::DISPLACEMENT_EFFECT_FIXED);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateDissolveEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateDissolveEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateDissolveEffectMediumPrecision(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateDissolveEffect(false);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateDissolveLocalEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateDissolveLocalEffect(0);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateDistanceFieldEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateDistanceFieldEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateImageRegionEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateImageRegionEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateIrisEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateIrisEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateMaskEffect(void)
+{
+  ToolkitTestApplication application;
+
+  BufferImage image = CreateBufferImage();
+  ShaderEffect effect = Toolkit::CreateMaskEffect(image);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateMirrorEffect(void)
+{
+  ToolkitTestApplication application;
+
+  BufferImage image = CreateBufferImage();
+  ShaderEffect effect = Toolkit::CreateMirrorEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateMotionBlurEffect(void)
+{
+  ToolkitTestApplication application;
+
+  unsigned int sampleCount(4);
+  ShaderEffect effect = Toolkit::CreateMotionBlurEffect(sampleCount);
+  DALI_TEST_CHECK( effect );
+
+  Property::Value value = effect.GetProperty( effect.GetPropertyIndex("uNumSamples"));
+  DALI_TEST_EQUALS( value.Get<float>(), (float)sampleCount, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliCreateMotionStretchEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateMotionStretchEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateOverlayEffect(void)
+{
+  ToolkitTestApplication application;
+
+  BufferImage image = CreateBufferImage();
+  ShaderEffect effect = Toolkit::CreateOverlayEffect(image);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateQuadraticBezier(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateQuadraticBezier(3,false);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateQuadraticBezierFilled(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateQuadraticBezier(3,true);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateRipple2DEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateRipple2DEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateRippleEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateRippleEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateShearEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateShearEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliSoftButtonEffectElliptical(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateSoftButtonEffect(Toolkit::SOFT_BUTTON_ELLIPTICAL);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliSoftButtonEffectRectangular(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateSoftButtonEffect(Toolkit::SOFT_BUTTON_RECTANGULAR);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliSoftButtonEffectFixed(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateSoftButtonEffect(Toolkit::SOFT_BUTTON_FIXED);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateSpotEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateSpotEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliCreateSquareDissolveEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateSquareDissolveEffect();
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliSwirlEffect(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateSwirlEffect(false);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
+
+int UtcDaliSwirlEffectWrap(void)
+{
+  ToolkitTestApplication application;
+
+  ShaderEffect effect = Toolkit::CreateSwirlEffect(true);
+  DALI_TEST_CHECK( effect );
+
+  END_TEST;
+}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ShearEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ShearEffect.cpp
deleted file mode 100644 (file)
index fc2d922..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-
-void shear_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void shear_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-int UtcDaliShearEffectUninitialized(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::ShearEffect effect;
-
-  try
-  {
-    // New() must be called to create a ShearEffect or it wont be valid.
-    effect.SetAngleXAxis( 45.0f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliShearEffectPropertyNames(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::ShearEffect effect = Toolkit::ShearEffect::New();
-
-  // Check the names, these names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetAngleXAxisPropertyName(), "uAngleXAxis", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetAngleYAxisPropertyName(), "uAngleYAxis", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetCenterPropertyName(), "uCenter", TEST_LOCATION );
-  END_TEST;
-}
-
-namespace
-{
-
-/**
- * Converts value to screen position in the same way that
- * the core does under COORDINATE_TYPE_SCREEN_POSITION
- *
- * @param[in] value the input position value.
- * @return The translated position value ready for gl.
- */
-Vector2 ToScreenPosition(Vector2 value)
-{
-  Vector2 stageSize = Dali::Stage::GetCurrent().GetSize();
-  value.x = stageSize.x * 0.5f - value.x;
-  value.y = value.y - stageSize.y * 0.5f;
-
-  return value;
-}
-
-}// namespace
-
-int UtcDaliShearEffectDefaultValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::ShearEffect effect = Toolkit::ShearEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  const float angleXAxis(0.0f);
-  const float angleYAxis(0.0f);
-  const Vector2 centerValue(0.0f, 0.0f);
-
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetAngleXAxisPropertyName().c_str(), angleXAxis ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetAngleYAxisPropertyName().c_str(), angleYAxis ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetCenterPropertyName().c_str(), ToScreenPosition(centerValue) ) );
-  END_TEST;
-}
-
-int UtcDaliShearEffectCustomValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::ShearEffect effect = Toolkit::ShearEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  const float angleXAxis(10.0f);
-  const float angleYAxis(22.5f);
-  const Vector2 centerValue(50.0f, 100.0f);
-
-  effect.SetAngleXAxis( angleXAxis );
-  effect.SetAngleYAxis( angleYAxis );
-  effect.SetCenter( centerValue );
-
-  actor.SetShaderEffect(effect);
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render();
-
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetAngleXAxisPropertyName().c_str(), angleXAxis ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetAngleYAxisPropertyName().c_str(), angleYAxis ) );
-  DALI_TEST_CHECK( gl.CheckUniformValue( effect.GetCenterPropertyName().c_str(), ToScreenPosition(centerValue) ) );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-SoftButtonEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-SoftButtonEffect.cpp
deleted file mode 100644 (file)
index ec39782..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-using namespace Dali::Toolkit;
-
-void soft_button_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void soft_button_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-// Negative test case for a method
-int UtcDaliSoftButtonEffectUninitialized(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline("UtcDaliSoftButtonEffectUninitialized");
-
-  Toolkit::SoftButtonEffect effect;
-
-  // New() must be called to create a SoftButtonEffect or it wont be valid.
-
-  DALI_TEST_CHECK(!effect);
-  END_TEST;
-}
-
-// Positive test case for a method
-int UtcDaliSoftButtonEffectNew(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline("UtcDaliGaussianBlurViewNew");
-
-  Toolkit::SoftButtonEffect effect = Toolkit::SoftButtonEffect::New(Toolkit::SoftButtonEffect::ELLIPTICAL);
-  DALI_TEST_CHECK( effect );
-  END_TEST;
-}
-
-// Positive test case for a method
-int UtcDaliSoftButtonEffectPropertyNames(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline("UtcDaliSoftButtonEffectPropertyNames");
-
-  Toolkit::SoftButtonEffect effect = Toolkit::SoftButtonEffect::New(Toolkit::SoftButtonEffect::ELLIPTICAL);
-  DALI_TEST_CHECK( effect );
-
-  // Check the names, this names are used in the shader code,
-  // if they change in the shader code, then it has to be updated here.
-  DALI_TEST_EQUALS( effect.GetLightingIndentationAmountPropertyName(), "uLightingIndentationAmount", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetTextureDistortionAmountPropertyName(), "uTextureDistortAmount", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetAmbientLightAmountPropertyName(), "uAmbientLight", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetDiffuseLightPropertyName(), "uDiffuseLight", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetLightingMultiplierPropertyName(), "uLightMultiplier", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetInsideShapeSizeScalePropertyName(), "uInsideCircleSizeScale", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetOutsideShapeDepthPropertyName(), "uOutsideCircleDepth", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetEffectPixelAreaPropertyName(), "uEffectRegion", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetRectangleSizeScalePropertyName(), "uRectangleSizeScale", TEST_LOCATION );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-SpotEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-SpotEffect.cpp
deleted file mode 100644 (file)
index 99a2edb..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-
-using namespace Dali;
-
-void spot_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void spot_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliSpotUninitializedEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SpotEffect effect;
-
-  try
-  {
-    // New() must be called to create a SpotEffect or it wont be valid.
-    effect.SetRadius( 0.5f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliSpotPropertyNamesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SpotEffect effect = Toolkit::SpotEffect::New();
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetCenterPropertyName(), "uCenter", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetRadiusPropertyName(), "uRadius", TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliSpotDefaultValuesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SpotEffect effect = Toolkit::SpotEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  // Gets converted to opengl viewport coordinates
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetCenterPropertyName().c_str(),
-          Vector2(0.0f, 0.0f) ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetRadiusPropertyName().c_str(),
-          0.0f ) );
-  END_TEST;
-}
-
-int UtcDaliSpotCustomValuesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SpotEffect effect = Toolkit::SpotEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  effect.SetCenter( Vector2(480.0f, 800.0f) );
-  effect.SetRadius( 5.0f );
-
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  // Gets converted to opengl viewport coordinates
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetCenterPropertyName().c_str(),
-          Vector2(480.0f, 800.0f) ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetRadiusPropertyName().c_str(),
-          5.0f ) );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-SquareDissolveEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-SquareDissolveEffect.cpp
deleted file mode 100644 (file)
index 9b8e194..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-
-using namespace Dali;
-
-void square_dissolve_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void square_dissolve_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-int UtcDaliSquareDissolveEffectUninitialized(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SquareDissolveEffect effect;
-
-  try
-  {
-    // New() must be called to create a SquareDissolveEffect or it wont be valid.
-    effect.SetStep( 2.0f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliSquareDissolveEffectPropertyNames(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SquareDissolveEffect effect = Toolkit::SquareDissolveEffect::New();
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetStepPropertyName(), "uStep", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetRowsPropertyName(), "uRows", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetColumnsPropertyName(), "uColumns", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetTexSizePropertyName(), "texSize", TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliSquareDissolveEffectDefaultValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SquareDissolveEffect effect = Toolkit::SquareDissolveEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  // Gets converted to opengl viewport coordinates
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetStepPropertyName().c_str(),
-          0.1f ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetRowsPropertyName().c_str(),
-          25.0f ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetColumnsPropertyName().c_str(),
-          25.0f ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetTexSizePropertyName().c_str(),
-          Vector2(1.0f, 1.0f) ) );
-  END_TEST;
-}
-
-int UtcDaliSquareDissolveEffectCustomValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SquareDissolveEffect effect = Toolkit::SquareDissolveEffect::New();
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  effect.SetStep( 2.0f );
-  effect.SetRows( 3.0f );
-  effect.SetColumns( 4.0f );
-  effect.SetTextureSize( Vector2(12.0f, 13.0f) );
-
-  actor.SetShaderEffect(effect);
-  Stage::GetCurrent().Add(actor);
-
-  application.SendNotification();
-  application.Render();
-
-  // Gets converted to opengl viewport coordinates
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetStepPropertyName().c_str(),
-          2.0f ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetRowsPropertyName().c_str(),
-          3.0f ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetColumnsPropertyName().c_str(),
-          4.0f ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetTexSizePropertyName().c_str(),
-          Vector2(12.0f, 13.0f) ) );
-  END_TEST;
-}
index bed13ae..0e1385f 100644 (file)
@@ -197,7 +197,6 @@ int UtcDaliSuperBlurViewGetBlurredImage(void)
   tet_infoline( "UtcDaliSuperBlurViewGetBlurredImage" );
 
   SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS );
-  blurView.SetRelayoutEnabled( false );
   blurView.SetSize( 100.f,100.f );
   Image inputImage = CreateSolidColorImage( application, Color::GREEN, 100, 100 );
   blurView.SetImage( inputImage );
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-SwirlEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-SwirlEffect.cpp
deleted file mode 100644 (file)
index debe183..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-
-// Need to override adaptor classes for toolkit test harness, so include
-// test harness headers before dali headers.
-#include <dali-toolkit-test-suite-utils.h>
-
-#include <dali.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-
-
-void utc_dali_toolkit_swirl_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void utc_dali_toolkit_swirl_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-int UtcDaliSwirlUninitializedEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SwirlEffect effect;
-
-  try
-  {
-    // New() must be called to create a SwirlEffect or it wont be valid.
-    effect.SetRadius( 0.5f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliSwirlPropertyNamesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SwirlEffect effect = Toolkit::SwirlEffect::New(false);
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetAnglePropertyName(), "uAngle", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetCenterPropertyName(), "uCenter", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetRadiusPropertyName(), "uRadius", TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliSwirlDefaultValuesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SwirlEffect effect = Toolkit::SwirlEffect::New(true);
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  // Gets converted to opengl viewport coordinates
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetAnglePropertyName().c_str(),
-          0.0f ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetCenterPropertyName().c_str(),
-          Vector2(0.5f, 0.5f) ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetRadiusPropertyName().c_str(),
-          1.0f ) );
-  END_TEST;
-}
-
-int UtcDaliSwirlCustomValuesEffect(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::SwirlEffect effect = Toolkit::SwirlEffect::New(false);
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-
-  effect.SetAngle( 1.0f );
-  effect.SetCenter( Vector2(0.3f, 0.7f) );
-  effect.SetRadius( 2.0f );
-
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  // Gets converted to opengl viewport coordinates
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetAnglePropertyName().c_str(),
-          1.0f ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetCenterPropertyName().c_str(),
-          Vector2(0.3f, 0.7f) ) );
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetRadiusPropertyName().c_str(),
-          2.0f ) );
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-WaterEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-WaterEffect.cpp
deleted file mode 100644 (file)
index 8f12fb6..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/dali-toolkit.h>
-
-using namespace Dali;
-
-void dali_water_effect_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void dali_water_effect_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-
-
-int UtcDaliWaterEffectUninitialized(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect;
-
-  try
-  {
-    // New() must be called to create a RippleEffect or it wont be valid.
-    effect.SetAmplitude( 0, 0.5f );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK(!effect);
-  }
-  END_TEST;
-}
-
-int UtcDaliWaterEffectPropertyNames(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
-  DALI_TEST_CHECK( effect );
-
-  // Check the names, this names are used in the shaders code,
-  // if they change the shader code has to be updated
-  DALI_TEST_EQUALS( effect.GetAmplitudePropertyName( 0 ), "uDrops[0].amplitude", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetCenterPropertyName( 0 ), "uDrops[0].center", TEST_LOCATION );
-  DALI_TEST_EQUALS( effect.GetPropagationPropertyName( 0 ), "uDrops[0].radius", TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliWaterEffectOutOfBounds(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
-  DALI_TEST_CHECK( effect );
-
-  try
-  {
-    // the highest index acceptable is (GetNumberOfWaves() - 1)
-    effect.SetAmplitude( effect.GetNumberOfWaves(), 0 );
-    DALI_TEST_CHECK( false );
-  }
-  catch (Dali::DaliException& e)
-  {
-    // Tests that a negative test of an assertion succeeds
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_CHECK( true );
-  }
-  END_TEST;
-}
-
-int UtcDaliWaterEffectDefaultValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
-  DALI_TEST_CHECK( effect );
-
-  // Check that the effect has the number of waves it was requested
-  DALI_TEST_CHECK( effect.GetNumberOfWaves() == 4 );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render();
-
-  Vector2 topLeft( Stage::GetCurrent().GetSize() * 0.5f );
-  topLeft.y = -topLeft.y;
-
-  for ( unsigned int i = 0; i < effect.GetNumberOfWaves(); ++i )
-  {
-    DALI_TEST_CHECK(
-        application.GetGlAbstraction().CheckUniformValue(
-            effect.GetAmplitudePropertyName(i).c_str(),
-            0.0f ) );
-    DALI_TEST_CHECK(
-        application.GetGlAbstraction().CheckUniformValue(
-            effect.GetCenterPropertyName(i).c_str(),
-            topLeft ) );
-    DALI_TEST_CHECK(
-        application.GetGlAbstraction().CheckUniformValue(
-            effect.GetPropagationPropertyName(i).c_str(),
-            0.0f ) );
-  }
-  END_TEST;
-}
-
-int UtcDaliWaterEffectCustomValues(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  effect.SetAmplitude( 0, 0.5f );
-  effect.SetCenter( 0, Vector2 ( 10.0f, 10.0f ) );
-  effect.SetPropagation( 0, 2.0f );
-
-  application.SendNotification();
-  application.Render();
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetAmplitudePropertyName(0).c_str(),
-          0.5f ) );
-
-  Vector2 centerPoint( Stage::GetCurrent().GetSize() * 0.5f );
-  centerPoint.y = -centerPoint.y;
-
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetCenterPropertyName(0).c_str(),
-          Vector2( centerPoint.x - 10.0f, centerPoint.y + 10.0f ) ) );
-  DALI_TEST_CHECK(
-      application.GetGlAbstraction().CheckUniformValue(
-          effect.GetPropagationPropertyName(0).c_str(),
-          2.0f ) );
-  END_TEST;
-}
-
-int UtcDaliWaterEffectGetAmplitudePositive(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  float amplitude(0.5f);
-  DALI_TEST_CHECK(effect.GetAmplitude(0) != amplitude);
-  effect.SetAmplitude( 0, amplitude );
-
-  application.SendNotification();
-  application.Render();
-
-  DALI_TEST_EQUALS(amplitude, effect.GetAmplitude(0), TEST_LOCATION);
-  END_TEST;
-}
-
-int UtcDaliWaterEffectGetAmplitudeNegative(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  try
-  {
-    effect.GetAmplitude(9999);
-    tet_result(TET_FAIL);
-  }
-  catch(DaliException& e)
-  {
-    DALI_TEST_ASSERT(e, "index < mNumberOfWaves", TEST_LOCATION );
-  }
-  END_TEST;
-}
-
-int UtcDaliWaterEffectGetCenterPositive(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  Vector2 center(10.0f, 20.0f);
-  DALI_TEST_CHECK(effect.GetCenter(0) != center);
-  effect.SetCenter( 0, center );
-
-  application.SendNotification();
-  application.Render();
-
-  DALI_TEST_EQUALS(center, effect.GetCenter(0), TEST_LOCATION);
-  END_TEST;
-}
-
-int UtcDaliWaterEffectGetCenterNegative(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  try
-  {
-    effect.GetCenter(9999);
-    tet_result(TET_FAIL);
-  }
-  catch(DaliException& e)
-  {
-    DALI_TEST_ASSERT(e, "index < mNumberOfWaves", TEST_LOCATION );
-  }
-  END_TEST;
-}
-
-int UtcDaliWaterEffectGetPropagationPositive(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  float propagation(0.5f);
-  DALI_TEST_CHECK(effect.GetPropagation(0) != propagation);
-  effect.SetPropagation( 0, propagation );
-
-  application.SendNotification();
-  application.Render();
-
-  DALI_TEST_EQUALS(propagation, effect.GetPropagation(0), TEST_LOCATION);
-  END_TEST;
-}
-
-int UtcDaliWaterEffectGetPropagationNegative(void)
-{
-  ToolkitTestApplication application;
-
-  Toolkit::WaterEffect effect = Toolkit::WaterEffect::New(4);
-  DALI_TEST_CHECK( effect );
-
-  BufferImage image = CreateBufferImage();
-
-  ImageActor actor = ImageActor::New( image );
-  actor.SetSize( 100.0f, 100.0f );
-  actor.SetShaderEffect( effect );
-  Stage::GetCurrent().Add( actor );
-
-  try
-  {
-    effect.GetPropagation(9999);
-    tet_result(TET_FAIL);
-  }
-  catch(DaliException& e)
-  {
-    DALI_TEST_ASSERT(e, "index < mNumberOfWaves", TEST_LOCATION );
-  }
-  END_TEST;
-}
index 18ed54d..99016ae 100644 (file)
@@ -148,7 +148,6 @@ publicapiview_HEADERS = $(public_api_view_header_files)
 publicapibuilder_HEADERS = $(public_api_builder_header_files)
 publicapifocusmanager_HEADERS = $(public_api_focus_manager_header_files)
 publicapishadereffects_HEADERS = $(public_api_shader_effects_header_files)
-publicapibubbleeffect_HEADERS = $(public_api_bubble_effect_header_files)
 publicapistyling_HEADERS = $(public_api_styling_header_files)
 publicapitransitioneffects_HEADERS = $(public_api_transition_effects_header_files)
 publicapiscripting_HEADERS = $(public_api_scripting_header_files)
index 7664649..8f1281b 100644 (file)
 #include <dali-toolkit/public-api/shader-effects/soft-button-effect.h>
 #include <dali-toolkit/public-api/shader-effects/spot-effect.h>
 #include <dali-toolkit/public-api/shader-effects/square-dissolve-effect.h>
-#include <dali-toolkit/public-api/shader-effects/water-effect.h>
-#include <dali-toolkit/public-api/shader-effects/bubble-effect/bubble-effect.h>
-#include <dali-toolkit/public-api/shader-effects/bubble-effect/color-adjuster.h>
 #include <dali-toolkit/public-api/shader-effects/dissolve-effect.h>
 #include <dali-toolkit/public-api/shader-effects/image-region-effect.h>
 #include <dali-toolkit/public-api/shader-effects/iris-effect.h>
 #include <dali-toolkit/public-api/shader-effects/mask-effect.h>
 #include <dali-toolkit/public-api/shader-effects/nine-patch-mask-effect.h>
-#include <dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.h>
-#include <dali-toolkit/public-api/shader-effects/page-turn-effect.h>
 #include <dali-toolkit/public-api/shader-effects/quadratic-bezier.h>
 #include <dali-toolkit/public-api/shader-effects/ripple-effect.h>
 #include <dali-toolkit/public-api/shader-effects/ripple2d-effect.h>
index 88e5364..bb76721 100644 (file)
@@ -22,6 +22,9 @@
 #include <dali/public-api/actors/image-actor.h>
 #include <dali/public-api/object/type-registry.h>
 
+//INTERNAL INCLUDES
+#include <dali-toolkit/public-api/shader-effects/image-region-effect.h>
+
 namespace Dali
 {
 
@@ -230,13 +233,13 @@ void CheckBoxButton::StartTransitionAnimation( Actor& actor )
     if( !mTickUVEffect )
     {
       ImageActor imageActor = ImageActor::DownCast( actor );
-      mTickUVEffect = ImageRegionEffect::New();
+      mTickUVEffect = CreateImageRegionEffect();
       imageActor.SetShaderEffect( mTickUVEffect );
     }
 
     actor.SetScale( Vector3( 0.0f, 1.0f, 1.0f ) );
 
-    mTickUVEffect.SetBottomRight( Vector2( 0.0f, 1.0f ) );
+    mTickUVEffect.SetUniform("uBottomRight", Vector2( 0.0f, 1.0f ) );
 
     if( !mTransitionAnimation )
     {
@@ -244,7 +247,7 @@ void CheckBoxButton::StartTransitionAnimation( Actor& actor )
     }
 
     // UV anim
-    mTransitionAnimation.AnimateTo( Property( mTickUVEffect, mTickUVEffect.GetBottomRightPropertyName() ), Vector2( 1.0f, 1.0f ) );
+    mTransitionAnimation.AnimateTo( Property( mTickUVEffect, "uBottomRight" ), Vector2( 1.0f, 1.0f ) );
 
     // Actor size anim
     mTransitionAnimation.AnimateTo( Property( actor, Actor::Property::SCALE_X ), 1.0f );
index 7f55610..aacf221 100644 (file)
 // EXTERNAL INCLUDES
 #include <dali/public-api/common/dali-vector.h>
 #include <dali/public-api/animation/animation.h>
+#include <dali/public-api/shader-effects/shader-effect.h>
+
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/buttons/check-box-button.h>
-#include <dali-toolkit/public-api/shader-effects/image-region-effect.h>
 
 #include "button-impl.h"
 
@@ -124,7 +125,7 @@ private:
 
 private:
   Animation                 mTransitionAnimation;  ///< Animation used in the state transitions.
-  ImageRegionEffect         mTickUVEffect;         ///< ImageRegionEffect to expand the tick across
+  ShaderEffect              mTickUVEffect;         ///< ImageRegionEffect to expand the tick across
 };
 
 } // namespace Internal
diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h b/dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h
new file mode 100644 (file)
index 0000000..548f13c
--- /dev/null
@@ -0,0 +1,118 @@
+#ifndef __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__
+#define __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__
+
+/*
+ * Copyright (c) 2015 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/shader-effects/shader-effect.h>
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+namespace Internal
+{
+
+/**
+ * @brief Creates a new PageTurnBookSpineEffect
+ * This is an assisting effect of PageTurnEffect to display a book spine on _static_ pages, and also to flip the image horizontally when needed.
+ *
+ * When the page is turned over in landscape, call
+ * SetIsBackImageVisible(true), this effect can display the back image
+ * correctly after the imageActor been rotated 180 degrees.  To
+ * display the pages visually consistent with its turning state,
+ * please set the uniforms with the same values as the PageTurnEffect.
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uShadowWidth"          - The width of shadow to be pageSize * shadowWidth. This shadow appears at the edges of the actor
+ *                            which is not visible on static pages
+ *  "uSpineShadowParameter" - The two parameters are the major&minor radius (in pixels) to form an ellipse shape. The top-left
+ *                            quarter of this ellipse is used to calculate spine normal for simulating shadow
+ *  "uIsBackImageVisible"   - Set whether the current page is with its backside visible. Need to pass the parameter as true for
+ *                            the page which is turned over but still visible in Landscape
+ *  "uPageWidth"            - The page width of the PageTurnBookSpineEffect
+ *
+ * @return A handle to a newly allocated ShaderEffect
+ **/
+inline ShaderEffect CreatePageTurnBookSpineEffect()
+{
+  std::string vertexSource(
+      "precision mediump float;\n"
+      "uniform float uShadowWidth;\n"
+      "  void main()\n"
+      "  {\n"
+      "    gl_Position = uProjection * uModelView * vec4(aPosition, 1.0);\n"
+      "    vTexCoord.x = (aTexCoord.x-sTextureRect.s) /( 1.0 - uShadowWidth ) + sTextureRect.s;\n"
+      "    vTexCoord.y = ( aTexCoord.y-sTextureRect.t-0.5*uShadowWidth*(sTextureRect.q-sTextureRect.t) )/( 1.0 - uShadowWidth ) + sTextureRect.t;\n"
+      "  }");
+
+  // the simplified version of the fragment shader of page turn effect
+  std::string fragmentSource(
+      "precision mediump float;\n"
+      "uniform float uIsBackImageVisible;\n"
+      "uniform float uPageWidth;\n"
+      "uniform vec2 uSpineShadowParameter;\n"
+      "  void main()\n"
+      "  {\n"
+      // leave the border for display shadow, not visible( out of the screen ) when the page is static
+      "    if( vTexCoord.y > sTextureRect.q || vTexCoord.y < sTextureRect.t || vTexCoord.x > sTextureRect.p  )\n"
+      "    {\n"
+      "      gl_FragColor = vec4( 0.0 );\n"
+      "    }\n"
+      "    else \n"
+      "    { \n"
+      // flip the image horizontally by changing the x component of the texture coordinate
+      "      if( uIsBackImageVisible == 1.0 )  gl_FragColor = texture2D( sTexture, vec2( sTextureRect.p+sTextureRect.s-vTexCoord.x, vTexCoord.y ) ) * uColor; \n"
+      "      else gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n"
+      "      \n"
+      // display book spine, a stripe of shadowed texture
+      "      float pixelPos = (vTexCoord.x-sTextureRect.s)*uPageWidth; \n"
+      "      if(pixelPos < uSpineShadowParameter.x) \n"
+      "      {\n"
+      "        float x = pixelPos - uSpineShadowParameter.x;\n"
+      "        float y = sqrt( uSpineShadowParameter.x*uSpineShadowParameter.x - x*x );\n"
+      "        vec2 spineNormal = normalize(vec2(uSpineShadowParameter.y*x/uSpineShadowParameter.x, y));\n"
+      "        gl_FragColor.rgb *= spineNormal.y; \n"
+      "      }"
+      "    }\n"
+      "  }" );
+
+  const float DEFAULT_SHADOW_WIDTH(0.15f);
+  const Vector2 DEFAULT_SPINE_SHADOW_PARAMETER(50.0f, 20.0f);
+
+  ShaderEffect shaderEffect = ShaderEffect::New( vertexSource, fragmentSource );
+
+  shaderEffect.SetUniform( "uIsBackImageVisible", -1.f );
+  shaderEffect.SetUniform( "uShadowWidth", DEFAULT_SHADOW_WIDTH );
+  shaderEffect.SetUniform( "uSpineShadowParameter", DEFAULT_SPINE_SHADOW_PARAMETER );
+
+  float defaultPageWidth = Dali::Stage::GetCurrent().GetSize().x;
+  shaderEffect.SetUniform( "uPageWidth", defaultPageWidth/(1.f-DEFAULT_SHADOW_WIDTH) );
+
+  return shaderEffect;
+}
+
+} //namespace Internal
+
+} // namespace Toolkit
+
+} // namespace Dali
+
+#endif /* __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__ */
diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.cpp b/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.cpp
new file mode 100644 (file)
index 0000000..0169210
--- /dev/null
@@ -0,0 +1,366 @@
+/*
+ * Copyright (c) 2015 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h>
+#include <dali/public-api/math/matrix.h>
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+void CommonParametersConstraint( Dali::Matrix& current, const PropertyInputContainer& inputs )
+{
+  const Vector2& originalCenter = inputs[0]->GetVector2();
+  Vector2 currentCenter = inputs[1]->GetVector2();
+  const Vector2& pageSize = inputs[2]->GetVector2();
+
+  // calculate the curve direction and the vanishing point
+  // here, the vanishing point is the intersection of spine with the line passing through original center and vertical to curve direction
+  Vector2 curveDirection( currentCenter - originalCenter );
+  curveDirection.Normalize();
+  if( fabs(curveDirection.y) < 0.01f) // eliminate the possibility of division by zero in the next step
+  {
+    curveDirection.y = 0.01f;
+  }
+  float vanishingPointY = originalCenter.y + curveDirection.x * originalCenter.x / curveDirection.y;
+
+  float curveEndY, cosTheta ,sinTheta ,translateX, translateY;
+  // when the vanishing point is very far away, make it infinitely, in this case, the page bent horizontally
+  const float THRESHOLD(20.0);
+  if( fabs(vanishingPointY-pageSize.y*0.5f) >= pageSize.y*THRESHOLD )
+  {
+    curveDirection = Vector2(-1.f,0.f);
+    currentCenter.y = originalCenter.y;
+
+    curveEndY = originalCenter.y;
+    cosTheta = 1.f;
+    sinTheta = 0.f;
+    translateX = currentCenter.x - originalCenter.x;
+    translateY = vanishingPointY;
+  }
+  else
+  {
+    curveEndY = currentCenter.y - curveDirection.y * (currentCenter.x/curveDirection.x) ;
+    Vector2 v1( currentCenter.x, currentCenter.y - vanishingPointY );
+    v1.Normalize();
+    Vector2 v2( originalCenter.x, originalCenter.y - vanishingPointY );
+    v2.Normalize();
+    cosTheta = v1.x*v2.x + v1.y*v2.y;
+    sinTheta = ( vanishingPointY > pageSize.y*0.5f ) ? sqrt(1.0-cosTheta*cosTheta) : -sqrt(1.0-cosTheta*cosTheta);
+    translateX = currentCenter.x - cosTheta*originalCenter.x - sinTheta*( originalCenter.y-vanishingPointY );
+    translateY = currentCenter.y + sinTheta*originalCenter.x - cosTheta*( originalCenter.y-vanishingPointY );
+  }
+
+  float originalLength = fabs(originalCenter.x/curveDirection.x);
+  float currentLength = fabs(currentCenter.x/curveDirection.x);
+  float curveHeight = 0.45f*sqrt(originalLength*originalLength - currentLength*currentLength);
+
+  float* parameterArray = current.AsFloat();
+  parameterArray[0] = cosTheta;
+  parameterArray[1] = -sinTheta;
+  parameterArray[2] = originalCenter.x;
+  parameterArray[3] = originalCenter.y;
+  parameterArray[4] = sinTheta;
+  parameterArray[5] = cosTheta;
+  parameterArray[6] = currentCenter.x;
+  parameterArray[7] = currentCenter.y;
+  parameterArray[8] = translateX;
+  parameterArray[9] = translateY;
+  parameterArray[10] = vanishingPointY;
+  parameterArray[11] = curveEndY;
+  parameterArray[12] = curveDirection.x;
+  parameterArray[13] = curveDirection.y;
+  parameterArray[14] = curveHeight;
+  parameterArray[15] = currentLength;
+}
+
+void Dali::Toolkit::Internal::PageTurnApplyInternalConstraint( ShaderEffect& shaderEffect)
+{
+  Constraint constraint = Constraint::New<Dali::Matrix>( shaderEffect, shaderEffect.GetPropertyIndex( "uCommonParameters" ), CommonParametersConstraint );
+  constraint.AddSource( LocalSource( shaderEffect.GetPropertyIndex( "uOriginalCenter" ) ) );
+  constraint.AddSource( LocalSource( shaderEffect.GetPropertyIndex( "uCurrentCenter" ) ) );
+  constraint.AddSource( LocalSource( shaderEffect.GetPropertyIndex( "uPageSize" ) ) );
+  constraint.Apply();
+}
+
+ShaderEffect Dali::Toolkit::Internal::CreatePageTurnEffect(bool enableBlending)
+{
+  std::string vertexShader = DALI_COMPOSE_SHADER(
+      /*
+       * The common parameters for all the vertices, calculate in CPU then pass into the shader as uniforms
+       *
+       *  first part of the page, (outside the the line passing through original center and vertical to curve direction)
+       * no Z change, only 2D rotation and translation
+       * ([0][0],[0][1],[1][0],[1][1]) mat2 rotateMatrix
+       * ([2][0],[2][1]) vec2 translationVector
+       *
+       * ([0][2],[0][3]) vec2 originalCenter: Typically the press down position of the Pan Gesture
+       * ([1][2],[1][3]) vec2 currentCenter: Typically the current position of the Pan Gesture
+       * ([3][0],[3][1]) vec2 curveDirection: The normalized vector pointing from original center to current center
+       * ([2][2]) float vanishingPointY: The Y coordinate of the intersection of the spine
+       *                                 and the line which goes through the original center and is vertical to the curveDirection
+       * ([2][3]) float curveEndY: The Y coordinate of intersection of the spine and the line through both original and current center
+       * ([3][2]) float curveHeight: The height of the interpolated hermite curve.
+       * ([3][3]) float currentLength: The length from the current center to the curveEnd.
+       */
+      precision mediump float;\n
+      uniform mat4 uCommonParameters;\n
+      \n
+      uniform vec2 uPageSize;\n
+      uniform float uIsTurningBack;\n
+      uniform float uShadowWidth;\n
+      varying vec3 vNormal;\n
+      varying vec4 vPosition;\n
+      varying float vEdgeShadow;\n
+      \n
+      void main()\n
+      {\n
+        vec4 position = vec4( aPosition.xy, 0.0, 1.0);\n
+        vec2 currentCenter = vec2( uCommonParameters[1][2], uCommonParameters[1][3]);\n
+        vec2 originalCenter = vec2( uCommonParameters[0][2], uCommonParameters[0][3]);\n
+        vec3 normal = vec3(0.0,0.0,1.0);\n
+        \n
+        if(currentCenter.x < originalCenter.x)\n
+        {\n
+          // change the coordinate origin from the center of the page to its top-left
+          position.xy += uPageSize * 0.5;\n
+          vec2 curveDirection = vec2( uCommonParameters[3]);\n
+          vec3 vanishingPoint = vec3(0.0, uCommonParameters[2][2], 0.0);\n
+          // first part of the page, (outside the the line passing through original center and vertical to curve direction)
+          //no Z change, only 2D rotation and translation
+          if( dot(curveDirection, position.xy - originalCenter) < 0.0 )
+          {\n
+            position.y -= vanishingPoint.y;\n
+            position.xy = mat2(uCommonParameters)*position.xy + vec2( uCommonParameters[2]);\n
+          }\n
+          // second part of the page, bent as a ruled surface
+          else\n
+          {\n
+            // calculate on the flat plane, between
+            // the first line passing through current vertex and vanishing point
+            // the second line passing through original center and current center
+            vec2 curveEnd = vec2( 0.0, uCommonParameters[2][3] );\n
+            vec2 curFlatDirection = vec2(0.0,1.0);\n
+            float lengthFromCurve = position.y - originalCenter.y;\n
+            float lengthOnCurve = position.x;\n
+            if(currentCenter.y != originalCenter.y)\n
+            {\n
+              curFlatDirection = normalize(position.xy - vanishingPoint.xy);\n
+              lengthFromCurve = (curveEnd.x*curveDirection.y-curveEnd.y*curveDirection.x-position.x*curveDirection.y+position.y*curveDirection.x)
+              / (curFlatDirection.x*curveDirection.y-curFlatDirection.y*curveDirection.x);\n
+              lengthOnCurve = length(position.xy+lengthFromCurve*curFlatDirection-curveEnd);\n
+            }\n
+            \n
+            // define the control points of hermite curve, composed with two segments
+            // calulation is carried out on the 2D plane which is passing through both current and original center and vertical to the image plane
+            float currentLength = uCommonParameters[3][3];\n
+            float originalLength =  abs(originalCenter.x/curveDirection.x);\n
+            float height = uCommonParameters[3][2];\n
+            float percentage = currentLength/originalLength;\n
+            //vec2 SegmentOneControlPoint0 = vec2(0.0, 0.0);
+            vec2 SegmentOneControlPoint1 = vec2((0.65*percentage - 0.15)*originalLength, (0.8 + 0.2 * percentage)*height); \n
+            vec2 SegmentTwoControlPoint0 = SegmentOneControlPoint1;\n
+            vec2 SegmentTwoControlPoint1 = vec2(currentLength, 0.0); \n
+            vec2 SegmentOneTangentVector0 = SegmentOneControlPoint1;\n
+            vec2 SegmentOneTangentVector1 = vec2(0.5*originalLength,0.0);\n
+            vec2 SegmentTwoTangentVector0 = SegmentOneTangentVector1;\n
+            vec2 SegmentTwoTangentVector1 = SegmentOneTangentVector1;\n
+            \n
+            // calulate the corresponding curve point position and its tangent vector
+            // it is a linear mapping onto nonlinear curves, might cause some unwanted deformation
+            // but as there are no analytical method to calculate the curve length on arbitrary segment
+            // no efficient way to solve this nonlinear mapping, Numerical approximation would cost too much computation in shader
+            vec2 curvePoint2D;\n
+            vec2 tangent;\n
+            float t0 = lengthOnCurve / originalLength;\n
+            if(t0<=0.5)\n
+            {\n
+              float t = 2.0*t0;\n
+              float t_2 = t*t;\n
+              float t_3 = t*t_2;\n
+              curvePoint2D = (-2.0*t_3+3.0*t_2)*SegmentOneControlPoint1
+              + (t_3-2.0*t_2+t)*SegmentOneTangentVector0 + (t_3-t_2)*SegmentOneTangentVector1;\n
+              tangent = (-6.0*t_2+6.0*t)*SegmentOneControlPoint1
+              + (3.0*t_2-4.0*t+1.0)*SegmentOneTangentVector0 + (3.0*t_2-2.0*t)*SegmentOneTangentVector1;\n
+            }\n
+            else\n
+            {\n
+              float t = 2.0*t0-1.0;\n
+              float t_2 = t*t;\n
+              float t_3 = t*t_2;\n
+              curvePoint2D = (2.0*t_3-3.0*t_2+1.0)*SegmentTwoControlPoint0 + (-2.0*t_3+3.0*t_2)*SegmentTwoControlPoint1
+              + (t_3-2.0*t_2+t)*SegmentTwoTangentVector0 + (t_3-t_2)*SegmentTwoTangentVector1;\n
+              tangent = (6.0*t_2-6.0*t)*SegmentTwoControlPoint0 + (-6.0*t_2+6.0*t)*SegmentTwoControlPoint1
+              + (3.0*t_2-4.0*t+1.0)*SegmentTwoTangentVector0 + (3.0*t_2-2.0*t)*SegmentTwoTangentVector1;\n
+              // a trick to eliminate some optical illusion caused by the gradient matter of normal in per-fragment shading
+              // which is caused by linear interpolation of normal vs. nonlinear lighting
+              // will notice some artifact in the areas with dramatically normal changes, so compress the normal differences here
+              tangent.y *=  min(1.0, length(position.xyz - vanishingPoint) / uPageSize.y ); \n
+            }\n
+            vec3 curvePoint = vec3(curveEnd - curvePoint2D.x*curveDirection,max(0.0,curvePoint2D.y));\n
+            vec3 tangentVector = vec3(-tangent.x*curveDirection,tangent.y);\n
+            \n
+            // locate the new vertex position on the line passing through both vanishing point and the calculated curve point position
+            vec3 curLiftDirection = vec3(0.0,-1.0,0.0);\n
+            if(currentCenter.y != originalCenter.y)\n
+            {\n
+              curLiftDirection = normalize(curvePoint - vanishingPoint);\n
+              tangentVector *= (curveDirection.y > 0.0) ? -1.0 : 1.0;\n
+              // an heuristic adjustment here, to compensate the linear parameter mapping onto the nonlinear curve
+              float Y0 = position.y - curveDirection.y * (position.x/curveDirection.x); \n
+              float proportion;
+              float refLength;\n
+              if(abs(Y0-vanishingPoint.y) > abs(curveEnd.y-vanishingPoint.y)) \n
+              {\n
+                proportion = abs(curveEnd.y - Y0) / (abs(curveEnd.y-Y0)+abs(curveEnd.y - vanishingPoint.y)); \n
+                refLength = proportion*length(originalCenter-vanishingPoint.xy) / (proportion-1.0); \n
+              }\n
+              else\n
+              {\n
+                proportion = abs(curveEnd.y - Y0) / abs(curveEnd.y - vanishingPoint.y);\n
+                refLength = proportion*length(originalCenter-vanishingPoint.xy); \n
+              }\n
+              float Y1 = currentCenter.y - (normalize(currentCenter-vanishingPoint.xy)).y * refLength; \n
+              position.y = mix(Y0, Y1, t0); \n
+            }\n
+            position.xz = curvePoint.xz - lengthFromCurve*curLiftDirection.xz;\n
+            // calculate the normal vector, will be used for lighting
+            normal = cross(curLiftDirection, normalize(tangentVector));\n
+            // the signature of Z is decided by the page turning direction:
+            // from left to right(negative); from right to left (positive)
+            position.z *= -uIsTurningBack;\n
+            normal.xy *= -uIsTurningBack;\n
+          }\n
+          // change the coordinate origin from the top-left of the page to its center
+          position.xy -= uPageSize * 0.5; \n
+        }\n
+        position.z += aPosition.z;\n
+        gl_Position = uMvpMatrix * position;\n
+        // varying parameters for fragment shader
+        vTexCoord = aTexCoord;
+        vNormal = uNormalMatrix*normal;\n
+        vPosition = uModelView * position;\n
+  );
+
+  std::string vertexShaderWithFakedShadow = DALI_COMPOSE_SHADER(
+      // display shadow, the fake shadow value is calculated according to the height and the distance from page edge
+      vTexCoord.x = (aTexCoord.x-sTextureRect.s) /( 1.0 - uShadowWidth ) + sTextureRect.s;\n
+      vTexCoord.y = ( aTexCoord.y-sTextureRect.t-0.5*uShadowWidth*(sTextureRect.q-sTextureRect.t) )/( 1.0 - uShadowWidth ) + sTextureRect.t;\n
+      float heightCoef = (1.0 + position.z*uIsTurningBack*3.0 / uPageSize.x) * 0.6;
+      vEdgeShadow = clamp(0.9 - heightCoef, 0.0, 0.9 ); \n
+      if( vTexCoord.y >= sTextureRect.q || vTexCoord.y <= sTextureRect.t || vTexCoord.x >= sTextureRect.p  )\n
+      {\n
+        float inversedShadowWidth = (1.0-uShadowWidth) / uShadowWidth ;\n
+        float alpha1 = (vTexCoord.x-sTextureRect.p) * inversedShadowWidth / (sTextureRect.p - sTextureRect.s);\n
+        inversedShadowWidth = 2.0 * inversedShadowWidth  / (sTextureRect.q - sTextureRect.t); \n
+        float alpha2 = (vTexCoord.y-sTextureRect.q) * inversedShadowWidth;\n
+        float alpha3 = (sTextureRect.t-vTexCoord.y) * inversedShadowWidth;\n
+        float alpha;\n
+        if(alpha1 > 0.0 && alpha2 > 0.0) alpha = sqrt(alpha2*alpha2+alpha1*alpha1)/sqrt(1.0 + max(alpha1,alpha2)*max(alpha1,alpha2));\n //bottom-right corner
+        else if(alpha1 > 0.0 && alpha3 > 0.0) alpha = sqrt(alpha3*alpha3+alpha1*alpha1)/sqrt(1.0+max(alpha1,alpha3)*max(alpha1,alpha3));\n //top-right corner
+        else alpha = max(alpha1,max(alpha2,alpha3)); \n
+        alpha = 0.9 - alpha*0.9;\n
+        vEdgeShadow = clamp(alpha - heightCoef, 0.0, 0.9 ); \n
+      }\n
+  );
+
+  std::string vertexShaderEnd("}");
+
+  std::string fragmentShaderPartOne = DALI_COMPOSE_SHADER(
+      precision mediump float;\n
+      uniform vec2 uPageSize;\n
+      uniform vec2 uSpineShadowParameter;\n
+      varying vec3 vNormal;\n
+      varying vec4 vPosition;\n
+      varying float vEdgeShadow;\n
+      \n
+      void main()\n
+      {\n
+        // need to re-normalize the interpolated normal
+        vec3 normal = normalize(vNormal);\n
+        vec4 texel;\n
+        float spineShadowCoef = 1.0; \n
+  );
+
+  std::string fragmentShaderWithFakedShadow = DALI_COMPOSE_SHADER(
+      if( vTexCoord.y > sTextureRect.q || vTexCoord.y < sTextureRect.t || vTexCoord.x > sTextureRect.p  )\n
+      texel = vec4(0.0,0.0,0.0,vEdgeShadow);
+      else \n
+  );
+
+  std::string fragmentShaderPartTwo = DALI_COMPOSE_SHADER(
+      { \n
+    // display page content
+    // display back image of the page, flip the texture
+    if(  dot(vPosition.xyz, normal) > 0.0 ) texel = texture2D( sTexture, vec2( sTextureRect.p+sTextureRect.s-vTexCoord.x, vTexCoord.y ) );\n
+    // display front image of the page
+    else texel = texture2D( sTexture, vTexCoord );\n
+    // display book spine, a stripe of shadowed texture
+    float pixelPos = (vTexCoord.x-sTextureRect.s)*uPageSize.x; \n
+    if(pixelPos < uSpineShadowParameter.x) \n
+    {\n
+      float x = pixelPos - uSpineShadowParameter.x;\n
+      float y = sqrt( uSpineShadowParameter.x*uSpineShadowParameter.x - x*x);\n
+      spineShadowCoef = normalize( vec2( uSpineShadowParameter.y*x/uSpineShadowParameter.x, y ) ).y;\n
+    }\n
+      }\n
+      // calculate the lighting
+      // set the ambient color as vec3(0.4);
+      float lightColor = abs( normal.z ) * 0.6 + 0.4;\n
+      gl_FragColor = vec4( ( spineShadowCoef* lightColor)* texel.rgb , texel.a ) * uColor;\n
+      }
+  );
+
+  // Create the implementation, temporarily owned on stack,
+  Dali::ShaderEffect shaderEffectCustom;
+  std::ostringstream vertexShaderStringStream;
+  std::ostringstream fragmentShaderStringStream;
+  if( enableBlending )
+  {
+    vertexShaderStringStream<< vertexShader << vertexShaderWithFakedShadow << vertexShaderEnd;
+    fragmentShaderStringStream<< fragmentShaderPartOne << fragmentShaderWithFakedShadow << fragmentShaderPartTwo;
+    shaderEffectCustom = Dali::ShaderEffect::New( vertexShaderStringStream.str(), fragmentShaderStringStream.str(), GeometryType( GEOMETRY_TYPE_IMAGE ),
+                                                  ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_DEPTH_BUFFER | ShaderEffect::HINT_BLENDING) );
+  }
+  else
+  {
+    vertexShaderStringStream<< vertexShader << vertexShaderEnd;
+    fragmentShaderStringStream<< fragmentShaderPartOne << fragmentShaderPartTwo;
+    shaderEffectCustom = Dali::ShaderEffect::New( vertexShaderStringStream.str(), fragmentShaderStringStream.str(), GeometryType( GEOMETRY_TYPE_IMAGE ),
+                                                  ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_DEPTH_BUFFER ) );
+  }
+
+  static const float DEFAULT_SHADOW_WIDTH(0.15f);
+  static const Vector2 DEFAULT_SPINE_SHADOW_PARAMETER(50.0f, 20.0f);
+
+  Vector2 defaultPageSize = Dali::Stage::GetCurrent().GetSize();
+  Dali::Matrix zeroMatrix(true);
+  shaderEffectCustom.SetUniform( "uCommonParameters", zeroMatrix );
+  shaderEffectCustom.SetUniform( "uPageSize", defaultPageSize/(1.f-DEFAULT_SHADOW_WIDTH) );
+  shaderEffectCustom.SetUniform( "uShadowWidth", DEFAULT_SHADOW_WIDTH );
+  shaderEffectCustom.SetUniform( "uSpineShadowParameter", DEFAULT_SPINE_SHADOW_PARAMETER );
+
+  shaderEffectCustom.RegisterProperty( "uOriginalCenter", Vector2( defaultPageSize[0], defaultPageSize[1]*0.5f ) );
+  shaderEffectCustom.RegisterProperty( "uCurrentCenter", Vector2( defaultPageSize[0], defaultPageSize[1]*0.5f ) );
+
+  PageTurnApplyInternalConstraint(shaderEffectCustom);
+
+  // setting isTurningBack to -1.0f here means turning page forward
+  shaderEffectCustom.SetUniform( "uIsTurningBack", -1.0f );
+
+  return shaderEffectCustom;
+}
+
diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h b/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h
new file mode 100644 (file)
index 0000000..1a21b04
--- /dev/null
@@ -0,0 +1,94 @@
+#ifndef __DALI_PAGE_TURN_EFFECT_H_
+#define __DALI_PAGE_TURN_EFFECT_H_
+
+/*
+ * Copyright (c) 2015 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/animation/constraint.h>
+#include <dali/public-api/common/stage.h>
+#include <dali/public-api/object/property-input.h>
+#include <dali/public-api/shader-effects/shader-effect.h>
+#include <sstream>
+
+namespace Dali
+{
+
+namespace Toolkit
+{
+
+namespace Internal
+{
+
+
+/**
+ * @brief Re-applies PageTurnEffect internal constraints
+ * The internal constraint uses the OriginalCenter property and the CurrentCenter Property
+ * to update the variety of common parameters which are with the same value for all the vertices.
+ * Note: For each actor, the constraints are applied in the same order as the calls to Actor::ApplyConstraint().
+ * So if there are other contraints applied to the OriginalCenter or CurrentCenter while when using this effect,
+ * call this method to get the internal constraints and re-apply it afterwards.
+ *
+ * @param[in] shaderEffect The page turn effect to which internal constraints should be re-applied
+ */
+void PageTurnApplyInternalConstraint( ShaderEffect& shaderEffect);
+
+/**
+ * @brief Create a new PageTurnEffect
+ * PageTurnEffect is a custom shader effect to achieve page turn effect for Image actors.
+ *
+ * Usage example:-
+ *
+ * // create shader used for doing page-turn effect\n
+ * ShaderEffect pageTurnEffect = CreatePageTurnEffect();
+ *
+ * // set image actor shader to the page-turn one\n
+ * // for portrait view, one image actor for each page\n
+ * // for landscape view, the page turned over is still visible, so back image is needed \n
+ * //     in this case, create another image Actor using the back image and added to the page actor \n
+ * ImageActor pageActor = ImageActor::New(....); \n
+ * ImageActor backImageActor = ImageActor::New(....); \n
+ * pageActor.Add(backPageActor);\n
+ * pageActor.SetShaderEffect ( pageTurnEffect ); \n
+ *
+ * //set initial values
+ * pageTurnEffect.SetUniform("uPageSize", Vector2);\n
+ * pageTurnEffect.SetUniform("uOriginalCenter", Vector2);\n
+ * pageTurnEffect.SetUniform("uIsTurningBack", bool) SetIsTurningBack();\n
+ * pageTurnEffect.SetUniform("uCurrentCenter",Vector2);\n
+ *
+ * //Animate it with the current center property\n
+ * Animation animation[mAnimationIndex] = Animation::New( ... );\n
+ * animation.AnimateTo(Property( pageTurnEffect, "uCurrentCenter" ),
+ *                            currentCenter,
+ *                            AlphaFunction::...);\n
+ * animation[mAnimationIndex].Play(); \n
+ *
+ * Animatable/Constrainable uniforms:
+ *
+ * @param[in] enableBlending If true, apply HINT_BLENDING when creating the shader object; If false, disable the HINT_BLENDING
+ * @return A handle to a newly allocated ShaderEffect
+ */
+ShaderEffect CreatePageTurnEffect(bool enableBlending = true);
+
+} // namespace Internal
+
+} // namespace Toolkit
+
+} // namespace Dali
+
+#endif /* __DALI_TOOLKIT_SC_CURVE_EFFECT_H_ */
index 129301e..cd01b9a 100644 (file)
@@ -23,6 +23,9 @@
 #include <dali/public-api/object/type-registry.h>
 #include <dali/devel-api/object/type-registry-helper.h>
 
+//INTERNAL INCLUDES
+#include <dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h>
+
 namespace Dali
 {
 
@@ -139,19 +142,19 @@ void PageTurnPortraitView::OnPossibleOutwardsFlick( const Vector2& panPosition,
     // Add the page to tuning page layer and set up PageTurnEffect
     mShadowView.Add( actor );
     actor.SetShaderEffect( mTurnEffect[mIndex] );
-    GetImpl( mTurnEffect[mIndex] ).ApplyInternalConstraint();
+    PageTurnApplyInternalConstraint(mTurnEffect[mIndex]);
     mIsAnimating[mIndex] = true;
-    mTurnEffect[mIndex].SetIsTurningBack( true );
+    mTurnEffect[mIndex].SetUniform("uIsTurningBack", true );
     Vector2 originalCenter( mPageSize.width*1.5f, 0.5f*mPageSize.height );
-    mTurnEffect[mIndex].SetOriginalCenter( originalCenter );
-    mTurnEffect[mIndex].SetCurrentCenter( Vector2( mPageSize.width*0.5f, mPageSize.height*0.5f ));
+    mTurnEffect[mIndex].SetUniform("uOriginalCenter", originalCenter );
+    mTurnEffect[mIndex].SetUniform("uCurrentCenter", Vector2( mPageSize.width*0.5f, mPageSize.height*0.5f ) );
 
     // Start an animation to turn the previous page back
     Animation animation = Animation::New( PAGE_TURN_OVER_ANIMATION_DURATION );
     mAnimationActorPair[animation] = actor;
     mAnimationIndexPair[animation] = mIndex;
 
-    animation.AnimateTo( Property( mTurnEffect[mIndex], mTurnEffect[mIndex].PageTurnEffect::GetCurrentCenterPropertyName() ),
+    animation.AnimateTo( Property( mTurnEffect[mIndex], "uCurrentCenter" ),
                          originalCenter,
                          AlphaFunction::EASE_OUT, TimePeriod(PAGE_TURN_OVER_ANIMATION_DURATION*0.75f) );
     animation.AnimateBy( Property( actor, Actor::Property::ORIENTATION ), AngleAxis( Degree( 180.0f ), Vector3::YAXIS ) ,AlphaFunction::EASE_OUT );
index 0f5400a..9a60b1a 100644 (file)
@@ -28,6 +28,8 @@
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/default-controls/solid-color-actor.h>
+#include <dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h>
+#include <dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h>
 
 using namespace Dali;
 
@@ -295,26 +297,26 @@ PageTurnView::~PageTurnView()
 void PageTurnView::OnInitialize()
 {
    // create the two book spine effect for static images, left and right side pages respectively
-  mSpineEffectFront = PageTurnBookSpineEffect::New();
-  mSpineEffectFront.SetIsBackImageVisible( false );
-  mSpineEffectFront.SetPageWidth( mPageSize.width );
-  mSpineEffectFront.SetShadowWidth( 0.f );
-  mSpineEffectFront.SetSpineShadowParameter( mSpineShadowParameter );
-
-  mSpineEffectBack = PageTurnBookSpineEffect::New();
-  mSpineEffectBack.SetIsBackImageVisible( true );
-  mSpineEffectBack.SetPageWidth( mPageSize.width );
-  mSpineEffectBack.SetShadowWidth( 0.f );
-  mSpineEffectBack.SetSpineShadowParameter( mSpineShadowParameter );
+  mSpineEffectFront = CreatePageTurnBookSpineEffect();
+  mSpineEffectFront.SetUniform("uIsBackImageVisible", false );
+  mSpineEffectFront.SetUniform("uPageWidth", mPageSize.width );
+  mSpineEffectFront.SetUniform("uShadowWidth", 0.f );
+  mSpineEffectFront.SetUniform("uSpineShadowParameter", mSpineShadowParameter );
+
+  mSpineEffectBack = CreatePageTurnBookSpineEffect();
+  mSpineEffectBack.SetUniform("uIsBackImageVisible", true );
+  mSpineEffectBack.SetUniform("uPageWidth", mPageSize.width );
+  mSpineEffectBack.SetUniform("uShadowWidth", 0.f );
+  mSpineEffectBack.SetUniform("uSpineShadowParameter", mSpineShadowParameter );
 
   // create the page turn effect objects
   for( int i = 0; i < MAXIMUM_TURNING_NUM; i++ )
   {
-    mTurnEffect[i] = Toolkit::PageTurnEffect::New( false );
+    mTurnEffect[i] = CreatePageTurnEffect( false );
     mTurnEffect[i].SetProperty( ShaderEffect::Property::GRID_DENSITY, Property::Value( DEFAULT_GRID_DENSITY ) );
-    mTurnEffect[i].SetPageSize( mPageSize );
-    mTurnEffect[i].SetShadowWidth(0.f);
-    mTurnEffect[i].SetSpineShadowParameter( mSpineShadowParameter );
+    mTurnEffect[i].SetUniform( "uPageSize", mPageSize );
+    mTurnEffect[i].SetUniform( "uShadowWidth", 0.f);
+    mTurnEffect[i].SetUniform( "uSpineShadowParameter", mSpineShadowParameter );
     mIsAnimating[i] = false;
     mIsSliding[i] = false;
     mPropertyPanDisplacement[i] = Self().RegisterProperty("PAN_DISPLACEMENT_PROPERTY_"+i, 0.0f);
@@ -464,11 +466,11 @@ void PageTurnView::SetSpineShadowParameter( const Vector2& spineShadowParameter
   mSpineShadowParameter = spineShadowParameter;
 
   // set spine shadow parameter to all the shader effects
-  mSpineEffectFront.SetSpineShadowParameter( mSpineShadowParameter );
-  mSpineEffectBack.SetSpineShadowParameter( mSpineShadowParameter );
+  mSpineEffectFront.SetUniform("uSpineShadowParameter", mSpineShadowParameter );
+  mSpineEffectBack.SetUniform("uSpineShadowParameter", mSpineShadowParameter );
   for( int i = 0; i < MAXIMUM_TURNING_NUM; i++ )
   {
-    mTurnEffect[i].SetSpineShadowParameter( mSpineShadowParameter );
+    mTurnEffect[i].SetUniform("uSpineShadowParameter", mSpineShadowParameter );
   }
 }
 
@@ -754,7 +756,7 @@ void PageTurnView::PanStarted( const Vector2& gesturePosition )
   }
 
   mOriginalCenter = gesturePosition;
-  mTurnEffect[mIndex].SetIsTurningBack( mIsTurnBack[ mPanActor] );
+  mTurnEffect[mIndex].SetUniform("uIsTurningBack", mIsTurnBack[ mPanActor] );
   mPress = false;
   mPageUpdated = false;
 
@@ -791,9 +793,9 @@ void PageTurnView::PanContinuing( const Vector2& gesturePosition )
       mDistanceBottomCorner = ( mOriginalCenter - Vector2( 0.0f, mPageSize.height ) ).Length();
       mShadowView.Add( mPanActor );
       SetShaderEffect( mPanActor, mTurnEffect[mIndex] );
-      mTurnEffect[mIndex].SetOriginalCenter( mOriginalCenter );
+      mTurnEffect[mIndex].SetUniform("uOriginalCenter", mOriginalCenter );
       mCurrentCenter = mOriginalCenter;
-      mTurnEffect[mIndex].SetCurrentCenter( mCurrentCenter );
+      mTurnEffect[mIndex].SetUniform("uCurrentCenter", mCurrentCenter );
       mPanDisplacement = 0.f;
       mConstraints = true;
       mPress = true;
@@ -806,8 +808,8 @@ void PageTurnView::PanContinuing( const Vector2& gesturePosition )
       self.SetProperty( mPropertyPanDisplacement[mIndex], 0.f );
 
       Constraint shadowBlurStrengthConstraint = Constraint::New<float>( mShadowView, mShadowView.GetBlurStrengthPropertyIndex(), ShadowBlurStrengthConstraint( mPageSize.width*PAGE_TURN_OVER_THRESHOLD_RATIO ) );
-      shadowBlurStrengthConstraint.AddSource( Source(mTurnEffect[mIndex],  mTurnEffect[mIndex].GetPropertyIndex(mTurnEffect[mIndex].PageTurnEffect::GetCurrentCenterPropertyName())) );
-      shadowBlurStrengthConstraint.AddSource( Source(mTurnEffect[mIndex],  mTurnEffect[mIndex].GetPropertyIndex(mTurnEffect[mIndex].PageTurnEffect::GetOriginalCenterPropertyName())) );
+      shadowBlurStrengthConstraint.AddSource( Source(mTurnEffect[mIndex],  mTurnEffect[mIndex].GetPropertyIndex("uCurrentCenter")) );
+      shadowBlurStrengthConstraint.AddSource( Source(mTurnEffect[mIndex],  mTurnEffect[mIndex].GetPropertyIndex("uOriginalCenter")) );
       shadowBlurStrengthConstraint.AddSource( Source( self, mPropertyPanDisplacement[mIndex] ) );
       shadowBlurStrengthConstraint.Apply();
     }
@@ -872,18 +874,18 @@ void PageTurnView::PanContinuing( const Vector2& gesturePosition )
         offset *= k;
         Actor self = Self();
 
-        Property::Index shaderOriginalCenterPropertyIndex = mTurnEffect[mIndex].GetPropertyIndex(mTurnEffect[mIndex].PageTurnEffect::GetOriginalCenterPropertyName());
+        Property::Index shaderOriginalCenterPropertyIndex = mTurnEffect[mIndex].GetPropertyIndex("uOriginalCenter");
         Constraint originalCenterConstraint = Constraint::New<Vector2>( mTurnEffect[mIndex], shaderOriginalCenterPropertyIndex, OriginalCenterConstraint( mOriginalCenter, offset ));
         originalCenterConstraint.AddSource( Source( self, mPropertyPanDisplacement[mIndex] ) );
         originalCenterConstraint.Apply();
 
-        Property::Index shaderCurrentCenterPropertyIndex = mTurnEffect[mIndex].GetPropertyIndex(mTurnEffect[mIndex].PageTurnEffect::GetCurrentCenterPropertyName());
+        Property::Index shaderCurrentCenterPropertyIndex = mTurnEffect[mIndex].GetPropertyIndex("uCurrentCenter");
         Constraint currentCenterConstraint = Constraint::New<Vector2>( mTurnEffect[mIndex], shaderCurrentCenterPropertyIndex, CurrentCenterConstraint(mPageSize.width));
         currentCenterConstraint.AddSource( Source(self, mPropertyCurrentCenter[mIndex]) );
         currentCenterConstraint.AddSource( Source(mTurnEffect[mIndex], shaderOriginalCenterPropertyIndex) );
         currentCenterConstraint.Apply();
 
-        GetImpl( mTurnEffect[mIndex] ).ApplyInternalConstraint();
+        PageTurnApplyInternalConstraint(mTurnEffect[mIndex]);
 
         float distance = offset.Length();
         Constraint rotationConstraint = Constraint::New<Quaternion>( mPanActor, Actor::Property::ORIENTATION, RotationConstraint(distance, mPageSize.width, mIsTurnBack[mPanActor]));
@@ -899,14 +901,14 @@ void PageTurnView::PanContinuing( const Vector2& gesturePosition )
       {
         mPanActor.RemoveConstraints();
         mTurnEffect[mIndex].RemoveConstraints();
-        mTurnEffect[mIndex].SetOriginalCenter( mOriginalCenter );
+        mTurnEffect[mIndex].SetUniform("uOriginalCenter",mOriginalCenter );
         mConstraints = true;
         mPanDisplacement = 0.f;
       }
 
-      mTurnEffect[mIndex].SetCurrentCenter( currentCenter );
+      mTurnEffect[mIndex].SetUniform("uCurrentCenter", currentCenter );
       mCurrentCenter = currentCenter;
-      GetImpl( mTurnEffect[mIndex] ).ApplyInternalConstraint();
+      PageTurnApplyInternalConstraint(mTurnEffect[mIndex]);
     }
   }
 }
@@ -964,7 +966,7 @@ void PageTurnView::PanFinished( const Vector2& gesturePosition, float gestureSpe
     else // the pan finished position is far away from the spine, set up an animation to slide the page back instead of turning over
     {
       Animation animation= Animation::New( PAGE_SLIDE_BACK_ANIMATION_DURATION * (mOriginalCenter.x - mCurrentCenter.x) / mPageSize.width / PAGE_TURN_OVER_THRESHOLD_RATIO );
-      animation.AnimateTo( Property( mTurnEffect[mIndex], mTurnEffect[mIndex].PageTurnEffect::GetCurrentCenterPropertyName() ),
+      animation.AnimateTo( Property( mTurnEffect[mIndex], "uCurrentCenter" ),
                            mOriginalCenter, AlphaFunction::LINEAR );
       mAnimationActorPair[animation] = actor;
       mAnimationIndexPair[animation] = mIndex;
index dcc0b39..007fb2f 100644 (file)
@@ -28,9 +28,6 @@
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/control-impl.h>
 #include <dali-toolkit/public-api/controls/page-turn-view/page-turn-view.h>
-#include <dali-toolkit/internal/shader-effects/page-turn-effect-impl.h>
-#include <dali-toolkit/public-api/shader-effects/page-turn-effect.h>
-#include <dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.h>
 #include <dali-toolkit/public-api/controls/page-turn-view/page-factory.h>
 #include <dali-toolkit/public-api/controls/shadow-view/shadow-view.h>
 
@@ -324,9 +321,9 @@ protected:
   CameraActor                    mCameraActor;             ///< The camera actor attached to the off screen tasks
   bool                           mPanning;                 ///< The boolean to indicate whether the pan gesture is continuing
 
-  std::vector<Toolkit::PageTurnEffect>    mTurnEffect;     ///< The group of PageTurnEffects
-  PageTurnBookSpineEffect        mSpineEffectFront;        ///< The book spine shader effect without flipping image content
-  PageTurnBookSpineEffect        mSpineEffectBack;         ///< The book spine shader effect with image content flipped
+  std::vector<ShaderEffect>      mTurnEffect;              ///< The group of PageTurnEffects
+  ShaderEffect                   mSpineEffectFront;        ///< The book spine shader effect without flipping image content
+  ShaderEffect                   mSpineEffectBack;         ///< The book spine shader effect with image content flipped
   Vector2                        mSpineShadowParameter;    ///< The spine shadow parameter for all the above shader effects
   Vector2                        mOriginalCenter;          ///< The original center set to the PageTurnEffect
   Vector2                        mCurrentCenter;           ///< The current center set to the PageTurnEffect
index e9ea95a..1887934 100644 (file)
@@ -27,6 +27,7 @@ toolkit_src_files = \
    $(toolkit_src_dir)/controls/popup/popup-impl.cpp \
    $(toolkit_src_dir)/controls/popup/popup-style-impl.cpp \
    $(toolkit_src_dir)/controls/page-turn-view/page-turn-portrait-view-impl.cpp \
+   $(toolkit_src_dir)/controls/page-turn-view/page-turn-effect.cpp \
    $(toolkit_src_dir)/controls/page-turn-view/page-turn-landscape-view-impl.cpp \
    $(toolkit_src_dir)/controls/page-turn-view/page-turn-view-impl.cpp \
    $(toolkit_src_dir)/controls/scroll-bar/scroll-bar-impl.cpp \
@@ -56,8 +57,6 @@ toolkit_src_files = \
    $(toolkit_src_dir)/filters/emboss-filter.cpp \
    $(toolkit_src_dir)/filters/image-filter.cpp \
    $(toolkit_src_dir)/filters/spread-filter.cpp \
-   $(toolkit_src_dir)/shader-effects/page-turn-effect-impl.cpp \
-   $(toolkit_src_dir)/shader-effects/water-effect-impl.cpp \
    $(toolkit_src_dir)/styling/style-manager-impl.cpp \
    $(toolkit_src_dir)/text/bidirectional-support.cpp \
    $(toolkit_src_dir)/text/character-set-conversion.cpp \
diff --git a/dali-toolkit/internal/shader-effects/page-turn-effect-impl.cpp b/dali-toolkit/internal/shader-effects/page-turn-effect-impl.cpp
deleted file mode 100644 (file)
index 732bbf9..0000000
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include "page-turn-effect-impl.h"
-
-// EXTERNAL HEADERS
-#include <sstream>
-#include <dali/public-api/animation/constraint.h>
-#include <dali/public-api/common/stage.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace Internal
-{
-
-namespace
-{
-#define MAKE_STRING(A)#A
-
-const std::string CURRENT_CENTER_PROPERTY_NAME("uCurrentCenter");
-const std::string ORIGINAL_CENTER_PROPERTY_NAME("uOriginalCenter");
-const std::string PAGE_SIZE_PROPERTY_NAME("uPageSize");
-const std::string IS_TURNING_BACK_PROPERTY_NAME("uIsTurningBack");
-const std::string SHADOW_WIDTH_PROPERTY_NAME("uShadowWidth");
-const std::string SPINE_SHADOW_PARAMETER_PROPERTY_NAME("uSpineShadowParameter");
-
-// fake shadow is used to enhance the effect, with its default maximum width to be pageSize * 0.15
-const float DEFAULT_SHADOW_WIDTH(0.15f);
-
-// the major&minor radius (in pixels) to form an ellipse shape
-// the top-left quarter of this ellipse is used to calculate spine normal for simulating shadow
-const Vector2 DEFAULT_SPINE_SHADOW_PARAMETER(50.0f, 20.0f);
-
-// when the vanishing point is very far away(pageHeight*THRESHOLD), make it infinitely, in this case, the page bent horizontally
-const float THRESHOLD(20.0);
-
-void CommonParametersConstraint( Matrix& current, const PropertyInputContainer& inputs )
-{
-  const Vector2& originalCenter = inputs[0]->GetVector2();
-  Vector2 currentCenter = inputs[1]->GetVector2();
-  const Vector2& pageSize = inputs[2]->GetVector2();
-
-  // calculate the curve direction and the vanishing point
-  // here, the vanishing point is the intersection of spine with the line passing through original center and vertical to curve direction
-  Vector2 curveDirection( currentCenter - originalCenter );
-  curveDirection.Normalize();
-  if( fabs(curveDirection.y) < 0.01f) // eliminate the possibility of division by zero in the next step
-  {
-    curveDirection.y = 0.01f;
-  }
-  float vanishingPointY = originalCenter.y + curveDirection.x * originalCenter.x / curveDirection.y;
-
-  float curveEndY, cosTheta ,sinTheta ,translateX, translateY;
-  // when the vanishing point is very far away, make it infinitely, in this case, the page bent horizontally
-  if( fabs(vanishingPointY-pageSize.y*0.5f) >= pageSize.y*THRESHOLD )
-  {
-    curveDirection = Vector2(-1.f,0.f);
-    currentCenter.y = originalCenter.y;
-
-    curveEndY = originalCenter.y;
-    cosTheta = 1.f;
-    sinTheta = 0.f;
-    translateX = currentCenter.x - originalCenter.x;
-    translateY = vanishingPointY;
-  }
-  else
-  {
-    curveEndY = currentCenter.y - curveDirection.y * (currentCenter.x/curveDirection.x) ;
-    Vector2 v1( currentCenter.x, currentCenter.y - vanishingPointY );
-    v1.Normalize();
-    Vector2 v2( originalCenter.x, originalCenter.y - vanishingPointY );
-    v2.Normalize();
-    cosTheta = v1.x*v2.x + v1.y*v2.y;
-    sinTheta = ( vanishingPointY > pageSize.y*0.5f ) ? sqrt(1.0-cosTheta*cosTheta) : -sqrt(1.0-cosTheta*cosTheta);
-    translateX = currentCenter.x - cosTheta*originalCenter.x - sinTheta*( originalCenter.y-vanishingPointY );
-    translateY = currentCenter.y + sinTheta*originalCenter.x - cosTheta*( originalCenter.y-vanishingPointY );
-  }
-
-  float originalLength = fabs(originalCenter.x/curveDirection.x);
-  float currentLength = fabs(currentCenter.x/curveDirection.x);
-  float curveHeight = 0.45f*sqrt(originalLength*originalLength - currentLength*currentLength);
-
-  float* parameterArray = current.AsFloat();
-  parameterArray[0] = cosTheta;
-  parameterArray[1] = -sinTheta;
-  parameterArray[2] = originalCenter.x;
-  parameterArray[3] = originalCenter.y;
-  parameterArray[4] = sinTheta;
-  parameterArray[5] = cosTheta;
-  parameterArray[6] = currentCenter.x;
-  parameterArray[7] = currentCenter.y;
-  parameterArray[8] = translateX;
-  parameterArray[9] = translateY;
-  parameterArray[10] = vanishingPointY;
-  parameterArray[11] = curveEndY;
-  parameterArray[12] = curveDirection.x;
-  parameterArray[13] = curveDirection.y;
-  parameterArray[14] = curveHeight;
-  parameterArray[15] = currentLength;
-}
-
-}//namespace
-
-PageTurnEffect::PageTurnEffect()
-: mOriginalCenterPropertyIndex(Property::INVALID_INDEX),
-  mCurrentCenterPropertyIndex(Property::INVALID_INDEX)
-{
-}
-
-PageTurnEffect::~PageTurnEffect()
-{
-}
-
-Toolkit::PageTurnEffect PageTurnEffect::CreateShaderEffect( bool enableBlending )
-{
-  std::string vertexShader = MAKE_STRING(
-    /*
-     * The common parameters for all the vertices, calculate in CPU then pass into the shader as uniforms
-     *
-     *  first part of the page, (outside the the line passing through original center and vertical to curve direction)
-     * no Z change, only 2D rotation and translation
-     * ([0][0],[0][1],[1][0],[1][1]) mat2 rotateMatrix
-     * ([2][0],[2][1]) vec2 translationVector
-     *
-     * ([0][2],[0][3]) vec2 originalCenter: Typically the press down position of the Pan Gesture
-     * ([1][2],[1][3]) vec2 currentCenter: Typically the current position of the Pan Gesture
-     * ([3][0],[3][1]) vec2 curveDirection: The normalized vector pointing from original center to current center
-     * ([2][2]) float vanishingPointY: The Y coordinate of the intersection of the spine
-     *                                 and the line which goes through the original center and is vertical to the curveDirection
-     * ([2][3]) float curveEndY: The Y coordinate of intersection of the spine and the line through both original and current center
-     * ([3][2]) float curveHeight: The height of the interpolated hermite curve.
-     * ([3][3]) float currentLength: The length from the current center to the curveEnd.
-     */
-    precision mediump float;\n
-    uniform mat4 uCommonParameters;\n
-    \n
-    uniform vec2 uPageSize;\n
-    uniform float uIsTurningBack;\n
-    uniform float uShadowWidth;\n
-    varying vec3 vNormal;\n
-    varying vec4 vPosition;\n
-    varying float vEdgeShadow;\n
-    \n
-    void main()\n
-    {\n
-      vec4 position = vec4( aPosition.xy, 0.0, 1.0);\n
-      vec2 currentCenter = vec2( uCommonParameters[1][2], uCommonParameters[1][3]);\n
-      vec2 originalCenter = vec2( uCommonParameters[0][2], uCommonParameters[0][3]);\n
-      vec3 normal = vec3(0.0,0.0,1.0);\n
-      \n
-      if(currentCenter.x < originalCenter.x)\n
-      {\n
-        // change the coordinate origin from the center of the page to its top-left
-        position.xy += uPageSize * 0.5;\n
-        vec2 curveDirection = vec2( uCommonParameters[3]);\n
-        vec3 vanishingPoint = vec3(0.0, uCommonParameters[2][2], 0.0);\n
-        // first part of the page, (outside the the line passing through original center and vertical to curve direction)
-        //no Z change, only 2D rotation and translation
-        if( dot(curveDirection, position.xy - originalCenter) < 0.0 )
-        {\n
-          position.y -= vanishingPoint.y;\n
-          position.xy = mat2(uCommonParameters)*position.xy + vec2( uCommonParameters[2]);\n
-        }\n
-         // second part of the page, bent as a ruled surface
-        else\n
-        {\n
-          // calculate on the flat plane, between
-          // the first line passing through current vertex and vanishing point
-          // the second line passing through original center and current center
-          vec2 curveEnd = vec2( 0.0, uCommonParameters[2][3] );\n
-          vec2 curFlatDirection = vec2(0.0,1.0);\n
-          float lengthFromCurve = position.y - originalCenter.y;\n
-          float lengthOnCurve = position.x;\n
-          if(currentCenter.y != originalCenter.y)\n
-          {\n
-            curFlatDirection = normalize(position.xy - vanishingPoint.xy);\n
-            lengthFromCurve = (curveEnd.x*curveDirection.y-curveEnd.y*curveDirection.x-position.x*curveDirection.y+position.y*curveDirection.x)
-                            / (curFlatDirection.x*curveDirection.y-curFlatDirection.y*curveDirection.x);\n
-            lengthOnCurve = length(position.xy+lengthFromCurve*curFlatDirection-curveEnd);\n
-          }\n
-          \n
-          // define the control points of hermite curve, composed with two segments
-          // calulation is carried out on the 2D plane which is passing through both current and original center and vertical to the image plane
-          float currentLength = uCommonParameters[3][3];\n
-          float originalLength =  abs(originalCenter.x/curveDirection.x);\n
-          float height = uCommonParameters[3][2];\n
-          float percentage = currentLength/originalLength;\n
-          //vec2 SegmentOneControlPoint0 = vec2(0.0, 0.0);
-          vec2 SegmentOneControlPoint1 = vec2((0.65*percentage - 0.15)*originalLength, (0.8 + 0.2 * percentage)*height); \n
-          vec2 SegmentTwoControlPoint0 = SegmentOneControlPoint1;\n
-          vec2 SegmentTwoControlPoint1 = vec2(currentLength, 0.0); \n
-          vec2 SegmentOneTangentVector0 = SegmentOneControlPoint1;\n
-          vec2 SegmentOneTangentVector1 = vec2(0.5*originalLength,0.0);\n
-          vec2 SegmentTwoTangentVector0 = SegmentOneTangentVector1;\n
-          vec2 SegmentTwoTangentVector1 = SegmentOneTangentVector1;\n
-          \n
-          // calulate the corresponding curve point position and its tangent vector
-          // it is a linear mapping onto nonlinear curves, might cause some unwanted deformation
-          // but as there are no analytical method to calculate the curve length on arbitrary segment
-          // no efficient way to solve this nonlinear mapping, Numerical approximation would cost too much computation in shader
-          vec2 curvePoint2D;\n
-          vec2 tangent;\n
-          float t0 = lengthOnCurve / originalLength;\n
-          if(t0<=0.5)\n
-          {\n
-            float t = 2.0*t0;\n
-            float t_2 = t*t;\n
-            float t_3 = t*t_2;\n
-            curvePoint2D = (-2.0*t_3+3.0*t_2)*SegmentOneControlPoint1
-                         + (t_3-2.0*t_2+t)*SegmentOneTangentVector0 + (t_3-t_2)*SegmentOneTangentVector1;\n
-            tangent = (-6.0*t_2+6.0*t)*SegmentOneControlPoint1
-                    + (3.0*t_2-4.0*t+1.0)*SegmentOneTangentVector0 + (3.0*t_2-2.0*t)*SegmentOneTangentVector1;\n
-          }\n
-          else\n
-          {\n
-            float t = 2.0*t0-1.0;\n
-            float t_2 = t*t;\n
-            float t_3 = t*t_2;\n
-            curvePoint2D = (2.0*t_3-3.0*t_2+1.0)*SegmentTwoControlPoint0 + (-2.0*t_3+3.0*t_2)*SegmentTwoControlPoint1
-                         + (t_3-2.0*t_2+t)*SegmentTwoTangentVector0 + (t_3-t_2)*SegmentTwoTangentVector1;\n
-            tangent = (6.0*t_2-6.0*t)*SegmentTwoControlPoint0 + (-6.0*t_2+6.0*t)*SegmentTwoControlPoint1
-                    + (3.0*t_2-4.0*t+1.0)*SegmentTwoTangentVector0 + (3.0*t_2-2.0*t)*SegmentTwoTangentVector1;\n
-            // a trick to eliminate some optical illusion caused by the gradient matter of normal in per-fragment shading
-            // which is caused by linear interpolation of normal vs. nonlinear lighting
-            // will notice some artifact in the areas with dramatically normal changes, so compress the normal differences here
-            tangent.y *=  min(1.0, length(position.xyz - vanishingPoint) / uPageSize.y ); \n
-          }\n
-          vec3 curvePoint = vec3(curveEnd - curvePoint2D.x*curveDirection,max(0.0,curvePoint2D.y));\n
-          vec3 tangentVector = vec3(-tangent.x*curveDirection,tangent.y);\n
-          \n
-          // locate the new vertex position on the line passing through both vanishing point and the calculated curve point position
-          vec3 curLiftDirection = vec3(0.0,-1.0,0.0);\n
-          if(currentCenter.y != originalCenter.y)\n
-          {\n
-            curLiftDirection = normalize(curvePoint - vanishingPoint);\n
-            tangentVector *= (curveDirection.y > 0.0) ? -1.0 : 1.0;\n
-          // an heuristic adjustment here, to compensate the linear parameter mapping onto the nonlinear curve
-            float Y0 = position.y - curveDirection.y * (position.x/curveDirection.x); \n
-            float proportion;
-            float refLength;\n
-            if(abs(Y0-vanishingPoint.y) > abs(curveEnd.y-vanishingPoint.y)) \n
-            {\n
-              proportion = abs(curveEnd.y - Y0) / (abs(curveEnd.y-Y0)+abs(curveEnd.y - vanishingPoint.y)); \n
-              refLength = proportion*length(originalCenter-vanishingPoint.xy) / (proportion-1.0); \n
-            }\n
-            else\n
-            {\n
-              proportion = abs(curveEnd.y - Y0) / abs(curveEnd.y - vanishingPoint.y);\n
-              refLength = proportion*length(originalCenter-vanishingPoint.xy); \n
-            }\n
-            float Y1 = currentCenter.y - (normalize(currentCenter-vanishingPoint.xy)).y * refLength; \n
-            position.y = mix(Y0, Y1, t0); \n
-          }\n
-          position.xz = curvePoint.xz - lengthFromCurve*curLiftDirection.xz;\n
-          // calculate the normal vector, will be used for lighting
-          normal = cross(curLiftDirection, normalize(tangentVector));\n
-          // the signature of Z is decided by the page turning direction:
-          // from left to right(negative); from right to left (positive)
-          position.z *= -uIsTurningBack;\n
-          normal.xy *= -uIsTurningBack;\n
-        }\n
-        // change the coordinate origin from the top-left of the page to its center
-        position.xy -= uPageSize * 0.5; \n
-      }\n
-      position.z += aPosition.z;\n
-      gl_Position = uMvpMatrix * position;\n
-     // varying parameters for fragment shader
-      vTexCoord = aTexCoord;
-      vNormal = uNormalMatrix*normal;\n
-      vPosition = uModelView * position;\n
-  );
-
-  std::string vertexShaderWithFakedShadow = MAKE_STRING(
-      // display shadow, the fake shadow value is calculated according to the height and the distance from page edge
-      vTexCoord.x = (aTexCoord.x-sTextureRect.s) /( 1.0 - uShadowWidth ) + sTextureRect.s;\n
-      vTexCoord.y = ( aTexCoord.y-sTextureRect.t-0.5*uShadowWidth*(sTextureRect.q-sTextureRect.t) )/( 1.0 - uShadowWidth ) + sTextureRect.t;\n
-      float heightCoef = (1.0 + position.z*uIsTurningBack*3.0 / uPageSize.x) * 0.6;
-      vEdgeShadow = clamp(0.9 - heightCoef, 0.0, 0.9 ); \n
-      if( vTexCoord.y >= sTextureRect.q || vTexCoord.y <= sTextureRect.t || vTexCoord.x >= sTextureRect.p  )\n
-      {\n
-        float inversedShadowWidth = (1.0-uShadowWidth) / uShadowWidth ;\n
-        float alpha1 = (vTexCoord.x-sTextureRect.p) * inversedShadowWidth / (sTextureRect.p - sTextureRect.s);\n
-        inversedShadowWidth = 2.0 * inversedShadowWidth  / (sTextureRect.q - sTextureRect.t); \n
-        float alpha2 = (vTexCoord.y-sTextureRect.q) * inversedShadowWidth;\n
-        float alpha3 = (sTextureRect.t-vTexCoord.y) * inversedShadowWidth;\n
-        float alpha;\n
-        if(alpha1 > 0.0 && alpha2 > 0.0) alpha = sqrt(alpha2*alpha2+alpha1*alpha1)/sqrt(1.0 + max(alpha1,alpha2)*max(alpha1,alpha2));\n //bottom-right corner
-        else if(alpha1 > 0.0 && alpha3 > 0.0) alpha = sqrt(alpha3*alpha3+alpha1*alpha1)/sqrt(1.0+max(alpha1,alpha3)*max(alpha1,alpha3));\n //top-right corner
-        else alpha = max(alpha1,max(alpha2,alpha3)); \n
-        alpha = 0.9 - alpha*0.9;\n
-        vEdgeShadow = clamp(alpha - heightCoef, 0.0, 0.9 ); \n
-      }\n
-  );
-
-  std::string vertexShaderEnd("}");
-
-  std::string fragmentShaderPartOne = MAKE_STRING(
-    precision mediump float;\n
-    uniform vec2 uPageSize;\n
-    uniform vec2 uSpineShadowParameter;\n
-    varying vec3 vNormal;\n
-    varying vec4 vPosition;\n
-    varying float vEdgeShadow;\n
-    \n
-    void main()\n
-    {\n
-      // need to re-normalize the interpolated normal
-      vec3 normal = normalize(vNormal);\n
-      vec4 texel;\n
-      float spineShadowCoef = 1.0; \n
-   );
-
-  std::string fragmentShaderWithFakedShadow = MAKE_STRING(
-      if( vTexCoord.y > sTextureRect.q || vTexCoord.y < sTextureRect.t || vTexCoord.x > sTextureRect.p  )\n
-         texel = vec4(0.0,0.0,0.0,vEdgeShadow);
-      else \n
-  );
-
-  std::string fragmentShaderPartTwo = MAKE_STRING(
-      { \n
-        // display page content
-        // display back image of the page, flip the texture
-        if(  dot(vPosition.xyz, normal) > 0.0 ) texel = texture2D( sTexture, vec2( sTextureRect.p+sTextureRect.s-vTexCoord.x, vTexCoord.y ) );\n
-        // display front image of the page
-        else texel = texture2D( sTexture, vTexCoord );\n
-        // display book spine, a stripe of shadowed texture
-        float pixelPos = (vTexCoord.x-sTextureRect.s)*uPageSize.x; \n
-        if(pixelPos < uSpineShadowParameter.x) \n
-        {\n
-          float x = pixelPos - uSpineShadowParameter.x;\n
-          float y = sqrt( uSpineShadowParameter.x*uSpineShadowParameter.x - x*x);\n
-          spineShadowCoef = normalize( vec2( uSpineShadowParameter.y*x/uSpineShadowParameter.x, y ) ).y;\n
-        }\n
-      }\n
-    // calculate the lighting
-    // set the ambient color as vec3(0.4);
-      float lightColor = abs( normal.z ) * 0.6 + 0.4;\n
-      gl_FragColor = vec4( ( spineShadowCoef* lightColor)* texel.rgb , texel.a ) * uColor;\n
-    }
-  );
-
-  // Create the implementation, temporarily owned on stack,
-  Dali::ShaderEffect shaderEffectCustom;
-  std::ostringstream vertexShaderStringStream;
-  std::ostringstream fragmentShaderStringStream;
-  if( enableBlending )
-  {
-    vertexShaderStringStream<< vertexShader << vertexShaderWithFakedShadow << vertexShaderEnd;
-    fragmentShaderStringStream<< fragmentShaderPartOne << fragmentShaderWithFakedShadow << fragmentShaderPartTwo;
-    shaderEffectCustom = Dali::ShaderEffect::New( vertexShaderStringStream.str(), fragmentShaderStringStream.str(), GeometryType( GEOMETRY_TYPE_IMAGE ),
-            ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_DEPTH_BUFFER | ShaderEffect::HINT_BLENDING) );
-  }
-  else
-  {
-    vertexShaderStringStream<< vertexShader << vertexShaderEnd;
-    fragmentShaderStringStream<< fragmentShaderPartOne << fragmentShaderPartTwo;
-    shaderEffectCustom = Dali::ShaderEffect::New( vertexShaderStringStream.str(), fragmentShaderStringStream.str(), GeometryType( GEOMETRY_TYPE_IMAGE ),
-            ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_DEPTH_BUFFER ) );
-  }
-
-  PageTurnEffect* shaderImpl = new PageTurnEffect();
-  Dali::Toolkit::PageTurnEffect handle = Toolkit::PageTurnEffect( shaderEffectCustom, shaderImpl );
-
-  shaderImpl->Initialize( handle );
-
-  Vector2 defaultPageSize = Dali::Stage::GetCurrent().GetSize();
-  Matrix zeroMatrix(true);
-  handle.SetUniform( "uCommonParameters", zeroMatrix );
-  handle.SetUniform( PAGE_SIZE_PROPERTY_NAME, defaultPageSize/(1.f-DEFAULT_SHADOW_WIDTH) );
-  handle.SetUniform( SHADOW_WIDTH_PROPERTY_NAME, DEFAULT_SHADOW_WIDTH );
-  handle.SetUniform( SPINE_SHADOW_PARAMETER_PROPERTY_NAME, DEFAULT_SPINE_SHADOW_PARAMETER );
-
-  shaderImpl->mOriginalCenterPropertyIndex = handle.RegisterProperty( ORIGINAL_CENTER_PROPERTY_NAME, Vector2( defaultPageSize[0], defaultPageSize[1]*0.5f ) );
-  shaderImpl->mCurrentCenterPropertyIndex = handle.RegisterProperty( CURRENT_CENTER_PROPERTY_NAME, Vector2( defaultPageSize[0], defaultPageSize[1]*0.5f ) );
-
-  shaderImpl->ApplyInternalConstraint();
-
-  // setting isTurningBack to -1.0f here means turning page forward
-  handle.SetUniform( IS_TURNING_BACK_PROPERTY_NAME, -1.0f );
-
-  return handle;
-}
-
-void PageTurnEffect::SetPageSize(const Vector2& pageSize)
-{
-  mShaderEffect.SetUniform(PAGE_SIZE_PROPERTY_NAME, pageSize);
-}
-
-void PageTurnEffect::SetOriginalCenter(const Vector2& originalCenter)
-{
-  mShaderEffect.SetProperty( mOriginalCenterPropertyIndex, originalCenter );
-}
-
-void PageTurnEffect::SetCurrentCenter(const Vector2& currentCenter)
-{
-  mShaderEffect.SetProperty( mCurrentCenterPropertyIndex, currentCenter );
-}
-
-void PageTurnEffect::SetIsTurningBack(bool isTurningBack)
-{
-  float direction = isTurningBack ? 1.0f : -1.0f;
-  mShaderEffect.SetUniform(IS_TURNING_BACK_PROPERTY_NAME, direction);
-}
-
-void PageTurnEffect::SetShadowWidth(float shadowWidth)
-{
-  mShaderEffect.SetUniform( SHADOW_WIDTH_PROPERTY_NAME, shadowWidth );
-}
-
-void PageTurnEffect::SetSpineShadowParameter(const Vector2& spineShadowParameter)
-{
-  mShaderEffect.SetUniform( SPINE_SHADOW_PARAMETER_PROPERTY_NAME, spineShadowParameter);
-}
-
-void PageTurnEffect::ApplyInternalConstraint()
-{
-  Constraint constraint = Constraint::New<Matrix>( mShaderEffect, mShaderEffect.GetPropertyIndex( "uCommonParameters" ), CommonParametersConstraint );
-  constraint.AddSource( LocalSource( mOriginalCenterPropertyIndex ) );
-  constraint.AddSource( LocalSource( mCurrentCenterPropertyIndex ) );
-  constraint.AddSource( LocalSource( mShaderEffect.GetPropertyIndex( PAGE_SIZE_PROPERTY_NAME ) ) );
-  constraint.Apply();
-}
-
-const std::string& PageTurnEffect::GetPageSizePropertyName() const
-{
-  return PAGE_SIZE_PROPERTY_NAME;
-}
-
-const std::string& PageTurnEffect::GetOriginalCenterPropertyName() const
-{
-  return ORIGINAL_CENTER_PROPERTY_NAME;
-}
-
-const std::string& PageTurnEffect::GetCurrentCenterPropertyName() const
-{
-  return CURRENT_CENTER_PROPERTY_NAME;
-}
-
-void PageTurnEffect::Initialize( Dali::ShaderEffect shaderEffect )
-{
-  // Save a reference to the shader handle
-  mShaderEffect = shaderEffect;
-}
-
-} // namespace Internal
-
-} // namespace Toolkit
-
-} // namespace Dali
diff --git a/dali-toolkit/internal/shader-effects/page-turn-effect-impl.h b/dali-toolkit/internal/shader-effects/page-turn-effect-impl.h
deleted file mode 100644 (file)
index b75af2e..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-#ifndef __DALI_TOOLKIT_INTERNAL_PAGE_TURN_EFFECT_H__
-#define __DALI_TOOLKIT_INTERNAL_PAGE_TURN_EFFECT_H__
-
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/animation/constraint.h>
-
-// INTERNAL INCLUDES
-#include <dali-toolkit/public-api/shader-effects/page-turn-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace Internal
-{
-
-/**
- * PageTurnEffect implementation class
- */
-class PageTurnEffect : public ShaderEffect::Extension
-{
-public:
-
-  PageTurnEffect();
-  /**
-   * Virtual destructor.
-   */
-  virtual ~PageTurnEffect();
-
-  /**
-   * @copydoc Dali::Toolkit::PageTurnEffect::New
-   */
-  static Toolkit::PageTurnEffect CreateShaderEffect( bool enableBlending );
-
-  /**
-   * @copydoc Dali::Toolkit::PageTurnEffect::SetPageSize
-   */
-  void SetPageSize(const Vector2& pageSize);
-
-  /**
-   * @copydoc Dali::Toolkit::PageTurnEffect::SetOriginalCenter
-   */
-  void SetOriginalCenter(const Vector2& originalCenter);
-
-  /**
-   * @copydoc Dali::Toolkit::PageTurnEffect::SetCurrentCenter
-   */
-  void SetCurrentCenter(const Vector2& currentCenter);
-
-  /**
-   * @copydoc Dali::Toolkit::PageTurnEffect::SetIsTurningBack
-   */
-  void SetIsTurningBack(bool isTurningBack);
-
-  /**
-   * @copydoc Dali::Toolkit::PageTurnEffect::SetShadowWidth
-   */
-  void SetShadowWidth(float shadowWidth);
-
-  /**
-   *@copydoc Dali::Toolkit::PageTurnEffect::SetSpineShadowParameter
-   */
-  void SetSpineShadowParameter(const Vector2& spineShadowParameter);
-
-  /**
-   * The internal constraint uses the OriginalCenter property and the CurrentCenter Property
-   * to update the variety of common parameters which are with the same value for all the vertices.
-   * Note: For each actor, the constraints are applied in the same order as the calls to Actor::ApplyConstraint().
-   * So if there are other contraints applied to the OriginalCenter or CurrentCenter while when using this effect,
-   * call this method to get the internal constraints and re-apply it afterwards.
-   */
-  void ApplyInternalConstraint();
-
-  /**
-   * @copydoc Dali::Toolkit::PageTurnEffect::GetPageSizePropertyName
-   */
-  const std::string& GetPageSizePropertyName() const;
-
-  /**
-  * @copydoc Dali::Toolkit::PageTurnEffect::GetOriginalCenterPropertyName
-  */
-  const std::string& GetOriginalCenterPropertyName() const;
-
-  /**
-   * @copydoc Dali::Toolkit::PageTurnEffect::GetCurrentCenterPropertyName
-   */
-  const std::string& GetCurrentCenterPropertyName() const;
-
-private:
-
-  void Initialize( ShaderEffect shaderEffect );
-
-private:
-  ShaderEffect mShaderEffect;
-
-  Property::Index mOriginalCenterPropertyIndex;
-  Property::Index mCurrentCenterPropertyIndex;
-
-private:
-  //undefined copy constructor.
-  PageTurnEffect( const PageTurnEffect& );
-
-  //Undefined assignment operator.
-  PageTurnEffect& operator=( const PageTurnEffect& );
-
-};
-
-} // namespace Internal
-
-//Helpers for public-api forwarding methods
-inline Toolkit::Internal::PageTurnEffect& GetImpl( Toolkit::PageTurnEffect& effect )
-{
-  DALI_ASSERT_ALWAYS( effect );
-  return static_cast<Internal::PageTurnEffect&>( effect.GetExtension() );
-}
-
-inline const Toolkit::Internal::PageTurnEffect& GetImpl( const Toolkit::PageTurnEffect& effect )
-{
-  DALI_ASSERT_ALWAYS( effect );
-  return static_cast<const Internal::PageTurnEffect&>( effect.GetExtension() );
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
-
-#endif /* __DALI_TOOLKIT_INTERNAL_PAGE_TURN_EFFECT_H__*/
diff --git a/dali-toolkit/internal/shader-effects/water-effect-impl.cpp b/dali-toolkit/internal/shader-effects/water-effect-impl.cpp
deleted file mode 100644 (file)
index 8ecaf61..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include "water-effect-impl.h"
-
-// EXTERNAL INCLUDES
-#include <sstream>
-#include <iomanip>
-
-// INTERNAL INCLUDES
-#include <dali-toolkit/public-api/shader-effects/water-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace Internal
-{
-
-namespace
-{
-
-static const unsigned int LIGHT_MAP_SIZE = 512; ///< Size of the bitmap created for the pre-calculated wave function
-static const float MAX_WAVE_RADIUS = 80.0f;     ///< Maximum radius of the wave in percentage of the texture coordinates
-
-} // namespace
-
-WaterEffect::WaterEffect( unsigned int numberOfWaves )
-: mNumberOfWaves( numberOfWaves )
-{
-}
-
-WaterEffect::~WaterEffect()
-{
-}
-
-unsigned int WaterEffect::GetNumberOfWaves() const
-{
-  return mNumberOfWaves;
-}
-
-
-Dali::Toolkit::WaterEffect WaterEffect::CreateShaderEffect( unsigned int numberOfWaves )
-{
-  std::ostringstream vertexShaderStringStream;
-  vertexShaderStringStream << "#define NUMBER_OF_DROPS " << numberOfWaves << "\n";
-  vertexShaderStringStream << "#define MAX_WAVE_RADIUS " << std::setprecision(1) << MAX_WAVE_RADIUS << "\n";
-
-  std::string vertexShader(
-      "mediump vec4 position = vec4( aPosition, 1.0 );\n"
-      "\n"
-      "struct Drops\n"
-      "{\n"
-      "  mediump vec2 center;\n"
-      "  mediump float radius;\n"
-      "  mediump float amplitude;\n"
-      "};\n"
-      "uniform Drops uDrops[NUMBER_OF_DROPS];\n"
-      "varying mediump vec4 vColor;\n"
-      "void main()\n"
-      "{\n"
-      "  position = uModelView * position;\n"
-      "  mediump float refraction = 0.0;\n"
-      "  for (int i=0; i<NUMBER_OF_DROPS; ++i)\n"
-      "  {\n"
-      "    mediump float distance = distance( uDrops[i].center, position.xy );\n"
-      "    mediump float attenuation = clamp(distance / uDrops[i].radius, 0.0, 1.0) * 1.57;\n"
-      "    refraction += uDrops[i].amplitude * cos( (distance - uDrops[i].radius) *0.075 ) * cos(attenuation);\n"
-      "  }\n"
-      "  vColor = uColor + vec4(vec3(clamp(refraction, -0.1, 1.0)), 1.0);\n"
-      "  vTexCoord = aTexCoord + vec2( sin(refraction)/MAX_WAVE_RADIUS );\n"
-      "  gl_Position = uProjection * position;\n"
-      "}\n");
-  vertexShaderStringStream << vertexShader;
-
-  std::ostringstream fragmentShaderStringStream;
-
-  std::string fragmentShader(
-      "varying mediump vec4 vColor;\n"
-      "void main()\n"
-      "{\n"
-      "  gl_FragColor = texture2D( sTexture, vTexCoord)*vColor;\n"
-      "}\n");
-  fragmentShaderStringStream << fragmentShader;
-
-  // Create the implementation, temporarily owned on stack
-  ShaderEffect shaderEffect = ShaderEffect::New(
-      vertexShaderStringStream.str(),
-      fragmentShaderStringStream.str(),
-      GEOMETRY_TYPE_IMAGE,
-      ShaderEffect::HINT_GRID );
-
-  WaterEffect* shaderImpl = new WaterEffect( numberOfWaves );
-
-  Dali::Toolkit::WaterEffect handle = Dali::Toolkit::WaterEffect( shaderEffect, shaderImpl );
-
-  shaderImpl->Initialize( handle );
-
-  for ( unsigned int index = 0; index < shaderImpl->mNumberOfWaves; ++index )
-  {
-    handle.SetUniform( shaderImpl->GetAmplitudePropertyName( index ), 0.0f );
-    handle.SetUniform( shaderImpl->GetCenterPropertyName( index ), Vector2(0.0f, 0.0f), ShaderEffect::COORDINATE_TYPE_VIEWPORT_POSITION );
-    handle.SetUniform( shaderImpl->GetPropagationPropertyName( index ), 0.0f );
-  }
-
-  return handle;
-}
-
-void WaterEffect::SetAmplitude( unsigned int index, float amplitude )
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfWaves );
-  mShaderEffect.SetUniform( GetAmplitudePropertyName( index ), amplitude );
-}
-
-void WaterEffect::SetCenter( unsigned int index, const Vector2& center )
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfWaves );
-  mShaderEffect.SetUniform( GetCenterPropertyName( index ), center, ShaderEffect::COORDINATE_TYPE_VIEWPORT_POSITION );
-}
-
-void WaterEffect::SetPropagation( unsigned int index, float radius )
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfWaves );
-  mShaderEffect.SetUniform( GetPropagationPropertyName( index ) , radius );
-}
-
-float WaterEffect::GetAmplitude( unsigned int index ) const
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfWaves );
-  Property::Index propertyIndex = mShaderEffect.GetPropertyIndex( GetAmplitudePropertyName( index ) );
-  return mShaderEffect.GetProperty( propertyIndex ).Get<float>();
-}
-
-Vector2 WaterEffect::GetCenter( unsigned int index ) const
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfWaves );
-  Property::Index propertyIndex = mShaderEffect.GetPropertyIndex( GetCenterPropertyName( index ) );
-  return mShaderEffect.GetProperty( propertyIndex ).Get<Vector2>();
-}
-
-float WaterEffect::GetPropagation( unsigned int index ) const
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfWaves );
-  Property::Index propertyIndex = mShaderEffect.GetPropertyIndex( GetPropagationPropertyName( index ) );
-  return mShaderEffect.GetProperty( propertyIndex ).Get<float>();
-}
-
-std::string WaterEffect::GetAmplitudePropertyName( unsigned int index ) const
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfWaves );
-  std::ostringstream oss;
-  oss << "uDrops[" << index << "].amplitude";
-  return oss.str();
-}
-
-std::string WaterEffect::GetCenterPropertyName( unsigned int index ) const
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfWaves );
-  std::ostringstream oss;
-  oss << "uDrops[" << index << "].center";
-  return oss.str();
-}
-
-std::string WaterEffect::GetPropagationPropertyName( unsigned int index ) const
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfWaves );
-  std::ostringstream oss;
-  oss << "uDrops[" << index << "].radius";
-  return oss.str();
-}
-
-void WaterEffect::Initialize( Dali::ShaderEffect shaderEffect )
-{
-  // Save a reference to the shader handle
-  mShaderEffect = shaderEffect;
-}
-
-} // namespace Internal
-
-} // namespace Toolkit
-
-} // namespace Dali
diff --git a/dali-toolkit/internal/shader-effects/water-effect-impl.h b/dali-toolkit/internal/shader-effects/water-effect-impl.h
deleted file mode 100644 (file)
index 9aa6007..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-#ifndef __DALI_TOOLKIT_INTERNAL_WATER_EFFECT_H__
-#define __DALI_TOOLKIT_INTERNAL_WATER_EFFECT_H__
-
-/*
- * Copyright (c) 2014 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// EXTERNAL INCLUDES
-#include <sstream>
-#include <cmath>
-#include <dali/public-api/shader-effects/shader-effect.h>
-
-// INTERNAL INCLUDES
-#include <dali-toolkit/public-api/shader-effects/water-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace Internal
-{
-
-/**
- * WaterEffect implementation class
- */
-class WaterEffect : public ShaderEffect::Extension
-{
-public:
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::WaterEffect
-   */
-  WaterEffect( unsigned int numberOfWaves );
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::~WaterEffect
-   */
-  virtual ~WaterEffect();
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::GetNumberOfWaves
-   */
-  unsigned int GetNumberOfWaves() const;
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::CreateShaderEffect
-   */
-  static Dali::Toolkit::WaterEffect CreateShaderEffect( unsigned int numberOfWaves );
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::SetAmplitude
-   */
-  void SetAmplitude( unsigned int index, float amplitude );
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::SetCenter
-   */
-  void SetCenter( unsigned int index, const Vector2& center );
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::SetPropagation
-   */
-  void SetPropagation( unsigned int index, float radius );
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::GetPropagation
-   */
-  float GetPropagation( unsigned int index ) const;
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::GetAmplitude
-   */
-  float GetAmplitude( unsigned int index ) const;
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::GetCenter
-   */
-  Vector2 GetCenter( unsigned int index ) const;
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::GetAmplitudePropertyName
-   */
-  std::string GetAmplitudePropertyName( unsigned int index ) const;
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::GetCenterPropertyName
-   */
-  std::string GetCenterPropertyName( unsigned int index ) const;
-
-  /**
-   * @copydoc Dali::Toolkit::WaterEffect::GetPropagationPropertyName
-   */
-  std::string GetPropagationPropertyName( unsigned int index ) const;
-
-private:
-
-  void Initialize( ShaderEffect shaderEffect );
-
-private:
-
-  ShaderEffect mShaderEffect;
-
-  unsigned int mNumberOfWaves;
-
-
-private:
-
-  // Undefined copy constructor.
-  WaterEffect( const WaterEffect& );
-
-  // Undefined assignment operator.
-  WaterEffect& operator=( const WaterEffect& );
-
-};
-
-} // namespace Internal
-
-inline Internal::WaterEffect& GetImpl( Toolkit::WaterEffect& waterEffect )
-{
-  return static_cast<Internal::WaterEffect&>( waterEffect.GetExtension() );
-}
-
-inline const Internal::WaterEffect& GetImpl( const Toolkit::WaterEffect& waterEffect )
-{
-  return static_cast<const Internal::WaterEffect&>( waterEffect.GetExtension() );
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
-
-#endif // __DALI_TOOLKIT_INTERNAL_WATER_EFFECT_H__
index f275660..81bdafb 100755 (executable)
@@ -46,36 +46,6 @@ public_api_src_files = \
   $(public_api_src_dir)/focus-manager/focus-manager.cpp \
   $(public_api_src_dir)/focus-manager/keyboard-focus-manager.cpp \
   $(public_api_src_dir)/focus-manager/keyinput-focus-manager.cpp \
-  $(public_api_src_dir)/shader-effects/bubble-effect/bubble-effect.cpp \
-  $(public_api_src_dir)/shader-effects/bubble-effect/color-adjuster.cpp \
-  $(public_api_src_dir)/shader-effects/alpha-discard-effect.cpp \
-  $(public_api_src_dir)/shader-effects/bendy-effect.cpp \
-  $(public_api_src_dir)/shader-effects/blind-effect.cpp \
-  $(public_api_src_dir)/shader-effects/bouncing-effect.cpp \
-  $(public_api_src_dir)/shader-effects/carousel-effect.cpp \
-  $(public_api_src_dir)/shader-effects/displacement-effect.cpp \
-  $(public_api_src_dir)/shader-effects/dissolve-effect.cpp \
-  $(public_api_src_dir)/shader-effects/dissolve-local-effect.cpp \
-  $(public_api_src_dir)/shader-effects/distance-field-effect.cpp \
-  $(public_api_src_dir)/shader-effects/image-region-effect.cpp \
-  $(public_api_src_dir)/shader-effects/iris-effect.cpp \
-  $(public_api_src_dir)/shader-effects/mask-effect.cpp \
-  $(public_api_src_dir)/shader-effects/mirror-effect.cpp \
-  $(public_api_src_dir)/shader-effects/motion-blur-effect.cpp \
-  $(public_api_src_dir)/shader-effects/motion-stretch-effect.cpp \
-  $(public_api_src_dir)/shader-effects/nine-patch-mask-effect.cpp \
-  $(public_api_src_dir)/shader-effects/overlay-effect.cpp \
-  $(public_api_src_dir)/shader-effects/page-turn-book-spine-effect.cpp \
-  $(public_api_src_dir)/shader-effects/page-turn-effect.cpp \
-  $(public_api_src_dir)/shader-effects/quadratic-bezier.cpp \
-  $(public_api_src_dir)/shader-effects/ripple-effect.cpp \
-  $(public_api_src_dir)/shader-effects/ripple2d-effect.cpp \
-  $(public_api_src_dir)/shader-effects/shear-effect.cpp \
-  $(public_api_src_dir)/shader-effects/soft-button-effect.cpp \
-  $(public_api_src_dir)/shader-effects/spot-effect.cpp \
-  $(public_api_src_dir)/shader-effects/square-dissolve-effect.cpp \
-  $(public_api_src_dir)/shader-effects/swirl-effect.cpp \
-  $(public_api_src_dir)/shader-effects/water-effect.cpp \
   $(public_api_src_dir)/styling/style-manager.cpp \
   $(public_api_src_dir)/transition-effects/cube-transition-cross-effect.cpp \
   $(public_api_src_dir)/transition-effects/cube-transition-effect.cpp \
@@ -203,8 +173,6 @@ public_api_shader_effects_header_files = \
   $(public_api_src_dir)/shader-effects/motion-stretch-effect.h \
   $(public_api_src_dir)/shader-effects/nine-patch-mask-effect.h \
   $(public_api_src_dir)/shader-effects/overlay-effect.h \
-  $(public_api_src_dir)/shader-effects/page-turn-book-spine-effect.h \
-  $(public_api_src_dir)/shader-effects/page-turn-effect.h \
   $(public_api_src_dir)/shader-effects/quadratic-bezier.h \
   $(public_api_src_dir)/shader-effects/ripple-effect.h \
   $(public_api_src_dir)/shader-effects/ripple2d-effect.h \
@@ -212,12 +180,7 @@ public_api_shader_effects_header_files = \
   $(public_api_src_dir)/shader-effects/soft-button-effect.h \
   $(public_api_src_dir)/shader-effects/spot-effect.h \
   $(public_api_src_dir)/shader-effects/square-dissolve-effect.h \
-  $(public_api_src_dir)/shader-effects/swirl-effect.h \
-  $(public_api_src_dir)/shader-effects/water-effect.h
-
-public_api_bubble_effect_header_files =  \
-  $(public_api_src_dir)/shader-effects/bubble-effect/bubble-effect.h \
-  $(public_api_src_dir)/shader-effects/bubble-effect/color-adjuster.h
+  $(public_api_src_dir)/shader-effects/swirl-effect.h
 
 public_api_styling_header_files = \
   $(public_api_src_dir)/styling/style-manager.h
diff --git a/dali-toolkit/public-api/shader-effects/alpha-discard-effect.cpp b/dali-toolkit/public-api/shader-effects/alpha-discard-effect.cpp
deleted file mode 100644 (file)
index acccbf8..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include <dali-toolkit/public-api/shader-effects/alpha-discard-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-AlphaDiscardEffect::AlphaDiscardEffect()
-{
-}
-
-AlphaDiscardEffect::~AlphaDiscardEffect()
-{
-}
-
-AlphaDiscardEffect AlphaDiscardEffect::New()
-{
-  const char* ALPHA_DISCARD_FRAGMENT_SHADER_SOURCE =
-      "void main()                                                    \n"
-      "{                                                              \n"
-      "  mediump vec4 color = texture2D( sTexture, vTexCoord );       \n"
-      "  if(color.a <= 0.0001)                                        \n"
-      "  {                                                            \n"
-      "    discard;                                                   \n"
-      "  }                                                            \n"
-      "  gl_FragColor = color * uColor;                               \n"
-      "}                                                              \n";
-
-  ShaderEffect shader = ShaderEffect::New( "", // Use default
-                                           ALPHA_DISCARD_FRAGMENT_SHADER_SOURCE );
-  return AlphaDiscardEffect( shader );
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-AlphaDiscardEffect::AlphaDiscardEffect( ShaderEffect handle )
-: ShaderEffect( handle )
-{
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index c96f143..4d1e40a 100644 (file)
@@ -28,41 +28,35 @@ namespace Toolkit
 {
 
 /**
+ * @brief Creates a new Alpha discard effect
+ *
  * Alpha discard effect is used to discard fragments when the alpha colour value is below a threshold.
  * This is useful for stenciling.
  *
  * Usage example:
  *
  *   ImageActor actor = ImageActor::New( Image( EXAMPLE_IMAGE_PATH ) );
- *   AlphaDiscardEffect alphaDiscardEffect = AlphaDiscardEffect::New();
+ *   ShaderEffect alphaDiscardEffect = CreateAlphaDiscardEffect();
  *   actor.SetShaderEffect( alphaDiscardEffect );
+ *
+ * @return A handle to a newly allocated ShaderEffect.
  */
-class DALI_IMPORT_API AlphaDiscardEffect : public ShaderEffect
+inline ShaderEffect CreateAlphaDiscardEffect()
 {
-public:
-
-  /**
-   * Create an empty AlphaDiscardEffect handle.
-   */
-  AlphaDiscardEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~AlphaDiscardEffect();
-
-  /**
-   * Create a AlphaDiscardEffect.
-   * @return A handle to a newly allocated AlphaDiscardEffect.
-   */
-  static AlphaDiscardEffect New();
-
-private: // Not intended for application developers
+  const char* ALPHA_DISCARD_FRAGMENT_SHADER_SOURCE =
+      "void main()                                                    \n"
+      "{                                                              \n"
+      "  mediump vec4 color = texture2D( sTexture, vTexCoord );       \n"
+      "  if(color.a <= 0.0001)                                        \n"
+      "  {                                                            \n"
+      "    discard;                                                   \n"
+      "  }                                                            \n"
+      "  gl_FragColor = color * uColor;                               \n"
+      "}                                                              \n";
 
-  DALI_INTERNAL AlphaDiscardEffect( ShaderEffect handle );
-};
+  return ShaderEffect::New( "", // Use default
+                            ALPHA_DISCARD_FRAGMENT_SHADER_SOURCE );
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/bendy-effect.cpp b/dali-toolkit/public-api/shader-effects/bendy-effect.cpp
deleted file mode 100644 (file)
index 7563108..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/bendy-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string CENTER_PROPERTY_NAME( "uCenter" );
-const std::string DIRECTION_PROPERTY_NAME( "uDirection" );
-const std::string RADIUS_PROPERTY_NAME( "uRadius" );
-
-} // namespace
-
-BendyEffect::BendyEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-BendyEffect::BendyEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-BendyEffect::~BendyEffect()
-{
-}
-
-
-BendyEffect BendyEffect::New()
-{
-  // append the default version
-  std::string vertextShader(
-              "uniform mediump   vec2  uCenter;\n"
-              "uniform mediump   vec2  uDirection;\n"
-              "uniform mediump   float uRadius;\n"
-              "\n"
-              "varying mediump   float vShade;\n"
-              "\n"
-              "void main()\n"
-              "{\n"
-                  " mediump float lighting = 0.25;\n"
-                  " mediump vec4 position = uModelView * vec4(aPosition,1.0);\n"
-                  "\n"
-                  " mediump vec2 d = position.xy - uCenter;\n"
-                  " mediump float dist = max( 0.0, dot(d,uDirection) );\n"
-                  " mediump float radius = max(0.0, uRadius - dist * 0.01);\n"
-                  "\n"
-                  " mediump float cs = cos(dist / radius / 2.0);\n"
-                  " mediump float sn = sin(dist / radius / 2.0);\n"
-                  "\n"
-                  "position.xy = position.xy - uDirection * dist;\n"
-                  "\n"
-                  "position.xy += uDirection * sn * radius;\n"
-                  "position.z += (1.0 - cs) * radius;\n"
-                  "\n"
-                  "gl_Position = uProjection * position;\n"
-                  "\n"
-                  "vShade = 1.0 - abs(sn) * lighting;\n"
-                  "\n"
-                  "vTexCoord = aTexCoord;\n"
-              "}" );
-
-  std::string fragmentShader(
-              "varying mediump float  vShade;\n"
-              "\n"
-              "void main()\n"
-              "{\n"
-              "  gl_FragColor = texture2D(sTexture, vTexCoord) * uColor * vec4(vShade,vShade,vShade,1.0);\n"
-              "}" );
-
-  // Create the implementation, temporarily owned on stack,
-  Dali::ShaderEffect shaderEffectCustom =  Dali::ShaderEffect::New(
-      vertextShader,
-      fragmentShader,
-      GeometryType( GEOMETRY_TYPE_IMAGE ),
-      ShaderEffect::GeometryHints( HINT_GRID | HINT_DEPTH_BUFFER ));
-
-  /* Pass ownership to BendyEffect through overloaded constructor, So that it now has access to the
-     Dali::ShaderEffect implementation */
-  Dali::Toolkit::BendyEffect handle( shaderEffectCustom );
-
-  handle.SetUniform( CENTER_PROPERTY_NAME, Vector2(0.0f, 0.0f), COORDINATE_TYPE_VIEWPORT_POSITION );
-  handle.SetUniform( DIRECTION_PROPERTY_NAME, Vector2(0.0f, 0.0f), COORDINATE_TYPE_VIEWPORT_DIRECTION );
-  handle.SetUniform( RADIUS_PROPERTY_NAME, 0.0f );
-
-  return handle;
-}
-
-void BendyEffect::SetCenter( const Vector2& center )
-{
-  SetUniform( CENTER_PROPERTY_NAME, center, ShaderEffect::COORDINATE_TYPE_VIEWPORT_POSITION );
-}
-
-void BendyEffect::SetDirection( const Vector2& direction )
-{
-  Vector2 temp(direction);
-  temp.Normalize();
-
-  Vector2 newDirection(temp.x, temp.y);
-
-  SetUniform( DIRECTION_PROPERTY_NAME, newDirection, ShaderEffect::COORDINATE_TYPE_VIEWPORT_DIRECTION );
-}
-
-void BendyEffect::SetRadius( float radius )
-{
-  SetUniform( RADIUS_PROPERTY_NAME, radius );
-}
-
-const std::string& BendyEffect::GetCenterPropertyName() const
-{
-  return CENTER_PROPERTY_NAME;
-}
-
-const std::string& BendyEffect::GetDirectionPropertyName() const
-{
-  return DIRECTION_PROPERTY_NAME;
-}
-
-const std::string& BendyEffect::GetRadiusPropertyName() const
-{
-  return RADIUS_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index 0fd1374..79edb16 100644 (file)
@@ -28,73 +28,73 @@ namespace Toolkit
 {
 
 /**
+ * Creates a new Bendy effect
+ *
  * BendyEffect is a custom shader effect to achieve bendy effects in Image actors
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uCenter"    - The center point of the bendy effect
+ *  "uDirection" - The direction of the bendy effect
+ *  "uRadius"    - The radius of the bendy effect
+ *
+ * @return A handle to a newly allocated ShaderEffect.
  */
-class DALI_IMPORT_API BendyEffect : public ShaderEffect
+inline ShaderEffect CreateBendyEffect()
 {
-public:
-
-  /**
-   * Create an uninitialized BendyEffect; this can be initialized with BendyEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  BendyEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~BendyEffect();
-
-  /**
-   * Create an initialized BendyEffect.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static BendyEffect New();
-
-  /**
-   * Set the center point of the bendy effect.
-   * @param [in] center The new center point.
-   */
-  void SetCenter(const Vector2& center);
-
-  /**
-   * Set the direction of the bendy effect.
-   * @param [in] direction The new direction.
-   */
-  void SetDirection(const Vector2& direction);
-
-  /**
-   * Set the radius of the bendy effect.
-   * @param [in] radius The new radius.
-   */
-  void SetRadius(float radius);
-
-  /**
-   * Get the name for the center property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetCenterPropertyName() const;
-
-  /**
-   * Get the name for the direction property
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetDirectionPropertyName() const;
-
-  /**
-   * Get the name for the radius property
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetRadiusPropertyName() const;
-
-
-private: // Not intended for application developers
-  DALI_INTERNAL BendyEffect(ShaderEffect handle);
-};
+  // append the default version
+  std::string vertextShader(
+      "uniform mediump   vec2  uCenter;\n"
+      "uniform mediump   vec2  uDirection;\n"
+      "uniform mediump   float uRadius;\n"
+      "\n"
+      "varying mediump   float vShade;\n"
+      "\n"
+      "void main()\n"
+      "{\n"
+      " mediump float lighting = 0.25;\n"
+      " mediump vec4 position = uModelView * vec4(aPosition,1.0);\n"
+      "\n"
+      " mediump vec2 d = position.xy - uCenter;\n"
+      " mediump float dist = max( 0.0, dot(d,uDirection) );\n"
+      " mediump float radius = max(0.0, uRadius - dist * 0.01);\n"
+      "\n"
+      " mediump float cs = cos(dist / radius / 2.0);\n"
+      " mediump float sn = sin(dist / radius / 2.0);\n"
+      "\n"
+      "position.xy = position.xy - uDirection * dist;\n"
+      "\n"
+      "position.xy += uDirection * sn * radius;\n"
+      "position.z += (1.0 - cs) * radius;\n"
+      "\n"
+      "gl_Position = uProjection * position;\n"
+      "\n"
+      "vShade = 1.0 - abs(sn) * lighting;\n"
+      "\n"
+      "vTexCoord = aTexCoord;\n"
+      "}" );
+
+  std::string fragmentShader(
+      "varying mediump float  vShade;\n"
+      "\n"
+      "void main()\n"
+      "{\n"
+      "  gl_FragColor = texture2D(sTexture, vTexCoord) * uColor * vec4(vShade,vShade,vShade,1.0);\n"
+      "}" );
+
+  // Create the implementation, temporarily owned on stack,
+  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
+      vertextShader,
+      fragmentShader,
+      GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_DEPTH_BUFFER ));
+
+  shaderEffect.SetUniform( "uCenter", Vector2(0.0f, 0.0f), ShaderEffect::COORDINATE_TYPE_VIEWPORT_POSITION );
+  shaderEffect.SetUniform( "uDirection", Vector2(0.0f, 0.0f), ShaderEffect::COORDINATE_TYPE_VIEWPORT_DIRECTION );
+  shaderEffect.SetUniform( "uRadius", 0.0f );
+
+
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/blind-effect.cpp b/dali-toolkit/public-api/shader-effects/blind-effect.cpp
deleted file mode 100644 (file)
index f9f7945..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/blind-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string STEP_PROPERTY_NAME( "uStep" );
-
-} // namespace
-
-BlindEffect::BlindEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-BlindEffect::BlindEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-BlindEffect::~BlindEffect()
-{
-}
-
-
-BlindEffect BlindEffect::New()
-{
-  std::string fragmentShader(
-    "uniform mediump float uStep;                                                        \n"
-    "void main()                                                                         \n"
-    "{                                                                                   \n"
-    "    mediump vec4 alphaColor;                                                        \n"
-    "    mediump vec4 baseColor;                                                         \n"
-    "    baseColor = texture2D( sTexture, vTexCoord);                                    \n"
-    "    alphaColor = vec4(0.1,0.1,0.1,1.0);                                             \n"
-    "    lowp float index = 0.0;                                                         \n"
-    "    index = floor(vTexCoord.y/0.1);                                                 \n"
-    "    if((vTexCoord.y < (index * 0.1 + uStep * 0.005)) && (vTexCoord.y > index * 0.1))\n"
-    "    {                                                                               \n"
-    "      gl_FragColor = alphaColor;                                                    \n"
-    "    }                                                                               \n"
-    "    else                                                                            \n"
-    "    {                                                                               \n"
-    "      gl_FragColor = baseColor;                                                     \n"
-    "    }                                                                               \n"
-    "    gl_FragColor*=uColor;                                                           \n"
-    "}                                                                                   \n"
-  );
-
-  Dali::ShaderEffect shaderEffectCustom =  Dali::ShaderEffect::New(
-      "",
-      fragmentShader,
-      Dali::GeometryType( GEOMETRY_TYPE_IMAGE ),
-      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID ));
-
-  Dali::Toolkit::BlindEffect handle( shaderEffectCustom );
-
-  handle.SetUniform( STEP_PROPERTY_NAME, 0.0f );
-
-  return handle;
-}
-
-void BlindEffect::SetStep(float step)
-{
-  SetUniform( STEP_PROPERTY_NAME, step );
-}
-
-const std::string& BlindEffect::GetStepPropertyName() const
-{
-  return STEP_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index 4c7405a..a75180b 100644 (file)
@@ -28,48 +28,48 @@ namespace Toolkit
 {
 
 /**
- * BlindEffect is a custom shader effect to achieve blind effects in Image actors
+ * @brief BlindEffect is a custom shader effect to achieve blind effects in Image actors
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uStep" - The step of the blind effect.
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API BlindEffect : public ShaderEffect
-{
-public:
-
-  /**
-   * Create an uninitialized BlindEffect; this can be initialized with BlindEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  BlindEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~BlindEffect();
-
-  /**
-   * Create an initialized ~BlindEffect.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static BlindEffect New();
 
+inline ShaderEffect CreateBlindEffect()
+{
+  std::string fragmentShader(
+      "uniform mediump float uStep;                                                        \n"
+      "void main()                                                                         \n"
+      "{                                                                                   \n"
+      "    mediump vec4 alphaColor;                                                        \n"
+      "    mediump vec4 baseColor;                                                         \n"
+      "    baseColor = texture2D( sTexture, vTexCoord);                                    \n"
+      "    alphaColor = vec4(0.1,0.1,0.1,1.0);                                             \n"
+      "    lowp float index = 0.0;                                                         \n"
+      "    index = floor(vTexCoord.y/0.1);                                                 \n"
+      "    if((vTexCoord.y < (index * 0.1 + uStep * 0.005)) && (vTexCoord.y > index * 0.1))\n"
+      "    {                                                                               \n"
+      "      gl_FragColor = alphaColor;                                                    \n"
+      "    }                                                                               \n"
+      "    else                                                                            \n"
+      "    {                                                                               \n"
+      "      gl_FragColor = baseColor;                                                     \n"
+      "    }                                                                               \n"
+      "    gl_FragColor*=uColor;                                                           \n"
+      "}                                                                                   \n"
+  );
 
-  /**
-   * Set the step of the blind effect.
-   * @param [in] step The step
-   */
-  void SetStep(float step);
+  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
+      "",
+      fragmentShader,
+      GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID ));
 
-  /**
-   * Get the name for the step property
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetStepPropertyName() const;
+  shaderEffect.SetUniform( "uStep", 0.0f );
 
-private: // Not intended for application developers
-  DALI_INTERNAL BlindEffect(ShaderEffect handle);
-};
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/bouncing-effect.cpp b/dali-toolkit/public-api/shader-effects/bouncing-effect.cpp
deleted file mode 100644 (file)
index 4c99eb7..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/bouncing-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-#define MAKE_STRING(A)#A
-
-const std::string PROGRESS_RATE_PROPERTY_NAME( "uProgressRate" );
-
-} // namespace
-
-BouncingEffect::BouncingEffect()
-{
-}
-
-BouncingEffect::BouncingEffect( ShaderEffect handle )
-:ShaderEffect( handle )
-{
-}
-
-BouncingEffect::~BouncingEffect()
-{
-}
-
-BouncingEffect BouncingEffect::New( const Vector4& color )
-{
-  std::string fragmentShader = MAKE_STRING(
-      precision mediump float;\n
-      uniform float uProgressRate;\n
-      uniform vec4 uAssignedColor;\n
-      void main()\n
-      {\n
-        float progressRate = abs(uProgressRate)*0.5;\n
-        float amplitude = 0.15 - progressRate*0.15 ;\n
-        float x1 = 7.5 * (vTexCoord.x - progressRate);\n
-        float x2 = 7.5 * (vTexCoord.x - 1.0 + progressRate);\n
-        float height1 = max(0.00001, 0.3 - amplitude * ( exp(x1) + exp(-x1) ) );\n
-        float height2 = max(0.00001, 0.3 - amplitude * ( exp(x2) + exp(-x2) ) );\n
-        float height3 = max(0.00001, 1.0 - 3.0 * amplitude * ( exp(x1*0.5) + exp(-x1*0.5) ) );\n
-        float height4 = max(0.00001, 1.0 - 3.0 * amplitude * ( exp(x2*0.5) + exp(-x2*0.5) ) );\n
-        vec4 fragColor = vec4(0.0);\n
-        float y = vTexCoord.y/(height1+height2);\n
-        float y2 = vTexCoord.y/max(height3,height4);\n
-        float coef = max(height1,height2)*5.0/( 1.0+exp(y*12.0-6.0) );\n
-        float alpha = pow( max(0.0,(1.0-y2))*(1.0-min(abs(x1),abs(x2))/5.0), 2.0);\n
-        if( vTexCoord.y < 0.075 )\n
-        {\n
-          fragColor= mix(uAssignedColor, vec4(1.0), coef);\n
-          fragColor += (vec4(1.0)-fragColor) * alpha;\n
-        }\n
-        else if (y2<1.0)\n
-        {\n
-          fragColor =vec4(1.0,1.0,1.0, alpha + (1.0-alpha)*coef);\n
-          fragColor.rgb -= ( vec3(1.0)-uAssignedColor.rgb )*min(clamp(y*1.2-0.3, 0.0, 0.3),clamp(0.9-y*1.2,0.0,0.3));\n
-        }\n
-        fragColor.a *= 10.0*min(min(vTexCoord.x, 1.0-vTexCoord.x),0.1)*min(1.0, progressRate/0.2);\n
-        gl_FragColor =  fragColor;\n
-      }
-  );
-
-  ShaderEffect shaderEffect;
-  shaderEffect = ShaderEffect::New( "", fragmentShader,
-                                    GeometryType( GEOMETRY_TYPE_IMAGE),
-                                    ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ) );
-  BouncingEffect handle( shaderEffect );
-
-  handle.SetUniform( "uAssignedColor", color );
-  handle.SetProgressRate( 0.f );
-
-  return handle;
-}
-
-void BouncingEffect::SetProgressRate( float progress )
-{
-  SetUniform( PROGRESS_RATE_PROPERTY_NAME, progress );
-}
-
-const std::string& BouncingEffect::GetProgressRatePropertyName() const
-{
-  return PROGRESS_RATE_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index 655f0c6..6d74bb9 100644 (file)
@@ -28,69 +28,80 @@ namespace Toolkit
 {
 
 /**
- * @brief BouncingEffect is a custom overscroll effect with two waves appearing at two sides then moving towards center and overlapping.
+ * @brief Creates a new bouncing effect
+ *
+ * BouncingEffect is a custom overscroll effect with two waves appearing at two sides then moving towards center and overlapping.
  *
  * Usage Example:
  *
  *  // Create the an imageActor, set shader effect, and add it to the stage
  *  ImageActor imageActor = ImageActor::New( BufferImage::New( 1, 1 ) );
  *  imageActor.SetSize(720.f,58.f);
- *  Toolkit::BouncingEffect bouncingEffect = Toolkit::BouncingEffect::New( Vector4(0.f,1.f,1.f,0.5f) );
+ *  Toolkit::ShaderEffect bouncingEffect = CreateBouncingEffect( Vector4(0.f,1.f,1.f,0.5f) );
  *  imageActor.SetShaderEffect( bouncingEffect );
  *  imageActor.SetParentOrigin( ParentOrigin::CENTER );
  *  Stage::GetCurrent().Add( imageActor );
  *
  *   // Start the animation
  *   Animation animation = Animation::New(1.f);
- *   animation.AnimateTo( Property( bouncingEffect, bouncingEffect.GetProgressRatePropertyName() ),
+ *   animation.AnimateTo( Property( bouncingEffect,"uProgressRate" ),
  *                        1.f, AlphaFunction::BOUNCE );
  *   animation.Play();
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uProgressRate" - The progress rate to the effect
+ *
+ * @param[in] color The color used on the bouncing stripe
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API BouncingEffect : public ShaderEffect
-{
-public:
-
-  /**
-   * @brief Creates an empty BouncingEffect handle
-   */
-  BouncingEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~BouncingEffect();
 
-  /**
-   * @brief Create a BouncingEffect object
-   *
-   * @param[in] color The color used on the bouncing stripe
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static BouncingEffect New( const Vector4& color );
-
-  /**
-   * @brief Set the progress rate to the effect.
-   *
-   * The whole progress ( with progress rate from 0.0 to 1.0 ):
-   *      two waves appear at two sides; move towards center and overlap.
-   * @param[in] progressRate The progress rate value.
-   */
-  void SetProgressRate( float progressRate );
-
-  /**
-   * @brief Get the name for the progress rate property.
-   *
-   * @return A std::string containing the property name.
-   */
-  const std::string& GetProgressRatePropertyName() const;
-
-
-private: // Not intended for application developers
-  DALI_INTERNAL BouncingEffect( ShaderEffect handle );
+inline ShaderEffect CreateBouncingEffect(const Vector4& color)
+{
+  std::string fragmentShader = DALI_COMPOSE_SHADER(
+      precision mediump float;\n
+      uniform float uProgressRate;\n
+      uniform vec4 uAssignedColor;\n
+      void main()\n
+      {\n
+        float progressRate = abs(uProgressRate)*0.5;\n
+        float amplitude = 0.15 - progressRate*0.15 ;\n
+        float x1 = 7.5 * (vTexCoord.x - progressRate);\n
+        float x2 = 7.5 * (vTexCoord.x - 1.0 + progressRate);\n
+        float height1 = max(0.00001, 0.3 - amplitude * ( exp(x1) + exp(-x1) ) );\n
+        float height2 = max(0.00001, 0.3 - amplitude * ( exp(x2) + exp(-x2) ) );\n
+        float height3 = max(0.00001, 1.0 - 3.0 * amplitude * ( exp(x1*0.5) + exp(-x1*0.5) ) );\n
+        float height4 = max(0.00001, 1.0 - 3.0 * amplitude * ( exp(x2*0.5) + exp(-x2*0.5) ) );\n
+        vec4 fragColor = vec4(0.0);\n
+        float y = vTexCoord.y/(height1+height2);\n
+        float y2 = vTexCoord.y/max(height3,height4);\n
+        float coef = max(height1,height2)*5.0/( 1.0+exp(y*12.0-6.0) );\n
+        float alpha = pow( max(0.0,(1.0-y2))*(1.0-min(abs(x1),abs(x2))/5.0), 2.0);\n
+        if( vTexCoord.y < 0.075 )\n
+        {\n
+          fragColor= mix(uAssignedColor, vec4(1.0), coef);\n
+          fragColor += (vec4(1.0)-fragColor) * alpha;\n
+        }\n
+        else if (y2<1.0)\n
+        {\n
+          fragColor =vec4(1.0,1.0,1.0, alpha + (1.0-alpha)*coef);\n
+          fragColor.rgb -= ( vec3(1.0)-uAssignedColor.rgb )*min(clamp(y*1.2-0.3, 0.0, 0.3),clamp(0.9-y*1.2,0.0,0.3));\n
+        }\n
+        fragColor.a *= 10.0*min(min(vTexCoord.x, 1.0-vTexCoord.x),0.1)*min(1.0, progressRate/0.2);\n
+        gl_FragColor =  fragColor;\n
+      }
+  );
+
+  ShaderEffect shaderEffect;
+  shaderEffect = ShaderEffect::New( "", fragmentShader,
+                                    GeometryType( GEOMETRY_TYPE_IMAGE),
+                                    ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ) );
+
+  shaderEffect.SetUniform( "uAssignedColor", color );
+  shaderEffect.SetUniform( "uProgressRate", 0.0f );
+
+  return shaderEffect;
+}
 
-};
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/bubble-effect/bubble-effect.cpp b/dali-toolkit/public-api/shader-effects/bubble-effect/bubble-effect.cpp
deleted file mode 100644 (file)
index 2a4f043..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include "bubble-effect.h"
-
-// EXTERNAL HEADERS
-#include <sstream>
-#include <dali/public-api/common/stage.h>
-#include <dali/public-api/images/image.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string MAGNIFICATIOB_PROPERTY_NAME( "uMagnification" );
-const float EACH_WIDTH_PER_SHAPE(32.0f);
-
-} // namespace
-
-BubbleEffect::BubbleEffect()
-: mNumberOfBubbles(0)
-{
-}
-
-BubbleEffect::BubbleEffect( ShaderEffect handle )
-: ShaderEffect( handle ),
-  mNumberOfBubbles(0)
-{
-}
-
-BubbleEffect::~BubbleEffect()
-{
-}
-
-BubbleEffect BubbleEffect::New( unsigned int numberOfBubble)
-{
-  std::ostringstream vertexShaderStringStream;
-  vertexShaderStringStream << "#define NUMBER_OF_BUBBLE "<< numberOfBubble << "\n";
-  std::string vertexShader(
-    "  precision mediump float;\n"
-    // the gravity applied to the y direction
-    "  uniform float uGravity; \n"
-    // xy: the emit position of the bubble; zw: the destinationof the bubble.
-    // The bubble is moving from (xy) to (zw plus the y drop influenced by gravity).
-    "  uniform vec4 uStartAndEndPos[NUMBER_OF_BUBBLE];\n"
-    // The undergoing percentage of the bubble movement. 0.0: start from emit position, 1.0: reach the destination
-    "  uniform float uPercentage[NUMBER_OF_BUBBLE];\n"
-    "  uniform vec2 uInvertedMovementArea; \n"
-    // The bubble number is restricted by the available uniform num.
-    // To increase the displayed bubble, every uStartAndEndPos and uPercentage uniform is applied to a small bunch of bubbles (9 here)
-    // The offset defines the random offset between bubbles within the bunch.
-    "  uniform vec2 offset[9]; \n"
-    // This uniform is specially for increase part of the bubble size and spread the bubble to the whole screen when unlock to home screen
-    "  uniform float uMagnification; \n"
-    // This uniform is used to change the bubble size during running time
-    "  uniform float uDynamicScale; \n"
-    "  varying float vPercentage;\n"
-    "  varying vec2  vEffectTexCoord;\n"
-    "  void main()\n"
-    "  {\n"
-    "    mediump vec4 position = vec4( aPosition.xy, 0.0, 1.0 );\n"
-    // The Z coordinate is used to record the bubble index within current mesh actor
-    "    int zCoord = int(aPosition.z); \n"
-    // for some i between 0 ~ NUMBER_OF_BUBBLE-1: i,i+NUMBER_OF_BUBBLE, i+NUMBER_OF_BUBBLE*2, ... (up to i+NUMBER_OF_BUBBLE*8) belongs to the same bunch.
-    "    int groupIdx = zCoord / NUMBER_OF_BUBBLE;\n"
-    // The bubbles within the same bunch applies the same uniforms uStartAndEndPos[idx] & uPercentage[idx]
-    "    int idx = zCoord - groupIdx*NUMBER_OF_BUBBLE;\n"
-    // early out if uPercentage is (zero || one) setting position to zero (zero sized triangles)
-    "    if( uPercentage[idx] <= 0.0 || uPercentage[idx] >= 1.0 )\n"
-    "    {\n"
-    "      gl_Position = vec4(0.0);\n"
-    "      return;\n"
-    "    }\n"
-    "    vec4 startAndEnd = uStartAndEndPos[idx]; \n"
-    // The final position is added up different offset for bubbles
-    "    startAndEnd.zw += offset[groupIdx];\n"
-    // Notice: Only animate the uMagnification for unlock (bubble explosion animation)!
-    // In other cases, uMagnification = 1.0!
-    // Increase the Size of part of bubbles and increase the speed of movement for unlock.
-    // Performance acceptable: Branch on a uniform variable.
-    "    if( uMagnification > 1.0)\n"
-    "    {\n"
-    "      if(mod(aPosition.z,24.0) < 1.0 )\n"
-    "      {\n"
-    "        position.xy *= uMagnification;\n"
-    "      }\n"
-    "    }\n"
-    "    float percentage = uPercentage[idx]*min(uMagnification,2.5);\n"
-    "\n"
-    // increase the bubble size from 0% to 100% during the first 1/5 of movement & apply the dynamic scale
-    // the new xy value containes both the new scale and new bubble position
-    "    position.xy *= uDynamicScale*min(percentage*5.0, 1.0);\n"
-    "    position.xy += mix(startAndEnd.xy, startAndEnd.zw, percentage*uMagnification);\n"
-    // The gravity is g*t*t on the y direction
-    "    position.y += uGravity * pow(percentage, 2.0);\n"
-    "    gl_Position = uMvpMatrix * position;\n"
-    "\n"
-    // Add multiple bubble shapes in the effect
-    "    vTexCoord = aTexCoord;\n"
-    "    vPercentage = percentage;\n"
-    // Use the emit position color for the bubble
-    "    vEffectTexCoord = startAndEnd.xy * uInvertedMovementArea;\n"
-    "  }\n" );
-  vertexShaderStringStream << vertexShader;
-
-  std::string fragmentShader(
-    "  precision mediump float;\n"
-    "  varying float vPercentage;\n"
-    "  varying vec2  vEffectTexCoord;\n"
-    "\n"
-    "  void main()\n"
-    "  {\n"
-    // Get the emit pisition color, and Mix with the actor color
-    "    vec4 fragColor = texture2D(sEffect, vEffectTexCoord)*uColor;\n"
-    // Apply the shape defined by the texture contained in the material
-    // And make the opacity being 0.7, and animate from 0.7 to 0 during the last 1/5 of movement
-    "    fragColor.a  *= texture2D(sTexture, vTexCoord).a * ( 3.5 - max( vPercentage*3.5, 2.8 ) );\n"
-    "    gl_FragColor = fragColor;\n"
-    "  }\n");
-
-  ShaderEffect shaderEffect = ShaderEffect::New(
-    vertexShaderStringStream.str(),
-    fragmentShader,
-    GeometryType( GEOMETRY_TYPE_TEXTURED_MESH),
-    ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ) );
-
-  BubbleEffect handle( shaderEffect );
-
-  handle.mNumberOfBubbles = numberOfBubble;
-  handle.SetMovementArea( Stage::GetCurrent().GetSize() );
-
-  handle.SetUniform( "uGravity", 50.f );
-  handle.SetUniform( "uMagnification", 1.f );
-  handle.SetUniform( "uDynamicScale", 1.f );
-
-  Vector4 zeroVector;
-  for( unsigned int i=0; i<numberOfBubble; i++ )
-  {
-    handle.SetPercentage( i, 0.f);
-    handle.SetStartAndEndPosition( i, zeroVector );
-  }
-
-  return handle;
-}
-
-void BubbleEffect::SetMovementArea( const Vector2& movementArea )
-{
-  if( movementArea == mMovementArea )
-  {
-    return;
-  }
-
-  mMovementArea = movementArea;
-  SetUniform( "uInvertedMovementArea", Vector2(1.f,1.f) / mMovementArea );
-
-  srand(time(NULL));
-  int offset = mMovementArea.Length() / 10.f;
-  SetUniform("offset[0]", Vector2(0.f,0.f));
-  SetUniform("offset[1]", Vector2(rand()%offset,rand()%offset) );
-  SetUniform("offset[2]", Vector2(rand()%offset,-rand()%offset) );
-  SetUniform("offset[3]", Vector2(-rand()%offset,rand()%offset) );
-  SetUniform("offset[4]", Vector2(-rand()%offset,-rand()%offset) );
-  SetUniform("offset[5]", Vector2(rand()%offset,0.f));
-  SetUniform("offset[6]", Vector2(-rand()%offset,0.f));
-  SetUniform("offset[7]", Vector2(0.f,rand()%offset));
-  SetUniform("offset[8]", Vector2(0.f,-rand()%offset));
-}
-
-void BubbleEffect::SetStartAndEndPosition( unsigned int index, const Vector4& startAndEndPosition )
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfBubbles );
-  std::ostringstream oss;
-  oss<< "uStartAndEndPos["<< index << "]";
-  SetUniform( oss.str(), startAndEndPosition );
-}
-
-void BubbleEffect::SetPercentage( unsigned int index, float percentage )
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfBubbles );
-  SetUniform( GetPercentagePropertyName(index), percentage );
-}
-
-void BubbleEffect::SetGravity( float gravity )
-{
-  SetUniform( "uGravity", gravity );
-}
-
-void BubbleEffect::SetDynamicScale( float scale )
-{
-  SetUniform( "uDynamicScale", scale );
-}
-
-void BubbleEffect::SetMagnification( float magnification )
-{
-  SetUniform( MAGNIFICATIOB_PROPERTY_NAME, magnification );
-}
-
-std::string BubbleEffect::GetPercentagePropertyName( unsigned int index ) const
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfBubbles );
-  std::ostringstream oss;
-  oss<< "uPercentage["<< index << "]";
-  return oss.str();
-}
-
-std::string BubbleEffect::GetMagnificationPropertyName() const
-{
-  return MAGNIFICATIOB_PROPERTY_NAME;
-}
-
-void BubbleEffect::ResetParameters()
-{
-  SetMagnification( 1.f );
-  Vector4 zeroVector;
-  for( unsigned int i=0; i<mNumberOfBubbles; i++ )
-  {
-    SetPercentage( i, 1.f);
-    SetStartAndEndPosition( i, zeroVector );
-  }
-}
-
-
-} // namespace Toolkit
-
-} // namespace Dali
diff --git a/dali-toolkit/public-api/shader-effects/bubble-effect/bubble-effect.h b/dali-toolkit/public-api/shader-effects/bubble-effect/bubble-effect.h
deleted file mode 100644 (file)
index 1384f9b..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-#ifndef __DALI_TOOLKIT_SHADER_BUBBLE_EFFECT_H__
-#define __DALI_TOOLKIT_SHADER_BUBBLE_EFFECT_H__
-
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/shader-effects/shader-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-/**
- * BubbleEffect is a custom shader to achieve similar effect of particle system by applying on a specially created MeshActor
- * Each bubble is rendered on a patch with two triangles; and each mesh can contain multiple such patches.
- */
-class DALI_IMPORT_API BubbleEffect : public ShaderEffect
-{
-public:
-
-  /**
-   * Create an empty BubbleEffect handle
-   */
-  BubbleEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~BubbleEffect();
-
-  /**
-   * Create an initialized BubbleEffect
-   * @param[in] numberOfBubble How many groups of uniforms are used to control the bubble movement.
-   * Note: Limited by the maximum available uniforms, this parameter cannot be bigger than 100.
-   * Ideally use one group of uniform to control one bubble.
-   * If the num of patches in the MeshActor is more than groups of uniforms,
-   * the uniform values will be shared by multiple bubbles. Allow up to 9 times.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static BubbleEffect New( unsigned int numberOfBubble);
-
-  /**
-   * Set the bubble movement area for the BubbleEffect
-   * @param[in] movementArea The size of bubble movement area; by default, it is the stage size
-   */
-  void SetMovementArea( const Vector2& movementArea );
-
-  /**
-   * Set the start and end positions of the index-th bubble's movement.
-   * @param[in] index Indicate which bubble these properties are applied on.
-   * @param[in] startAndEndPosition The start and the end position of movement.
-   */
-  void SetStartAndEndPosition( unsigned int index, const Vector4& startAndEndPosition );
-
-  /**
-   * Set the movement completed percentage of the index-th bubble.
-   * The bubble will appear at start position when percentage equals to zero,
-   * and disappear near end position (affected by gravity) when percentage equals to one.
-   * This percentage property is used to animate the bubble movement.
-   * @param[in] index Indicate which bubble this property is applied on.
-   * @param[in] percentage Set the percentage property value ( between zero and one ).
-   */
-  void SetPercentage( unsigned int index, float percentage );
-
-  /**
-   * Set the gravity applied to the y direction, which makes the bubbles no longer moving on a straight line.
-   * @param[in] gravity The gravity on the y direction.
-   */
-  void SetGravity( float gravity );
-
-  /**
-   * Set the scale factor applied to the bubbles
-   * @param[in] scale The scale factor applied on all bubbles.
-   */
-  void SetDynamicScale( float scale );
-
-  /**
-   * Increase both the bubble size and moving speed.
-   * Animate this peoperty to create special effect such as all the bubbles blow up on the screen.
-   * @param[in] magnification The manified factor applied on the bubble size and moving speed.
-   */
-  void SetMagnification( float magnification );
-
-  /**
-   * Get the name for the idx-th percentage property.
-   * @param[in] index The percentage property index.
-   * @return std::string containing the property name.
-   */
-  std::string GetPercentagePropertyName( unsigned int index ) const;
-
-  /**
-   * Get the name for the magnification property.
-   * @return std::string containinf the property name.
-   */
-  std::string GetMagnificationPropertyName() const;
-
-  /**
-   * Reset the uniform values to default.
-   */
-  void ResetParameters();
-
-private:// Not intended for application developers
-
-  DALI_INTERNAL BubbleEffect( ShaderEffect handle );
-
-private:
-
-  unsigned int mNumberOfBubbles;
-  Vector2      mMovementArea;
-};
-
-} // namespace Toolkit
-
-} // namespace Dali
-#endif /* __DALI_TOOLKIT_SHADER_BUBBLE_EFFECT_H__ */
diff --git a/dali-toolkit/public-api/shader-effects/bubble-effect/color-adjuster.cpp b/dali-toolkit/public-api/shader-effects/bubble-effect/color-adjuster.cpp
deleted file mode 100644 (file)
index d0c49d9..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include "color-adjuster.h"
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-const std::string HSVDELTA_PROPERTY_NAME("uHSVDelta");
-}
-
-ColorAdjuster::ColorAdjuster()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-ColorAdjuster::ColorAdjuster( ShaderEffect handle )
-: ShaderEffect( handle )
-{
-}
-
-ColorAdjuster::~ColorAdjuster()
-{
-}
-
-ColorAdjuster ColorAdjuster::New( const Vector3& hsvDelta, bool ignoreAlpha )
-{
-  std::string fragmentShader(
-  "  precision highp float;\n"
-  "  uniform vec3 uHSVDelta;\n"
-  "  uniform float uIgnoreAlpha;\n"
-  "  float rand(vec2 co) \n"
-  "  {\n"
-  "    return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); \n"
-  "  }\n"
-  "  vec3 rgb2hsv(vec3 c)\n"
-  "  {\n"
-  "    vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n"
-  "    vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\n"
-  "    vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\n"
-  "    \n"
-  "    float d = q.x - min(q.w, q.y);\n"
-  "    float e = 1.0e-10;\n"
-  "    return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\n"
-  "  }\n"
-  "  vec3 hsv2rgb(vec3 c)\n"
-  "  {\n"
-  "   vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n"
-  "   vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n"
-  "   return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n"
-  "  }\n"
-  "  void main() {\n"
-  "    vec4 color = texture2D(sTexture, vTexCoord); \n"
-  "    vec3 hsvColor = rgb2hsv( color.rgb );\n"
-  // modify the hsv Value
-  "    hsvColor += uHSVDelta * rand(vTexCoord); \n"
-  // if the new vale exceeds one, then decrease it
-  "    hsvColor -= max(hsvColor*2.0 - vec3(2.0), 0.0);\n"
-  // if the new vale drops below zero, then increase it
-  "    hsvColor -= min(hsvColor*2.0, 0.0);\n"
-  "    color.rgb = hsv2rgb( hsvColor ); \n"
-  // uIgnoreAlpha decide the result alpha will be 1.0 or source's alpha
-  "    color.a = clamp(color.a + uIgnoreAlpha, 0.0, 1.0);\n"
-  "    gl_FragColor = color; \n"
-  "  }\n");
-
-  ShaderEffect effect = ShaderEffect::New("", fragmentShader);
-  ColorAdjuster handle( effect );
-  handle.SetUniform( "uHSVDelta", hsvDelta );
-  handle.SetUniform( "uIgnoreAlpha", ignoreAlpha?1.0f:0.0f );
-  return handle;
-}
-
-std::string ColorAdjuster::GetHsvDeltaPropertyName() const
-{
-  return HSVDELTA_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
diff --git a/dali-toolkit/public-api/shader-effects/bubble-effect/color-adjuster.h b/dali-toolkit/public-api/shader-effects/bubble-effect/color-adjuster.h
deleted file mode 100644 (file)
index e35e02e..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-#ifndef __DALI_TOOLKIT_SHADER_COLOR_ADJUSTER_H__
-#define __DALI_TOOLKIT_SHADER_COLOR_ADJUSTER_H__
-
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/math/vector3.h>
-#include <dali/public-api/shader-effects/shader-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-/**
- * ColorAdjuster is a custom shader effect to adjust the image color in HSV space.
- */
-class DALI_IMPORT_API ColorAdjuster : public ShaderEffect
-{
-public:
-
-  /**
-   * Create an empty ColorAdjuster handle.
-   */
-  ColorAdjuster();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~ColorAdjuster();
-
-  /**
-   * Create an initialized ColorAdjuster.
-   * @param[in] hsvDelta The color difference to apply to the HSV channel.
-   * @param[in] ignoreAlpha If true, the result color will be opaque even though source has alpha value
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static ColorAdjuster New( const Vector3& hsvDelta, bool ignoreAlpha = false );
-
-   /**
-   * Get the name of the uHSVDelta uniform so that it can be animated
-   */
-  std::string GetHsvDeltaPropertyName() const;
-
-private: // Not intended for application developers
-
-  DALI_INTERNAL ColorAdjuster( ShaderEffect handle );
-};
-
-} // namespace Toolkit
-
-} // namespace Dali
-#endif /* __DALI_TOOLKIT_COLOR_ADJUSTER_EFFECT_H__ */
diff --git a/dali-toolkit/public-api/shader-effects/carousel-effect.cpp b/dali-toolkit/public-api/shader-effects/carousel-effect.cpp
deleted file mode 100644 (file)
index 32772ab..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/carousel-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string RADIUS_PROPERTY_NAME( "uRadius" );
-const std::string ANGLE_PER_UNIT_PROPERTY_NAME( "uAnglePerUnit" );
-const std::string CENTER_PROPERTY_NAME( "uCenter" );
-
-} // namespace
-
-CarouselEffect::CarouselEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-CarouselEffect::CarouselEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-CarouselEffect::~CarouselEffect()
-{
-}
-
-
-CarouselEffect CarouselEffect::New()
-{
-  // append the default version
-  std::string vertexShader(
-              "uniform float uRadius;\n"
-              "uniform mediump vec2 uCenter;\n"
-              "uniform mediump vec2 uAnglePerUnit;\n"
-              "\n"
-              "void main()\n"
-              "{\n"
-              "    mediump vec4 world = uModelView * vec4(aPosition,1.0);\n"
-              "    mediump vec2 d = (world.xy - uCenter) * uAnglePerUnit;\n"
-              "    mediump float a = length(d);\n"
-              "    mediump float cs = cos(radians(a));\n"
-              "    world.z -= cs * uRadius;\n"
-              "    gl_Position = uProjection * world;\n"
-              "    \n"
-              "    vTexCoord = aTexCoord;\n"
-              "}\n");
-
-  ShaderEffect shaderEffectCustom = ShaderEffect::New(vertexShader,
-          "",
-          GeometryType( GEOMETRY_TYPE_IMAGE ),
-          ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_DEPTH_BUFFER ));
-
-  // Pass ownership to CarouselEffect through overloaded constructor, So that it now has access to the
-  // Dali::ShaderEffect implementation
-  CarouselEffect handle( shaderEffectCustom );
-
-  handle.SetUniform( RADIUS_PROPERTY_NAME, 0.0f );
-  handle.SetUniform( CENTER_PROPERTY_NAME, Vector2( 0.0f, 0.0f ) );
-  handle.SetUniform( ANGLE_PER_UNIT_PROPERTY_NAME, Vector2( 0.0f, 0.0f ) );
-
-  return handle;
-}
-
-void CarouselEffect::SetRadius( float radius)
-{
-  SetUniform( RADIUS_PROPERTY_NAME, radius );
-}
-
-void CarouselEffect::SetCenter( const Vector2& center )
-{
-  SetUniform( CENTER_PROPERTY_NAME, center );
-}
-
-void CarouselEffect::SetAnglePerUnit( const Vector2& angle )
-{
-  SetUniform( ANGLE_PER_UNIT_PROPERTY_NAME, angle );
-}
-
-const std::string& CarouselEffect::GetRadiusPropertyName() const
-{
-  return RADIUS_PROPERTY_NAME;
-}
-
-const std::string& CarouselEffect::GetCenterPropertyName() const
-{
-  return CENTER_PROPERTY_NAME;
-}
-
-const std::string& CarouselEffect::GetAnglePerUnitPropertyName() const
-{
-  return ANGLE_PER_UNIT_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index f5bc686..d243a81 100644 (file)
@@ -28,6 +28,8 @@ namespace Toolkit
 {
 
 /**
+ * @brief Creates a new Carousel effect
+ *
  * CarouselEffect is a custom shader effect to achieve Carousel effects in actors
  *
  * A Carousel has a Radius property which can be +ve (appear as if viewing from the outside of
@@ -39,80 +41,51 @@ namespace Toolkit
  *
  * Finally, the carousel's center position can be specified as a Screen coordinate (top-left being
  * the origin).
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uRadius"       - The radius of the Carousel effect. A positive Radius will bend toward the camera,
+ *                    while a negative Radius will bend away from the camera.
+ *  "uAnglePerUnit" - The angle deviation of Carousel in degrees per geometric unit for each axis
+                      For example if you wish for the horizontal angle deviation to vary from +/- 10
+                      degrees, then a Value of 20.0f / stageWidth for the X component should be specified.
+ *  "uCenter"       - The center point of the carousel (in screen coordinates) this is where the peek of the carousel should appear.
+ *                    Defaults value is top-left corner (0.0f, 0.0f).
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API CarouselEffect : public ShaderEffect
+inline ShaderEffect CreateCarouselEffect()
 {
-public:
-
-  /**
-   * Create an uninitialized CarouselEffect; this can be initialized with CarouselEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  CarouselEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~CarouselEffect();
-
-  /**
-   * Create an initialized CarouselEffect.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static CarouselEffect New();
-
-  /**
-   * Set the radius of the Carousel effect.
-   * A positive Radius will bend toward the camera,
-   * while a negative Radius will bend away from the camera.
-   * @param[in] radius The new radius.
-   */
-  void SetRadius( float radius);
-
-  /**
-   * Sets the center point of the carousel (in screen coordinates)
-   * this is where the peek of the carousel should appear.
-   * this defaults to top-left corner (0.0f, 0.0f).
-   *
-   * @param[in] center The center point.
-   */
-  void SetCenter( const Vector2& center );
-
-  /**
-   * Set the angle deviation of Carousel in degrees per
-   * geometric unit for each axis. For example if you
-   * wish for the horizontal angle deviation to vary from +/- 10
-   * degrees, then a Value of 20.0f / stageWidth for the X
-   * component should be specified.
-   *
-   * @param[in] angle the Angle Spread in X and Y axes.
-   */
-  void SetAnglePerUnit( const Vector2& angle );
-
-  /**
-   * Get the name for the radius property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetRadiusPropertyName() const;
-
-  /**
-   * Get the name for the center property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetCenterPropertyName() const;
-
-  /**
-   * Get the name for the angle spread property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAnglePerUnitPropertyName() const;
-
-
-private: // Not intended for application developers
-  DALI_INTERNAL CarouselEffect(ShaderEffect handle);
-};
+  // append the default version
+    std::string vertexShader(
+                "uniform float uRadius;\n"
+                "uniform mediump vec2 uCenter;\n"
+                "uniform mediump vec2 uAnglePerUnit;\n"
+                "\n"
+                "void main()\n"
+                "{\n"
+                "    mediump vec4 world = uModelView * vec4(aPosition,1.0);\n"
+                "    mediump vec2 d = (world.xy - uCenter) * uAnglePerUnit;\n"
+                "    mediump float a = length(d);\n"
+                "    mediump float cs = cos(radians(a));\n"
+                "    world.z -= cs * uRadius;\n"
+                "    gl_Position = uProjection * world;\n"
+                "    \n"
+                "    vTexCoord = aTexCoord;\n"
+                "}\n");
+
+    ShaderEffect shaderEffect = ShaderEffect::New(
+        vertexShader,
+        "",
+        GeometryType( GEOMETRY_TYPE_IMAGE ),
+        ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_DEPTH_BUFFER ));
+
+
+    shaderEffect.SetUniform( "uRadius", 0.0f );
+    shaderEffect.SetUniform( "uCenter", Vector2( 0.0f, 0.0f ) );
+    shaderEffect.SetUniform( "uAnglePerUnit", Vector2( 0.0f, 0.0f ) );
+
+    return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/displacement-effect.cpp b/dali-toolkit/public-api/shader-effects/displacement-effect.cpp
deleted file mode 100644 (file)
index 523f711..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/displacement-effect.h>
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string DISPLACEMENT_EFFECT_LIGHT_DIRECTION_PROPERTY_NAME( "uLightDirection" );
-const std::string DISPLACEMENT_EFFECT_AMBIENT_LIGHT_COLOR_PROPERTY_NAME( "uAmbientLightColor" );
-const std::string DISPLACEMENT_EFFECT_DIFFUSE_LIGHT_COLOR_PROPERTY_NAME( "uDiffuseLightColor" );
-const std::string DISPLACEMENT_EFFECT_LIGHT_MULTIPLIER_PROPERTY_NAME( "uLightMultiplier" );
-const std::string DISPLACEMENT_EFFECT_STATE_PROPERTY_NAME( "uState" );
-const std::string DISPLACEMENT_EFFECT_HEIGHT_SCALE_PROPERTY_NAME( "uHightScale" );
-const std::string DISPLACEMENT_EFFECT_FIXED_NORMAL_PROPERTY_NAME( "uFixedNormal" );
-
-// factors that scale the look, defaults
-const Vector3 DISPLACEMENT_EFFECT_LIGHT_DIRECTION_DEFAULT = Vector3(0.0, 0.7070168f, 0.7071068f);
-const Vector3 DISPLACEMENT_EFFECT_AMBIENT_LIGHT_COLOR_DEFAULT = Vector3(0.15f, 0.15f, 0.15f);
-const Vector3 DISPLACEMENT_EFFECT_DIFFUSE_LIGHT_COLOR_DEFAULT = Vector3(1.0f, 1.0f, 1.0f);
-const float   DISPLACEMENT_EFFECT_LIGHT_MULTIPLIER_DEFAULT = 1.0f;
-const float   DISPLACEMENT_EFFECT_STATE_DEFAULT = 0.0f;
-const float   DISPLACEMENT_EFFECT_HEIGHT_SCALE_DEFAULT = 0.1f;
-const Vector3 DISPLACEMENT_EFFECT_FIXED_NORMAL_DEFAULT = Vector3(0.0f, 0.0f, 1.0f);
-
-} // namespace
-
-
-////////////////////////////////////////////////////
-//
-// Soft button shader / actor tweaking parameters
-//
-
-
-DisplacementEffect::DisplacementEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-DisplacementEffect::DisplacementEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-DisplacementEffect::~DisplacementEffect()
-{
-}
-
-DisplacementEffect DisplacementEffect::New(Type type)
-{
-
-  std::string fragmentSourceFixed;
-  fragmentSourceFixed =  "precision mediump float;\n"
-    "uniform vec3 uLightDirection;\n"
-    "uniform vec3 uAmbientLightColor;\n"
-    "uniform vec3 uDiffuseLightColor;\n"
-    "uniform float uLightMultiplier;\n"
-    "uniform float uState;\n"
-    "uniform float uHightScale;\n"
-    "uniform vec3 uFixedNormal;\n"
-
-    "void main()\n"
-    "{\n"
-    "  vec4 col = texture2D(sTexture, vTexCoord);\n"
-    // calc lighting
-    "  float intensity = dot(uLightDirection, uFixedNormal);"
-    "  vec3 lighting = (intensity * uDiffuseLightColor) + uAmbientLightColor;\n"
-    "  lighting *= uLightMultiplier;\n"
-    // output col = image * light
-    "  gl_FragColor = vec4(col.rgb * lighting * uColor.rgb, col.a * uColor.a);\n"
-    "}\n";
-
-
-
-  std::string fragmentSourceDisplaced(
-      "precision mediump float;\n"
-      "uniform vec3 uLightDirection;\n"
-      "uniform vec3 uAmbientLightColor;\n"
-      "uniform vec3 uDiffuseLightColor;\n"
-      "uniform float uLightMultiplier;\n"
-      "uniform float uState;\n"
-      "uniform float uHightScale;\n"
-      "void main()\n"
-      "{\n"
-      "  highp vec4 displacementMap1 = texture2D(sEffect, vec2(vTexCoord.s, vTexCoord.t/2.0));\n"
-      "  highp vec4 displacementMap2 = texture2D(sEffect, vec2(vTexCoord.s, 0.5+vTexCoord.t/2.0));\n"
-      "  highp vec4 displacementMap = mix(displacementMap1, displacementMap2, uState);\n"
-
-      "  vec3 normalAdjusted = normalize(displacementMap.rgb*2.0-1.0);\n"
-      "  float height = uHightScale * (displacementMap.a*2.0 - 1.0);\n"
-      "  vec2 displacement = vec2(0.0);\n"
-      "  displacement += (vec2(0.5)-vTexCoord.st)*height;\n"
-      "  vec2 newCoord = vTexCoord.st + displacement.xy;\n"
-
-      "  vec4 col = texture2D(sTexture, newCoord);\n"
-      // Y-Axis for the normal map is taken as in Y-Down format, So inverting it for GL
-      "  float intensity = dot(uLightDirection, vec3(1.0,-1.0, 1.0) * normalAdjusted);"
-      "  vec3 lighting = (intensity * uDiffuseLightColor) + uAmbientLightColor;\n"
-      "  lighting *= uLightMultiplier;\n"
-      "  vec3 color = col.rgb * lighting * uColor.rgb;\n"
-      "  gl_FragColor = vec4(color, col.a * uColor.a);\n"
-      "}\n");
-
-  //////////////////////////////////////
-  // Create shader effect
-  //
-  //
-
-  ShaderEffect shader;
-  switch(type)
-  {
-    case DISPLACED:
-      shader = ShaderEffect::New( "", fragmentSourceDisplaced);
-      break;
-
-    case FIXED:
-    default:
-      shader = ShaderEffect::New( "", fragmentSourceFixed);
-      break;
-  }
-  DisplacementEffect handle( shader );
-
-
-  //////////////////////////////////////
-  // Register uniform properties
-  //
-  //
-  // factors that scale the look, defaults
-
-  handle.SetLightDirection(DISPLACEMENT_EFFECT_LIGHT_DIRECTION_DEFAULT);
-  handle.SetAmbientLightColorProperty(DISPLACEMENT_EFFECT_AMBIENT_LIGHT_COLOR_DEFAULT);
-  handle.SetDiffuseLightColorProperty(DISPLACEMENT_EFFECT_DIFFUSE_LIGHT_COLOR_DEFAULT);
-  handle.SetLightingMultiplierProperty(DISPLACEMENT_EFFECT_LIGHT_MULTIPLIER_DEFAULT);
-  handle.SetStateProperty(DISPLACEMENT_EFFECT_STATE_DEFAULT);
-  handle.SetHeightScaleProperty(DISPLACEMENT_EFFECT_HEIGHT_SCALE_DEFAULT);
-
-  if(type == FIXED)
-  {
-    handle.SetFixedNormalProperty(DISPLACEMENT_EFFECT_FIXED_NORMAL_DEFAULT);
-  }
-
-
-  return handle;
-}
-
-const std::string& DisplacementEffect::GetLightDirectionPropertyName() const
-{
-  return DISPLACEMENT_EFFECT_LIGHT_DIRECTION_PROPERTY_NAME;
-}
-
-const std::string& DisplacementEffect::GetAmbientLightColorPropertyName() const
-{
-  return DISPLACEMENT_EFFECT_AMBIENT_LIGHT_COLOR_PROPERTY_NAME;
-}
-
-const std::string& DisplacementEffect::GetDiffuseLightColorPropertyName() const
-{
-  return DISPLACEMENT_EFFECT_DIFFUSE_LIGHT_COLOR_PROPERTY_NAME;
-}
-
-const std::string& DisplacementEffect::GetLightingMultiplierPropertyName() const
-{
-  return DISPLACEMENT_EFFECT_LIGHT_MULTIPLIER_PROPERTY_NAME;
-}
-
-const std::string& DisplacementEffect::GetStatePropertyName() const
-{
-  return DISPLACEMENT_EFFECT_STATE_PROPERTY_NAME;
-}
-
-const std::string& DisplacementEffect::GetHeightScalePropertyName() const
-{
-  return DISPLACEMENT_EFFECT_HEIGHT_SCALE_PROPERTY_NAME;
-}
-
-const std::string& DisplacementEffect::GetFixedNormalPropertyName() const
-{
-  return DISPLACEMENT_EFFECT_FIXED_NORMAL_PROPERTY_NAME;
-}
-
-void DisplacementEffect::SetLightDirection(const Vector3 lightDirection)
-{
-  SetUniform( DISPLACEMENT_EFFECT_LIGHT_DIRECTION_PROPERTY_NAME, lightDirection);
-}
-
-void DisplacementEffect::SetAmbientLightColorProperty(const Vector3 ambientLight)
-{
-  SetUniform( DISPLACEMENT_EFFECT_AMBIENT_LIGHT_COLOR_PROPERTY_NAME, ambientLight);
-}
-
-void DisplacementEffect::SetDiffuseLightColorProperty(const Vector3 diffuseLight)
-{
-  SetUniform( DISPLACEMENT_EFFECT_DIFFUSE_LIGHT_COLOR_PROPERTY_NAME, diffuseLight);
-}
-
-void DisplacementEffect::SetLightingMultiplierProperty(const float lightMultiplier)
-{
-  SetUniform( DISPLACEMENT_EFFECT_LIGHT_MULTIPLIER_PROPERTY_NAME, lightMultiplier);
-}
-
-void DisplacementEffect::SetStateProperty(const float state)
-{
-  SetUniform( DISPLACEMENT_EFFECT_STATE_PROPERTY_NAME, state);
-}
-
-void DisplacementEffect::SetHeightScaleProperty(const float heightScale)
-{
-  SetUniform( DISPLACEMENT_EFFECT_HEIGHT_SCALE_PROPERTY_NAME, heightScale);
-}
-
-void DisplacementEffect::SetFixedNormalProperty(const Vector3 fixedNormal)
-{
-  Vector3 newFixedNormal(fixedNormal);
-  newFixedNormal.Normalize();
-
-  SetUniform( DISPLACEMENT_EFFECT_FIXED_NORMAL_PROPERTY_NAME, newFixedNormal);
-}
-
-}
-
-}
index aabb087..f50a177 100644 (file)
@@ -28,8 +28,9 @@ namespace Toolkit
 {
 
 /**
+ * @brief Creates a new displacement effect
  *
- * Class for two state displacement effect shader that works on a per object basis. By passing a height-normal map as an effect image, the user can create
+ * Two state displacement effect shader that works on a per object basis. By passing a height-normal map as an effect image, the user can create
  * various styles of buttons on an image actor. The shader requires two height-normal maps in one image, one for each state.
  *
  *    The normals and height information for the two states of the button should be strictly specified in this format:
@@ -55,7 +56,7 @@ namespace Toolkit
  * Usage example:-
  *
  * // Create shader used for doing soft button\n
- * DisplacementEffect buttonEffect = DisplacementEffect::New();
+ * ShaderEffect buttonEffect = CreateDisplacementEffect();
  * buttonEffect.SetEffectImage(Image::New( FANCY_BUTTON_HEIGHT_MAP_IMAGE_PATH ););
  *
  * // set shader to the soft button\n
@@ -66,155 +67,127 @@ namespace Toolkit
  *
  *
  * Animation animation = Animation::New( ... );\n
- * animation.AnimateTo( Property(buttonEffect, buttonEffect.GetStatePropertyName()), 1.0f, AlphaFunction::BOUNCE, ... );\n
+ * animation.AnimateTo( Property(buttonEffect, "uState"), 1.0f, AlphaFunction::BOUNCE, ... );\n
  * animation.Play();\n
  *
+ * Animatable/Constrainable uniforms:
+ *   "uLightDirection"      - The light direction is used in the lighting calculation. The angle of incidence directly affects the amount of light reflected.
+ *                            Default (0.0f, 0.7070168f, 0.7071068f), i.e angled at the surface from in front and above.
+ *   "uAmbientLightColor"   - The ambient light is used in the lighting calculation. Care must be taken to not saturate the image by setting this value too high,
+ *                            or the indentation will not look correct. Default 0.15.
+ *   "uDiffuseLightColor"   - The diffuse light is used in the lighting calculation. Default is (1.0f, 1.0f, 1.0f).
+ *   "uLightMultiplier"     - The ambient and diffuse lighting is multiplied by this factor. Since a diffuse light at an angle will cause the whole image to darken,
+ *                            this property can be used to scale the image back up closer to the pixel values of the original diffuse texture. Care must be taken
+ *                            to not saturate the image,or the indentation will not look correct. Default 1.0
+ *   "uState"               - The shader can have a maximum of two end states 0 or 1, Animate between these two values to do the transitions
+ *                            between states. Default 0.0
+ *   "uHightScale"          - The height displacement is multiplied by this factor. Tweak this to get the required level of depth. Default 0.1
+ *   "uFixedNormal"         - The Fixed normal will be used for the light calculation. Tweak this to get the required level of light.
+ *                            Only applicable for the FIXED type shader and not for DISPLACED type
+ *
+ * @param type The type of the effect, can be either DISPLACED, or FIXED.
+ * @return A handle to a newly allocated ShaderEffect
+ *
  */
-class DALI_IMPORT_API DisplacementEffect : public ShaderEffect
-{
 
-public:
+typedef enum
+{
+  DISPLACEMENT_EFFECT_DISPLACED = 0,    /// Image gets displaced
+  DISPLACEMENT_EFFECT_FIXED             /// Image does not displace. Useful for matching lighting between areas that do not displace and those that do, e.g for backgrounds which are visible between buttons.
+}DisplacementEffectType;
 
-  typedef enum
+inline ShaderEffect CreateDisplacementEffect(DisplacementEffectType type)
+{
+  std::string fragmentSourceFixed;
+  fragmentSourceFixed =  "precision mediump float;\n"
+      "uniform vec3 uLightDirection;\n"
+      "uniform vec3 uAmbientLightColor;\n"
+      "uniform vec3 uDiffuseLightColor;\n"
+      "uniform float uLightMultiplier;\n"
+      "uniform float uState;\n"
+      "uniform float uHightScale;\n"
+      "uniform vec3 uFixedNormal;\n"
+
+      "void main()\n"
+      "{\n"
+      "  vec4 col = texture2D(sTexture, vTexCoord);\n"
+      // calc lighting
+      "  float intensity = dot(uLightDirection, uFixedNormal);"
+      "  vec3 lighting = (intensity * uDiffuseLightColor) + uAmbientLightColor;\n"
+      "  lighting *= uLightMultiplier;\n"
+      // output col = image * light
+      "  gl_FragColor = vec4(col.rgb * lighting * uColor.rgb, col.a * uColor.a);\n"
+      "}\n";
+
+
+
+  std::string fragmentSourceDisplaced(
+      "precision mediump float;\n"
+      "uniform vec3 uLightDirection;\n"
+      "uniform vec3 uAmbientLightColor;\n"
+      "uniform vec3 uDiffuseLightColor;\n"
+      "uniform float uLightMultiplier;\n"
+      "uniform float uState;\n"
+      "uniform float uHightScale;\n"
+      "void main()\n"
+      "{\n"
+      "  highp vec4 displacementMap1 = texture2D(sEffect, vec2(vTexCoord.s, vTexCoord.t/2.0));\n"
+      "  highp vec4 displacementMap2 = texture2D(sEffect, vec2(vTexCoord.s, 0.5+vTexCoord.t/2.0));\n"
+      "  highp vec4 displacementMap = mix(displacementMap1, displacementMap2, uState);\n"
+
+      "  vec3 normalAdjusted = normalize(displacementMap.rgb*2.0-1.0);\n"
+      "  float height = uHightScale * (displacementMap.a*2.0 - 1.0);\n"
+      "  vec2 displacement = vec2(0.0);\n"
+      "  displacement += (vec2(0.5)-vTexCoord.st)*height;\n"
+      "  vec2 newCoord = vTexCoord.st + displacement.xy;\n"
+
+      "  vec4 col = texture2D(sTexture, newCoord);\n"
+      // Y-Axis for the normal map is taken as in Y-Down format, So inverting it for GL
+      "  float intensity = dot(uLightDirection, vec3(1.0,-1.0, 1.0) * normalAdjusted);"
+      "  vec3 lighting = (intensity * uDiffuseLightColor) + uAmbientLightColor;\n"
+      "  lighting *= uLightMultiplier;\n"
+      "  vec3 color = col.rgb * lighting * uColor.rgb;\n"
+      "  gl_FragColor = vec4(color, col.a * uColor.a);\n"
+      "}\n");
+
+  //////////////////////////////////////
+  // Create shader effect
+  //
+  //
+
+  ShaderEffect shaderEffect;
+  switch(type)
   {
-    DISPLACED = 0,    /// Image gets displaced
-    FIXED             /// Image does not displace. Useful for matching lighting between areas that do not displace and those that do, e.g for backgrounds which are visible between buttons.
-  }Type;
-
-  /**
-   * Create an uninitialized DisplacementEffect; this can be initialized with DisplacementEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  DisplacementEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~DisplacementEffect();
-
-  /**
-   * Create an initialized DisplacementEffect
-   * @param type The type of the effect, can be either DISPLACED, or FIXED.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static DisplacementEffect New(Type type);
-
-  /**
-   * Get the name for the light direction property (Vector3)
-   * The light direction is used in the lighting calculation. The angle of incidence directly affects the amount of light reflected.
-   * Default (0.0f, 0.7070168f, 0.7071068f), i.e angled at the surface from in front and above.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetLightDirectionPropertyName() const;
-
-  /**
-   * Get the name for the ambient lighting color property (Vector3)
-   * The ambient light is used in the lighting calculation. Care must be taken to not saturate the image by setting this value too high,
-   * or the indentation will not look correct. Default 0.15.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAmbientLightColorPropertyName() const;
-
-  /**
-   * Get the name for the diffuse light color property (Vector3).
-   * The diffuse light is used in the lighting calculation. Default is (1.0f, 1.0f, 1.0f).
-   * @return A std::string containing the property name
-   */
-  const std::string& GetDiffuseLightColorPropertyName() const;
-
-  /**
-   * Get the name for the lighting multiplier property (float).
-   * The ambient and diffuse lighting is multiplied by this factor. Since a diffuse light at an angle will cause the whole image to darken,
-   * this property can be used to scale the image back up closer to the pixel values of the original diffuse texture. Care must be taken to not saturate the image,
-   * or the indentation will not look correct. Default 1.0
-   * @return A std::string containing the property name
-   */
-  const std::string& GetLightingMultiplierPropertyName() const;
-
-  /**
-   * Get the name for the state property (float).
-   * The shader can have a maximum of two end states 0 or 1, Animate between these two values to do the transitions between states.
-   * Default 0.0
-   * @return A std::string containing the property name.
-   */
-  const std::string& GetStatePropertyName() const;
-
-  /**
-   * Get the name for the height scale property (float).
-   * The height displacement is multiplied by this factor. Tweak this to get the required level of depth.
-   * Default 0.1
-   * @return A std::string containing the property name.
-   */
-  const std::string& GetHeightScalePropertyName() const;
-
-  /**
-   * Get the name for the fixed normal property (Vector3).
-   * Only applicable for the FIXED type shader and not for DISPLACEMENT type.
-   * The Fixed normal will be used for the light calculation. Tweak this to get the required level of light.
-   * Default (0.0f, 0.0f, 1.0f)
-   * @return A std::string containing the property name.
-   */
-  const std::string& GetFixedNormalPropertyName() const;
-
-  /**
-   * Set the light direction property
-   * The light direction is used in the lighting calculation. The angle of incidence directly affects the amount of light reflected.
-   * Default (0.0f, 0.7070168f, 0.7071068f), i.e angled at the surface from in front and above.
-   * @param [in] lightDirection The new light direction.
-   */
-  void SetLightDirection(Vector3 lightDirection);
-
-  /**
-   * Set the ambient light color property
-   * The ambient light is used in the lighting calculation. Care must be taken to not saturate the image by setting this value too high,
-   * or the indentation will not look correct. Default (0.15f, 0.15f, 0.15f).
-   * @param [in] ambientLight The new ambient light value.
-   */
-  void SetAmbientLightColorProperty(Vector3 ambientLight);
-
-  /**
-   * Set the diffuse light color property.
-   * The diffuse light is used in the lighting calculation. Default is (1.0f, 1.0f, 1.0f), i.e. a white light so the natural image color is shown.
-   * @param [in] diffuseLight The new diffuse light value.
-   */
-  void SetDiffuseLightColorProperty(Vector3 diffuseLight);
-
-  /**
-   * Get the name for the lighting multiplier property.
-   * The ambient and diffuse lighting is multiplied by this factor. Since a diffuse light at an angle will cause the whole image to darken,
-   * this property can be used to scale the image back up closer to the pixel values of the original diffuse texture. Care must be taken to not saturate the image,
-   * or the indentation will not look correct. Default 1.0
-   * @param [in] lightMultiplier The new light multiplier value.
-   */
-  void SetLightingMultiplierProperty(float lightMultiplier);
-
-  /**
-   * Get the name for the state property.
-   * The shader can only be in or in between two states 0 or 1, Animate between these two values to do the transitions between states.
-   * @param [in] state The new state value.
-   */
-  void SetStateProperty(float state);
-
-  /**
-   * Set the name for the height scale property.
-   * The height displacement is multiplied by this factor. Tweak this to get the required level of depth. Default 0.1
-   * @param [in] heightScale The new height scale.
-   */
-  void SetHeightScaleProperty(float heightScale);
-
-  /**
-   * Set the name for fixed normal property, Only applicable for the FIXED type shader and not for DISPLACEMENT type.
-   * The Fixed normal will be used for the light calculation. Tweak this to get the required level of light.
-   * @param [in] fixedNormal The new normal for the fixed type shader effect.
-   */
-  void SetFixedNormalProperty(Vector3 fixedNormal);
-
-private:
-  // Not intended for application developers
-  DALI_INTERNAL DisplacementEffect(ShaderEffect handle);
-};
+    case DISPLACEMENT_EFFECT_DISPLACED:
+      shaderEffect = ShaderEffect::New( "", fragmentSourceDisplaced);
+      break;
+
+    case DISPLACEMENT_EFFECT_FIXED:
+    default:
+      shaderEffect = ShaderEffect::New( "", fragmentSourceFixed);
+      break;
+  }
+
+
+  //////////////////////////////////////
+  // Register uniform properties
+  //
+  //
+  // factors that scale the look, defaults
+  shaderEffect.SetUniform("uLightDirection",Vector3(0.0, 0.7070168f, 0.7071068f));
+  shaderEffect.SetUniform("uAmbientLightColor",Vector3(0.15f, 0.15f, 0.15f));
+  shaderEffect.SetUniform("uDiffuseLightColor",Vector3(1.0f, 1.0f, 1.0f));
+  shaderEffect.SetUniform("uLightMultiplier",1.0f);
+  shaderEffect.SetUniform("uState",0.0f);
+  shaderEffect.SetUniform("uHightScale",0.1f);
+
+  if(type == DISPLACEMENT_EFFECT_FIXED)
+  {
+    shaderEffect.SetUniform("uFixedNormal",Vector3(0.0f, 0.0f, 1.0f) );
+  }
+
+  return shaderEffect;
+}
 
 }
 
diff --git a/dali-toolkit/public-api/shader-effects/dissolve-effect.cpp b/dali-toolkit/public-api/shader-effects/dissolve-effect.cpp
deleted file mode 100644 (file)
index 97709b5..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/dissolve-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string DISTORTION_PROPERTY_NAME( "uPercentage" );
-
-} // namespace
-
-DissolveEffect::DissolveEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-DissolveEffect::DissolveEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-DissolveEffect::~DissolveEffect()
-{
-}
-
-
-DissolveEffect DissolveEffect::New( bool useHighPrecision )
-{
-  std::string prefixHighPrecision( "precision highp float;\n");
-  std::string prefixMediumPrecision( "precision mediump float;\n" );
-  std::string vertexShader(
-    "uniform float uPercentage;\n"
-    "uniform vec3 uSaddleParam;\n"
-    "uniform vec2 uTranslation;\n"
-    "uniform vec2 uRotation; \n"
-    "uniform float uToNext;\n"
-    "varying float vPercentage;\n"
-    "void main()\n"
-    "{\n"
-      "gl_Position = uProjection * uModelView * vec4(aPosition, 1.0);\n"
-      "vTexCoord = aTexCoord;\n"
-      //Calculate the distortion value given the dissolve central line
-      "vec2 texCoor = vec2( (aTexCoord.s - sTextureRect.s ) / (sTextureRect.p - sTextureRect.s), (aTexCoord.t- sTextureRect.t)/(sTextureRect.q - sTextureRect.t) ); \n"
-      "vec2 value = texCoor + uTranslation; \n"
-      "mat2 rotateMatrix = mat2( uRotation.s, uRotation.t, -uRotation.t, uRotation.s ); \n"
-      "value = rotateMatrix * value; \n"
-      "if(uToNext == 1.0)  \n"
-      "  value.s = uSaddleParam[2] + value.s; \n"
-      "float delay = value.t*value.t / uSaddleParam[0] - value.s*value.s/uSaddleParam[1];\n"
-      "vPercentage = clamp( uPercentage*2.0 - 0.5*sin(delay*1.571) - 0.5, 0.0, 1.0 ); \n"
-    "}\n");
-  std::string fragmentShader(
-    "varying float vPercentage;\n"
-    "float rand(vec2 co) \n"
-    "{\n"
-    "  return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); \n"
-    "}\n"
-    "void main()\n"
-    "{\n"
-      //Calculate the randomness
-      "float offsetS = rand( vTexCoord * vPercentage ) * (sTextureRect.p - sTextureRect.s) - vTexCoord.s  + sTextureRect.s; \n"
-      "float offsetT = rand( vec2(vTexCoord.t*vPercentage, vTexCoord.s * vPercentage) ) * (sTextureRect.q - sTextureRect.t) - vTexCoord.t + sTextureRect.t; \n"
-      "vec2 lookupCoord = vTexCoord + vec2(offsetS, offsetT) * vPercentage; \n"
-      "gl_FragColor = texture2D( sTexture, lookupCoord ) * uColor; \n"
-      "gl_FragColor.a *= 1.0 - vPercentage; \n"
-    "}" );
-
-  // Create the implementation, temporarily owned on stack,
-  Dali::ShaderEffect shaderEffectCustom;
-  if( useHighPrecision )
-  {
-    shaderEffectCustom =  Dali::ShaderEffect::New( prefixHighPrecision+vertexShader, prefixHighPrecision + fragmentShader,
-                                               GeometryType( GEOMETRY_TYPE_IMAGE),
-                                               ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_BLENDING ) );
-  }
-  else
-  {
-    shaderEffectCustom =  Dali::ShaderEffect::New( prefixMediumPrecision+vertexShader, prefixMediumPrecision + fragmentShader,
-                                               GeometryType( GEOMETRY_TYPE_IMAGE),
-                                               ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_BLENDING ) );
-  }
-
-  /* Pass ownership to DissolveEffect through overloaded constructor, So that it now has access to the
-     Dali::ShaderEffect implementation */
-  Dali::Toolkit::DissolveEffect handle( shaderEffectCustom );
-
-  handle.SetUniform( DISTORTION_PROPERTY_NAME, 0.0f );
-  handle.SetProperty( ShaderEffect::Property::GRID_DENSITY, Dali::Property::Value(50.0f) );
-
-  handle.SetCentralLine( Vector2(1.0f,0.5f), Vector2(-1.0f, 0.0f) );
-
-  return handle;
-}
-
-void DissolveEffect::SetCentralLine( const Vector2& position, const Vector2& displacement )
-{
-  // the line passes through 'position' and has the direction of 'displacement'
-  float coefA, coefB, coefC; //line equation: Ax+By+C=0;
-  coefA = displacement.y;
-  coefB = -displacement.x;
-  coefC = -displacement.y*position.x + displacement.x*position.y;
-
-  float inversedAABB = 1.f / (coefA*coefA+coefB*coefB);
-  float inversedSqrtAABB = sqrtf(inversedAABB);
-  float saddleA;
-
-  //saddle surface(Hyperbolic paraboloid)function, used to calculate the dissolve starting time
-  //z = y*y/a/a - x*x/b/b
-  //with our selection of parameters(a and b), this value for any texture coordinate is between -1.0 and 1.0
-
-  Vector3 saddleParam; // [0]: a*a, [1]: b*b, [2] b
-  Vector2 translation;
-  Vector2 rotation;
-  float toNext = -1.f;
-  if( displacement.x > 0.f || (EqualsZero(displacement.x) && displacement.y > 0.f) )
-  {
-    toNext = 1.f;
-  }
-
-  if( (displacement.y * displacement.x < 0.0f) )
-  {
-    //distance from (0,0) to the line
-    float distanceTopLeft =  fabsf(coefC) * inversedSqrtAABB;
-    //distance from (1, 1 ) to the line
-    float distanceBottomRight = fabsf(coefA+coefB+coefC) * inversedSqrtAABB;
-    saddleA = std::max( distanceTopLeft, distanceBottomRight );
-
-    //foot of a perpendicular: (1,0) to the line
-    float footX1 = ( coefB*coefB - coefA*coefC) * inversedAABB;
-    float footY1 = (-coefA*coefB - coefB*coefC) * inversedAABB;
-    //foot of a perpendicular: (0,1) to the line
-    float footX2 = (-coefA*coefB - coefA*coefC) * inversedAABB;
-    float footY2 = ( coefA*coefA - coefB*coefC) * inversedAABB;
-    saddleParam[1] = (footX1-footX2)*(footX1-footX2) + (footY1-footY2)*(footY1-footY2);
-    translation = Vector2(-footX2,-footY2);
-  }
-  else
-  {
-    //distance from(1,0) to the line
-    float distanceTopRight = fabsf(coefA+coefC) * inversedSqrtAABB;
-    //distance from(0,1) to the line
-    float distanceBottomLeft = fabsf(coefB+coefC) * inversedSqrtAABB;
-    saddleA = std::max( distanceTopRight, distanceBottomLeft );
-    //foot of a perpendicular: (0,0) to the line
-    float footX3 = (-coefA*coefC) * inversedAABB;
-    float footY3 = (-coefB*coefC) * inversedAABB;
-    //foot of a perpendicular: (1.0,1.0) to the line
-    float footX4 = ( coefB*coefB - coefA*coefB - coefA*coefC) * inversedAABB;
-    float footY4 = (-coefA*coefB + coefA*coefA- coefB*coefC) * inversedAABB;
-    saddleParam[1] = (footX3-footX4)*(footX3-footX4) + (footY3-footY4)*(footY3-footY4);
-    translation = Vector2(-footX3, -footY3);
-  }
-
-  saddleParam[2] = sqrtf(saddleParam[1]);
-  saddleParam[0] = saddleA*saddleA;
-  rotation = Vector2(-displacement.x, displacement.y);
-  rotation.Normalize();
-
-  SetUniform( "uSaddleParam", saddleParam );
-  SetUniform( "uTranslation", translation );
-  SetUniform( "uRotation", rotation );
-  SetUniform( "uToNext", toNext );
-
-}
-
-void DissolveEffect::SetDistortion( float distortion )
-{
-  SetUniform( DISTORTION_PROPERTY_NAME, distortion );
-}
-
-const std::string& DissolveEffect::GetDistortionPropertyName() const
-{
-  return DISTORTION_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index 7ead044..154ad56 100644 (file)
@@ -28,64 +28,163 @@ namespace Toolkit
 {
 
 /**
- * @brief DissolveEffect is a custom shader effect to achieve Dissolve effects in Image actors.
+ * @brief Set the dissolve central line.
+ *
+ * Use one point (position) and one direction ( displacement ) vector to define this line
+ * As we use the texture coordinate as pixel position to calculate random offset,
+ * the line should passing through rectangle {(0,0),(0,1),(1,0),(1,1)},
+ * so make the position parameter with two component values between 0.0 to 1.0
+ * @param[in] dissolveEffect The shader effect
+ * @param[in] position The point ( locates within rectangle {(0,0),(0,1),(1,0),(1,1)} ) passed through by the central line
+ * @param[in] displacement The direction of the central line
+ */
+inline void DissolveEffectSetCentralLine( ShaderEffect& dissolveEffect, const Vector2& position, const Vector2& displacement )
+{
+  // the line passes through 'position' and has the direction of 'displacement'
+    float coefA, coefB, coefC; //line equation: Ax+By+C=0;
+    coefA = displacement.y;
+    coefB = -displacement.x;
+    coefC = -displacement.y*position.x + displacement.x*position.y;
+
+    float inversedAABB = 1.f / (coefA*coefA+coefB*coefB);
+    float inversedSqrtAABB = sqrtf(inversedAABB);
+    float saddleA;
+
+    //saddle surface(Hyperbolic paraboloid)function, used to calculate the dissolve starting time
+    //z = y*y/a/a - x*x/b/b
+    //with our selection of parameters(a and b), this value for any texture coordinate is between -1.0 and 1.0
+
+    Vector3 saddleParam; // [0]: a*a, [1]: b*b, [2] b
+    Vector2 translation;
+    Vector2 rotation;
+    float toNext = -1.f;
+    if( displacement.x > 0.f || (EqualsZero(displacement.x) && displacement.y > 0.f) )
+    {
+      toNext = 1.f;
+    }
+
+    if( (displacement.y * displacement.x < 0.0f) )
+    {
+      //distance from (0,0) to the line
+      float distanceTopLeft =  fabsf(coefC) * inversedSqrtAABB;
+      //distance from (1, 1 ) to the line
+      float distanceBottomRight = fabsf(coefA+coefB+coefC) * inversedSqrtAABB;
+      saddleA = std::max( distanceTopLeft, distanceBottomRight );
+
+      //foot of a perpendicular: (1,0) to the line
+      float footX1 = ( coefB*coefB - coefA*coefC) * inversedAABB;
+      float footY1 = (-coefA*coefB - coefB*coefC) * inversedAABB;
+      //foot of a perpendicular: (0,1) to the line
+      float footX2 = (-coefA*coefB - coefA*coefC) * inversedAABB;
+      float footY2 = ( coefA*coefA - coefB*coefC) * inversedAABB;
+      saddleParam[1] = (footX1-footX2)*(footX1-footX2) + (footY1-footY2)*(footY1-footY2);
+      translation = Vector2(-footX2,-footY2);
+    }
+    else
+    {
+      //distance from(1,0) to the line
+      float distanceTopRight = fabsf(coefA+coefC) * inversedSqrtAABB;
+      //distance from(0,1) to the line
+      float distanceBottomLeft = fabsf(coefB+coefC) * inversedSqrtAABB;
+      saddleA = std::max( distanceTopRight, distanceBottomLeft );
+      //foot of a perpendicular: (0,0) to the line
+      float footX3 = (-coefA*coefC) * inversedAABB;
+      float footY3 = (-coefB*coefC) * inversedAABB;
+      //foot of a perpendicular: (1.0,1.0) to the line
+      float footX4 = ( coefB*coefB - coefA*coefB - coefA*coefC) * inversedAABB;
+      float footY4 = (-coefA*coefB + coefA*coefA- coefB*coefC) * inversedAABB;
+      saddleParam[1] = (footX3-footX4)*(footX3-footX4) + (footY3-footY4)*(footY3-footY4);
+      translation = Vector2(-footX3, -footY3);
+    }
+
+    saddleParam[2] = sqrtf(saddleParam[1]);
+    saddleParam[0] = saddleA*saddleA;
+    rotation = Vector2(-displacement.x, displacement.y);
+    rotation.Normalize();
+
+    dissolveEffect.SetUniform( "uSaddleParam", saddleParam );
+    dissolveEffect.SetUniform( "uTranslation", translation );
+    dissolveEffect.SetUniform( "uRotation", rotation );
+    dissolveEffect.SetUniform( "uToNext", toNext );
+}
+/**
+ * @brief Create a new Dissolve effect
+ *
+ *  DissolveEffect is a custom shader effect to achieve Dissolve effects in Image actors.
+ *
+ *  Animatable/Constrainable uniforms:
+ *    "uPercentage" - This value is proportional to the distortion applied; a value of zero means no distortion.
+ *
+ *  @param[in] useHighPrecision True if using high precision in fragment shader for fully random noise, false otherwise
+ *  @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API DissolveEffect : public ShaderEffect
+
+inline ShaderEffect CreateDissolveEffect(bool useHighPrecision = true)
 {
-public:
-
-  /**
-   * @brief Create an uninitialized DissolveEffect; this can be initialized with DissolveEffect::New().
-   *
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  DissolveEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~DissolveEffect();
-
-  /**
-   * @brief Create an initialized DissolveEffect.
-   *
-   * @param[in] useHighPrecision True if using high precision in fragment shader for fully random noise, false otherwise
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static DissolveEffect New( bool useHighPrecision = true);
-
-  /**
-   * @brief Set the dissolve central line.
-   *
-   * Use one point (position) and one direction ( displacement ) vector to define this line
-   * As we use the texture coordinate as pixel position to calculate random offset,
-   * the line should passing through rectangle {(0,0),(0,1),(1,0),(1,1)},
-   * so make the position parameter with two component values between 0.0 to 1.0
-   * @param[in] position The point ( locates within rectangle {(0,0),(0,1),(1,0),(1,1)} ) passed through by the central line
-   * @param[in] displacement The direction of the central line
-   */
-  void SetCentralLine( const Vector2& position, const Vector2& displacement );
-
-  /**
-   * @brief Sets the distortion applied to the effect texture.
-   *
-   * This value is proportional to the distortion applied; a value of zero means no distortion.
-   * @param [in] distortion The distortion value.
-   */
-  void SetDistortion( float distortion );
-
-  /**
-   * @brief Get the name for the distortion property.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetDistortionPropertyName() const;
-
-private: // Not intended for application developers
-  DALI_INTERNAL DissolveEffect(ShaderEffect handle);
-};
+  std::string prefixHighPrecision( "precision highp float;\n");
+    std::string prefixMediumPrecision( "precision mediump float;\n" );
+    std::string vertexShader(
+      "uniform float uPercentage;\n"
+      "uniform vec3 uSaddleParam;\n"
+      "uniform vec2 uTranslation;\n"
+      "uniform vec2 uRotation; \n"
+      "uniform float uToNext;\n"
+      "varying float vPercentage;\n"
+      "void main()\n"
+      "{\n"
+        "gl_Position = uProjection * uModelView * vec4(aPosition, 1.0);\n"
+        "vTexCoord = aTexCoord;\n"
+        //Calculate the distortion value given the dissolve central line
+        "vec2 texCoor = vec2( (aTexCoord.s - sTextureRect.s ) / (sTextureRect.p - sTextureRect.s), (aTexCoord.t- sTextureRect.t)/(sTextureRect.q - sTextureRect.t) ); \n"
+        "vec2 value = texCoor + uTranslation; \n"
+        "mat2 rotateMatrix = mat2( uRotation.s, uRotation.t, -uRotation.t, uRotation.s ); \n"
+        "value = rotateMatrix * value; \n"
+        "if(uToNext == 1.0)  \n"
+        "  value.s = uSaddleParam[2] + value.s; \n"
+        "float delay = value.t*value.t / uSaddleParam[0] - value.s*value.s/uSaddleParam[1];\n"
+        "vPercentage = clamp( uPercentage*2.0 - 0.5*sin(delay*1.571) - 0.5, 0.0, 1.0 ); \n"
+      "}\n");
+    std::string fragmentShader(
+      "varying float vPercentage;\n"
+      "float rand(vec2 co) \n"
+      "{\n"
+      "  return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); \n"
+      "}\n"
+      "void main()\n"
+      "{\n"
+        //Calculate the randomness
+        "float offsetS = rand( vTexCoord * vPercentage ) * (sTextureRect.p - sTextureRect.s) - vTexCoord.s  + sTextureRect.s; \n"
+        "float offsetT = rand( vec2(vTexCoord.t*vPercentage, vTexCoord.s * vPercentage) ) * (sTextureRect.q - sTextureRect.t) - vTexCoord.t + sTextureRect.t; \n"
+        "vec2 lookupCoord = vTexCoord + vec2(offsetS, offsetT) * vPercentage; \n"
+        "gl_FragColor = texture2D( sTexture, lookupCoord ) * uColor; \n"
+        "gl_FragColor.a *= 1.0 - vPercentage; \n"
+      "}" );
+
+    // Create the implementation, temporarily owned on stack,
+    Dali::ShaderEffect shaderEffect;
+    if( useHighPrecision )
+    {
+      shaderEffect =  Dali::ShaderEffect::New(
+          prefixHighPrecision+vertexShader, prefixHighPrecision + fragmentShader,
+          GeometryType( GEOMETRY_TYPE_IMAGE),
+          ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_BLENDING ) );
+    }
+    else
+    {
+      shaderEffect =  Dali::ShaderEffect::New(
+          prefixMediumPrecision+vertexShader, prefixMediumPrecision + fragmentShader,
+          GeometryType( GEOMETRY_TYPE_IMAGE),
+          ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_BLENDING ) );
+    }
+
+    shaderEffect.SetUniform( "uPercentage", 0.0f );
+    shaderEffect.SetProperty( ShaderEffect::Property::GRID_DENSITY, Dali::Property::Value(50.0f) );
+
+    DissolveEffectSetCentralLine( shaderEffect, Vector2(1.0f,0.5f), Vector2(-1.0f, 0.0f) );
+
+    return shaderEffect;
+
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/dissolve-local-effect.cpp b/dali-toolkit/public-api/shader-effects/dissolve-local-effect.cpp
deleted file mode 100644 (file)
index 26430d0..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <sstream>
-
-#include <dali-toolkit/public-api/shader-effects/dissolve-local-effect.h>
-
-#include <dali-toolkit/public-api/shader-effects/dissolve-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-  const std::string DISTORTION_PROPERTY_NAME( "uPercentage" );
-  const std::string CENTER_PROPERTY_NAME( "uCenter" );
-  const std::string RADIUS_PROPERTY_NAME( "uRadius" );
-  const std::string TRANSPARENCY_PROPERTY_NAME( "uTransparency" );
-}
-
-DissolveLocalEffect::DissolveLocalEffect()
-: mNumberOfDimples( 1 )
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-DissolveLocalEffect::DissolveLocalEffect( ShaderEffect handle )
-: ShaderEffect( handle ),
-  mNumberOfDimples( 1 )
-{
-}
-
-DissolveLocalEffect::~DissolveLocalEffect()
-{
-}
-
-DissolveLocalEffect DissolveLocalEffect::New( unsigned int numberOfDimples )
-{
-  std::ostringstream vertexShaderStringStream;
-  vertexShaderStringStream << "#define NUMBER_OF_DIMPLE "<< numberOfDimples << "\n";
-  std::string vertexShader(
-    "precision highp float;\n"
-    "uniform vec2 uCenter[ NUMBER_OF_DIMPLE ];\n"
-    "uniform float uRadius[ NUMBER_OF_DIMPLE ]; \n"
-    "uniform float uPercentage[ NUMBER_OF_DIMPLE ]; \n"
-    "varying float vPercentage;\n"
-    "void main()\n"
-    "{\n"
-    "  vec4 position = uModelView * vec4( aPosition, 1.0 );\n"
-    "  float percentage = 0.0;\n"
-    "  for( int i=0; i<NUMBER_OF_DIMPLE; ++i )\n"
-    "  {\n"
-    "    float distance = distance(uCenter[i], position.xy);\n"
-    "    percentage = max(percentage, uPercentage[i] * cos(clamp( distance/uRadius[i], 0.0, 1.0 )*1.57) );"
-    "  }\n"
-    "  vPercentage = clamp( percentage, 0.0, 1.0 );\n"
-    "  gl_Position = uProjection * position;\n"
-    "  vTexCoord = aTexCoord;\n"
-    "}\n");
-  vertexShaderStringStream << vertexShader;
-
-  std::string fragmentShader(
-    "precision highp float;\n"
-    "uniform float uTransparency;\n"
-    "varying float vPercentage;\n"
-    "float rand(vec2 co) \n"
-    "{\n"
-    "  return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); \n"
-    "}\n"
-    "void main()\n"
-    "{\n"
-      //Calculate the randomness
-    "  float offsetS = rand( vTexCoord * vPercentage ); \n"
-    "  float offsetT = rand( vec2(vTexCoord.t*vPercentage, vTexCoord.s * vPercentage) ); \n"
-    "  vec2 lookupCoord = vTexCoord + vec2(offsetS, offsetT) * vPercentage; \n"
-    "  gl_FragColor = texture2D( sTexture, lookupCoord ) * uColor; \n"
-    "  gl_FragColor.a *= 1.0 - uTransparency*vPercentage; \n"
-    "}\n");
-
-  ShaderEffect shaderEffect = ShaderEffect::New( vertexShaderStringStream.str(), fragmentShader,
-                                                 GeometryType( GEOMETRY_TYPE_IMAGE),
-                                                 ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_BLENDING ) );
-
-  DissolveLocalEffect handle( shaderEffect );
-  handle.mNumberOfDimples = numberOfDimples;
-
-  //Register uniform properties
-  for( unsigned int i = 0; i < numberOfDimples; i++ )
-  {
-    handle.SetCenter(i, Vector2(0.f,0.f));
-    handle.SetRadius(i, 0.f);
-    handle.SetDistortion( i, 0.f );
-  }
-  handle.SetProperty( ShaderEffect::Property::GRID_DENSITY, Dali::Property::Value(5.f) );
-  handle.SetTransparency( 0.5f );
-
-  return handle;
-}
-
-unsigned int DissolveLocalEffect::GetNumberOfDimples() const
-{
-  return mNumberOfDimples;
-}
-
-void DissolveLocalEffect::SetTransparency( float transparency)
-{
-  SetUniform( TRANSPARENCY_PROPERTY_NAME, transparency );
-}
-
-void DissolveLocalEffect::SetCenter( unsigned int index, const Vector2& center )
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfDimples );
-  SetUniform( GetCenterPropertyName( index ), center, ShaderEffect::COORDINATE_TYPE_VIEWPORT_POSITION );
-}
-
-void DissolveLocalEffect::SetRadius( unsigned int index, float radius )
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfDimples );
-  SetUniform( GetRadiusPropertyName( index ), radius );
-}
-
-void DissolveLocalEffect::SetDistortion( unsigned int index, float distortion )
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfDimples );
-  SetUniform( GetDistortionPropertyName( index ), distortion );
-}
-
-std::string DissolveLocalEffect::GetCenterPropertyName( unsigned int index ) const
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfDimples );
-  std::ostringstream oss;
-  oss<< CENTER_PROPERTY_NAME << "[" << index << "]";
-  return oss.str();
-}
-
-std::string DissolveLocalEffect::GetRadiusPropertyName( unsigned int index ) const
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfDimples );
-  std::ostringstream oss;
-  oss<< RADIUS_PROPERTY_NAME << "[" << index << "]";
-  return oss.str();
-}
-
-std::string DissolveLocalEffect::GetDistortionPropertyName( unsigned int index ) const
-{
-  DALI_ASSERT_ALWAYS( index < mNumberOfDimples );
-  std::ostringstream oss;
-  oss<< DISTORTION_PROPERTY_NAME << "["<< index << "]";
-  return oss.str();
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index f140eee..a509795 100644 (file)
@@ -20,6 +20,7 @@
 
 // EXTERNAL INCLUDES
 #include <dali/public-api/shader-effects/shader-effect.h>
+#include <sstream>
 
 namespace Dali
 {
@@ -28,102 +29,89 @@ namespace Toolkit
 {
 
 /**
+ * @brief Create a new DissolveLocalEffect
+ *
  * DissolveLocalEffect is a custom shader effect to achieve Dissolve effects in multiple small areas of Image actors
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uTransparency"
+ *  "uCenter"     - The center positions of each dimples
+ *  "uRadius"     - The propagation radius of each dimple
+ *  "uPercentage" - The distortion applied to the effect texture. A value of zero means no distortion
+ *
+ * @param[in] numberOfDimples The number of dimples
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API DissolveLocalEffect : public ShaderEffect
+inline ShaderEffect CreateDissolveLocalEffect( unsigned int numberOfDimples )
 {
-public:
-
-  /**
-   * Create an uninitialized DissolveLocalEffect; this can be initialized with DissolveLocalEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  DissolveLocalEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~DissolveLocalEffect();
-
-  /**
-   * Create an initialized DissolveLocalEffect.
-   * @param[in] numberOfDimples The number of dimples
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static DissolveLocalEffect New( unsigned int numberOfDimples );
-
-  /**
-   * Get the number of dimples the shader supports.
-   * @return The number of dimples in the shader.
-   */
-  unsigned int GetNumberOfDimples() const;
-
-  /**
-  * Set the transparency of the drifted pixels.
-  * @param[in] transparency The transparency of the drifted pixels.
-  */
-  void SetTransparency( float transparency);
-
-  /**
-   * Set the certer position of a dimple.
-   * @param[in] index The index of the dimple to change.
-   * @param[in] center The center position of the dimple.
-   * @pre index has to be between 0 and GetNumberOfDimples() - 1
-   */
-  void SetCenter( unsigned int index, const Vector2& center );
-
-  /**
-   * Set the propogation radius of a dimple.
-   * @param[in] index The index of the dimple to change.
-   * @param[in] radius The propagation radius of the dimple.
-   * @pre index has to be between 0 and GetNumberOfDimples() - 1
-   */
-  void SetRadius( unsigned int index, float radius );
-
-  /**
-   * Sets the distortion applied to the effect texture.
-   * This value is proportional to the distortion applied; a value of zero means no distortion.
-   * @param[in] index The index of the dimple to change.
-   * @param[in] distortion The distortion value.
-   * @pre index has to be between 0 and GetNumberOfDimples() - 1
-   */
-  void SetDistortion( unsigned int index, float distortion );
-
-  /**
-   * Get the name of the center property of a dimple.
-   * @param[in] index The index of the dimple.
-   * @return A std::string containing the property name.
-   * @pre index has to be between 0 and GetNumberOfDimples() - 1
-   */
-  std::string GetCenterPropertyName( unsigned int index ) const;
-
-  /**
-   * Get the name of the radius property of a dimple.
-   * @param[in] index The index of the dimple.
-   * @return A std::string containing the property name
-   * @pre index has to be between 0 and GetNumberOfDimples() - 1
-   */
-  std::string GetRadiusPropertyName( unsigned int index ) const;
-
-  /**
-   * Get the name for the distortion property of a dimple
-   * @param[in] index the index of a dimple.
-   * @return A std::string containing the property name
-   * @pre index has to be between 0 and GetNumberOfDimples() - 1
-   */
-  std::string GetDistortionPropertyName( unsigned int index ) const;
-
-private: // Not intended for application developers
-
-  DALI_INTERNAL DissolveLocalEffect( ShaderEffect handle );
-
-private:
-
-  unsigned int mNumberOfDimples;  ///< The number of dimples the shader supports
-
-};
+  std::ostringstream vertexShaderStringStream;
+  vertexShaderStringStream << "#define NUMBER_OF_DIMPLE "<< numberOfDimples << "\n";
+  std::string vertexShader(
+      "precision highp float;\n"
+      "uniform vec2 uCenter[ NUMBER_OF_DIMPLE ];\n"
+      "uniform float uRadius[ NUMBER_OF_DIMPLE ]; \n"
+      "uniform float uPercentage[ NUMBER_OF_DIMPLE ]; \n"
+      "varying float vPercentage;\n"
+      "void main()\n"
+      "{\n"
+      "  vec4 position = uModelView * vec4( aPosition, 1.0 );\n"
+      "  float percentage = 0.0;\n"
+      "  for( int i=0; i<NUMBER_OF_DIMPLE; ++i )\n"
+      "  {\n"
+      "    float distance = distance(uCenter[i], position.xy);\n"
+      "    percentage = max(percentage, uPercentage[i] * cos(clamp( distance/uRadius[i], 0.0, 1.0 )*1.57) );"
+      "  }\n"
+      "  vPercentage = clamp( percentage, 0.0, 1.0 );\n"
+      "  gl_Position = uProjection * position;\n"
+      "  vTexCoord = aTexCoord;\n"
+      "}\n");
+  vertexShaderStringStream << vertexShader;
+
+  std::string fragmentShader(
+      "precision highp float;\n"
+      "uniform float uTransparency;\n"
+      "varying float vPercentage;\n"
+      "float rand(vec2 co) \n"
+      "{\n"
+      "  return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); \n"
+      "}\n"
+      "void main()\n"
+      "{\n"
+      //Calculate the randomness
+      "  float offsetS = rand( vTexCoord * vPercentage ); \n"
+      "  float offsetT = rand( vec2(vTexCoord.t*vPercentage, vTexCoord.s * vPercentage) ); \n"
+      "  vec2 lookupCoord = vTexCoord + vec2(offsetS, offsetT) * vPercentage; \n"
+      "  gl_FragColor = texture2D( sTexture, lookupCoord ) * uColor; \n"
+      "  gl_FragColor.a *= 1.0 - uTransparency*vPercentage; \n"
+      "}\n");
+
+  ShaderEffect shaderEffect = ShaderEffect::New(
+      vertexShaderStringStream.str(), fragmentShader,
+      GeometryType( GEOMETRY_TYPE_IMAGE),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_BLENDING ) );
+
+  //Register uniform properties
+  std::ostringstream oss;
+  for( unsigned int i = 0; i < numberOfDimples; i++ )
+  {
+    oss.str("");
+    oss<< "uCenter["<< i << "]";
+    shaderEffect.SetUniform(oss.str(), Vector2(0.f,0.f));
+
+    oss.str("");
+    oss<< "uRadius["<< i << "]";
+    shaderEffect.SetUniform(oss.str(), 0.f);
+
+    oss.str("");
+    oss<< "uPercentage["<< i << "]";
+    shaderEffect.SetUniform( oss.str(), 0.f );
+  }
+
+  shaderEffect.SetProperty( ShaderEffect::Property::GRID_DENSITY, Dali::Property::Value(5.f) );
+  shaderEffect.SetUniform( "uTransparency", 0.5f );
+
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/distance-field-effect.cpp b/dali-toolkit/public-api/shader-effects/distance-field-effect.cpp
deleted file mode 100644 (file)
index 9bde48e..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/distance-field-effect.h>
-
-#define STRINGIFY(...) #__VA_ARGS__
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-// generic uniforms
-const std::string COLOR_PROPERTY_NAME( "uColor" );
-const std::string SMOOTHING_PROPERTY_NAME( "uSmoothing" );
-
-// outline uniforms
-const std::string OUTLINE_ENABLE_PROPERTY_NAME( "uDoOutline" );
-const std::string OUTLINECOLOR_PROPERTY_NAME( "uOutlineColor" );
-const std::string OUTLINE_SIZE_PROPERTY_NAME( "uOutlineParams" );
-
-// glow related
-const std::string GLOW_ENABLE_PROPERTY_NAME( "uDoGlow" );
-const std::string GLOW_COLOR_PROPERTY_NAME( "uGlowColor" );
-const std::string GLOW_BOUNDARY_PROPERTY_NAME( "uGlowBoundary" );
-
-// shadow related
-const std::string SHADOW_ENABLE_PROPERTY_NAME( "uDoShadow" );
-const std::string SHADOW_COLOR_PROPERTY_NAME( "uShadowColor" );
-const std::string SHADOW_OFFSET_PROPERTY_NAME( "uShadowOffset" );
-} // namespace
-
-DistanceFieldEffect::DistanceFieldEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-DistanceFieldEffect::DistanceFieldEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-DistanceFieldEffect::~DistanceFieldEffect()
-{
-}
-
-DistanceFieldEffect DistanceFieldEffect::New()
-{
-  std::string fragmentShaderPrefix(
-      "#extension GL_OES_standard_derivatives : enable\n"
-      "\n"
-      );
-
-  std::string fragmentShader(
-      "uniform mediump float uSmoothing;\n"
-      "uniform mediump float uGlowBoundary;\n"
-      "uniform mediump vec2  uOutlineParams;\n"
-      "uniform lowp    vec4  uOutlineColor;\n"
-      "uniform lowp    vec4  uShadowColor;\n"
-      "uniform mediump vec2  uShadowOffset;\n"
-      "uniform lowp    vec4  uGlowColor;\n"
-      "uniform lowp    float uDoOutline;\n"
-      "uniform lowp    float uDoShadow;\n"
-      "uniform lowp    float uDoGlow;\n"
-      "\n"
-      "void main()\n"
-      "{\n"
-      "  // sample distance field\n"
-      "  mediump float distance = texture2D(sTexture, vTexCoord).a;\n"
-      "  mediump float smoothWidth = fwidth(distance);\n"
-      "  mediump float alphaFactor = smoothstep(uSmoothing - smoothWidth, uSmoothing + smoothWidth, distance);\n"
-      "  lowp    vec4  color;\n"
-      "  if (uDoShadow == 0.0)\n"
-      "  {\n"
-      "    mediump float alpha = uColor.a * alphaFactor;\n"
-      "    lowp    vec4  rgb = uColor;\n"
-      "\n"
-      "    if (uDoOutline > 0.0)\n"
-      "    {\n"
-      "      mediump float outlineWidth = uOutlineParams[1] + smoothWidth;\n"
-      "      mediump float outlineBlend = smoothstep(uOutlineParams[0] - outlineWidth, uOutlineParams[0] + outlineWidth, distance);\n"
-      "      alpha = smoothstep(uSmoothing - smoothWidth, uSmoothing + smoothWidth, distance);\n"
-      "      rgb = mix(uOutlineColor, uColor, outlineBlend);\n"
-      "    }\n"
-      "\n"
-      "    if (uDoGlow > 0.0)\n"
-      "    {\n"
-      "      rgb = mix(uGlowColor, rgb, alphaFactor);\n"
-      "      alpha = smoothstep(uGlowBoundary, uSmoothing, distance);\n"
-      "    }\n"
-      "\n"
-      "    // set fragment color\n"
-      "    color = vec4(rgb.rgb, alpha);\n"
-      "  }\n"
-      "\n"
-      "  else // (uDoShadow > 0.0)\n"
-      "  {\n"
-      "    mediump float shadowDistance = texture2D(sTexture, vTexCoord - uShadowOffset).a;\n"
-      "    mediump float inText = alphaFactor;\n"
-      "    mediump float inShadow = smoothstep(uSmoothing - smoothWidth, uSmoothing + smoothWidth, shadowDistance);\n"
-      "\n"
-      "    // inside object, outside shadow\n"
-      "    if (inText == 1.0)\n"
-      "    {\n"
-      "      color = uColor;\n"
-      "    }\n"
-      "    // inside object, outside shadow\n"
-      "    else if ((inText != 0.0) && (inShadow == 0.0))\n"
-      "    {\n"
-      "      color = uColor;\n"
-      "      color.a *= inText;\n"
-      "    }\n"
-      "    // outside object, completely inside shadow\n"
-      "    else if ((inText == 0.0) && (inShadow == 1.0))\n"
-      "    {\n"
-      "      color = uShadowColor;\n"
-      "    }\n"
-      "    // inside object, completely inside shadow\n"
-      "    else if ((inText != 0.0) && (inShadow == 1.0))\n"
-      "    {\n"
-      "      color = mix(uShadowColor, uColor, inText);\n"
-      "      color.a = uShadowColor.a;\n"
-      "    }\n"
-      "    // inside object, inside shadow's border\n"
-      "    else if ((inText != 0.0) && (inShadow != 0.0))\n"
-      "    {\n"
-      "      color = mix(uShadowColor, uColor, inText);\n"
-      "      color.a *= max(inText, inShadow);\n"
-      "    }\n"
-      "    // inside shadow's border\n"
-      "    else if (inShadow != 0.0)\n"
-      "    {\n"
-      "      color = uShadowColor;\n"
-      "      color.a *= inShadow;\n"
-      "    }\n"
-      "    // outside shadow and object\n"
-      "    else \n"
-      "    {\n"
-      "      color.a = 0.0;\n"
-      "    }\n"
-      "\n"
-      "  }\n"
-      "\n"
-      "  gl_FragColor = color;\n"
-      "\n"
-      "}\n"
-      );
-
-  // Create the implementation, temporarily owned on stack
-  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::NewWithPrefix("", "",
-                                                                       fragmentShaderPrefix, fragmentShader,
-                                                                       Dali::GeometryType( GEOMETRY_TYPE_IMAGE ),
-                                                                       ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING));
-
-  /* Pass ownership to DistanceFieldEffect through overloaded constructor, So that it now has access to the
-     Dali::ShaderEffect implementation */
-
-  // TODO: move default values to... Constants?
-  Dali::Toolkit::DistanceFieldEffect handle( shaderEffect );
-
-  handle.SetSmoothingEdge(0.5f);
-  handle.SetOutlineColor(Color::BLACK);
-  handle.SetOutlineParams(Vector2(0.51f, 0.0f));
-  handle.SetGlowBoundary(0.4f);
-  handle.SetGlowColor(Color::GREEN);
-  handle.SetShadowColor(Vector4(0.0f, 0.0f, 0.0f, 0.4f));
-
-  // TODO: find a way to set the shadow offset in texel coordinates instead of UVs.
-  handle.SetShadowOffset(Vector2(0.05f, 0.05f));
-
-  // Default:
-  handle.SetOutline(false);
-  handle.SetGlow(false);
-  handle.SetShadow(false);
-
-  return handle;
-
-}
-
-void DistanceFieldEffect::SetGlowColor(const Vector4& color)
-{
-  SetUniform(GLOW_COLOR_PROPERTY_NAME, color);
-}
-
-void DistanceFieldEffect::SetGlow(bool glowEnable)
-{
-  const float a = glowEnable ? 1.0f : 0.0f;
-  SetUniform(GLOW_ENABLE_PROPERTY_NAME, a);
-}
-
-void DistanceFieldEffect::SetGlowBoundary(float glowBoundary)
-{
-  SetUniform(GLOW_BOUNDARY_PROPERTY_NAME, glowBoundary);
-}
-
-void DistanceFieldEffect::SetOutline(bool outlineEnable)
-{
-  const float a = outlineEnable ? 1.0f : 0.0f;
-  SetUniform(OUTLINE_ENABLE_PROPERTY_NAME, a);
-}
-
-void DistanceFieldEffect::SetOutlineColor(const Vector4& color)
-{
-  SetUniform(OUTLINECOLOR_PROPERTY_NAME, color);
-}
-
-void DistanceFieldEffect::SetOutlineParams(const Vector2& outlineParams)
-{
-  SetUniform(OUTLINE_SIZE_PROPERTY_NAME, outlineParams);
-}
-
-void DistanceFieldEffect::SetShadow(bool shadowEnable)
-{
-  if (shadowEnable)
-  {
-    SetGlow(false);
-    SetOutline(false);
-  }
-
-  const float a = shadowEnable ? 1.0f : 0.0f;
-  SetUniform(SHADOW_ENABLE_PROPERTY_NAME, a);
-}
-
-void DistanceFieldEffect::SetShadowColor(const Vector4& color)
-{
-  SetUniform(SHADOW_COLOR_PROPERTY_NAME, color);
-}
-
-void DistanceFieldEffect::SetShadowOffset(const Vector2& offset)
-{
-  SetUniform(SHADOW_OFFSET_PROPERTY_NAME, offset);
-}
-
-void DistanceFieldEffect::SetSmoothingEdge(const float smoothing)
-{
-  SetUniform(SMOOTHING_PROPERTY_NAME, smoothing);
-}
-
-const std::string& DistanceFieldEffect::GetColorPropertyName() const
-{
-  return COLOR_PROPERTY_NAME;
-}
-
-const std::string& DistanceFieldEffect::GetOutlineColorPropertyName() const
-{
-  return OUTLINECOLOR_PROPERTY_NAME;
-}
-
-const std::string& DistanceFieldEffect::GetShadowColorPropertyName() const
-{
-  return SHADOW_COLOR_PROPERTY_NAME;
-}
-
-const std::string& DistanceFieldEffect::GetShadowOffsetPropertyName() const
-{
-  return SHADOW_OFFSET_PROPERTY_NAME;
-}
-
-const std::string& DistanceFieldEffect::GetGlowColorPropertyName() const
-{
-  return GLOW_COLOR_PROPERTY_NAME;
-}
-
-const std::string& DistanceFieldEffect::GetGlowBoundaryPropertyName() const
-{
-  return GLOW_BOUNDARY_PROPERTY_NAME;
-}
-
-const std::string& DistanceFieldEffect::GetOutlineSizePropertyName() const
-{
-  return OUTLINE_SIZE_PROPERTY_NAME;
-}
-
-const std::string& DistanceFieldEffect::GetOutlineEnablePropertyName() const
-{
-  return OUTLINE_ENABLE_PROPERTY_NAME;
-}
-
-const std::string& DistanceFieldEffect::GetGlowEnablePropertyName() const
-{
-  return GLOW_ENABLE_PROPERTY_NAME;
-}
-
-const std::string& DistanceFieldEffect::GetShadowEnablePropertyName() const
-{
-  return SHADOW_ENABLE_PROPERTY_NAME;
-}
-
-const std::string& DistanceFieldEffect::GetSmoothingPropertyName() const
-{
-  return SMOOTHING_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index 7d0b883..3a4dba0 100644 (file)
@@ -28,169 +28,157 @@ namespace Toolkit
 {
 
 /**
+ * Creates a new DistanceFieldEffect
+ *
  * DistanceFieldEffect is a custom shader effect to achieve distance field on Image actors
+ *
+ * Animatable/Constrainable uniforms:
+ *
+ *  "uSmoothing"    - Soft edge smoothing. Specify the distance field value for the center of the edge.
+
+ *  "uDoGlow"       - The glow state. If true, glow is enabled
+ *  "uGlowBoundary" - The glow boundary factor
+ *  "uGlowColor"    - The glow color multiplier
+
+ *  "uDoShadow"     - The shadow state. If true, shadows is enabled. Cannot be used with glow/and or outline
+ *  "uShadowColor"  - The shadow color multiplier
+ *  "uShadowOffset" - The shadow offset
+
+ *  "uDoOutline"    - The outline state. If true, outline is enabled
+ *  "uOutlineColor" - The outline color multiplier
+ *  "uOutlineParams"- Thickness of outline. The outline thickness is determined by two values.
+ *                    First value [0-1] Specifies the distance field value for the center of the outline.
+ *                    Second value [0-1] Specifies the softness/width/anti-aliasing of the outlines inner edge.
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API DistanceFieldEffect : public ShaderEffect
+inline ShaderEffect CreateDistanceFieldEffect()
 {
-public:
-
-  /**
-   * Create an uninitialized DistanceFieldEffect; this can be initialized with DistanceFieldEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  DistanceFieldEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~DistanceFieldEffect();
-
-  /**
-   * Create an initialized DistanceFieldEffect.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static DistanceFieldEffect New();
-
-  /**
-   * Set the shadow state
-   * @param[in] shadowEnable value - true, enable shadow.
-   * @note Shadow cannot be used with glow/and or outline.
-   */
-  void SetShadow(bool shadowEnable);
-
-  /**
-   * Set the shadow color multiplier (e.g. output RGB)
-   * @param[in] color Shadow color value
-   */
-  void SetShadowColor(const Vector4& color);
-
-  /**
-   * Set the shadow offset
-   * @param[in] color shadow offset value
-   */
-  void SetShadowOffset(const Vector2& color);
-
-  /**
-   * Set the glow state
-   * @param[in] glowEnable value - true, enable glow.
-   */
-
-  void SetGlow(bool glowEnable);
-
-  /**
-   * Set the glow color multiplier (e.g. output RGB)
-   * @param[in] color Glow color value
-   */
-  void SetGlowColor(const Vector4& color);
-
-  /**
-   * Set the glow boundary factor
-   * @param[in] glowBoundary glow boundary
-   */
-  void SetGlowBoundary(float glowBoundary);
-
-  /**
-   * Set the outline state
-   * @param[in] outlineEnable value - true, enable outline.
-   */
-
-  void SetOutline(bool outlineEnable);
-
-  /**
-   * Set the outline color multiplier (e.g. output RGB)
-   * @param[in] color Outline color value
-   */
-  void SetOutlineColor(const Vector4& color);
-
-  /**
-   * Sets the outline parameters.
-   * @param[in] outlineParams  Thickness of outline. The outline thickness is determined by two parameters.
-   *              params[0] (0-1) Specifies the distance field value for the center of the outline.
-   *                      0 <= params[0] <= 1
-   *              params[1] (0-1) Specifies the softness/width/anti-aliasing of the outlines inner edge.
-   *                      0 <= params[0] <= 1
-   */
-  void SetOutlineParams(const Vector2& outlineParams);
-
-  /**
-   * Set soft edge smoothing
-   * @param[in] smoothing Specify the distance field value for the center of the edge.
-   *                      0 <= params <= 1
-   */
-  void SetSmoothingEdge(float smoothing);
-
-  /**
-   * Get the name for the outline-enable property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetOutlineEnablePropertyName() const;
-
-  /**
-   * Get the name for the glow-enable property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetGlowEnablePropertyName() const;
-
-  /**
-   * Get the name for the shadow-enable property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetShadowEnablePropertyName() const;
-
-  /**
-   * Get the name for the radius property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetColorPropertyName() const;
-
-  /**
-   * Get the name for the smoothing property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetSmoothingPropertyName() const;
-
-  /**
-   * Get the name for the outline color property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetOutlineColorPropertyName() const;
-
-  /**
-   * Get the name for the outline size property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetOutlineSizePropertyName() const;
-
-  /**
-   * Get the name for the shadow color property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetShadowColorPropertyName() const;
-
-  /**
-   * Get the name for the shadow offset property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetShadowOffsetPropertyName() const;
-
-  /**
-   * Get the name for the glow color property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetGlowColorPropertyName() const;
-
-  /**
-   * Get the name for the glow boundary property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetGlowBoundaryPropertyName() const;
-
-private:
-  DALI_INTERNAL DistanceFieldEffect(ShaderEffect handle);
-
-};
+  std::string fragmentShaderPrefix(
+      "#extension GL_OES_standard_derivatives : enable\n"
+      "\n"
+  );
+
+  std::string fragmentShader(
+      "uniform mediump float uSmoothing;\n"
+      "uniform mediump float uGlowBoundary;\n"
+      "uniform mediump vec2  uOutlineParams;\n"
+      "uniform lowp    vec4  uOutlineColor;\n"
+      "uniform lowp    vec4  uShadowColor;\n"
+      "uniform mediump vec2  uShadowOffset;\n"
+      "uniform lowp    vec4  uGlowColor;\n"
+      "uniform lowp    float uDoOutline;\n"
+      "uniform lowp    float uDoShadow;\n"
+      "uniform lowp    float uDoGlow;\n"
+      "\n"
+      "void main()\n"
+      "{\n"
+      "  // sample distance field\n"
+      "  mediump float distance = texture2D(sTexture, vTexCoord).a;\n"
+      "  mediump float smoothWidth = fwidth(distance);\n"
+      "  mediump float alphaFactor = smoothstep(uSmoothing - smoothWidth, uSmoothing + smoothWidth, distance);\n"
+      "  lowp    vec4  color;\n"
+      "  if (uDoShadow == 0.0)\n"
+      "  {\n"
+      "    mediump float alpha = uColor.a * alphaFactor;\n"
+      "    lowp    vec4  rgb = uColor;\n"
+      "\n"
+      "    if (uDoOutline > 0.0)\n"
+      "    {\n"
+      "      mediump float outlineWidth = uOutlineParams[1] + smoothWidth;\n"
+      "      mediump float outlineBlend = smoothstep(uOutlineParams[0] - outlineWidth, uOutlineParams[0] + outlineWidth, distance);\n"
+      "      alpha = smoothstep(uSmoothing - smoothWidth, uSmoothing + smoothWidth, distance);\n"
+      "      rgb = mix(uOutlineColor, uColor, outlineBlend);\n"
+      "    }\n"
+      "\n"
+      "    if (uDoGlow > 0.0)\n"
+      "    {\n"
+      "      rgb = mix(uGlowColor, rgb, alphaFactor);\n"
+      "      alpha = smoothstep(uGlowBoundary, uSmoothing, distance);\n"
+      "    }\n"
+      "\n"
+      "    // set fragment color\n"
+      "    color = vec4(rgb.rgb, alpha);\n"
+      "  }\n"
+      "\n"
+      "  else // (uDoShadow > 0.0)\n"
+      "  {\n"
+      "    mediump float shadowDistance = texture2D(sTexture, vTexCoord - uShadowOffset).a;\n"
+      "    mediump float inText = alphaFactor;\n"
+      "    mediump float inShadow = smoothstep(uSmoothing - smoothWidth, uSmoothing + smoothWidth, shadowDistance);\n"
+      "\n"
+      "    // inside object, outside shadow\n"
+      "    if (inText == 1.0)\n"
+      "    {\n"
+      "      color = uColor;\n"
+      "    }\n"
+      "    // inside object, outside shadow\n"
+      "    else if ((inText != 0.0) && (inShadow == 0.0))\n"
+      "    {\n"
+      "      color = uColor;\n"
+      "      color.a *= inText;\n"
+      "    }\n"
+      "    // outside object, completely inside shadow\n"
+      "    else if ((inText == 0.0) && (inShadow == 1.0))\n"
+      "    {\n"
+      "      color = uShadowColor;\n"
+      "    }\n"
+      "    // inside object, completely inside shadow\n"
+      "    else if ((inText != 0.0) && (inShadow == 1.0))\n"
+      "    {\n"
+      "      color = mix(uShadowColor, uColor, inText);\n"
+      "      color.a = uShadowColor.a;\n"
+      "    }\n"
+      "    // inside object, inside shadow's border\n"
+      "    else if ((inText != 0.0) && (inShadow != 0.0))\n"
+      "    {\n"
+      "      color = mix(uShadowColor, uColor, inText);\n"
+      "      color.a *= max(inText, inShadow);\n"
+      "    }\n"
+      "    // inside shadow's border\n"
+      "    else if (inShadow != 0.0)\n"
+      "    {\n"
+      "      color = uShadowColor;\n"
+      "      color.a *= inShadow;\n"
+      "    }\n"
+      "    // outside shadow and object\n"
+      "    else \n"
+      "    {\n"
+      "      color.a = 0.0;\n"
+      "    }\n"
+      "\n"
+      "  }\n"
+      "\n"
+      "  gl_FragColor = color;\n"
+      "\n"
+      "}\n"
+  );
+
+  // Create the implementation, temporarily owned on stack
+  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::NewWithPrefix(
+      "", "",
+      fragmentShaderPrefix, fragmentShader,
+      GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING));
+
+  shaderEffect.SetUniform("uSmoothing",0.5f);
+  shaderEffect.SetUniform("uOutlineColor",Color::BLACK);
+  shaderEffect.SetUniform("uOutlineParams",Vector2(0.51f, 0.0f));
+  shaderEffect.SetUniform("uGlowBoundary",0.4f);
+  shaderEffect.SetUniform("uGlowColor",Color::GREEN);
+  shaderEffect.SetUniform("uShadowColor",Vector4(0.0f, 0.0f, 0.0f, 0.4f));
+
+  // TODO: find a way to set the shadow offset in texel coordinates instead of UVs.
+  shaderEffect.SetUniform("uShadowOffset",Vector2(0.05f, 0.05f));
+
+  // Default:
+  shaderEffect.SetUniform("uDoOutline",false);
+  shaderEffect.SetUniform("uDoGlow",false);
+  shaderEffect.SetUniform("uDoShadow",false);
+
+  return shaderEffect;
+}
+
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/image-region-effect.cpp b/dali-toolkit/public-api/shader-effects/image-region-effect.cpp
deleted file mode 100644 (file)
index 9b1b0b1..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/image-region-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string TOP_LEFT_PROPERTY_NAME( "uTopLeft" );
-const std::string BOTTOM_RIGHT_PROPERTY_NAME( "uBottomRight" );
-
-} // namespace
-
-ImageRegionEffect::ImageRegionEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-ImageRegionEffect::ImageRegionEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-ImageRegionEffect::~ImageRegionEffect()
-{
-}
-
-
-ImageRegionEffect ImageRegionEffect::New()
-{
-  std::string vertexShader(
-    "uniform mediump vec2 uTopLeft;\n"
-    "uniform mediump vec2 uBottomRight;\n"
-    "void main()\n"
-    "{\n"
-    "  mediump vec4 position = vec4(aPosition,1.0);\n"
-    "  gl_Position = uMvpMatrix * position;\n"
-    // The line below is doing the same as the following commented lines:
-    //"  vec2 imageSize = sTextureRect.zw - sTextureRect.xy;\n"
-    //"  vec2 topLeft = sTextureRect.xy + uTopLeft * imageSize;\n"
-    //"  vec2 bottomRight = sTextureRect.xy + uBottomRight * imageSize;\n"
-    //"  vec2 texCoord = (aTexCoord - sTextureRect.xy) / imageSize;\n"
-    //"  vTexCoord = topLeft + texCoord * ( bottomRight - topLeft );\n"
-    "  vTexCoord = sTextureRect.xy + uTopLeft * ( sTextureRect.zw - sTextureRect.xy ) + ( aTexCoord - sTextureRect.xy ) * ( uBottomRight - uTopLeft );\n"
-    "}\n"
-  );
-
-  Dali::ShaderEffect shaderEffectCustom = Dali::ShaderEffect::New( vertexShader, "" );
-
-  Dali::Toolkit::ImageRegionEffect handle( shaderEffectCustom );
-
-  handle.SetUniform( TOP_LEFT_PROPERTY_NAME, Vector2( 0.f, 0.f ) );
-  handle.SetUniform( BOTTOM_RIGHT_PROPERTY_NAME, Vector2( 1.f, 1.f ) );
-
-  return handle;
-}
-
-void ImageRegionEffect::SetTopLeft(const Vector2& point)
-{
-  SetUniform( TOP_LEFT_PROPERTY_NAME, point );
-}
-
-void ImageRegionEffect::SetBottomRight(const Vector2& point)
-{
-  SetUniform( BOTTOM_RIGHT_PROPERTY_NAME, point );
-}
-
-const std::string& ImageRegionEffect::GetTopLeftPropertyName() const
-{
-  return TOP_LEFT_PROPERTY_NAME;
-}
-
-const std::string& ImageRegionEffect::GetBottomRightPropertyName() const
-{
-  return BOTTOM_RIGHT_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index a74f5b8..2bce6b3 100644 (file)
@@ -28,67 +28,43 @@ namespace Toolkit
 {
 
 /**
- * @brief ImageRegionEffect is a custom shader effect to show only a region of an Image actor.
+ * @brief Creates a new ImageRegionEffect
+ *
+ * ImageRegionEffect is a custom shader effect to show only a region of an Image actor.
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uTopLeft"      - The top-left corner of the image region. The coordinates are in percentage,
+ *                    (0,0) being the top-left and (1,1) the bottom right of the original image
+ *  "uBottomRight"  - The bottom-right corner of the image region. The coordinates are in percentage,
+ *                    (0,0) being the top-left and (1,1) the bottom right of the original image
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API ImageRegionEffect : public ShaderEffect
+inline ShaderEffect CreateImageRegionEffect()
 {
-public:
-
-  /**
-   * @brief Create an uninitialized ImageRegionEffect; this can be initialized with ImageRegionEffect::New().
-   *
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  ImageRegionEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~ImageRegionEffect();
-
-  /**
-   * @brief Create an initialized ImageRegionEffect.
-   *
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static ImageRegionEffect New();
-
-  /**
-   * @brief Set the top-left corner of the image region.
-   *
-   * The coordinates are in percentage, (0,0) being the top-left and (1,1) the bottom right of the original image.
-   * @param [in] point The top-left corner of the region.
-   */
-  void SetTopLeft(const Vector2& point);
-
-  /**
-   * @brief Set the bottom-right corner of the image region.
-   *
-   * The coordinates are in percentage, (0,0) being the top-left and (1,1) the bottom right of the original image.
-   * @param [in] point The bottom-right corner of the region.
-   */
-  void SetBottomRight(const Vector2& point);
-
-  /**
-   * @brief Get the name for the top-left point property.
-   *
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetTopLeftPropertyName() const;
-
-  /**
-   * @brief Get the name for the bottom-right point property which can be used in Animation APIs.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetBottomRightPropertyName() const;
-
-private: // Not intended for application developers
-  DALI_INTERNAL ImageRegionEffect(ShaderEffect handle);
-};
+  std::string vertexShader(
+      "uniform mediump vec2 uTopLeft;\n"
+      "uniform mediump vec2 uBottomRight;\n"
+      "void main()\n"
+      "{\n"
+      "  mediump vec4 position = vec4(aPosition,1.0);\n"
+      "  gl_Position = uMvpMatrix * position;\n"
+      // The line below is doing the same as the following commented lines:
+      //"  vec2 imageSize = sTextureRect.zw - sTextureRect.xy;\n"
+      //"  vec2 topLeft = sTextureRect.xy + uTopLeft * imageSize;\n"
+      //"  vec2 bottomRight = sTextureRect.xy + uBottomRight * imageSize;\n"
+      //"  vec2 texCoord = (aTexCoord - sTextureRect.xy) / imageSize;\n"
+      //"  vTexCoord = topLeft + texCoord * ( bottomRight - topLeft );\n"
+      "  vTexCoord = sTextureRect.xy + uTopLeft * ( sTextureRect.zw - sTextureRect.xy ) + ( aTexCoord - sTextureRect.xy ) * ( uBottomRight - uTopLeft );\n"
+      "}\n"
+  );
+
+  Dali::ShaderEffect shaderEffect = Dali::ShaderEffect::New( vertexShader, "" );
+  shaderEffect.SetUniform( "uTopLeft", Vector2( 0.f, 0.f ) );
+  shaderEffect.SetUniform( "uBottomRight", Vector2( 1.f, 1.f ) );
+
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/iris-effect.cpp b/dali-toolkit/public-api/shader-effects/iris-effect.cpp
deleted file mode 100644 (file)
index 9680775..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/iris-effect.h>
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-const std::string RADIUS_PROPERTY_NAME( "uRadius" );
-const std::string CENTER_PROPERTY_NAME( "uCenter" );
-const std::string BLEND_FACTOR_PROPERTY_NAME( "uBlendFactor" );
-} // namespace
-
-IrisEffect::IrisEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-IrisEffect::IrisEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-IrisEffect::~IrisEffect()
-{
-}
-
-IrisEffect IrisEffect::New()
-{
-  // append the default version
-  std::string vertexShader(
-              "uniform mediump vec2 uCenter;\n"
-              "varying mediump vec2 vRelativePosition;\n"
-              "\n"
-              "void main()\n"
-              "{\n"
-              "    mediump vec4 world = uModelView * vec4(aPosition,1.0);\n"
-              "    gl_Position = uProjection * world;\n"
-              "    \n"
-              "    vTexCoord = aTexCoord;\n"
-              "    vRelativePosition = aTexCoord - uCenter;\n"
-              "}\n");
-
-  std::string fragmentShader(
-              "uniform mediump float uRadius;                                                           \n"
-              "uniform mediump float uBlendFactor;                                                      \n"
-              "varying mediump vec2 vRelativePosition;                                                  \n"
-              "void main()                                                                      \n"
-              "{                                                                                \n"
-              "   mediump float delta = (length(vRelativePosition) - uRadius);                          \n"
-              "   delta = clamp(0.0 - delta * uBlendFactor, 0.0, 1.0);                          \n"
-              "   gl_FragColor = texture2D(sTexture, vTexCoord) * uColor;                       \n"
-              "   gl_FragColor.a *= delta;                                                      \n"
-              "}                                                                                \n"
-              );
-
-  Dali::ShaderEffect shaderEffectCustom =  Dali::ShaderEffect::New(
-      vertexShader,
-      fragmentShader,
-      GeometryType( GEOMETRY_TYPE_IMAGE ),
-      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ));
-
-  Dali::Toolkit::IrisEffect handle( shaderEffectCustom );
-  handle.SetUniform( RADIUS_PROPERTY_NAME, 0.0f );
-  handle.SetUniform( BLEND_FACTOR_PROPERTY_NAME, 100.0f );
-  handle.SetUniform( CENTER_PROPERTY_NAME, Vector2(0.5f, 0.5f) );
-  return handle;
-}
-
-void IrisEffect::SetRadius( float radius )
-{
-  SetUniform( RADIUS_PROPERTY_NAME, radius );
-}
-
-void IrisEffect::SetBlendFactor(float value )
-{
-  SetUniform( BLEND_FACTOR_PROPERTY_NAME, value );
-}
-
-void IrisEffect::SetCenter( const Vector2& center )
-{
-  SetUniform( CENTER_PROPERTY_NAME, center );
-}
-
-const std::string& IrisEffect::GetRadiusPropertyName() const
-{
-  return RADIUS_PROPERTY_NAME;
-}
-
-const std::string& IrisEffect::GetBlendFactorPropertyName() const
-{
-  return BLEND_FACTOR_PROPERTY_NAME;
-}
-
-const std::string& IrisEffect::GetCenterPropertyName() const
-{
-  return CENTER_PROPERTY_NAME;
-}
-
-
-}
-}
index 7bad71e..8e80322 100644 (file)
@@ -28,90 +28,65 @@ namespace Toolkit
 {
 
 /**
- * @brief IrisEffect is a custom shader effect to achieve iris effects in Image actors
+ * @brief Creates a new IrisEffect
+ *
+ * IrisEffect is a custom shader effect to achieve iris effects in Image actors
+ *
+ * Animatable/Constrainable uniforms:
+ *
+ *  "uRadius"       - The radius of the iris effect in texture coordinate distance,
+ *                    i.e. 0.0 (no circle) to 1.0 (complete circle), to > 1.0 (extending outside of texture).
+ *                    @note For Atlas Textures results may be unpredictable.
+ *
+ *  "uBlendFactor"  - The blend factor of the iris effect. The lower the value, the larger the blending portion
+ *                    (between Opaque & Transparent). Blending will account for 1 / blendFactor of the radius
+ *                    of the texture.
+ *
+ *  "uCenter"       - The center point of the iris (in texture coordinates)
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API IrisEffect : public ShaderEffect
+inline ShaderEffect CreateIrisEffect()
 {
-
-public:
-
-  /**
-   * @brief Create an uninitialized IrisEffect; this can be initialized with IrisEffect::New().
-   *
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  IrisEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~IrisEffect();
-
-  /**
-   * @brief Create an initialized IrisEffect.
-   *
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static IrisEffect New();
-
-  /**
-   * @brief Set the radius of the iris effect in texture coordinate distance,
-   * i.e. 0.0 (no circle) to 1.0 (complete circle), to > 1.0 (extending
-   * outside of texture).
-   *
-   * @note For Atlas Textures results may be unpredictable.
-   *
-   * @param [in] radius The new radius.
-   */
-  void SetRadius(float radius);
-
-  /**
-   * @brief Set the blend factor of the iris effect.
-   *
-   * The lower the value, the larger the blending portion
-   * (between Opaque & Transparent)
-   *
-   * Blending will account for 1 / blendFactor of the radius
-   * of the texture.
-   *
-   * @param [in] value The new blend Factor.
-   */
-  void SetBlendFactor(float value);
-
-  /**
-   * @brief Sets the center point of the iris (in texture coordinates).
-   *
-   * @param[in] center The center point.
-   */
-  void SetCenter( const Vector2& center );
-
-  /**
-   * @brief Get the name for the radius property which can be used in Animation APIs.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetRadiusPropertyName() const;
-
-  /**
-   * @brief Get the name for the blend factor property.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetBlendFactorPropertyName() const;
-
-  /**
-   * @brief Get the name for the center property.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetCenterPropertyName() const;
-
-
-private: // Not intended for application developers
-  DALI_INTERNAL IrisEffect(ShaderEffect handle);
-};
+  // append the default version
+  std::string vertexShader(
+      "uniform mediump vec2 uCenter;\n"
+      "varying mediump vec2 vRelativePosition;\n"
+      "\n"
+      "void main()\n"
+      "{\n"
+      "    mediump vec4 world = uModelView * vec4(aPosition,1.0);\n"
+      "    gl_Position = uProjection * world;\n"
+      "    \n"
+      "    vTexCoord = aTexCoord;\n"
+      "    vRelativePosition = aTexCoord - uCenter;\n"
+      "}\n");
+
+  std::string fragmentShader(
+      "uniform mediump float uRadius;                                                           \n"
+      "uniform mediump float uBlendFactor;                                                      \n"
+      "varying mediump vec2 vRelativePosition;                                                  \n"
+      "void main()                                                                      \n"
+      "{                                                                                \n"
+      "   mediump float delta = (length(vRelativePosition) - uRadius);                          \n"
+      "   delta = clamp(0.0 - delta * uBlendFactor, 0.0, 1.0);                          \n"
+      "   gl_FragColor = texture2D(sTexture, vTexCoord) * uColor;                       \n"
+      "   gl_FragColor.a *= delta;                                                      \n"
+      "}                                                                                \n"
+  );
+
+  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
+      vertexShader,
+      fragmentShader,
+      GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ));
+
+  shaderEffect.SetUniform( "uRadius", 0.0f );
+  shaderEffect.SetUniform( "uBlendFactor", 100.0f );
+  shaderEffect.SetUniform( "uCenter", Vector2(0.5f, 0.5f) );
+
+  return shaderEffect;
+}
 
 }
 }
diff --git a/dali-toolkit/public-api/shader-effects/mask-effect.cpp b/dali-toolkit/public-api/shader-effects/mask-effect.cpp
deleted file mode 100644 (file)
index a0a44bb..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include <dali-toolkit/public-api/shader-effects/mask-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-MaskEffect::MaskEffect()
-{
-}
-
-MaskEffect::~MaskEffect()
-{
-}
-
-MaskEffect MaskEffect::New( Image maskImage )
-{
-  const char* ALPHA_MASK_FRAGMENT_SHADER_SOURCE =
-  "void main()                                                                    \n"
-  "{                                                                              \n"
-  "  highp vec4 mask = texture2D(sEffect, vTexCoord);                             \n"
-  "  gl_FragColor = texture2D(sTexture, vTexCoord) * uColor * vec4(1,1,1,mask.a); \n"
-  "}                                                                              \n";
-
-  ShaderEffect shader = ShaderEffect::New( "", // Use default
-                                           ALPHA_MASK_FRAGMENT_SHADER_SOURCE,
-                                           GeometryType( GEOMETRY_TYPE_IMAGE ),
-                                           ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ) );
-
-  shader.SetEffectImage( maskImage );
-
-  return MaskEffect( shader );
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-MaskEffect::MaskEffect( ShaderEffect handle )
-: ShaderEffect( handle )
-{
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index a950ecb..fecc1b9 100644 (file)
@@ -29,44 +29,40 @@ namespace Toolkit
 {
 
 /**
- * @brief MaskEffect is used to control which parts of an image are visible, using the alpha channel of a separate mask image.
+ * @brief Creates a new MaskEffect
+ *
+ * MaskEffect is used to control which parts of an image are visible, using the alpha channel of a separate mask image.
  *
  * Typically mask images should be the same size as the main image being viewed, but this isn't essential.
  *
  * Usage example:
  *
  *   ImageActor actor = ImageActor::New( Image( EXAMPLE_IMAGE_PATH ) );
- *   MaskEffect maskEffect = MaskEffect::New( Image::New( MASK_IMAGE_PATH ) );
+ *   ShaderEffect maskEffect = CreateMaskEffect( Image::New( MASK_IMAGE_PATH ) );
  *   actor.SetShaderEffect( maskEffect );
+ *
+ * @param[in] maskImage The image to use as a mask
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API MaskEffect : public ShaderEffect
+inline ShaderEffect CreateMaskEffect(Image maskImage)
 {
-public:
-
-  /**
-   * @brief Create an empty MaskEffect handle.
-   */
-  MaskEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~MaskEffect();
+  const char* ALPHA_MASK_FRAGMENT_SHADER_SOURCE =
+      "void main()                                                                    \n"
+      "{                                                                              \n"
+      "  highp vec4 mask = texture2D(sEffect, vTexCoord);                             \n"
+      "  gl_FragColor = texture2D(sTexture, vTexCoord) * uColor * vec4(1,1,1,mask.a); \n"
+      "}                                                                              \n";
 
-  /**
-   * @brief Create a MaskEffect.
-   *
-   * @param[in] maskImage The image to use as a mask
-   * @return A handle to a newly allocated MaskEffect.
-   */
-  static MaskEffect New( Image maskImage );
+  ShaderEffect shaderEffect = ShaderEffect::New(
+      "", // Use default
+      ALPHA_MASK_FRAGMENT_SHADER_SOURCE,
+      GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ) );
 
-private: // Not intended for application developers
+  shaderEffect.SetEffectImage( maskImage );
 
-  DALI_INTERNAL MaskEffect( ShaderEffect handle );
-};
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/mirror-effect.cpp b/dali-toolkit/public-api/shader-effects/mirror-effect.cpp
deleted file mode 100644 (file)
index 0464150..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/mirror-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string DEPTH_PROPERTY_NAME( "uDepth" );
-const std::string ALPHA_PROPERTY_NAME( "uAlpha" );
-
-} // namespace
-
-MirrorEffect::MirrorEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-MirrorEffect::MirrorEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-MirrorEffect::~MirrorEffect()
-{
-}
-
-MirrorEffect MirrorEffect::New()
-{
-
-  std::string vertexShader(
-      "void main()                                  \n"
-      "{                                            \n"
-      "  mediump vec3 pos = aPosition;              \n"
-      "  pos.y = pos.y * 3.0;                       \n"
-      "  mediump vec4 world = uModelView * vec4(pos,1.0); \n"
-      "  gl_Position = uProjection * world;         \n"
-      "  vTexCoord = aTexCoord;                     \n"
-      "}                                            \n" );
-
-  std::string fragmentShader(
-      "uniform  mediump float  uDepth;              \n"
-      "uniform  mediump float  uAlpha;              \n"
-      "void main()                                  \n"
-      "{                                            \n"
-      " if(vTexCoord.y < 1.0 / 3.0)                 \n"
-      " {                                           \n"
-      "   gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);  \n"
-      " }                                           \n"
-      " else if(vTexCoord.y < 2.0 / 3.0)            \n"
-      " {                                           \n"
-      "   gl_FragColor = texture2D(sTexture, vec2(vTexCoord.x, vTexCoord.y * 3.0 - 1.0)) * uColor;    \n"
-      "   gl_FragColor.a *= uAlpha;                 \n"
-      " }                                           \n"
-      " else                                        \n"
-      " {                                           \n"
-      "   highp float darkness = 3.0 - vTexCoord.y * 3.0;                                                   \n"
-      "   darkness = (1.0 - 1.0 / uDepth + darkness * 1.0/ uDepth) * 0.65;                            \n"
-      "   highp vec4 color = texture2D(sTexture, vec2(vTexCoord.x, -vTexCoord.y *3.0 + 3.0)) * uColor;      \n"
-      "   color.a *= uAlpha;                                                                          \n"
-      "   gl_FragColor = color * vec4(darkness, darkness, darkness, darkness);                        \n"
-      " }                                           \n"
-      "}                                            \n" );
-
-  // Create the implementation, temporarily owned on stack,
-  Dali::ShaderEffect shaderEffectCustom =  Dali::ShaderEffect::New(
-      vertexShader,
-      fragmentShader,
-      GeometryType( GEOMETRY_TYPE_IMAGE ),
-      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ));
-
-  /* Pass ownership to MirrorEffect through overloaded constructor, So that it now has access to the
-     Dali::ShaderEffect implementation */
-  Dali::Toolkit::MirrorEffect handle( shaderEffectCustom );
-  handle.SetUniform(ALPHA_PROPERTY_NAME, 1.0f);
-  handle.SetUniform(DEPTH_PROPERTY_NAME, 0.5f);
-  return handle;
-}
-
-void MirrorEffect::SetDepth( float depth )
-{
-  SetUniform( DEPTH_PROPERTY_NAME, depth );
-}
-
-void MirrorEffect::SetAlpha( float alpha )
-{
-  SetUniform( ALPHA_PROPERTY_NAME, alpha );
-}
-
-const std::string& MirrorEffect::GetDepthPropertyName() const
-{
-  return DEPTH_PROPERTY_NAME;
-}
-
-const std::string& MirrorEffect::GetAlphaPropertyName() const
-{
-  return ALPHA_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index 1eafac1..4e6b30f 100644 (file)
@@ -28,60 +28,64 @@ namespace Toolkit
 {
 
 /**
+ * @brief Creates a new MirrorEffect
+ *
  * MirrorEffect is a custom shader effect to achieve square effects in Image actors
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uDepth"  - The depth of the mirror effect. Default value 0.5
+ *  "uAlpha"  - The alpha of the mirror effect. Default value 1.0
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API MirrorEffect : public ShaderEffect
+inline ShaderEffect CreateMirrorEffect()
 {
-public:
-
-  /**
-   * Create an uninitialized MirrorEffect; this can be initialized with MirrorEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  MirrorEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~MirrorEffect();
-
-  /**
-   * Create an initialized MirrorEffect.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static MirrorEffect New();
-
-  /**
-   * Set the depth of the mirror effect.
-   * @param [in] depth The new mirror depth value.
-   */
-  void SetDepth(float depth);
-
-  /**
-   * Set the alpha of the mirror effect.
-   * @param [in] alpha The new mirror alpha value.
-   */
-  void SetAlpha(float alpha);
-
-  /**
-   * Get the name for the depth property
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetDepthPropertyName() const;
-
-  /**
-   * Get the name for the alpha property
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAlphaPropertyName() const;
+  std::string vertexShader(
+      "void main()                                  \n"
+      "{                                            \n"
+      "  mediump vec3 pos = aPosition;              \n"
+      "  pos.y = pos.y * 3.0;                       \n"
+      "  mediump vec4 world = uModelView * vec4(pos,1.0); \n"
+      "  gl_Position = uProjection * world;         \n"
+      "  vTexCoord = aTexCoord;                     \n"
+      "}                                            \n" );
+
+  std::string fragmentShader(
+      "uniform  mediump float  uDepth;              \n"
+      "uniform  mediump float  uAlpha;              \n"
+      "void main()                                  \n"
+      "{                                            \n"
+      " if(vTexCoord.y < 1.0 / 3.0)                 \n"
+      " {                                           \n"
+      "   gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);  \n"
+      " }                                           \n"
+      " else if(vTexCoord.y < 2.0 / 3.0)            \n"
+      " {                                           \n"
+      "   gl_FragColor = texture2D(sTexture, vec2(vTexCoord.x, vTexCoord.y * 3.0 - 1.0)) * uColor;    \n"
+      "   gl_FragColor.a *= uAlpha;                 \n"
+      " }                                           \n"
+      " else                                        \n"
+      " {                                           \n"
+      "   highp float darkness = 3.0 - vTexCoord.y * 3.0;                                                   \n"
+      "   darkness = (1.0 - 1.0 / uDepth + darkness * 1.0/ uDepth) * 0.65;                            \n"
+      "   highp vec4 color = texture2D(sTexture, vec2(vTexCoord.x, -vTexCoord.y *3.0 + 3.0)) * uColor;      \n"
+      "   color.a *= uAlpha;                                                                          \n"
+      "   gl_FragColor = color * vec4(darkness, darkness, darkness, darkness);                        \n"
+      " }                                           \n"
+      "}                                            \n" );
+
+  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
+      vertexShader,
+      fragmentShader,
+      GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ));
+
+  shaderEffect.SetUniform("uAlpha", 1.0f);
+  shaderEffect.SetUniform("uDepth", 0.5f);
+
+  return shaderEffect;
+}
 
-private: // Not intended for application developers
-  DALI_INTERNAL MirrorEffect(ShaderEffect handle);
-};
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/motion-blur-effect.cpp b/dali-toolkit/public-api/shader-effects/motion-blur-effect.cpp
deleted file mode 100644 (file)
index 269e4ec..0000000
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include <dali-toolkit/public-api/shader-effects/motion-blur-effect.h>
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/animation/constraint.h>
-#include <dali/public-api/animation/constraints.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string MOTION_BLUR_TEXCOORD_SCALE_PROPERTY_NAME( "uBlurTexCoordScale" );
-const std::string MOTION_BLUR_GEOM_STRETCH_SCALING_FACTOR_PROPERTY_NAME( "uGeometryStretchFactor" );
-const std::string MOTION_BLUR_SPEED_SCALING_FACTOR_PROPERTY_NAME( "uSpeedScalingFactor" );
-const std::string MOTION_BLUR_OBJECT_FADE_START_PROPERTY_NAME( "uObjectFadeStart" );
-const std::string MOTION_BLUR_OBJECT_FADE_END_PROPERTY_NAME( "uObjectFadeEnd" );
-const std::string MOTION_BLUR_ALPHA_SCALE_PROPERTY_NAME( "uAlphaScale" );
-const std::string MOTION_BLUR_NUM_SAMPLES_NAME( "uNumSamples" );
-const std::string MOTION_BLUR_RECIP_NUM_SAMPLES_NAME( "uRecipNumSamples" );
-const std::string MOTION_BLUR_RECIP_NUM_SAMPLES_MINUS_ONE_NAME( "uRecipNumSamplesMinusOne" );
-const std::string MOTION_BLUR_MODEL_LASTFRAME( "uModelLastFrame" );  ///< Matrix
-
-////////////////////////////////////////////////////
-//
-// Motion blur shader / actor tweaking parameters
-//
-
-const unsigned int MOTION_BLUR_NUM_SAMPLES = 8;
-
-// half width and half height respectively of actor, corresponding to values in vertex attribute stream
-// TODO: Note that these values work for normal image actor (verts +/- 0.5) but a grid or a nine square seems to have verts in pixel space (e.g. 256,256). Need to fix this somehow,
-// either in Dali or by passing uniforms which we can use to 'normalise' the verts in the vertex shader
-const Vector2 MOTION_BLUR_ACTOR_VERTEX( 0.5f, 0.5f );
-
-const float MOTION_BLUR_TEXCOORD_SCALE = 0.125f;             // stretch texture reads along velocity vector, larger number means reads spaced further apart
-const float MOTION_BLUR_GEOM_STRETCH_SCALING_FACTOR = 0.05f; // scaling factor for how much to stretch actor geom as it moves
-const float MOTION_BLUR_SPEED_SCALING_FACTOR = 0.5f;         // scales the speed, producing a number affecting how much the actor blurs & fades at the edges
-
-const Vector2 MOTION_BLUR_OBJECT_FADE_END( MOTION_BLUR_ACTOR_VERTEX );             // distance from center at which actor fully fades to zero alpha
-const Vector2 MOTION_BLUR_OBJECT_FADE_START( MOTION_BLUR_OBJECT_FADE_END * 0.5f ); // distance from center at which actor start to fade from full alpha
-
-const float MOTION_BLUR_ALPHA_SCALE = 0.75f; // global scaler applied to actor alpha as it is blurred + moving
-
-} // namespace
-
-
-MotionBlurEffect::MotionBlurEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-MotionBlurEffect::MotionBlurEffect( ShaderEffect handle )
-:ShaderEffect( handle )
-{
-}
-
-MotionBlurEffect::~MotionBlurEffect()
-{
-}
-
-MotionBlurEffect MotionBlurEffect::Apply( ImageActor renderable )
-{
-  MotionBlurEffect newEffect = New( MOTION_BLUR_NUM_SAMPLES );
-  renderable.SetShaderEffect( newEffect );
-
-  Dali::Property::Index uModelProperty = newEffect.GetPropertyIndex( MOTION_BLUR_MODEL_LASTFRAME );
-
-  Constraint constraint = Constraint::New<Matrix>( newEffect, uModelProperty, EqualToConstraint() );
-  constraint.AddSource( Source( renderable, Actor::Property::WORLD_MATRIX ) );
-
-  // and set up constraint.
-  constraint.Apply();
-  return newEffect;
-}
-
-MotionBlurEffect MotionBlurEffect::New()
-{
-  return New( MOTION_BLUR_NUM_SAMPLES );
-}
-
-MotionBlurEffect MotionBlurEffect::New( unsigned int numBlurSamples )
-{
-  // Dali vertexSource prefix for reference:
-  // precision highp float;
-  // attribute vec3  aPosition;
-  // attribute vec2  aTexCoord;
-  // uniform   mat4  uMvpMatrix;
-  // uniform   mat4  uModelView;
-  // uniform   mat3  uNormalMatrix;
-  // uniform   mat4  uProjection;
-  // uniform   vec4  uColor;
-  // varying   vec2  vTexCoord;
-  std::string vertexSource;
-  vertexSource =
-    "precision mediump float;\n"
-    "uniform mat4 uModelLastFrame;\n"
-    "uniform float uTimeDelta;\n"
-
-    "uniform float uGeometryStretchFactor;\n"
-    "uniform float uSpeedScalingFactor;\n"
-
-    // outputs
-    "varying vec2 vModelSpaceCenterToPos;\n"
-    "varying vec2 vScreenSpaceVelocityVector;\n"
-    "varying float vSpeed;\n"
-
-    "void main()\n"
-    "{\n"
-    // get view space position of vertex this frame and last frame
-    " vec4 vertex = vec4(aPosition, 1.0);\n"
-    " vec4 viewSpaceVertex = uModelView * vertex;\n"
-    " vec4 viewSpaceVertexLastFrame = (uViewMatrix * uModelLastFrame) * vertex;\n"
-    " float reciprocalTimeDelta = 1.0 / ((uTimeDelta > 0.0) ? uTimeDelta : 0.01);\n"
-
-    // work out vertex's last movement in view space
-    " vec3 viewSpacePosDelta = viewSpaceVertex.xyz - viewSpaceVertexLastFrame.xyz;\n"
-
-    // get clip space position of vertex this frame and last frame
-    " vec4 clipSpaceVertex = uMvpMatrix * vertex;\n"
-    " vec4 clipSpaceVertexLastFrame = uProjection * viewSpaceVertexLastFrame;\n"
-
-    // decide how much this vertex is 'trailing', i.e. at the back of the object relative to its direction of motion. We do this
-    // by assuming the objects model space origin is at its center and taking the dot product of the vector from center to vertex with the motion direction
-    " float t = 0.0;\n"
-    " float posDeltaLength = length(viewSpacePosDelta);\n"
-    " if(posDeltaLength > 0.001)\n" // avoid div by 0 if object has barely moved
-    " {\n"
-    "   vec4 viewSpaceCenterToPos = uModelView * vec4(aPosition, 0.0);\n"
-    "   float centerToVertexDist = length(viewSpaceCenterToPos);\n"
-    "   if(centerToVertexDist > 0.001)\n" // avoid div by 0 if object has vertex at model space origin
-    "   {\n"
-    "     vec3 viewSpacePosDeltaNormalised = viewSpacePosDelta / posDeltaLength;\n"
-    "     vec3 viewSpaceCenterToPosNormalised = viewSpaceCenterToPos.xyz / centerToVertexDist;\n"
-    "     t = (dot(viewSpacePosDeltaNormalised, viewSpaceCenterToPosNormalised) * 0.5 ) + 0.5;\n" // scale and bias from [-1..1] to [0..1]
-    "   }\n"
-    " }\n"
-    // output vertex position lerped with its last position, based on how much it is trailing,
-    // this stretches the geom back along where it has just been, giving a warping effect
-    // Note: we must take account of time delta to convert position delta into a velocity, so changes are smooth (take into account frame time correctly)
-    " gl_Position = mix(clipSpaceVertexLastFrame, clipSpaceVertex, t * uGeometryStretchFactor * reciprocalTimeDelta);\n"
-
-    // work out vertex's last movement in normalised device coordinates [-1..1] space, i.e. perspective divide
-    " vec2 ndcVertex = clipSpaceVertex.xy / clipSpaceVertex.w;\n"
-    " vec2 ndcVertexLastFrame = clipSpaceVertexLastFrame.xy / clipSpaceVertexLastFrame.w;\n"
-    // scale and bias so that a value of 1.0 corresponds to screen size (NDC is [-1..1] = 2)
-    " vScreenSpaceVelocityVector = ((ndcVertex - ndcVertexLastFrame) * 0.5 * reciprocalTimeDelta);\n"
-    " vScreenSpaceVelocityVector.y = -vScreenSpaceVelocityVector.y;\n" // TODO negated due to y being inverted in our coordinate system?
-    // calculate a scaling factor proportional to velocity, which we can use to tweak how things look
-    " vSpeed = length(vScreenSpaceVelocityVector) * uSpeedScalingFactor;\n"
-    " vSpeed = clamp(vSpeed, 0.0, 1.0);\n"
-
-    // provide fragment shader with vector from center of object to pixel (assumes the objects model space origin is at its center and verts have same z)
-    " vModelSpaceCenterToPos = aPosition.xy;\n"
-
-    " vTexCoord = aTexCoord;\n"
-    "}\n";
-
-
-  // Dali fragmentSource prefix for reference:
-  // precision highp     float;
-  // uniform   sampler2D sTexture;
-  // uniform   sampler2D sEffect;
-  // uniform   vec4      uColor;
-  // varying   vec2      vTexCoord;
-  std::string fragmentSource;
-  fragmentSource =
-    "precision mediump float;\n"
-    "uniform vec2 uObjectFadeStart;\n"
-    "uniform vec2 uObjectFadeEnd;\n"
-    "uniform float uAlphaScale;\n"
-    "uniform float uBlurTexCoordScale;\n"
-    "uniform float uNumSamples;\n"
-    "uniform float uRecipNumSamples;\n"
-    "uniform float uRecipNumSamplesMinusOne;\n"
-    // inputs
-    "varying vec2 vModelSpaceCenterToPos;\n"
-    "varying vec2 vScreenSpaceVelocityVector;\n"
-    "varying float vSpeed;\n"
-
-    "void main()\n"
-    "{\n"
-    // calculate an alpha value that will fade the object towards its extremities, we need this to avoid an unsightly hard edge between color values of
-    // the blurred object and the unblurred background. Use smoothstep also to hide any hard edges (discontinuities) in rate of change of this alpha gradient
-    " vec2 centerToPixel = abs(vModelSpaceCenterToPos);\n"
-    " vec2 fadeToEdges = smoothstep(0.0, 1.0, 1.0 - ((centerToPixel - uObjectFadeStart) / (uObjectFadeEnd - uObjectFadeStart)));\n"
-    " float fadeToEdgesScale = fadeToEdges.x * fadeToEdges.y * uAlphaScale;\n" // apply global scaler
-    " fadeToEdgesScale = mix(1.0, fadeToEdgesScale, vSpeed);\n" // fade proportional to speed, so opaque when at rest
-
-    // scale velocity vector by user requirements
-    " vec2 velocity = vScreenSpaceVelocityVector * uBlurTexCoordScale;\n"
-
-    // standard actor texel
-    " vec4 colActor = texture2D(sTexture, vTexCoord);\n"
-
-    // blurred actor - gather texture samples from the actor texture in the direction of motion
-    " vec4 col = colActor * uRecipNumSamples;\n"
-    " for(float i = 1.0; i < uNumSamples; i += 1.0)\n"
-    " {\n"
-    "   float t = i * uRecipNumSamplesMinusOne;\n"
-    "   col += texture2D(sTexture, vTexCoord + (velocity * t)) * uRecipNumSamples;\n"
-    " }\n"
-    " gl_FragColor = mix(colActor, col, vSpeed);\n" // lerp blurred and non-blurred actor based on speed of motion
-    " gl_FragColor.a = colActor.a * fadeToEdgesScale;\n" // fade blurred actor to its edges based on speed of motion
-    " gl_FragColor *= uColor;\n"
-    "}\n";
-
-  // NOTE: we must turn on alpha blending for the actor (HINT_BLENDING)
-  ShaderEffect shader = ShaderEffect::New( vertexSource, fragmentSource,
-                                           GEOMETRY_TYPE_IMAGE,
-                                           ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID) );
-
-  MotionBlurEffect handle( shader );
-
-
-  //////////////////////////////////////
-  // Register uniform properties
-  //
-  //
-
-  // factors that scale the look, defaults
-  handle.SetUniform( MOTION_BLUR_TEXCOORD_SCALE_PROPERTY_NAME, MOTION_BLUR_TEXCOORD_SCALE );
-  handle.SetUniform( MOTION_BLUR_GEOM_STRETCH_SCALING_FACTOR_PROPERTY_NAME, MOTION_BLUR_GEOM_STRETCH_SCALING_FACTOR );
-  handle.SetUniform( MOTION_BLUR_SPEED_SCALING_FACTOR_PROPERTY_NAME, MOTION_BLUR_SPEED_SCALING_FACTOR );
-  handle.SetUniform( MOTION_BLUR_OBJECT_FADE_START_PROPERTY_NAME, MOTION_BLUR_OBJECT_FADE_START );
-  handle.SetUniform( MOTION_BLUR_OBJECT_FADE_END_PROPERTY_NAME, MOTION_BLUR_OBJECT_FADE_END );
-  handle.SetUniform( MOTION_BLUR_ALPHA_SCALE_PROPERTY_NAME, MOTION_BLUR_ALPHA_SCALE );
-  handle.SetUniform( MOTION_BLUR_NUM_SAMPLES_NAME, static_cast<float>( MOTION_BLUR_NUM_SAMPLES ) );
-  handle.SetUniform( MOTION_BLUR_RECIP_NUM_SAMPLES_NAME, 1.0f / static_cast<float>( MOTION_BLUR_NUM_SAMPLES ) );
-  handle.SetUniform( MOTION_BLUR_RECIP_NUM_SAMPLES_MINUS_ONE_NAME, 1.0f / static_cast<float>( MOTION_BLUR_NUM_SAMPLES - 1.0f ) );
-  handle.SetUniform( MOTION_BLUR_MODEL_LASTFRAME, Matrix::IDENTITY );
-
-  return handle;
-}
-
-MotionBlurEffect MotionBlurEffect::DownCast( ShaderEffect shaderEffect )
-{
-  MotionBlurEffect handle = shaderEffect;
-  return handle;
-}
-
-void MotionBlurEffect::SetNumSamples( int numSamples )
-{
-  SetUniform( MOTION_BLUR_NUM_SAMPLES_NAME, static_cast<float>( numSamples ) );
-  SetUniform( MOTION_BLUR_RECIP_NUM_SAMPLES_NAME, 1.0f / static_cast<float>( numSamples ) );
-  SetUniform( MOTION_BLUR_RECIP_NUM_SAMPLES_MINUS_ONE_NAME, 1.0f / static_cast<float>( numSamples - 1.0f ) );
-}
-
-void MotionBlurEffect::SetTexcoordScale( float texcoordScale )
-{
-  SetUniform( MOTION_BLUR_TEXCOORD_SCALE_PROPERTY_NAME, texcoordScale );
-}
-
-void MotionBlurEffect::SetGeometryStretchFactor( float scalingFactor )
-{
-  SetUniform( MOTION_BLUR_GEOM_STRETCH_SCALING_FACTOR_PROPERTY_NAME, scalingFactor );
-}
-
-void MotionBlurEffect::SetSpeedScalingFactor( float scalingFactor )
-{
-  SetUniform( MOTION_BLUR_SPEED_SCALING_FACTOR_PROPERTY_NAME, scalingFactor );
-}
-
-void MotionBlurEffect::SetObjectFadeStart( Vector2 displacement )
-{
-  SetUniform( MOTION_BLUR_OBJECT_FADE_START_PROPERTY_NAME, displacement );
-}
-
-void MotionBlurEffect::SetObjectFadeEnd( Vector2 displacement )
-{
-  SetUniform( MOTION_BLUR_OBJECT_FADE_END_PROPERTY_NAME, displacement );
-}
-
-void MotionBlurEffect::SetAlphaScale( float alphaScale )
-{
-  SetUniform( MOTION_BLUR_ALPHA_SCALE_PROPERTY_NAME, alphaScale );
-}
-
-const std::string& MotionBlurEffect::GetTexcoordScalePropertyName() const
-{
-  return MOTION_BLUR_TEXCOORD_SCALE_PROPERTY_NAME;
-}
-
-const std::string& MotionBlurEffect::GetGeometryStretchFactorPropertyName() const
-{
-  return MOTION_BLUR_GEOM_STRETCH_SCALING_FACTOR_PROPERTY_NAME;
-}
-
-const std::string& MotionBlurEffect::GetSpeedScalingFactorPropertyName() const
-{
-  return MOTION_BLUR_SPEED_SCALING_FACTOR_PROPERTY_NAME;
-}
-
-const std::string& MotionBlurEffect::GetObjectFadeStartPropertyName() const
-{
-  return MOTION_BLUR_OBJECT_FADE_START_PROPERTY_NAME;
-}
-
-const std::string& MotionBlurEffect::GetObjectFadeEndPropertyName() const
-{
-  return MOTION_BLUR_OBJECT_FADE_END_PROPERTY_NAME;
-}
-
-const std::string& MotionBlurEffect::GetAlphaScalePropertyName() const
-{
-  return MOTION_BLUR_ALPHA_SCALE_PROPERTY_NAME;
-}
-
-}
-
-}
index 13a8e1d..b0681e5 100644 (file)
@@ -29,185 +29,211 @@ namespace Toolkit
 {
 
 /**
+ * @brief Create a new MotionBlurEffect
  *
- * Class for motion blur shader that works on a per object basis. Objects will
+ * Motion blur shader works on a per object basis. Objects will
  * blur when they move, or if the camera moves. Can be applied to ImageActor or
  * TextActor only.
  *
  * Usage example:-
  *
  * // Create shader used for doing motion blur\n
- * MotionBlurEffect MotionBlurEffect = MotionBlurEffect::New();
+ * ShaderEffect MotionBlurEffect = CreateMotionBlurEffect();
  *
  * // set actor shader to the blur one\n
- * Actor Actor = Actor::New( ... );\n
- * Actor.SetShaderEffect( MotionBlurEffect );
+ * Actor actor = Actor::New( ... );\n
+ * actor.SetShaderEffect( MotionBlurEffect );
  *
+ * // Constrain "uModelLastFrame" to be the same as the actor's world matrix\n
+ * Dali::Property::Index uModelProperty = MotionBlurEffect.GetPropertyIndex( "uModelLastFrame" );
+ * Constraint constraint = Constraint::New<Matrix>( MotionBlurEffect, uModelProperty, EqualToConstraint() );\n
+ * constraint.AddSource( Source( actor , Actor::Property::WORLD_MATRIX ) );\n
+ * constraint.Apply();\n
+ *
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uBlurTexCoordScale"      - This scales the offset for texture samples along the motion velocity vector.
+ *                              A smaller value means the samples will be spaced closer, larger value further
+ *                              apart. User should use this to get the blur to look contiguous, i.e. the blur
+ *                              texels should not be too widely spread, with gaps in between. Default 0.125.
+ *  "uGeometryStretchFactor"  - This scales the amount the geometry stretches backwards along the motion velocity
+ *                              vector. A smaller value means the geometry stretches less, larger it stretches more.
+ *                              User should use this to get the blur to 'bleed' into areas outside the physical
+ *                              bounds of the actor. We need this as the blur is only applied inside the bounds of
+ *                              the actor, but you would expect motion blur trails where the actor was previously
+ *                              but is there no longer. Default 0.05.
+ *  "uSpeedScalingFactor"     - This takes the magnitude of the motion velocity vector and scales it to produce a
+ *                              value which is used to fade the blur in / out with the speed that the actor is moving.
+ *                              As the blur fades in, more of the blur is visible and less of the original actor, and
+ *                              viceversa. This value is also used to control how much to fade the actor near the
+ *                              edges, based on the speed the actor is moving. When the actor is at rest this is not applied.
+ *                              Default 0.5.
+ *  "uObjectFadeStart"        - The displacement from the centre of the actor that the actor will start to fade towards its
+ *                              edges. This is used to prevent an unsightly hard edge between the blurred actor and the scene.
+ *                              Depends on the values of the vertices in the vertex stream. When the actor is at rest this is
+ *                              not applied. Default 0.25, which is half way towards the edge for an ImageRenderer::QUAD.
+ *  "uObjectFadeEnd"          - The displacement from the centre of the actor that the actor will finish fading towards its
+ *                              edges. This is used to prevent an unsightly hard edge between the blurred actor and the scene.
+ *                              Depends on the values of the vertices in the vertex stream. When the actor is at rest this is
+ *                              not applied.Default 0.5, which is all the way towards the edge for an ImageRenderer::QUAD.
+ *  "uAlphaScale"             - Global scaler applied to the alpha of the actor. Used to make the blurred actor a bit more subtle
+ *                              (helps to hide discontinuities due to limited number of texture samples) and reveal a bit of the
+ *                              background behind it as it moves. When the actor is at rest this is not applied. Default 0.75.
+ *  "uNumSamples"             - The number of texture samples to be taken. Increasing the number of samples provides better quality
+ *                              at the cost of performance.
+ *  "uModelLastFrame"         - The model to world space transformation matrix of the actor in the previous frame.
+ *
+ * @param numBlurSamples Number of samples used by the shader
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API MotionBlurEffect : public ShaderEffect
+inline ShaderEffect CreateMotionBlurEffect( unsigned int numBlurSamples = 8 )
 {
-
-public:
-
-  /**
-   * Create an uninitialized MotionBlurEffect; this can be initialized with MotionBlurEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  MotionBlurEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~MotionBlurEffect();
-
-  /**
-   * Create an initialized MotionBlurEffect
-   * The number of texture samples taken along the motion velocity vector of the
-   * actor, producing the blur, is set to a default of 8.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static MotionBlurEffect New();
-
-  /**
-   * Create a  MotionBlurEffect and attach it to the specified actor
-   * The number of texture samples taken along the motion velocity vector of the
-   * actor, producing the blur, is set to a default of 8.
-   * @param renderable actor to apply the effect to
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static MotionBlurEffect Apply( ImageActor renderable );
-
-  /**
-   * Create an initialized MotionBlurEffect
-   * @param numBlurSamples The number of texture samples taken along the motion
-   * velocity vector of the actor, producing the blur. A higher number gives a
-   * smoother blur but costs more in terms of performance.
-   * @param numBlurSamples to have
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static MotionBlurEffect New( unsigned int numBlurSamples );
-
-  /**
-   * Set texcoord scale property. This scales the offset for texture samples
-   * along the motion velocity vector. A smaller value means the samples will
-   * be spaced closer, larger value further apart. User should use this to get
-   * the blur to look contiguous, i.e. the blur texels should not be too widely
-   * spread, with gaps in between. Default 0.125.
-   * @param texcoordScale The scaling factor that multiplies the motion velocity vector for texture lookups.
-   */
-  void SetTexcoordScale( float texcoordScale );
-
-  /**
-   * Set geometry stretch factor property. This scales the amount the
-   * geometry stretches backwards along the motion velocity vector. A smaller
-   * value means the geometry stretches less, larger it stretches more. User
-   * should use this to get the blur to 'bleed' into areas outside the physical
-   * bounds of the actor. We need this as the blur is only applied inside the
-   * bounds of the actor, but you would expect motion blur trails where the
-   * actor was previously but is there no longer. Default 0.05.
-   * @param scalingFactor The scaling factor that extrudes the geometry backwards along the motion velocity vector.
-   */
-  void SetGeometryStretchFactor( float scalingFactor );
-
-  /**
-   * Set speed scaling factor property. This takes the magnitude of the motion
-   * velocity vector and scales it to produce a value which is used to fade the
-   * blur in / out with the speed that the actor is moving. As the blur fades
-   * in, more of the blur is visible and less of the original actor, and vice
-   * versa.
-   * This value is also used to control how much to fade the actor near the
-   * edges, based on the speed the actor is moving. When the actor is at rest
-   * this is not applied. Default 0.5.
-   * @param scalingFactor The scaling factor that controls the edge fade / blur fade of the actor.
-   */
-  void SetSpeedScalingFactor( float scalingFactor );
-
-  /**
-   * Set the displacement from the centre of the actor that the actor will start
-   * to fade towards its edges. This is used to prevent an unsightly hard edge
-   * between the blurred actor and the scene. Depends on the values of the
-   * vertices in the vertex stream. When the actor is at rest this is not applied.
-   * Default 0.25, which is half way towards the edge for an ImageRenderer::QUAD.
-   * @param displacement The displacement from the centre of the actor that the actor will start to edge fade.
-   */
-  void SetObjectFadeStart( Vector2 displacement );
-
-  /**
-   * Set the displacement from the centre of the actor that the actor will
-   * finish fading towards its edges. This is used to prevent an unsightly hard
-   * edge between the blurred actor and the scene. Depends on the values of the
-   * vertices in the vertex stream. When the actor is at rest this is not applied.
-   * Default 0.5, which is all the way towards the edge for an ImageRenderer::QUAD.
-   * @param displacement The displacement from the centre of the actor that the actor will finish edge fading.
-   */
-  void SetObjectFadeEnd( Vector2 displacement );
-
-  /**
-   * Set a global scaler applied to the alpha of the actor. Used to make the
-   * blurred actor a bit more subtle (helps to hide discontinuities due to
-   * limited number of texture samples) and reveal a bit of the background
-   * behind it as it moves. When the actor is at rest this is not applied. Default 0.75.
-   * @param alphaScale The scaling factor which multiplies the alpha of each pixel of the actor.
-   */
-  void SetAlphaScale( float alphaScale );
-
-  /**
-   * Set the number of texture samples to be taken. Increasing the number of
-   * samples provides better quality at the cost of performance.
-   * @param numSamples The number of texture samples to be taken. Default is 8.
-   */
-  void SetNumSamples( int numSamples );
-
-  /**
-   * Get the name for the texcoord scale property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetTexcoordScalePropertyName() const;
-
-  /**
-   * Get the name for the geometry stretching property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetGeometryStretchFactorPropertyName() const;
-
-  /**
-   * Get the name for the speed scaling property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetSpeedScalingFactorPropertyName() const;
-
-  /**
-   * Get the name for the fade start property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetObjectFadeStartPropertyName() const;
-
-  /**
-   * Get the name for the fade end property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetObjectFadeEndPropertyName() const;
-
-  /**
-   * Get the name for the alpha scale property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAlphaScalePropertyName() const;
-
-  /**
-   * Downcast an ShaderEffect handle to MotionBlurEffect handle. If handle points to a MotionBlurEffect object the
-   * downcast produces valid handle. If not the returned handle is left uninitialized.
-   * @param[in] handle to a ShaderEffect
-   * @return handle to a MotionBlurEffect object or an uninitialized handle
-   */
-  static MotionBlurEffect DownCast( ShaderEffect handle );
-
-private:
-  // Not intended for application developers
-  DALI_INTERNAL MotionBlurEffect( ShaderEffect handle );
-};
+  // Dali vertexSource prefix for reference:
+  // precision highp float;
+  // attribute vec3  aPosition;
+  // attribute vec2  aTexCoord;
+  // uniform   mat4  uMvpMatrix;
+  // uniform   mat4  uModelView;
+  // uniform   mat3  uNormalMatrix;
+  // uniform   mat4  uProjection;
+  // uniform   vec4  uColor;
+  // varying   vec2  vTexCoord;
+  std::string vertexSource;
+  vertexSource =
+      "precision mediump float;\n"
+      "uniform mat4 uModelLastFrame;\n"
+      "uniform float uTimeDelta;\n"
+
+      "uniform float uGeometryStretchFactor;\n"
+      "uniform float uSpeedScalingFactor;\n"
+
+      // outputs
+      "varying vec2 vModelSpaceCenterToPos;\n"
+      "varying vec2 vScreenSpaceVelocityVector;\n"
+      "varying float vSpeed;\n"
+
+      "void main()\n"
+      "{\n"
+      // get view space position of vertex this frame and last frame
+      " vec4 vertex = vec4(aPosition, 1.0);\n"
+      " vec4 viewSpaceVertex = uModelView * vertex;\n"
+      " vec4 viewSpaceVertexLastFrame = (uViewMatrix * uModelLastFrame) * vertex;\n"
+      " float reciprocalTimeDelta = 1.0 / ((uTimeDelta > 0.0) ? uTimeDelta : 0.01);\n"
+
+      // work out vertex's last movement in view space
+      " vec3 viewSpacePosDelta = viewSpaceVertex.xyz - viewSpaceVertexLastFrame.xyz;\n"
+
+      // get clip space position of vertex this frame and last frame
+      " vec4 clipSpaceVertex = uMvpMatrix * vertex;\n"
+      " vec4 clipSpaceVertexLastFrame = uProjection * viewSpaceVertexLastFrame;\n"
+
+      // decide how much this vertex is 'trailing', i.e. at the back of the object relative to its direction of motion. We do this
+      // by assuming the objects model space origin is at its center and taking the dot product of the vector from center to vertex with the motion direction
+      " float t = 0.0;\n"
+      " float posDeltaLength = length(viewSpacePosDelta);\n"
+      " if(posDeltaLength > 0.001)\n" // avoid div by 0 if object has barely moved
+      " {\n"
+      "   vec4 viewSpaceCenterToPos = uModelView * vec4(aPosition, 0.0);\n"
+      "   float centerToVertexDist = length(viewSpaceCenterToPos);\n"
+      "   if(centerToVertexDist > 0.001)\n" // avoid div by 0 if object has vertex at model space origin
+      "   {\n"
+      "     vec3 viewSpacePosDeltaNormalised = viewSpacePosDelta / posDeltaLength;\n"
+      "     vec3 viewSpaceCenterToPosNormalised = viewSpaceCenterToPos.xyz / centerToVertexDist;\n"
+      "     t = (dot(viewSpacePosDeltaNormalised, viewSpaceCenterToPosNormalised) * 0.5 ) + 0.5;\n" // scale and bias from [-1..1] to [0..1]
+      "   }\n"
+      " }\n"
+      // output vertex position lerped with its last position, based on how much it is trailing,
+      // this stretches the geom back along where it has just been, giving a warping effect
+      // Note: we must take account of time delta to convert position delta into a velocity, so changes are smooth (take into account frame time correctly)
+      " gl_Position = mix(clipSpaceVertexLastFrame, clipSpaceVertex, t * uGeometryStretchFactor * reciprocalTimeDelta);\n"
+
+      // work out vertex's last movement in normalised device coordinates [-1..1] space, i.e. perspective divide
+      " vec2 ndcVertex = clipSpaceVertex.xy / clipSpaceVertex.w;\n"
+      " vec2 ndcVertexLastFrame = clipSpaceVertexLastFrame.xy / clipSpaceVertexLastFrame.w;\n"
+      // scale and bias so that a value of 1.0 corresponds to screen size (NDC is [-1..1] = 2)
+      " vScreenSpaceVelocityVector = ((ndcVertex - ndcVertexLastFrame) * 0.5 * reciprocalTimeDelta);\n"
+      " vScreenSpaceVelocityVector.y = -vScreenSpaceVelocityVector.y;\n" // TODO negated due to y being inverted in our coordinate system?
+      // calculate a scaling factor proportional to velocity, which we can use to tweak how things look
+      " vSpeed = length(vScreenSpaceVelocityVector) * uSpeedScalingFactor;\n"
+      " vSpeed = clamp(vSpeed, 0.0, 1.0);\n"
+
+      // provide fragment shader with vector from center of object to pixel (assumes the objects model space origin is at its center and verts have same z)
+      " vModelSpaceCenterToPos = aPosition.xy;\n"
+
+      " vTexCoord = aTexCoord;\n"
+      "}\n";
+
+
+  // Dali fragmentSource prefix for reference:
+  // precision highp     float;
+  // uniform   sampler2D sTexture;
+  // uniform   sampler2D sEffect;
+  // uniform   vec4      uColor;
+  // varying   vec2      vTexCoord;
+  std::string fragmentSource;
+  fragmentSource =
+      "precision mediump float;\n"
+      "uniform vec2 uObjectFadeStart;\n"
+      "uniform vec2 uObjectFadeEnd;\n"
+      "uniform float uAlphaScale;\n"
+      "uniform float uBlurTexCoordScale;\n"
+      "uniform float uNumSamples;\n"
+      "uniform float uRecipNumSamples;\n"
+      "uniform float uRecipNumSamplesMinusOne;\n"
+      // inputs
+      "varying vec2 vModelSpaceCenterToPos;\n"
+      "varying vec2 vScreenSpaceVelocityVector;\n"
+      "varying float vSpeed;\n"
+
+      "void main()\n"
+      "{\n"
+      // calculate an alpha value that will fade the object towards its extremities, we need this to avoid an unsightly hard edge between color values of
+      // the blurred object and the unblurred background. Use smoothstep also to hide any hard edges (discontinuities) in rate of change of this alpha gradient
+      " vec2 centerToPixel = abs(vModelSpaceCenterToPos);\n"
+      " vec2 fadeToEdges = smoothstep(0.0, 1.0, 1.0 - ((centerToPixel - uObjectFadeStart) / (uObjectFadeEnd - uObjectFadeStart)));\n"
+      " float fadeToEdgesScale = fadeToEdges.x * fadeToEdges.y * uAlphaScale;\n" // apply global scaler
+      " fadeToEdgesScale = mix(1.0, fadeToEdgesScale, vSpeed);\n" // fade proportional to speed, so opaque when at rest
+
+      // scale velocity vector by user requirements
+      " vec2 velocity = vScreenSpaceVelocityVector * uBlurTexCoordScale;\n"
+
+      // standard actor texel
+      " vec4 colActor = texture2D(sTexture, vTexCoord);\n"
+
+      // blurred actor - gather texture samples from the actor texture in the direction of motion
+      " vec4 col = colActor * uRecipNumSamples;\n"
+      " for(float i = 1.0; i < uNumSamples; i += 1.0)\n"
+      " {\n"
+      "   float t = i * uRecipNumSamplesMinusOne;\n"
+      "   col += texture2D(sTexture, vTexCoord + (velocity * t)) * uRecipNumSamples;\n"
+      " }\n"
+      " gl_FragColor = mix(colActor, col, vSpeed);\n" // lerp blurred and non-blurred actor based on speed of motion
+      " gl_FragColor.a = colActor.a * fadeToEdgesScale;\n" // fade blurred actor to its edges based on speed of motion
+      " gl_FragColor *= uColor;\n"
+      "}\n";
+
+  // NOTE: we must turn on alpha blending for the actor (HINT_BLENDING)
+  ShaderEffect shader = ShaderEffect::New( vertexSource, fragmentSource,
+                                           GeometryType(GEOMETRY_TYPE_IMAGE),
+                                           ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID) );
+
+  //////////////////////////////////////
+  // Register uniform properties
+  //
+  //
+  shader.SetUniform( "uBlurTexCoordScale", 0.125f );
+  shader.SetUniform( "uGeometryStretchFactor", 0.05f );
+  shader.SetUniform( "uSpeedScalingFactor", 0.5f );
+  shader.SetUniform( "uObjectFadeStart", Vector2( 0.25f, 0.25f ) );
+  shader.SetUniform( "uObjectFadeEnd", Vector2( 0.5f, 0.5f ) );
+  shader.SetUniform( "uAlphaScale", 0.75f );
+  shader.SetUniform( "uNumSamples", static_cast<float>( numBlurSamples ) );
+  shader.SetUniform( "uRecipNumSamples", 1.0f / static_cast<float>( numBlurSamples ) );
+  shader.SetUniform( "uRecipNumSamplesMinusOne", 1.0f / static_cast<float>( numBlurSamples - 1.0f ) );
+  shader.SetUniform( "uModelLastFrame", Matrix::IDENTITY );
+
+  return shader;
+}
 
 }
 
diff --git a/dali-toolkit/public-api/shader-effects/motion-stretch-effect.cpp b/dali-toolkit/public-api/shader-effects/motion-stretch-effect.cpp
deleted file mode 100644 (file)
index 9cde815..0000000
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include <dali-toolkit/public-api/shader-effects/motion-stretch-effect.h>
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/animation/constraint.h>
-#include <dali/public-api/animation/constraints.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-struct MatrixFromPropertiesConstraint
-{
-  MatrixFromPropertiesConstraint()
-  {
-  }
-
-  Matrix operator()( const Matrix& current,
-                     const PropertyInput& propertyPosition,
-                     const PropertyInput& propertyOrientation,
-                     const PropertyInput& propertyScale )
-  {
-    Matrix mat4( false );
-    mat4.SetTransformComponents( propertyScale.GetVector3(),
-                                 propertyOrientation.GetQuaternion(),
-                                 propertyPosition.GetVector3() );
-
-    return mat4;
-  }
-};
-
-const std::string MOTION_STRETCH_GEOMETRY_STRETCH_SCALING_FACTOR_PROPERTY_NAME( "uGeometryStretchFactor" );
-const std::string MOTION_STRETCH_SPEED_SCALING_FACTOR_PROPERTY_NAME( "uSpeedScalingFactor" );
-const std::string MOTION_STRETCH_OBJECT_FADE_START_PROPERTY_NAME( "uObjectFadeStart" );
-const std::string MOTION_STRETCH_OBJECT_FADE_END_PROPERTY_NAME( "uObjectFadeEnd" );
-const std::string MOTION_STRETCH_ALPHA_SCALE_PROPERTY_NAME( "uAlphaScale" );
-const std::string MOTION_STRETCH_MODELVIEW_LASTFRAME( "uModelLastFrame" );  ///< Matrix
-
-////////////////////////////////////////////////////
-//
-// Motion stretch shader / actor tweaking parameters
-//
-
-// half width and half height respectively of actor, corresponding to values in vertex attribute stream
-// Note that these values work for normal image actor (verts +/- 0.5) but a grid or a nine square seemsi
-// to have verts in pixel space (e.g. 256,256). Need to fix this somehow,
-// either in Dali or by passing uniforms which we can use to 'normalise' the verts in the vertex shader
-const Vector2 MOTION_STRETCH_ACTOR_VERTEX( 0.5f, 0.5f );
-
-const float MOTION_STRETCH_GEOM_STRETCH_SCALING_FACTOR = 0.5f; // scaling factor for how much to stretch actor geom as it moves
-const float MOTION_STRETCH_SPEED_SCALING_FACTOR = 0.5f;        // scales the speed, producing a number affecting how much the actor stretches & fades at the edges
-
-const Vector2 MOTION_STRETCH_OBJECT_FADE_END( MOTION_STRETCH_ACTOR_VERTEX );             // displacement from center at which actor fully fades to zero alpha
-const Vector2 MOTION_STRETCH_OBJECT_FADE_START( MOTION_STRETCH_OBJECT_FADE_END * 0.5f ); // displacement from center at which actor start to fade from full alpha
-
-const float MOTION_STRETCH_ALPHA_SCALE = 0.75f; // global scaler applied to actor alpha as it is stretched + moving
-
-} // namespace
-
-
-MotionStretchEffect::MotionStretchEffect()
-{
-}
-
-// Call the Parent copy constructor to add reference to the implementation for this object
-MotionStretchEffect::MotionStretchEffect( ShaderEffect handle )
-:ShaderEffect( handle )
-{
-}
-
-MotionStretchEffect::~MotionStretchEffect()
-{
-}
-
-MotionStretchEffect MotionStretchEffect::Apply( ImageActor renderable )
-{
-  MotionStretchEffect newEffect = New();
-  renderable.SetShaderEffect( newEffect );
-
-  Dali::Property::Index uModelProperty = newEffect.GetPropertyIndex( MOTION_STRETCH_MODELVIEW_LASTFRAME );
-
-  Constraint constraint = Constraint::New<Matrix>( newEffect, uModelProperty, EqualToConstraint() );
-  constraint.AddSource( Source( renderable, Actor::Property::WORLD_MATRIX ) );
-
-  // and set up constraint.
-  constraint.Apply();
-  return newEffect;
-}
-
-MotionStretchEffect MotionStretchEffect::New()
-{
-  // Dali vertexSource prefix for reference:
-  // precision highp float;
-  // attribute vec3  aPosition;
-  // attribute vec2  aTexCoord;
-  // uniform   mat4  uMvpMatrix;
-  // uniform   mat4  uModelView;
-  // uniform   mat3  uNormalMatrix;
-  // uniform   mat4  uProjection;
-  // uniform   vec4  uColor;
-  // varying   vec2  vTexCoord;
-  std::string vertexSource;
-  vertexSource =
-    "precision mediump float;\n"
-    "uniform mat4  uModelLastFrame;\n"
-    "uniform float uTimeDelta;\n"
-
-    "uniform float uGeometryStretchFactor;\n"
-    "uniform float uSpeedScalingFactor;\n"
-
-    // outputs
-    "varying vec2 vModelSpaceCenterToPos;\n"
-    "varying vec2 vScreenSpaceVelocityVector;\n"
-    "varying float vSpeed;\n"
-
-    "void main()\n"
-    "{\n"
-    // get view space position of vertex this frame and last frame
-    " vec4 vertex = vec4(aPosition, 1.0);\n"
-    " vec4 viewSpaceVertex = uModelView * vertex;\n"
-    " vec4 viewSpaceVertexLastFrame = uViewMatrix * uModelLastFrame * vertex;\n"
-
-    // work out vertex's last movement in view space
-    " vec3 viewSpacePosDelta = viewSpaceVertex.xyz - viewSpaceVertexLastFrame.xyz;\n"
-    " float reciprocalTimeDelta = 1.0 / ((uTimeDelta > 0.0) ? uTimeDelta : 0.01);\n"
-
-    // get clip space position of vertex this frame and last frame
-    " vec4 clipSpaceVertex = uMvpMatrix * vertex;\n"
-    " vec4 clipSpaceVertexLastFrame = uProjection * viewSpaceVertexLastFrame;\n"
-
-    // decide how much this vertex is 'trailing', i.e. at the back of the object relative to its direction of motion. We do this
-    // by assuming the objects model space origin is at its center and taking the dot product of the vector from center to vertex with the motion direction
-    " float t = 0.0;\n"
-    " float posDeltaLength = length(viewSpacePosDelta);\n"
-    " if(posDeltaLength > 0.001)\n" // avoid div by 0 if object has barely moved
-    " {\n"
-    "   vec4 viewSpaceCenterToPos = uModelView * vec4(aPosition, 0.0);\n"
-    "   float centerToVertexDist = length(viewSpaceCenterToPos);\n"
-    "   if(centerToVertexDist > 0.001)\n" // avoid div by 0 if object has vertex at model space origin
-    "   {\n"
-    "     vec3 viewSpacePosDeltaNormalised = viewSpacePosDelta / posDeltaLength;\n"
-    "     vec3 viewSpaceCenterToPosNormalised = viewSpaceCenterToPos.xyz / centerToVertexDist;\n"
-    "     t = (dot(viewSpacePosDeltaNormalised, viewSpaceCenterToPosNormalised) * 0.5 ) + 0.5;\n" // scale and bias from [-1..1] to [0..1]
-    "   }\n"
-    " }\n"
-    // output vertex position lerped with its last position, based on how much it is trailing,
-    // this stretches the geom back along where it has just been, giving a warping effect
-    // We raise t to a power in order that non-trailing vertices are effected much more than trailing ones
-    // Note: we must take account of time delta to convert position delta into a velocity, so changes are smooth (take into account frame time correctly)
-    " gl_Position = mix(clipSpaceVertexLastFrame, clipSpaceVertex, t * t * t * uGeometryStretchFactor * reciprocalTimeDelta);\n"
-
-    // work out vertex's last movement in normalised device coordinates [-1..1] space, i.e. perspective divide
-    " vec2 ndcVertex = clipSpaceVertex.xy / clipSpaceVertex.w;\n"
-    " vec2 ndcVertexLastFrame = clipSpaceVertexLastFrame.xy / clipSpaceVertexLastFrame.w;\n"
-    // scale and bias so that a value of 1.0 corresponds to screen size (NDC is [-1..1] = 2)
-    " vScreenSpaceVelocityVector = ((ndcVertex - ndcVertexLastFrame) * 0.5 * reciprocalTimeDelta);\n"
-    " vScreenSpaceVelocityVector.y = -vScreenSpaceVelocityVector.y;\n" // TODO negated due to y being inverted in our coordinate system?
-    // calculate a scaling factor proportional to velocity, which we can use to tweak how things look
-    " vSpeed = length(vScreenSpaceVelocityVector) * uSpeedScalingFactor;\n"
-    " vSpeed = clamp(vSpeed, 0.0, 1.0);\n"
-
-    // provide fragment shader with vector from center of object to pixel (assumes the objects model space origin is at its center and verts have same z)
-    " vModelSpaceCenterToPos = aPosition.xy;\n"
-
-    " vTexCoord = aTexCoord;\n"
-    "}\n";
-
-
-  // Dali fragmentSource prefix for reference:
-  // precision highp     float;
-  // uniform   sampler2D sTexture;
-  // uniform   sampler2D sEffect;
-  // uniform   vec4      uColor;
-  // varying   vec2      vTexCoord;
-  std::string fragmentSource;
-  fragmentSource =
-    "precision mediump float;\n"
-
-    "uniform vec2 uObjectFadeStart;\n"
-    "uniform vec2 uObjectFadeEnd;\n"
-    "uniform float uAlphaScale;\n"
-
-    // inputs
-    "varying vec2 vModelSpaceCenterToPos;\n"
-    "varying vec2 vScreenSpaceVelocityVector;\n"
-    "varying float vSpeed;\n"
-
-    "void main()\n"
-    "{\n"
-    // calculate an alpha value that will fade the object towards its extremities, we need this to avoid an unsightly hard edge between color values of
-    // the stretched object and the background. Use smoothstep also to hide any hard edges (discontinuities) in rate of change of this alpha gradient
-    " vec2 centerToPixel = abs( vModelSpaceCenterToPos );\n"
-    " vec2 fadeToEdges = smoothstep(0.0, 1.0, 1.0 - ((centerToPixel - uObjectFadeStart) / (uObjectFadeEnd - uObjectFadeStart)));\n"
-    " float fadeToEdgesScale = fadeToEdges.x * fadeToEdges.y * uAlphaScale;\n" // apply global scaler
-    " fadeToEdgesScale = mix(1.0, fadeToEdgesScale, vSpeed);\n" // fade proportional to speed, so opaque when at rest
-
-    // standard actor texel
-    " vec4 colActor = texture2D(sTexture, vTexCoord);\n"
-    " gl_FragColor = colActor;\n"
-    " gl_FragColor.a *= fadeToEdgesScale;\n" // fade actor to its edges based on speed of motion
-    " gl_FragColor *= uColor;\n"
-    "}";
-
-  // NOTE: we must turn on alpha blending for the actor (HINT_BLENDING)
-  ShaderEffect shader = ShaderEffect::New(
-    vertexSource, fragmentSource, GeometryType( GEOMETRY_TYPE_IMAGE ),
-    ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID ) );
-
-
-
-  MotionStretchEffect handle( shader );
-
-
-  //////////////////////////////////////
-  // Register uniform properties
-  //
-  //
-
-  // factors that scale the look, defaults
-  handle.SetUniform( MOTION_STRETCH_GEOMETRY_STRETCH_SCALING_FACTOR_PROPERTY_NAME, MOTION_STRETCH_GEOM_STRETCH_SCALING_FACTOR );
-  handle.SetUniform( MOTION_STRETCH_SPEED_SCALING_FACTOR_PROPERTY_NAME, MOTION_STRETCH_SPEED_SCALING_FACTOR );
-  handle.SetUniform( MOTION_STRETCH_OBJECT_FADE_START_PROPERTY_NAME, MOTION_STRETCH_OBJECT_FADE_START );
-  handle.SetUniform( MOTION_STRETCH_OBJECT_FADE_END_PROPERTY_NAME, MOTION_STRETCH_OBJECT_FADE_END );
-  handle.SetUniform( MOTION_STRETCH_ALPHA_SCALE_PROPERTY_NAME, MOTION_STRETCH_ALPHA_SCALE );
-  handle.SetUniform( MOTION_STRETCH_MODELVIEW_LASTFRAME, Matrix::IDENTITY );
-
-  return handle;
-}
-
-void MotionStretchEffect::SetGeometryStretchFactor( float scalingFactor )
-{
-  SetUniform( MOTION_STRETCH_GEOMETRY_STRETCH_SCALING_FACTOR_PROPERTY_NAME, scalingFactor );
-}
-
-void MotionStretchEffect::SetSpeedScalingFactor( float scalingFactor )
-{
-  SetUniform( MOTION_STRETCH_SPEED_SCALING_FACTOR_PROPERTY_NAME, scalingFactor );
-}
-
-void MotionStretchEffect::SetObjectFadeStart( Vector2 displacement )
-{
-  SetUniform( MOTION_STRETCH_OBJECT_FADE_START_PROPERTY_NAME, displacement );
-}
-
-void MotionStretchEffect::SetObjectFadeEnd( Vector2 displacement )
-{
-  SetUniform( MOTION_STRETCH_OBJECT_FADE_END_PROPERTY_NAME, displacement );
-}
-
-void MotionStretchEffect::SetAlphaScale( float alphaScale )
-{
-  SetUniform( MOTION_STRETCH_ALPHA_SCALE_PROPERTY_NAME, alphaScale );
-}
-
-const std::string& MotionStretchEffect::GetGeometryStretchFactorPropertyName() const
-{
-  return MOTION_STRETCH_GEOMETRY_STRETCH_SCALING_FACTOR_PROPERTY_NAME;
-}
-
-const std::string& MotionStretchEffect::GetSpeedScalingFactorPropertyName() const
-{
-  return MOTION_STRETCH_SPEED_SCALING_FACTOR_PROPERTY_NAME;
-}
-
-const std::string& MotionStretchEffect::GetObjectFadeStartPropertyName() const
-{
-  return MOTION_STRETCH_OBJECT_FADE_START_PROPERTY_NAME;
-}
-
-const std::string& MotionStretchEffect::GetObjectFadeEndPropertyName() const
-{
-  return MOTION_STRETCH_OBJECT_FADE_END_PROPERTY_NAME;
-}
-
-const std::string& MotionStretchEffect::GetAlphaScalePropertyName() const
-{
-  return MOTION_STRETCH_ALPHA_SCALE_PROPERTY_NAME;
-}
-
-}
-
-}
index 48d2483..22aa719 100644 (file)
@@ -29,136 +29,180 @@ namespace Toolkit
 {
 
 /**
+ * @brief Creates a new MotionStretchEffect
  *
- * Class for motion stretch shader that works on a per object basis. Objects will stretch in the direction of motion when they move, or if the camera moves. Can be applied
+ * Motion stretch shader works on a per object basis. Objects will stretch in the direction of motion when they move, or if the camera moves. Can be applied
  * to ImageActor or TextActor only.
  *
  * Usage example:-
  *
  * // Create shader used for doing motion stretch\n
- * MotionStretchEffect MotionStretchEffect = MotionStretchEffect::New();
+ * ShaderEffect MotionStretchEffect = CreateMotionStretchEffect();
  *
  * // set actor shader to the stretch one\n
- * Actor Actor = Actor::New( ... );\n
- * Actor.SetShaderEffect( MotionStretchEffect );
+ * Actor actor = Actor::New( ... );\n
+ * actor.SetShaderEffect( MotionStretchEffect );
  *
+ * // Constrain "uModelLastFrame" to be the same as the actor's world matrix\n
+ * Dali::Property::Index uModelProperty = MotionBlurEffect.GetPropertyIndex( "uModelLastFrame" );
+ * Constraint constraint = Constraint::New<Matrix>( MotionBlurEffect, uModelProperty, EqualToConstraint() );\n
+ * constraint.AddSource( Source( actor , Actor::Property::WORLD_MATRIX ) );\n
+ * constraint.Apply();\n
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uGeometryStretchFactor"  - This scales the amount the geometry stretches along the motion velocity vector.
+ *                              A smaller value means the geometry stretches less, larger it stretches more. Default 0.5.
+ *  "uSpeedScalingFactor"     - This value is used to control how much to fade the actor near the edges, based on the
+ *                              speed the actor is moving. When the actor is at rest this is not applied. Default 0.5.
+ *  "uObjectFadeStart"        - The displacement from the centre of the actor that the actor will start to fade towards
+ *                              its edges. This is used to prevent an unsightly hard edge between the stretched actor and
+ *                              the scene. Depends on the values of the vertices in the vertex stream. When the actor is at
+ *                              rest this is not applied. Default Vector2(0.25, 0.25), which is half way towards the edge for
+ *                              an ImageRenderer::QUAD.
+ *  "uObjectFadeEnd"          - The displacement from the centre of the actor that the actor will finish fading towards its edges.
+ *                              This is used to prevent an unsightly hard edge between the stretched actor and the scene. Depends
+ *                              on the values of the vertices in the vertex stream. When the actor is at rest this is not applied.
+ *                              Default 0.5, which is all the way towards the edge for an ImageRenderer::QUAD.
+ *  "uAlphaScale"             - Global scaler applied to the alpha of the actor. Used to make the stretched actor a bit more subtle
+ *                              and reveal a bit of the background behind it as it moves. When the actor is at rest this is not
+ *                              applied. Default 0.75.
+ *  "uModelLastFrame"         - The model to world space transformation matrix of the actor in the previous frame.
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API MotionStretchEffect : public ShaderEffect
+inline ShaderEffect CreateMotionStretchEffect()
 {
-
-public:
-
-  /**
-   * Create an uninitialized MotionStretchEffect; this can be initialized with MotionStretchEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  MotionStretchEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~MotionStretchEffect();
-
-  /**
-   * Create an initialized MotionStretchEffect
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static MotionStretchEffect New();
-
-  /**
-   * Create a  MotionStretchEffect and attach it to the specified actor
-   * @param renderable actor to apply the effect to
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static MotionStretchEffect Apply( ImageActor renderable );
-
-  /**
-   * Set geometry stretch factor property. This scales the amount the geometry
-   * stretches along the motion velocity vector. A smaller value means the geometry
-   * stretches less, larger it stretches more. Default 0.5.
-   * @param scalingFactor The scaling factor that extrudes the geometry forwards along the motion velocity vector.
-   */
-  void SetGeometryStretchFactor( float scalingFactor );
-
-  /**
-   * Set speed scaling factor property. This value is used to control how much
-   * to fade the actor near the edges, based on the speed the actor is moving.
-   * When the actor is at rest this is not applied. Default 0.5.
-   * @param scalingFactor The scaling factor that controls the edge fade of the actor.
-   */
-  void SetSpeedScalingFactor( float scalingFactor );
-
-  /**
-   * Set the displacement from the centre of the actor that the actor will start to
-   * fade towards its edges. This is used to prevent an unsightly hard edge
-   * between the stretched actor and the scene. Depends on the values of the
-   * vertices in the vertex stream. When the actor is at rest this is not applied.
-   * Default Vector2(0.25, 0.25), which is half way towards the edge for an ImageRenderer::QUAD.
-   * @param displacement The displacement from the centre of the actor that the actor will start to edge fade.
-   */
-  void SetObjectFadeStart( Vector2 displacement );
-
-  /**
-   * Set the displacement from the centre of the actor that the actor will
-   * finish fading towards its edges. This is used to prevent an unsightly hard
-   * edge between the stretched actor and the scene. Depends on the values of
-   * the vertices in the vertex stream. When the actor is at rest this is not applied.
-   * Default 0.5, which is all the way towards the edge for an ImageRenderer::QUAD.
-   * @param displacement The displacement from the centre of the actor that the actor will finish edge fading.
-   */
-  void SetObjectFadeEnd( Vector2 displacement );
-
-  /**
-   * Set a global scaler applied to the alpha of the actor. Used to make the
-   * stretched actor a bit more subtle and reveal a bit of the background behind
-   * it as it moves. When the actor is at rest this is not applied. Default 0.75.
-   * @param alphaScale The scaling factor which multiplies the alpha of each pixel of the actor.
-   */
-  void SetAlphaScale( float alphaScale );
-
-
-  /**
-   * Get the name for the texcoord scale property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetTexcoordScalePropertyName() const;
-
-  /**
-   * Get the name for the geometry stretching property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetGeometryStretchFactorPropertyName() const;
-
-  /**
-   * Get the name for the speed scaling property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetSpeedScalingFactorPropertyName() const;
-
-  /**
-   * Get the name for the fade start X property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetObjectFadeStartPropertyName() const;
-
-  /**
-   * Get the name for the fade end X property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetObjectFadeEndPropertyName() const;
-
-  /**
-   * Get the name for the alpha scale property. Useful for animation.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAlphaScalePropertyName() const;
-
-private:
-  // Not intended for application developers
-  DALI_INTERNAL MotionStretchEffect( ShaderEffect handle );
-};
+  // Dali vertexSource prefix for reference:
+  // precision highp float;
+  // attribute vec3  aPosition;
+  // attribute vec2  aTexCoord;
+  // uniform   mat4  uMvpMatrix;
+  // uniform   mat4  uModelView;
+  // uniform   mat3  uNormalMatrix;
+  // uniform   mat4  uProjection;
+  // uniform   vec4  uColor;
+  // varying   vec2  vTexCoord;
+  std::string vertexSource;
+  vertexSource =
+      "precision mediump float;\n"
+      "uniform mat4  uModelLastFrame;\n"
+      "uniform float uTimeDelta;\n"
+
+      "uniform float uGeometryStretchFactor;\n"
+      "uniform float uSpeedScalingFactor;\n"
+
+      // outputs
+      "varying vec2 vModelSpaceCenterToPos;\n"
+      "varying vec2 vScreenSpaceVelocityVector;\n"
+      "varying float vSpeed;\n"
+
+      "void main()\n"
+      "{\n"
+      // get view space position of vertex this frame and last frame
+      " vec4 vertex = vec4(aPosition, 1.0);\n"
+      " vec4 viewSpaceVertex = uModelView * vertex;\n"
+      " vec4 viewSpaceVertexLastFrame = uViewMatrix * uModelLastFrame * vertex;\n"
+
+      // work out vertex's last movement in view space
+      " vec3 viewSpacePosDelta = viewSpaceVertex.xyz - viewSpaceVertexLastFrame.xyz;\n"
+      " float reciprocalTimeDelta = 1.0 / ((uTimeDelta > 0.0) ? uTimeDelta : 0.01);\n"
+
+      // get clip space position of vertex this frame and last frame
+      " vec4 clipSpaceVertex = uMvpMatrix * vertex;\n"
+      " vec4 clipSpaceVertexLastFrame = uProjection * viewSpaceVertexLastFrame;\n"
+
+      // decide how much this vertex is 'trailing', i.e. at the back of the object relative to its direction of motion. We do this
+      // by assuming the objects model space origin is at its center and taking the dot product of the vector from center to vertex with the motion direction
+      " float t = 0.0;\n"
+      " float posDeltaLength = length(viewSpacePosDelta);\n"
+      " if(posDeltaLength > 0.001)\n" // avoid div by 0 if object has barely moved
+      " {\n"
+      "   vec4 viewSpaceCenterToPos = uModelView * vec4(aPosition, 0.0);\n"
+      "   float centerToVertexDist = length(viewSpaceCenterToPos);\n"
+      "   if(centerToVertexDist > 0.001)\n" // avoid div by 0 if object has vertex at model space origin
+      "   {\n"
+      "     vec3 viewSpacePosDeltaNormalised = viewSpacePosDelta / posDeltaLength;\n"
+      "     vec3 viewSpaceCenterToPosNormalised = viewSpaceCenterToPos.xyz / centerToVertexDist;\n"
+      "     t = (dot(viewSpacePosDeltaNormalised, viewSpaceCenterToPosNormalised) * 0.5 ) + 0.5;\n" // scale and bias from [-1..1] to [0..1]
+      "   }\n"
+      " }\n"
+      // output vertex position lerped with its last position, based on how much it is trailing,
+      // this stretches the geom back along where it has just been, giving a warping effect
+      // We raise t to a power in order that non-trailing vertices are effected much more than trailing ones
+      // Note: we must take account of time delta to convert position delta into a velocity, so changes are smooth (take into account frame time correctly)
+      " gl_Position = mix(clipSpaceVertexLastFrame, clipSpaceVertex, t * t * t * uGeometryStretchFactor * reciprocalTimeDelta);\n"
+
+      // work out vertex's last movement in normalised device coordinates [-1..1] space, i.e. perspective divide
+      " vec2 ndcVertex = clipSpaceVertex.xy / clipSpaceVertex.w;\n"
+      " vec2 ndcVertexLastFrame = clipSpaceVertexLastFrame.xy / clipSpaceVertexLastFrame.w;\n"
+      // scale and bias so that a value of 1.0 corresponds to screen size (NDC is [-1..1] = 2)
+      " vScreenSpaceVelocityVector = ((ndcVertex - ndcVertexLastFrame) * 0.5 * reciprocalTimeDelta);\n"
+      " vScreenSpaceVelocityVector.y = -vScreenSpaceVelocityVector.y;\n" // TODO negated due to y being inverted in our coordinate system?
+      // calculate a scaling factor proportional to velocity, which we can use to tweak how things look
+      " vSpeed = length(vScreenSpaceVelocityVector) * uSpeedScalingFactor;\n"
+      " vSpeed = clamp(vSpeed, 0.0, 1.0);\n"
+
+      // provide fragment shader with vector from center of object to pixel (assumes the objects model space origin is at its center and verts have same z)
+      " vModelSpaceCenterToPos = aPosition.xy;\n"
+
+      " vTexCoord = aTexCoord;\n"
+      "}\n";
+
+
+  // Dali fragmentSource prefix for reference:
+  // precision highp     float;
+  // uniform   sampler2D sTexture;
+  // uniform   sampler2D sEffect;
+  // uniform   vec4      uColor;
+  // varying   vec2      vTexCoord;
+  std::string fragmentSource;
+  fragmentSource =
+      "precision mediump float;\n"
+
+      "uniform vec2 uObjectFadeStart;\n"
+      "uniform vec2 uObjectFadeEnd;\n"
+      "uniform float uAlphaScale;\n"
+
+      // inputs
+      "varying vec2 vModelSpaceCenterToPos;\n"
+      "varying vec2 vScreenSpaceVelocityVector;\n"
+      "varying float vSpeed;\n"
+
+      "void main()\n"
+      "{\n"
+      // calculate an alpha value that will fade the object towards its extremities, we need this to avoid an unsightly hard edge between color values of
+      // the stretched object and the background. Use smoothstep also to hide any hard edges (discontinuities) in rate of change of this alpha gradient
+      " vec2 centerToPixel = abs( vModelSpaceCenterToPos );\n"
+      " vec2 fadeToEdges = smoothstep(0.0, 1.0, 1.0 - ((centerToPixel - uObjectFadeStart) / (uObjectFadeEnd - uObjectFadeStart)));\n"
+      " float fadeToEdgesScale = fadeToEdges.x * fadeToEdges.y * uAlphaScale;\n" // apply global scaler
+      " fadeToEdgesScale = mix(1.0, fadeToEdgesScale, vSpeed);\n" // fade proportional to speed, so opaque when at rest
+
+      // standard actor texel
+      " vec4 colActor = texture2D(sTexture, vTexCoord);\n"
+      " gl_FragColor = colActor;\n"
+      " gl_FragColor.a *= fadeToEdgesScale;\n" // fade actor to its edges based on speed of motion
+      " gl_FragColor *= uColor;\n"
+      "}";
+
+  // NOTE: we must turn on alpha blending for the actor (HINT_BLENDING)
+  ShaderEffect shaderEffect = ShaderEffect::New(
+      vertexSource, fragmentSource, GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID ) );
+
+
+  //////////////////////////////////////
+  // Register uniform properties
+  //
+  //
+  shaderEffect.SetUniform( "uGeometryStretchFactor",  0.5f );
+  shaderEffect.SetUniform( "uSpeedScalingFactor",     0.5f );
+  shaderEffect.SetUniform( "uObjectFadeStart",        Vector2( 0.25f, 0.25f ) );
+  shaderEffect.SetUniform( "uObjectFadeEnd",          Vector2( 0.5f, 0.5f ) );
+  shaderEffect.SetUniform( "uAlphaScale",             0.75f );
+  shaderEffect.SetUniform( "uModelLastFrame",         Matrix::IDENTITY );
+
+  return shaderEffect;
+}
 
 }
 
diff --git a/dali-toolkit/public-api/shader-effects/nine-patch-mask-effect.cpp b/dali-toolkit/public-api/shader-effects/nine-patch-mask-effect.cpp
deleted file mode 100644 (file)
index c03537d..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include <dali-toolkit/public-api/shader-effects/nine-patch-mask-effect.h>
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/animation/constraint.h>
-#include <dali/public-api/object/property-input.h>
-#include <dali/public-api/shader-effects/shader-effect.h>
-#include <dali/public-api/images/resource-image.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace NinePatchMaskEffect
-{
-
-namespace
-{
-
-void NinePatchMaskEffectSizeConstraint( Vector2& current, const PropertyInputContainer& inputs )
-{
-  const Vector3& actorSize = inputs[0]->GetVector3();
-  current.x = actorSize.x;
-  current.y = actorSize.y;
-}
-
-} // unnamed namespace
-
-static void DoApply( ImageActor actor, const std::string& maskImage, const Vector2& maskSize, Vector4 maskBorder )
-{
-  const char* ALPHA_MASK_VERTEX_SHADER_SOURCE =
-  "precision mediump float;\n"
-  "uniform vec2 uImageSize;                                                       \n"
-  "uniform vec2 uMaskSize;                                                        \n"
-  "varying vec2 vMaskTexCoord;                                                    \n"
-  "                                                                               \n"
-  "void main()                                                                    \n"
-  "{                                                                              \n"
-  "  gl_Position = uMvpMatrix * vec4(aPosition, 1.0);                             \n"
-  "                                                                               \n"
-  "  // Ignore mask UVs for image                                                 \n"
-  "                                                                               \n"
-  "  highp vec2 halfImageSize = uImageSize * 0.5;                                 \n"
-  "  vTexCoord = (aPosition.xy + halfImageSize) / uImageSize;                     \n"
-  "                                                                               \n"
-  "  // UVs were calculated for image size, so convert for mask size              \n"
-  "                                                                               \n"
-  "  highp vec2 halfMaskSize  = uMaskSize * 0.5;                                  \n"
-  "  highp vec2 halfSizeDelta = halfImageSize - halfMaskSize;                     \n"
-  "                                                                               \n"
-  "  highp vec2 maskPosition = aPosition.xy;                                      \n"
-  "  maskPosition.x -= halfSizeDelta.x * sign(aPosition.x);                       \n"
-  "  maskPosition.y -= halfSizeDelta.y * sign(aPosition.y);                       \n"
-  "                                                                               \n"
-  "  vMaskTexCoord = (maskPosition + halfMaskSize) / uMaskSize;                   \n"
-  "}                                                                              \n";
-
-  const char* ALPHA_MASK_FRAGMENT_SHADER_SOURCE =
-  "varying mediump vec2 vMaskTexCoord;                                            \n"
-  "                                                                               \n"
-  "void main()                                                                    \n"
-  "{                                                                              \n"
-  "  highp vec4 mask = texture2D(sEffect, vMaskTexCoord);                         \n"
-  "  gl_FragColor = texture2D(sTexture, vTexCoord) * uColor * vec4(1,1,1,mask.a); \n"
-  "}                                                                              \n";
-
-  ShaderEffect maskEffect = ShaderEffect::New(
-    ALPHA_MASK_VERTEX_SHADER_SOURCE,
-    ALPHA_MASK_FRAGMENT_SHADER_SOURCE,
-    GeometryType( GEOMETRY_TYPE_IMAGE ),
-    ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ) );
-
-  maskEffect.SetEffectImage( ResourceImage::New( maskImage ) );
-
-  maskEffect.SetUniform( "uImageSize", Vector2(0,0) /*Constrained to actor size*/ );
-
-  Constraint constraint = Constraint::New<Vector2>( maskEffect, maskEffect.GetPropertyIndex("uImageSize"), NinePatchMaskEffectSizeConstraint );
-  constraint.AddSource( Source(actor, Actor::Property::SIZE) );
-  constraint.Apply();
-
-  maskEffect.SetUniform( "uMaskSize", maskSize );
-
-  // Actor must provide nine-patch style geometry for this effect to work
-  actor.SetStyle( ImageActor::STYLE_NINE_PATCH );
-  actor.SetNinePatchBorder( maskBorder );
-
-  actor.SetShaderEffect( maskEffect );
-}
-
-void Apply( ImageActor actor, const std::string& maskImage )
-{
-  const Uint16Pair maskSize = ResourceImage::GetImageSize( maskImage );
-
-  const float leftRight = (maskSize.GetWidth()  - 1.0f) * 0.5f;
-  const float topBottom = (maskSize.GetHeight() - 1.0f) * 0.5f;
-
-  DoApply( actor, maskImage, Vector2( maskSize.GetWidth(), maskSize.GetHeight() ), Vector4( leftRight, topBottom, leftRight, topBottom ) );
-}
-
-void Apply( ImageActor actor, const std::string& maskImage, const Vector4& maskBorder )
-{
-  const Uint16Pair maskSize = ResourceImage::GetImageSize( maskImage );
-
-  DoApply( actor, maskImage, Vector2( maskSize.GetWidth(), maskSize.GetHeight() ), maskBorder );
-}
-
-} // namespace NinePatchMaskEffect
-
-} // namespace Toolkit
-
-} // namespace Dali
index 0b21228..496fa73 100644 (file)
@@ -45,6 +45,74 @@ namespace Toolkit
 namespace NinePatchMaskEffect
 {
 
+static void NinePatchMaskEffectSizeConstraint( Vector2& current, const PropertyInputContainer& inputs )
+{
+  const Vector3& actorSize = inputs[0]->GetVector3();
+  current.x = actorSize.x;
+  current.y = actorSize.y;
+}
+
+inline void DoApply( ImageActor actor, const std::string& maskImage, const Vector2& maskSize, Vector4 maskBorder )
+{
+  const char* ALPHA_MASK_VERTEX_SHADER_SOURCE =
+  "precision mediump float;\n"
+  "uniform vec2 uImageSize;                                                       \n"
+  "uniform vec2 uMaskSize;                                                        \n"
+  "varying vec2 vMaskTexCoord;                                                    \n"
+  "                                                                               \n"
+  "void main()                                                                    \n"
+  "{                                                                              \n"
+  "  gl_Position = uMvpMatrix * vec4(aPosition, 1.0);                             \n"
+  "                                                                               \n"
+  "  // Ignore mask UVs for image                                                 \n"
+  "                                                                               \n"
+  "  highp vec2 halfImageSize = uImageSize * 0.5;                                 \n"
+  "  vTexCoord = (aPosition.xy + halfImageSize) / uImageSize;                     \n"
+  "                                                                               \n"
+  "  // UVs were calculated for image size, so convert for mask size              \n"
+  "                                                                               \n"
+  "  highp vec2 halfMaskSize  = uMaskSize * 0.5;                                  \n"
+  "  highp vec2 halfSizeDelta = halfImageSize - halfMaskSize;                     \n"
+  "                                                                               \n"
+  "  highp vec2 maskPosition = aPosition.xy;                                      \n"
+  "  maskPosition.x -= halfSizeDelta.x * sign(aPosition.x);                       \n"
+  "  maskPosition.y -= halfSizeDelta.y * sign(aPosition.y);                       \n"
+  "                                                                               \n"
+  "  vMaskTexCoord = (maskPosition + halfMaskSize) / uMaskSize;                   \n"
+  "}                                                                              \n";
+
+  const char* ALPHA_MASK_FRAGMENT_SHADER_SOURCE =
+  "varying mediump vec2 vMaskTexCoord;                                            \n"
+  "                                                                               \n"
+  "void main()                                                                    \n"
+  "{                                                                              \n"
+  "  highp vec4 mask = texture2D(sEffect, vMaskTexCoord);                         \n"
+  "  gl_FragColor = texture2D(sTexture, vTexCoord) * uColor * vec4(1,1,1,mask.a); \n"
+  "}                                                                              \n";
+
+  ShaderEffect maskEffect = ShaderEffect::New(
+    ALPHA_MASK_VERTEX_SHADER_SOURCE,
+    ALPHA_MASK_FRAGMENT_SHADER_SOURCE,
+    GeometryType( GEOMETRY_TYPE_IMAGE ),
+    ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ) );
+
+  maskEffect.SetEffectImage( ResourceImage::New( maskImage ) );
+
+  maskEffect.SetUniform( "uImageSize", Vector2(0,0) /*Constrained to actor size*/ );
+
+  Constraint constraint = Constraint::New<Vector2>( maskEffect, maskEffect.GetPropertyIndex("uImageSize"), NinePatchMaskEffectSizeConstraint );
+  constraint.AddSource( Source(actor, Actor::Property::SIZE) );
+  constraint.Apply();
+
+  maskEffect.SetUniform( "uMaskSize", maskSize );
+
+  // Actor must provide nine-patch style geometry for this effect to work
+  actor.SetStyle( ImageActor::STYLE_NINE_PATCH );
+  actor.SetNinePatchBorder( maskBorder );
+
+  actor.SetShaderEffect( maskEffect );
+}
+
 /**
  * @brief Apply the mask effect to an ImageActor.
  *
@@ -52,7 +120,15 @@ namespace NinePatchMaskEffect
  * @param [in] actor The actor which needs the effect. To remove the effect call actor.RemoveShaderEffect().
  * @param [in] maskImage The path to a file containing the mask. The center pixels of the mask will be stretched.
  */
-DALI_IMPORT_API void Apply( ImageActor actor, const std::string& maskImage );
+inline void Apply( ImageActor actor, const std::string& maskImage )
+{
+  const Uint16Pair maskSize = ResourceImage::GetImageSize( maskImage );
+
+  const float leftRight = (maskSize.GetWidth()  - 1.0f) * 0.5f;
+  const float topBottom = (maskSize.GetHeight() - 1.0f) * 0.5f;
+
+  DoApply( actor, maskImage, Vector2( maskSize.GetWidth(), maskSize.GetHeight() ), Vector4( leftRight, topBottom, leftRight, topBottom ) );
+}
 
 /**
  * @brief Apply the mask effect to an ImageActor.
@@ -62,7 +138,12 @@ DALI_IMPORT_API void Apply( ImageActor actor, const std::string& maskImage );
  * @param [in] maskImage The path to a file containing the mask.
  * @param [in] maskBorder Specifies the part of the mask image that will be stretched (left, top, right, bottom).
  */
-DALI_IMPORT_API void Apply( ImageActor actor, const std::string& maskImage, const Vector4& maskBorder );
+inline void Apply( ImageActor actor, const std::string& maskImage, const Vector4& maskBorder )
+{
+  const Uint16Pair maskSize = ResourceImage::GetImageSize( maskImage );
+
+  DoApply( actor, maskImage, Vector2( maskSize.GetWidth(), maskSize.GetHeight() ), maskBorder );
+}
 
 } // namespace NinePatchMaskEffect
 
diff --git a/dali-toolkit/public-api/shader-effects/overlay-effect.cpp b/dali-toolkit/public-api/shader-effects/overlay-effect.cpp
deleted file mode 100644 (file)
index 4479084..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include <dali-toolkit/public-api/shader-effects/overlay-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-OverlayEffect::OverlayEffect()
-{
-}
-
-OverlayEffect::~OverlayEffect()
-{
-}
-
-OverlayEffect OverlayEffect::New( Image overlayImage )
-{
-  // (Target > 0.5) * (1 - (1-2*(Target-0.5)) * (1-Blend)) + (Target <= 0.5) * ((2*Target) * Blend)
-  const char* OVERLAY_FRAGMENT_SHADER_SOURCE =
-  "void main()\n"
-  "{\n"
-  "  lowp vec4 target = texture2D(sTexture, vTexCoord);\n"
-  "  lowp vec4 overlay = texture2D(sEffect, vTexCoord);\n"
-  "  if ( length( target.rgb ) > 0.5 )\n"
-  "  {\n"
-  "    gl_FragColor = vec4( mix( target.rgb, 1.0 - ( 1.0 - 2.0 * ( target.rgb - 0.5 ) )  * ( 1.0 - overlay.rgb ), overlay.a ), min( 1.0, target.a + overlay.a ) );\n"
-  "  }\n"
-  "  else\n"
-  "  {\n"
-  "    gl_FragColor = vec4( mix( target.rgb, 2.0 * target.rgb * overlay.rgb, overlay.a ), target.a + overlay.a );\n"
-  "  }\n"
-  "}\n";
-
-  ShaderEffect shader = ShaderEffect::New( "", // Use default
-                                           OVERLAY_FRAGMENT_SHADER_SOURCE,
-                                           GeometryType( GEOMETRY_TYPE_IMAGE ),
-                                           ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ) );
-
-  shader.SetEffectImage( overlayImage );
-
-  return OverlayEffect( shader );
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-OverlayEffect::OverlayEffect( ShaderEffect handle )
-: ShaderEffect( handle )
-{
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index ece950b..ffc5928 100644 (file)
@@ -29,41 +29,48 @@ namespace Toolkit
 {
 
 /**
+ * @brief Creates a new OverlayEffect
+ *
  * OverlayEffect is used to apply an overlay image to the actor.
  * Typically overlay images should be the same size as the main image being viewed, but this isn't essential.
  *
  * Usage example:
  *
  *   ImageActor actor = ImageActor::New( Image( EXAMPLE_IMAGE_PATH ) );
- *   OverlayEffect overlayEffect = OverlayEffect::New( Image::New( OVERLAY_IMAGE_PATH ) );
+ *   ShaderEffect overlayEffect = CreateOverlayEffect( Image::New( OVERLAY_IMAGE_PATH ) );
  *   actor.SetShaderEffect( overlayEffect );
+ *
+ *   @param[in] overlayImage The image to overlay on top of the actor
+ *   @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API OverlayEffect : public ShaderEffect
+inline ShaderEffect CreateOverlayEffect(Image overlayImage)
 {
-public:
-
-  /**
-   * Create an empty OverlayEffect handle.
-   */
-  OverlayEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~OverlayEffect();
+  // (Target > 0.5) * (1 - (1-2*(Target-0.5)) * (1-Blend)) + (Target <= 0.5) * ((2*Target) * Blend)
+  const char* OVERLAY_FRAGMENT_SHADER_SOURCE =
+      "void main()\n"
+      "{\n"
+      "  lowp vec4 target = texture2D(sTexture, vTexCoord);\n"
+      "  lowp vec4 overlay = texture2D(sEffect, vTexCoord);\n"
+      "  if ( length( target.rgb ) > 0.5 )\n"
+      "  {\n"
+      "    gl_FragColor = vec4( mix( target.rgb, 1.0 - ( 1.0 - 2.0 * ( target.rgb - 0.5 ) )  * ( 1.0 - overlay.rgb ), overlay.a ), min( 1.0, target.a + overlay.a ) );\n"
+      "  }\n"
+      "  else\n"
+      "  {\n"
+      "    gl_FragColor = vec4( mix( target.rgb, 2.0 * target.rgb * overlay.rgb, overlay.a ), target.a + overlay.a );\n"
+      "  }\n"
+      "}\n";
 
-  /**
-   * Create a OverlayEffect.
-   * @return A handle to a newly allocated OverlayEffect.
-   */
-  static OverlayEffect New( Image overlayImage );
+  ShaderEffect shaderEffect = ShaderEffect::New(
+      "", // Use default
+      OVERLAY_FRAGMENT_SHADER_SOURCE,
+      GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING ) );
 
-private: // Not intended for application developers
+  shaderEffect.SetEffectImage( overlayImage );
 
-  DALI_INTERNAL OverlayEffect( ShaderEffect handle );
-};
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.cpp b/dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.cpp
deleted file mode 100644 (file)
index 36d1849..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include <dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.h>
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/common/stage.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string SHADOW_WIDTH_PROPERTY_NAME("uShadowWidth");
-const std::string SPINE_SHADOW_PARAMETER_PROPERTY_NAME("uSpineShadowParameter");
-const std::string IS_BACK_IMAGE_VISIBLE_PROPERTY_NAME( "uIsBackImageVisible" );
-const std::string PAGE_WIDTH_PROPERTY_NAME( "uPageWidth" );
-
-// fake shadow is used to enhance the effect, with its default maximum width to be pageSize * 0.15
-const float DEFAULT_SHADOW_WIDTH(0.15f);
-
-// the major&minor radius (in pixels) to form an ellipse shape
-// the top-left quarter of this ellipse is used to calculate spine normal for simulating shadow
-const Vector2 DEFAULT_SPINE_SHADOW_PARAMETER(50.0f, 20.0f);
-
-}
-
-PageTurnBookSpineEffect::PageTurnBookSpineEffect()
-{
-}
-
-PageTurnBookSpineEffect::PageTurnBookSpineEffect( ShaderEffect handle )
-: ShaderEffect( handle )
-{
-}
-
-PageTurnBookSpineEffect::~PageTurnBookSpineEffect()
-{
-}
-
-PageTurnBookSpineEffect PageTurnBookSpineEffect::New()
-{
-  std::string vertexSource(
-  "precision mediump float;\n"
-  "uniform float uShadowWidth;\n"
-  "  void main()\n"
-  "  {\n"
-  "    gl_Position = uProjection * uModelView * vec4(aPosition, 1.0);\n"
-  "    vTexCoord.x = (aTexCoord.x-sTextureRect.s) /( 1.0 - uShadowWidth ) + sTextureRect.s;\n"
-  "    vTexCoord.y = ( aTexCoord.y-sTextureRect.t-0.5*uShadowWidth*(sTextureRect.q-sTextureRect.t) )/( 1.0 - uShadowWidth ) + sTextureRect.t;\n"
-  "  }");
-
-  // the simplified version of the fragment shader of page turn effect
-  std::string fragmentSource(
-  "precision mediump float;\n"
-  "uniform float uIsBackImageVisible;\n"
-  "uniform float uPageWidth;\n"
-  "uniform vec2 uSpineShadowParameter;\n"
-  "  void main()\n"
-  "  {\n"
-      // leave the border for display shadow, not visible( out of the screen ) when the page is static
-  "    if( vTexCoord.y > sTextureRect.q || vTexCoord.y < sTextureRect.t || vTexCoord.x > sTextureRect.p  )\n"
-  "    {\n"
-  "      gl_FragColor = vec4( 0.0 );\n"
-  "    }\n"
-  "    else \n"
-  "    { \n"
-         // flip the image horizontally by changing the x component of the texture coordinate
-  "      if( uIsBackImageVisible == 1.0 )  gl_FragColor = texture2D( sTexture, vec2( sTextureRect.p+sTextureRect.s-vTexCoord.x, vTexCoord.y ) ) * uColor; \n"
-  "      else gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n"
-  "      \n"
-         // display book spine, a stripe of shadowed texture
-  "      float pixelPos = (vTexCoord.x-sTextureRect.s)*uPageWidth; \n"
-  "      if(pixelPos < uSpineShadowParameter.x) \n"
-  "      {\n"
-  "        float x = pixelPos - uSpineShadowParameter.x;\n"
-  "        float y = sqrt( uSpineShadowParameter.x*uSpineShadowParameter.x - x*x );\n"
-  "        vec2 spineNormal = normalize(vec2(uSpineShadowParameter.y*x/uSpineShadowParameter.x, y));\n"
-  "        gl_FragColor.rgb *= spineNormal.y; \n"
-  "      }"
-  "    }\n"
-  "  }" );
-
-  ShaderEffect shader;
-  shader = ShaderEffect::New( vertexSource, fragmentSource );
-  PageTurnBookSpineEffect handle( shader );
-  handle.SetUniform( IS_BACK_IMAGE_VISIBLE_PROPERTY_NAME, -1.f );
-  handle.SetUniform( SHADOW_WIDTH_PROPERTY_NAME, DEFAULT_SHADOW_WIDTH );
-  handle.SetUniform( SPINE_SHADOW_PARAMETER_PROPERTY_NAME, DEFAULT_SPINE_SHADOW_PARAMETER );
-  float defaultPageWidth = Dali::Stage::GetCurrent().GetSize().x;
-  handle.SetUniform( PAGE_WIDTH_PROPERTY_NAME, defaultPageWidth/(1.f-DEFAULT_SHADOW_WIDTH) );
-  return handle;
-}
-
-void PageTurnBookSpineEffect::SetIsBackImageVisible( bool isBackVisible )
-{
-  float direction = isBackVisible ? 1.0f : -1.0f;
-  SetUniform( IS_BACK_IMAGE_VISIBLE_PROPERTY_NAME, direction );
-}
-
-void PageTurnBookSpineEffect::SetPageWidth( float pageWidth )
-{
-  SetUniform( PAGE_WIDTH_PROPERTY_NAME, pageWidth );
-}
-
-void PageTurnBookSpineEffect::SetShadowWidth( float shadowWidth )
-{
-  SetUniform( SHADOW_WIDTH_PROPERTY_NAME, shadowWidth );
-}
-
-void PageTurnBookSpineEffect::SetSpineShadowParameter( const Vector2& spineShadowParameter )
-{
-  SetUniform( SPINE_SHADOW_PARAMETER_PROPERTY_NAME, spineShadowParameter);
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
diff --git a/dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.h b/dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.h
deleted file mode 100644 (file)
index cb41e99..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__
-#define __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__
-
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/shader-effects/shader-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-/**
- * @brief This is an assisting effect of PageTurnEffect to display a book spine on _static_ pages, and also to flip the image horizontally when needed.
- *
- * When the page is turned over in landscape, call
- * SetIsBackImageVisible(true), this effect can display the back image
- * correctly after the imageActor been rotated 180 degrees.  To
- * display the pages visually consistent with its turning state,
- * please set the uniforms with the same values as the PageTurnEffect.
- **/
-class DALI_IMPORT_API PageTurnBookSpineEffect : public ShaderEffect
-{
-public:
-  /**
-   * @brief Create an uninitialized PageTurnBookSpineEffect; this can be initialized with PageTurnBookSpineEffect::New().
-   *
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  PageTurnBookSpineEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~PageTurnBookSpineEffect();
-
-  /**
-   * @brief Create an initialized PageTurnBookSpineEffect.
-   *
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static PageTurnBookSpineEffect New();
-
-  /**
-   * @brief Set whether the current page is with its backside visible.
-   *
-   * Need to pass the parameter as true for the page which is turned over but still visible in Landscape
-   * @param [in] isBackVisible True for page with its backside upwards
-   */
-  void SetIsBackImageVisible( bool isBackVisible );
-
-  /**
-   * @brief Set the page width of the PageTurnBookSpineEffect.
-   *
-   * @param [in] pageWidth The width of the page size.
-   */
-  void SetPageWidth( float pageWidth );
-
-  /**
-   * @brief Set the width of shadow to be pageSize * shadowWidth.
-   *
-   * this shadow appears at the edges of the actor which is not visible on static pages
-   * @param [in] shadowWidth The width for the simulated shadow
-   */
-  void SetShadowWidth( float shadowWidth );
-
-  /**
-   * @brief Set the spine shadow parameter.
-   *
-   * The two parameters are the major&minor radius (in pixels) to form an ellipse shape
-   * The top-left quarter of this ellipse is used to calculate spine normal for simulating shadow
-   * @param [in] spineShadowParameter The major&minor ellipse radius for the simulated spine shadow
-   */
-  void SetSpineShadowParameter( const Vector2& spineShadowParameter );
-
-
-private:// Helper for New()
-  DALI_INTERNAL PageTurnBookSpineEffect( ShaderEffect handle );
-
-}; // End of PageTurnBookSpineEffect class
-
-} // namespace Toolkit
-
-} // namespace Dali
-
-#endif /* __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__ */
diff --git a/dali-toolkit/public-api/shader-effects/page-turn-effect.cpp b/dali-toolkit/public-api/shader-effects/page-turn-effect.cpp
deleted file mode 100644 (file)
index 1a2f817..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include <dali-toolkit/public-api/shader-effects/page-turn-effect.h>
-
-// INTERNAL HEADERS
-#include <dali-toolkit/internal/shader-effects/page-turn-effect-impl.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-PageTurnEffect::PageTurnEffect()
-{
-}
-
-// Call the Parent copy constructor to add reference to the implementation for this object
-PageTurnEffect::PageTurnEffect( ShaderEffect handle, Internal::PageTurnEffect* shaderExtension )
-: ShaderEffect( handle )
-{
-  AttachExtension( shaderExtension );
-}
-
-PageTurnEffect::~PageTurnEffect()
-{
-}
-
-PageTurnEffect PageTurnEffect::New( bool enableBlending )
-{
-  return Internal::PageTurnEffect::CreateShaderEffect( enableBlending );
-}
-
-void PageTurnEffect::SetPageSize(const Vector2& pageSize)
-{
-  GetImpl( *this ).SetPageSize( pageSize );
-}
-
-void PageTurnEffect::SetOriginalCenter(const Vector2& originalCenter)
-{
-  GetImpl( *this ).SetOriginalCenter( originalCenter );
-}
-
-void PageTurnEffect::SetCurrentCenter(const Vector2& currentCenter)
-{
-  GetImpl( *this ).SetCurrentCenter( currentCenter );
-}
-
-void PageTurnEffect::SetIsTurningBack(bool isTurningBack)
-{
-  GetImpl( *this ).SetIsTurningBack( isTurningBack );
-}
-
-void PageTurnEffect::SetShadowWidth(float shadowWidth)
-{
-  GetImpl( *this ).SetShadowWidth( shadowWidth );
-}
-
-void PageTurnEffect::SetSpineShadowParameter(const Vector2& spineShadowParameter)
-{
-  GetImpl( *this ).SetSpineShadowParameter( spineShadowParameter);
-}
-
-const std::string& PageTurnEffect::GetPageSizePropertyName() const
-{
-  return GetImpl( *this ).GetPageSizePropertyName();
-}
-
-const std::string& PageTurnEffect::GetOriginalCenterPropertyName() const
-{
-  return GetImpl( *this ).GetOriginalCenterPropertyName();
-}
-
-const std::string& PageTurnEffect::GetCurrentCenterPropertyName() const
-{
-  return GetImpl( *this ).GetCurrentCenterPropertyName();
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
diff --git a/dali-toolkit/public-api/shader-effects/page-turn-effect.h b/dali-toolkit/public-api/shader-effects/page-turn-effect.h
deleted file mode 100644 (file)
index 3e9abb4..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-#ifndef __DALI_PAGE_TURN_EFFECT_H_
-#define __DALI_PAGE_TURN_EFFECT_H_
-
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/shader-effects/shader-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace Internal DALI_INTERNAL
-{
-
-/**
- * @brief PageTurnEffect implementation class.
- */
-class PageTurnEffect;
-
-} // namespace Internal
-
-/**
- * @brief PageTurnEffect is a custom shader effect to achieve page turn effect for Image actors.
- *
- * Usage example:-
- *
- * // create shader used for doing page-turn effect\n
- * PageTurnEffect pageTurnEffect = PageTurnEffect::New();
- *
- * // set image actor shader to the page-turn one\n
- * // for portrait view, one image actor for each page\n
- * // for landscape view, the page turned over is still visible, so back image is needed \n
- * //     in this case, create another image Actor using the back image and added to the page actor \n
- * ImageActor pageActor = ImageActor::New(....); \n
- * ImageActor backImageActor = ImageActor::New(....); \n
- * pageActor.Add(backPageActor);\n
- * pageActor.SetShaderEffect ( pageTurnEffect ); \n
- *
- * //set initial values
- * pageTurnEffect.SetPageSize();\n
- * pageTurnEffect.SetOriginalCenter();\n
- * pageTurnEffect.SetIsTurningBack();\n
- * pageTurnEffect.SetCurrentCenter();\n
- *
- * //Animate it with the current center property\n
- * Animation animation[mAnimationIndex] = Animation::New( ... );\n
- * animation.AnimateTo(Property( pageTurnEffect, pageTurnEffect.PageTurnEffect::GetCurrentCenterPropertyName() ),
- *                            currentCenter,
- *                            AlphaFunction::...);\n
- * animation[mAnimationIndex].Play(); \n
- */
-
-class DALI_IMPORT_API PageTurnEffect : public ShaderEffect
-{
-public:
-  /**
-   * @brief Create an uninitialized PageTurnEffect; this can be initialized with PageTurnEffect::New().
-   *
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  PageTurnEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~PageTurnEffect();
-
-  /**
-   * @brief Create an initialized PageTurnEffect.
-   *
-   * If fake shadow is used, need to apply the ShaderEffect::HINT_BLENDING
-   * @param[in] enableBlending If true, apply HINT_BLENDING when creating the shader object; If false, disable the HINT_BLENDING
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static PageTurnEffect New( bool enableBlending = true );
-
-  /**
-   * @brief Set the page size of the PageTurnEffect.
-   *
-   * @param [in] pageSize The page size.
-   */
-  void SetPageSize(const Vector2& pageSize);
-
-  /**
-   * @brief Set the origin point of the PageTurnEffect, the position where the mouse/finger is pushed from.
-   *
-   * @param [in] originalCenter The new origin point.
-   */
-  void SetOriginalCenter(const Vector2& originalCenter);
-
-  /**
-   * @brief Set the center point of the PageTurnEffect, the current position of touch motion.
-   *
-   * @param [in] currentCenter The new center point.
-   */
-  void SetCurrentCenter(const Vector2& currentCenter);
-
-  /**
-   * @brief Set whether the current page is turning forward or backward.
-   *
-   * @param [in] isTurningBack True for turning backward or False for turning forward
-   */
-  void SetIsTurningBack(bool isTurningBack);
-
-  /**
-   * @brief Set the width of shadow to be pageSize * shadowWidth.
-   *
-   * @param [in] shadowWidth The width for the simulated shadow
-   */
-  void SetShadowWidth(float shadowWidth);
-
-  /**
-   * @brief Set the spine shadow parameter.
-   *
-   * The two parameters are the major&minor radius (in pixels) to form an ellipse shape
-   * The top-left quarter of this ellipse is used to calculate spine normal for simulating shadow
-   * @param [in] spineShadowParameter The major&minor ellipse radius for the simulated spine shadow
-   */
-  void SetSpineShadowParameter(const Vector2& spineShadowParameter);
-
-  /**
-   * @brief Get the name for the page size property.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetPageSizePropertyName() const;
-
-  /**
-  * @brief Get the name for the origin center property.
-  *
-  * @return A std::string containing the property name
-  */
-  const std::string& GetOriginalCenterPropertyName() const;
-
-  /**
-   * @brief Get the name for the current center property.
-   *
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetCurrentCenterPropertyName() const;
-
-public: // Not intended for application developers
-
-  DALI_INTERNAL PageTurnEffect( ShaderEffect handle, Internal::PageTurnEffect* shaderExtension );
-
-};  //end of PageTurnEffect class
-
-} // namespace Toolkit
-
-} // namespace Dali
-
-#endif /* __DALI_TOOLKIT_SC_CURVE_EFFECT_H_ */
diff --git a/dali-toolkit/public-api/shader-effects/quadratic-bezier.cpp b/dali-toolkit/public-api/shader-effects/quadratic-bezier.cpp
deleted file mode 100644 (file)
index d197be8..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-//CLASS HEADER
-#include <dali-toolkit/public-api/shader-effects/quadratic-bezier.h>
-
-//EXTERNAL HEADERS
-#include <sstream>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-const char* POINT_PROPERTY_NAME( "uPoint" );
-const char* LINEWIDTH_PROPERTY_NAME( "uLineWidth" );
-const char* COLOR_PROPERTY_NAME( "uColor" );
-} // namespace
-
-QuadraticBezier::QuadraticBezier()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-QuadraticBezier::QuadraticBezier(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-QuadraticBezier::~QuadraticBezier()
-{
-}
-
-QuadraticBezier QuadraticBezier::New(unsigned int pointCount, bool filled )
-{
-  std::string vertexShader = DALI_COMPOSE_SHADER
-  (
-      uniform mediump vec3 uPoint[MAX_POINT_COUNT];\n
-      varying highp vec2 vCoefficient;
-      void main()\n
-      {\n
-        int vertexId = int(aNormal.z);\n
-        gl_Position = uMvpMatrix * vec4(uPoint[vertexId], 1.0);\n
-        vCoefficient = aNormal.xy;\n
-      }\n
-  );
-
-  std::string fragmentShader;
-
-  if( filled )
-  {
-    fragmentShader = DALI_COMPOSE_SHADER
-    (
-        varying highp vec2 vCoefficient;\n
-
-        void main()\n
-        {\n
-          highp float C = (vCoefficient.x*vCoefficient.x-vCoefficient.y);\n
-          highp float Cdx = dFdx(C);\n
-          highp float Cdy = dFdy(C);\n
-
-          highp float distance = float(C / sqrt(Cdx*Cdx + Cdy*Cdy));\n
-
-          gl_FragColor = uColor;\n
-          highp float alpha = 0.5 - distance;\n
-          if( alpha < 0.0 )\n
-            discard;\n
-
-          gl_FragColor.w = alpha;\n
-        }\n
-    );
-  }
-  else
-  {
-    fragmentShader = DALI_COMPOSE_SHADER
-    (
-        varying highp vec2 vCoefficient;\n
-        uniform lowp float uLineWidth;\n
-
-        void main()\n
-        {\n
-          highp float C = (vCoefficient.x*vCoefficient.x-vCoefficient.y);\n
-          highp float Cdx = dFdx(C);\n
-          highp float Cdy = dFdy(C);\n
-          highp float distance = abs(float(C / sqrt(Cdx*Cdx + Cdy*Cdy)));\n
-          gl_FragColor = uColor*(uLineWidth-distance);\n
-        }\n
-    );
-  }
-
-  std::ostringstream vertexShaderPrefix;
-  vertexShaderPrefix << "#define MAX_POINT_COUNT "<< pointCount << "\n";
-
-  Dali::ShaderEffect shaderEffectCustom = Dali::ShaderEffect::NewWithPrefix( vertexShaderPrefix.str(),vertexShader,
-                                                                             "#extension GL_OES_standard_derivatives:enable\n", fragmentShader,
-                                                                             GEOMETRY_TYPE_UNTEXTURED_MESH );
-
-  Dali::Toolkit::QuadraticBezier handle( shaderEffectCustom );
-
-  //Set default uniform values
-  handle.SetUniform( COLOR_PROPERTY_NAME, Vector4(1.0f,1.0f,1.0f,1.0f) );
-  if( !filled )
-  {
-    //Set default line widht to 1 pixel
-    handle.SetUniform( LINEWIDTH_PROPERTY_NAME, 1.0f );
-  }
-
-  return handle;
-}
-
-void QuadraticBezier::SetPoint(unsigned int index, const Vector3& position)
-{
-  SetUniform( GetPointPropertyName(index), position );
-}
-
-void QuadraticBezier::SetLineWidth( float width )
-{
-  SetUniform( LINEWIDTH_PROPERTY_NAME, width );
-}
-
-void QuadraticBezier::SetColor( const Vector4& color )
-{
-  SetUniform( COLOR_PROPERTY_NAME, color );
-}
-
-std::string QuadraticBezier::GetPointPropertyName(unsigned int index) const
-{
-  std::ostringstream propertyName;
-  propertyName<<POINT_PROPERTY_NAME<<"["<<index<<"]";
-  return propertyName.str();
-}
-
-std::string QuadraticBezier::GetLineWidthPropertyName( ) const
-{
-  return LINEWIDTH_PROPERTY_NAME;
-}
-
-std::string QuadraticBezier::GetColorPropertyName( ) const
-{
-  return COLOR_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
-
index e3e0ad8..e60f2d3 100644 (file)
@@ -27,7 +27,9 @@ namespace Dali
 namespace Toolkit
 {
 /**
- * @brief QuadraticBezier is a custom shader to render quadratic bezier curves and bounded regions.
+ * @brief Creates a new QuadraticBezier shader effect
+ *
+ * QuadraticBezier is a custom shader to render quadratic bezier curves and bounded regions.
  *
  * Implementation based on the paper "Resolution Independent Curve Rendering using Programmable Graphics Hardware"
  * by Charles Loop and Jim Blinn.
@@ -36,84 +38,91 @@ namespace Toolkit
  * aNormal attribute is used to pass the coefficients of each control point (xy coordinates) as well as the vertex ID (z coordinate).
  * A quadratic curve should have as normal for the first control point (0.0,0.0), (0.5,0.0) for the second and (1.0,1.0) for the third.
  * Triangles that do not contain curves should have coordinates (0.0,1.0) for each control point in order to be filled properly.
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uPoint"      - Position coordinates for the points in the curve
+ *  "uColor"      - The color of the curve or bounded region
+ *  "uLineWidth"  - The width of the path. Only for not filled curves
+ *
+ * @param[in] pointCount The maximum number of vertices
+ * @param[in] filled Specify whether the the bounded region should be filled or not
+ * @return A handle to a newly allocated ShaderEffect
  */
-
-class DALI_IMPORT_API QuadraticBezier : public ShaderEffect
+inline ShaderEffect CreateQuadraticBezier(unsigned int pointCount, bool filled)
 {
-public:
-
-  /**
-   * @brief Create an uninitialized QuadraticBezier; this can be initialized with QuadraticBezier::New().
-   *
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  QuadraticBezier();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~QuadraticBezier();
-
-  /**
-   * @brief Create an initialized QuadraticBezier.
-   *
-   * @param[in] pointCount The maximum number of vertices
-   * @param[in] filled Specify whether the the bounded region should be filled or not
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static QuadraticBezier New(unsigned int pointCount, bool filled );
-
-  /**
-   * @brief Set position coordinates for a point in the curve
-   *
-   * @param[in] index The index of the vertex
-   * @param[in] position The new position
-   */
-  void SetPoint( unsigned int index, const Vector3& position );
-
-  /**
-   * @brief Set the width of the pathThis is only for not filled curves
-   *
-   * @param[in] width Width of the line in pixels
-   */
-  void SetLineWidth( float width );
-
-  /**
-   * @brief Sets the color of the curve
-   *
-   * @param[in] color The new color
-   */
-  void SetColor( const Vector4& color );
-
-  /**
-   * @brief Get the name of a the point property given its index
-   *
-   * @param[in] index Index of the vertex
-   * @return A std::string containing the property name
-   */
-  std::string GetPointPropertyName( unsigned int index ) const;
-
-  /**
-   * @brief Get the name of the line width property
-   *
-   * @return A std::string containing the property name
-   */
-  std::string GetLineWidthPropertyName( ) const;
-
-  /**
-   * @brief Get the name of the color property
-   *
-   * @return A std::string containing the property name
-   */
-  std::string GetColorPropertyName( ) const;
-
-private: // Not intended for application developers
-
-  DALI_INTERNAL QuadraticBezier(ShaderEffect handle);
-
-};
+  std::string vertexShader = DALI_COMPOSE_SHADER
+      (
+          uniform mediump vec3 uPoint[MAX_POINT_COUNT];\n
+          varying highp vec2 vCoefficient;
+          void main()\n
+              {\n
+            int vertexId = int(aNormal.z);\n
+            gl_Position = uMvpMatrix * vec4(uPoint[vertexId], 1.0);\n
+            vCoefficient = aNormal.xy;\n
+              }\n
+      );
+
+  std::string fragmentShader;
+
+  if( filled )
+  {
+    fragmentShader = DALI_COMPOSE_SHADER
+        (
+            varying highp vec2 vCoefficient;\n
+
+            void main()\n
+            {\n
+              highp float C = (vCoefficient.x*vCoefficient.x-vCoefficient.y);\n
+              highp float Cdx = dFdx(C);\n
+              highp float Cdy = dFdy(C);\n
+
+              highp float distance = float(C / sqrt(Cdx*Cdx + Cdy*Cdy));\n
+
+              gl_FragColor = uColor;\n
+              highp float alpha = 0.5 - distance;\n
+              if( alpha < 0.0 )\n
+              discard;\n
+
+              gl_FragColor.w = alpha;\n
+            }\n
+        );
+  }
+  else
+  {
+    fragmentShader = DALI_COMPOSE_SHADER
+        (
+            varying highp vec2 vCoefficient;\n
+            uniform lowp float uLineWidth;\n
+
+            void main()\n
+            {\n
+              highp float C = (vCoefficient.x*vCoefficient.x-vCoefficient.y);\n
+              highp float Cdx = dFdx(C);\n
+              highp float Cdy = dFdy(C);\n
+              highp float distance = abs(float(C / sqrt(Cdx*Cdx + Cdy*Cdy)));\n
+              gl_FragColor = uColor*(uLineWidth-distance);\n
+            }\n
+        );
+  }
+
+  std::ostringstream vertexShaderPrefix;
+  vertexShaderPrefix << "#define MAX_POINT_COUNT "<< pointCount << "\n";
+
+  Dali::ShaderEffect shaderEffect = Dali::ShaderEffect::NewWithPrefix(
+      vertexShaderPrefix.str(),vertexShader,
+      "#extension GL_OES_standard_derivatives:enable\n", fragmentShader,
+      GeometryType(GEOMETRY_TYPE_UNTEXTURED_MESH) );
+
+  //Set default uniform values
+  shaderEffect.SetUniform( "uColor", Vector4(1.0f,1.0f,1.0f,1.0f) );
+  if( !filled )
+  {
+    //Set default line widht to 1 pixel
+    shaderEffect.SetUniform( "uLineWidth", 1.0f );
+  }
+
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/ripple-effect.cpp b/dali-toolkit/public-api/shader-effects/ripple-effect.cpp
deleted file mode 100644 (file)
index ec354c9..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/ripple-effect.h>
-
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string AMPLITUDE_PROPERTY_NAME( "uAmplitude" );
-const std::string CENTER_PROPERTY_NAME( "uCenter" );
-const std::string TIME_PROPERTY_NAME( "uTime" );
-
-} // namespace
-
-RippleEffect::RippleEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-RippleEffect::RippleEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-RippleEffect::~RippleEffect()
-{
-}
-
-
-RippleEffect RippleEffect::New()
-{
-
-  std::string vertexShader(
-       "precision mediump float;\n"
-       "uniform mediump   vec2  uCenter;\n"
-       "uniform mediump   float uTime;\n"
-       "uniform mediump   float uAmplitude;\n"
-       "uniform mediump   float uLighting;\n"
-       "uniform mediump   float uWaveLength;\n"
-       "varying mediump   float vLight;\n"
-       "varying mediump   float vShade;\n"
-       "void main()\n"
-       "{\n"
-          "float lighting = uAmplitude * 0.02;\n"
-          "float waveLength = uAmplitude * 0.0016;\n"
-          "vec4 world = uModelView * vec4(aPosition,1.0);\n"
-          "vec2 d = vec2(world.x - uCenter.x, world.y - uCenter.y);\n"
-          "float dist = length(d);\n"
-          "float amplitude = cos(uTime - dist*waveLength);\n"
-          "float slope     = sin(uTime - dist*waveLength);\n"
-          "world.z += amplitude * uAmplitude;\n"
-          "gl_Position = uProjection * world;\n"
-          "vec2 lightDirection = vec2(-0.707,0.707);\n"
-          "float dot = 0.0;\n"
-          "if(dist > 0.0)\n"
-          "{\n"
-          "  dot = dot(normalize(d),lightDirection) * lighting;\n"
-          "}\n"
-          "vShade = 1.0 - (dot * slope);\n"
-          "vLight = max(0.0, dot * -slope);\n"
-          "vTexCoord = aTexCoord;\n"
-        "}" );
-
-  // append the default version
-  std::string imageFragmentShader(
-        "precision mediump float;\n"
-        "varying mediump float  vLight;\n"
-        "varying mediump float  vShade;\n"
-        "void main()\n"
-        "{\n"
-        "  gl_FragColor = texture2D(sTexture, vTexCoord) * uColor * vec4(vShade,vShade,vShade,1.0) + vec4(vLight, vLight, vLight,0.0);\n"
-        "}" );
-
-  // Create the implementation, temporarily owned on stack
-  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
-      vertexShader, imageFragmentShader, GeometryType(GEOMETRY_TYPE_IMAGE), GeometryHints(HINT_GRID) );
-
-  /* Pass ownership to RippleEffect through overloaded constructor, So that it now has access to the
-     Dali::ShaderEffect implementation */
-  Dali::Toolkit::RippleEffect handle( shaderEffect );
-
-  handle.SetUniform( AMPLITUDE_PROPERTY_NAME, 0.0f );
-  handle.SetUniform( CENTER_PROPERTY_NAME, Vector2(0.0f, 0.0f));
-  handle.SetUniform( TIME_PROPERTY_NAME, 0.0f );
-
-  return handle;
-}
-
-void RippleEffect::SetAmplitude(float amplitude)
-{
-  SetUniform( AMPLITUDE_PROPERTY_NAME, amplitude );
-}
-
-void RippleEffect::SetCenter(const Vector2& center)
-{
-  SetUniform( CENTER_PROPERTY_NAME, center );
-}
-
-void RippleEffect::SetTime(float time)
-{
-  SetUniform( TIME_PROPERTY_NAME, time );
-}
-
-const std::string& RippleEffect::GetAmplitudePropertyName() const
-{
-  return AMPLITUDE_PROPERTY_NAME;
-}
-
-const std::string& RippleEffect::GetCenterPropertyName() const
-{
-  return CENTER_PROPERTY_NAME;
-}
-
-const std::string& RippleEffect::GetTimePropertyName() const
-{
-  return TIME_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index 72e3883..b537501 100644 (file)
@@ -28,81 +28,70 @@ namespace Toolkit
 {
 
 /**
- * @brief RippleEffect is a custom shader effect to achieve ripple effects on Image actors.
+ * @brief Creates a new RippleEffect
+ *
+ * RippleEffect is a custom shader effect to achieve ripple effects on Image actors.
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uAmplitude"  - The amplitude of the effect
+ *  "uCenter"     - The center point of the effect as screen coordinates
+ *  "uTime"       - The time duration for the ripple
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API RippleEffect : public ShaderEffect
+inline ShaderEffect CreateRippleEffect()
 {
-public:
-
-  /**
-   * @brief Create an uninitialized RippleEffect; this can be initialized with RippleEffect::New().
-   *
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  RippleEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~RippleEffect();
-
-  /**
-   * @brief Create an initialized RippleEffect.
-   *
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static RippleEffect New();
-
-  /**
-   * @brief Set the amplitude of the effect.
-   *
-   * @param [in] amplitude The new amplitude.
-   */
-  void SetAmplitude(float amplitude);
-
-  /**
-   * @brief Set the center point of the effect as screen coordinates.
-   *
-   * @param [in] center The new center point.
-   */
-  void SetCenter(const Vector2& center);
-
-  /**
-   * @brief Set the time duration for the ripple.
-   *
-   * @param[in] time The time duration in float.
-   */
-  void SetTime(float time);
-
-  /**
-   * @brief Get the name for the amplitude property.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAmplitudePropertyName() const;
-
-  /**
-   * @brief Get the name for the center property.
-   *
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetCenterPropertyName() const;
-
-  /**
-   * @brief Get the name for the time property.
-   *
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetTimePropertyName() const;
-
-private:
-  DALI_INTERNAL RippleEffect(ShaderEffect handle);
-
-};
+  std::string vertexShader(
+      "precision mediump float;\n"
+      "uniform mediump   vec2  uCenter;\n"
+      "uniform mediump   float uTime;\n"
+      "uniform mediump   float uAmplitude;\n"
+      "varying mediump   float vLight;\n"
+      "varying mediump   float vShade;\n"
+      "void main()\n"
+      "{\n"
+      "float lighting = uAmplitude * 0.02;\n"
+      "float waveLength = uAmplitude * 0.0016;\n"
+      "vec4 world = uModelView * vec4(aPosition,1.0);\n"
+      "vec2 d = vec2(world.x - uCenter.x, world.y - uCenter.y);\n"
+      "float dist = length(d);\n"
+      "float amplitude = cos(uTime - dist*waveLength);\n"
+      "float slope     = sin(uTime - dist*waveLength);\n"
+      "world.z += amplitude * uAmplitude;\n"
+      "gl_Position = uProjection * world;\n"
+      "vec2 lightDirection = vec2(-0.707,0.707);\n"
+      "float dot = 0.0;\n"
+      "if(dist > 0.0)\n"
+      "{\n"
+      "  dot = dot(normalize(d),lightDirection) * lighting;\n"
+      "}\n"
+      "vShade = 1.0 - (dot * slope);\n"
+      "vLight = max(0.0, dot * -slope);\n"
+      "vTexCoord = aTexCoord;\n"
+      "}" );
+
+  // append the default version
+  std::string imageFragmentShader(
+      "precision mediump float;\n"
+      "varying mediump float  vLight;\n"
+      "varying mediump float  vShade;\n"
+      "void main()\n"
+      "{\n"
+      "  gl_FragColor = texture2D(sTexture, vTexCoord) * uColor * vec4(vShade,vShade,vShade,1.0) + vec4(vLight, vLight, vLight,0.0);\n"
+      "}" );
+
+
+  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
+      vertexShader, imageFragmentShader,
+      GeometryType(GEOMETRY_TYPE_IMAGE), ShaderEffect::GeometryHints(ShaderEffect::HINT_GRID) );
+
+
+  shaderEffect.SetUniform( "uAmplitude", 0.0f );
+  shaderEffect.SetUniform( "uCenter", Vector2(0.0f, 0.0f));
+  shaderEffect.SetUniform( "uTime", 0.0f );
+
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/ripple2d-effect.cpp b/dali-toolkit/public-api/shader-effects/ripple2d-effect.cpp
deleted file mode 100644 (file)
index 972631d..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/ripple2d-effect.h>
-
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string TEXTURE_SIZE_PROPERTY_NAME( "uTextureSize" );
-const std::string AMPLITUDE_PROPERTY_NAME( "uAmplitude" );
-const std::string TIME_PROPERTY_NAME( "uTime" );
-
-} // namespace
-
-Ripple2DEffect::Ripple2DEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-Ripple2DEffect::Ripple2DEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-Ripple2DEffect::~Ripple2DEffect()
-{
-}
-
-
-Ripple2DEffect Ripple2DEffect::New()
-{
-    // append the default version
-    std::string fragmentShader(
-        "precision mediump float;\n"
-        "uniform float uAmplitude;\n"
-        "uniform float uTime;\n"
-        "void main()\n"
-        "{\n"
-        "  highp vec2 textureSize = sTextureRect.zw - sTextureRect.xy;\n"
-        "  highp vec2 pos = -1.0 + 2.0 * vTexCoord.st/textureSize;\n"
-        "  highp float len = length(pos);\n"
-        "  highp vec2 texCoord = vTexCoord.st/textureSize + pos/len * sin( len * 12.0 - uTime * 4.0 ) * uAmplitude;\n"
-        "  gl_FragColor = texture2D(sTexture, texCoord) * uColor;\n"
-        "}" );
-
-  // Create the implementation, temporarily owned on stack
-  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
-    "", fragmentShader,
-    Dali::GeometryType( GEOMETRY_TYPE_IMAGE ),
-    ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID ));
-
-  /* Pass ownership to Ripple2DEffect through overloaded constructor, So that it now has access to the
-     Dali::ShaderEffect implementation */
-  Dali::Toolkit::Ripple2DEffect handle( shaderEffect );
-
-  handle.SetUniform( TEXTURE_SIZE_PROPERTY_NAME, Vector2(0.0f, 0.0f) );
-  handle.SetUniform( AMPLITUDE_PROPERTY_NAME, 0.0f );
-  handle.SetUniform( TIME_PROPERTY_NAME, 0.0f );
-
-  return handle;
-
-}
-
-void Ripple2DEffect::SetAmplitude(float amplitude)
-{
-  SetUniform( AMPLITUDE_PROPERTY_NAME, amplitude );
-}
-
-void Ripple2DEffect::SetTime(float time)
-{
-  SetUniform( TIME_PROPERTY_NAME, time );
-}
-
-const std::string& Ripple2DEffect::GetAmplitudePropertyName() const
-{
-  return AMPLITUDE_PROPERTY_NAME;
-}
-
-const std::string& Ripple2DEffect::GetTimePropertyName() const
-{
-  return TIME_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index f93ce79..991a78e 100644 (file)
@@ -28,66 +28,45 @@ namespace Toolkit
 {
 
 /**
- * @brief Ripple2DEffect is a custom shader effect to achieve 2d ripple effects on Image actors.
+ * @brief Creates a new Ripple2DEffect
+ *
+ * Ripple2DEffect is a custom shader effect to achieve 2d ripple effects on Image actors.
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uTime"       - The time duration for the 2d ripple
+ *  "uAmplitude"  - The amplitude of the 2d ripple
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API Ripple2DEffect : public ShaderEffect
+inline ShaderEffect CreateRipple2DEffect()
 {
-public:
-
-  /**
-   * @brief Create an uninitialized Ripple2DEffect; this can be initialized with Ripple2DEffect::New().
-   *
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  Ripple2DEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~Ripple2DEffect();
-
-  /**
-   * @brief Create an initialized Ripple2DEffect.
-   *
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static Ripple2DEffect New();
-
-  /**
-   * @brief Set the amplitude of the 2d ripple.
-   *
-   * @param[in] amplitude The amplitude in float.
-   */
-  void SetAmplitude(float amplitude);
-
-  /**
-   * @brief Set the time duration for the 2d ripple.
-   *
-   * @param[in] time The time duration in float.
-   */
-  void SetTime(float time);
-
-  /**
-   * @brief Get the name for the amplitude property.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAmplitudePropertyName() const;
-
-  /**
-   * @brief Get the name for the time property.
-   *
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetTimePropertyName() const;
-
-private:
-  DALI_INTERNAL Ripple2DEffect(ShaderEffect handle);
-
-};
+  // append the default version
+  std::string fragmentShader(
+      "precision mediump float;\n"
+      "uniform float uAmplitude;\n"
+      "uniform float uTime;\n"
+      "void main()\n"
+      "{\n"
+      "  highp vec2 textureSize = sTextureRect.zw - sTextureRect.xy;\n"
+      "  highp vec2 pos = -1.0 + 2.0 * vTexCoord.st/textureSize;\n"
+      "  highp float len = length(pos);\n"
+      "  highp vec2 texCoord = vTexCoord.st/textureSize + pos/len * sin( len * 12.0 - uTime * 4.0 ) * uAmplitude;\n"
+      "  gl_FragColor = texture2D(sTexture, texCoord) * uColor;\n"
+      "}" );
+
+  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
+      "", fragmentShader,
+      Dali::GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID ));
+
+
+
+  shaderEffect.SetUniform( "uTextureSize", Vector2(0.0f, 0.0f) ); //@note: Is this needed?
+  shaderEffect.SetUniform( "uAmplitude", 0.0f );
+  shaderEffect.SetUniform( "uTime", 0.0f );
+
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/shear-effect.cpp b/dali-toolkit/public-api/shader-effects/shear-effect.cpp
deleted file mode 100644 (file)
index 031c8aa..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/shear-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string CENTER_PROPERTY_NAME( "uCenter" );
-const std::string ANGLE_X_AXIS_PROPERTY_NAME( "uAngleXAxis" );
-const std::string ANGLE_Y_AXIS_PROPERTY_NAME( "uAngleYAxis" );
-
-} // namespace
-
-ShearEffect::ShearEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-ShearEffect::ShearEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-ShearEffect::~ShearEffect()
-{
-}
-
-
-ShearEffect ShearEffect::New()
-{
-  // append the default version
-  std::string vertexShader(
-              "uniform mediump  vec2  uCenter;\n"
-              "uniform mediump  float uAngleXAxis;\n"
-              "uniform mediump  float uAngleYAxis;\n"
-              "\n"
-              "void main()\n"
-              "{\n"
-                  "mediump vec4 world = uModelView * vec4(aPosition,1.0);\n"
-                  "\n"
-                  "world.x = world.x + tan(radians(uAngleXAxis)) * (world.y - uCenter.y * world.w);\n"
-                  "world.y = world.y + tan(radians(uAngleYAxis)) * (world.x - uCenter.x * world.w);\n"
-                  "\n"
-                  "gl_Position = uProjection * world;\n"
-                  "\n"
-                  "vTexCoord = aTexCoord;\n"
-              "}" );
-
-  // Create the implementation, temporarily owned on stack,
-  ShaderEffect shaderEffectCustom =  Dali::ShaderEffect::New(
-      vertexShader,
-      "",
-      GeometryType( GEOMETRY_TYPE_IMAGE ),
-      GeometryHints( HINT_GRID ));
-
-  // Pass ownership to ShearEffect through overloaded constructor, So that it now has access to the
-  // Dali::ShaderEffect implementation
-  Dali::Toolkit::ShearEffect handle( shaderEffectCustom );
-
-  handle.SetUniform( CENTER_PROPERTY_NAME, Vector2(0.0f, 0.0f), COORDINATE_TYPE_VIEWPORT_POSITION );
-  handle.SetUniform( ANGLE_X_AXIS_PROPERTY_NAME, 0.0f);
-  handle.SetUniform( ANGLE_Y_AXIS_PROPERTY_NAME, 0.0f);
-
-  return handle;
-}
-
-void ShearEffect::SetCenter( const Vector2& center )
-{
-  SetUniform( CENTER_PROPERTY_NAME, center, COORDINATE_TYPE_VIEWPORT_POSITION );
-}
-
-void ShearEffect::SetAngleXAxis( float angle )
-{
-  SetUniform( ANGLE_X_AXIS_PROPERTY_NAME, angle );
-};
-
-void ShearEffect::SetAngleYAxis( float angle )
-{
-  SetUniform( ANGLE_Y_AXIS_PROPERTY_NAME, angle );
-};
-
-const std::string& ShearEffect::GetCenterPropertyName() const
-{
-  return CENTER_PROPERTY_NAME;
-}
-
-const std::string& ShearEffect::GetAngleXAxisPropertyName() const
-{
-  return ANGLE_X_AXIS_PROPERTY_NAME;
-}
-
-const std::string& ShearEffect::GetAngleYAxisPropertyName() const
-{
-  return ANGLE_Y_AXIS_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index a9b819b..6a07449 100644 (file)
@@ -28,71 +28,51 @@ namespace Toolkit
 {
 
 /**
+ * @brief Creates a new ShearEffect
+ *
  * ShearEffect is a custom shader effect to achieve shear effects in Image actors
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uCenter"     - The center point of the shear effect in screen coordinates
+ *  "uAngleXAxis" - The angle of the shear effect in the X axis
+ *  "uAngleYAxis" - The angle of the shear effect in the Y axis
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API ShearEffect : public ShaderEffect
+inline ShaderEffect CreateShearEffect()
 {
-public:
-
-  /**
-   * Create an uninitialized ShearEffect; this can be initialized with ShearEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  ShearEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~ShearEffect();
-
-  /**
-   * Create an initialized ShearEffect.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static ShearEffect New();
-
-  /**
-   * Set the center point of the shear effect in screen coordinates.
-   * @param [in] center The new center point.
-   */
-  void SetCenter(const Vector2& center);
-
-  /**
-   * Set the angle of the shear effect in the X axis.
-   * @param [in] angle The new angle.
-   */
-  void SetAngleXAxis(float angle);
-
-  /**
-   * Set the angle of the shear effect in the Y axis.
-   * @param [in] angle The new angle.
-   */
-  void SetAngleYAxis(float angle);
-
-  /**
-   * Get the name for the center property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetCenterPropertyName() const;
-
-  /**
-   * Get the name for the X axis property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAngleXAxisPropertyName() const;
-
-  /**
-   * Get the name for the Y axis property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAngleYAxisPropertyName() const;
-
-
-private: // Not intended for application developers
-  DALI_INTERNAL ShearEffect(ShaderEffect handle);
-};
+  // append the default version
+  std::string vertexShader(
+      "uniform mediump  vec2  uCenter;\n"
+      "uniform mediump  float uAngleXAxis;\n"
+      "uniform mediump  float uAngleYAxis;\n"
+      "\n"
+      "void main()\n"
+      "{\n"
+      "mediump vec4 world = uModelView * vec4(aPosition,1.0);\n"
+      "\n"
+      "world.x = world.x + tan(radians(uAngleXAxis)) * (world.y - uCenter.y * world.w);\n"
+      "world.y = world.y + tan(radians(uAngleYAxis)) * (world.x - uCenter.x * world.w);\n"
+      "\n"
+      "gl_Position = uProjection * world;\n"
+      "\n"
+      "vTexCoord = aTexCoord;\n"
+      "}" );
+
+  // Create the implementation, temporarily owned on stack,
+  ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
+      vertexShader,
+      "",
+      Dali::GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID ));
+
+
+  shaderEffect.SetUniform( "uCenter", Vector2(0.0f, 0.0f), ShaderEffect::COORDINATE_TYPE_VIEWPORT_POSITION );
+  shaderEffect.SetUniform( "uAngleXAxis", 0.0f);
+  shaderEffect.SetUniform( "uAngleYAxis", 0.0f);
+
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/soft-button-effect.cpp b/dali-toolkit/public-api/shader-effects/soft-button-effect.cpp
deleted file mode 100644 (file)
index fbf3da2..0000000
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/animation/constraint.h>
-#include <dali/public-api/object/property-input.h>
-
-// INTERNAL INCLUDES
-#include <dali-toolkit/public-api/shader-effects/soft-button-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string SOFT_BUTTON_LIGHTING_INDENTATION_AMOUNT_PROPERTY_NAME( "uLightingIndentationAmount" );
-const std::string SOFT_BUTTON_TEXTURE_DISTORTION_AMOUNT_PROPERTY_NAME( "uTextureDistortAmount" );
-const std::string SOFT_BUTTON_AMBIENT_LIGHT_AMOUNT_PROPERTY_NAME( "uAmbientLight" );
-const std::string SOFT_BUTTON_DIFFUSE_LIGHT_PROPERTY_NAME( "uDiffuseLight" );
-const std::string SOFT_BUTTON_LIGHTING_MULTIPLIER_PROPERTY_NAME( "uLightMultiplier" );
-const std::string SOFT_BUTTON_INSIDE_SHAPE_SIZE_SCALE_PROPERTY_NAME( "uInsideCircleSizeScale" );
-const std::string SOFT_BUTTON_RECIP_INSIDE_SHAPE_SIZE_SCALE_PROPERTY_NAME( "uRecipInsideCircleSizeScale" );
-const std::string SOFT_BUTTON_OUTSIDE_SHAPE_DEPTH_PROPERTY_NAME( "uOutsideCircleDepth" );
-const std::string SOFT_BUTTON_EFFECT_PIXEL_AREA_PROPERTY_NAME( "uEffectRegion" );
-const std::string SOFT_BUTTON_RECTANGLE_SIZE_SCALE_PROPERTY_NAME( "uRectangleSizeScale" );
-
-
-// factors that scale the look, defaults
-const float SOFT_BUTTON_LIGHTING_INDENTATION_AMOUNT_DEFAULT = 0.0f;
-const float SOFT_BUTTON_TEXTURE_DISTORTION_AMOUNT_DEFAULT = 0.0f;
-const float SOFT_BUTTON_AMBIENT_LIGHT_AMOUNT_DEFAULT = 0.15f;
-const Vector3 SOFT_BUTTON_DIFFUSE_LIGHT_DEFAULT = Vector3(0.0f, 0.7070168f, 0.7071068f);
-const float SOFT_BUTTON_LIGHTING_MULTIPLIER_DEFAULT = 1.2f;
-const float SOFT_BUTTON_INSIDE_SHAPE_SIZE_SCALE_DEFAULT = 0.75f;
-const float SOFT_BUTTON_OUTSIDE_SHAPE_DEPTH_DEFAULT = Math::PI * 0.05f;
-const Vector4 SOFT_BUTTON_EFFECT_PIXEL_AREA_DEFAULT = Vector4(0.0f, 0.0f, 1.0f, 1.0f);
-const float SOFT_BUTTON_RECTANGLE_SIZE_SCALE_DEFAULT = 0.5f;
-
-} // namespace
-
-/**
- * InverseConstraint
- *
- * f(current, property) = 1.0 / property
- */
-void InverseConstraint( float& current, const PropertyInputContainer& inputs )
-{
-  current = 1.0f / inputs[0]->GetFloat();
-}
-
-////////////////////////////////////////////////////
-//
-// Soft button shader / actor tweaking parameters
-//
-
-
-SoftButtonEffect::SoftButtonEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-SoftButtonEffect::SoftButtonEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-SoftButtonEffect::~SoftButtonEffect()
-{
-}
-
-SoftButtonEffect SoftButtonEffect::New(Type type)
-{
-  std::string vertexSource;
-  vertexSource =  "precision mediump float;\n"
-    "uniform vec3 uDiffuseLight;\n"
-    "uniform float uAmbientLight;\n"
-    "uniform float uLightMultiplier;\n"
-    "uniform vec4 uEffectRegion;\n"
-    "varying vec2 vCentredCoord;\n"
-
-    "const vec3 norm = vec3(0.0, 0.0, 1.0);\n"
-
-    "void main()\n"
-    "{\n"
-    "  vTexCoord = aTexCoord;\n"
-    // Get the rect coords of the effect region in -1..1 range, i.e. circle centred around the center of the rect
-    // Done in the vertex shader itself to make use of gl interpolation for varying.
-    "  vCentredCoord = vec2( ( (vTexCoord.x - uEffectRegion.x)/(uEffectRegion.z - uEffectRegion.x) * 2.0 - 1.0 ), ( (vTexCoord.y - uEffectRegion.y)/(uEffectRegion.w - uEffectRegion.y) * 2.0 - 1.0  ) );\n"
-    "  gl_Position = uMvpMatrix * vec4(aPosition, 1.0);\n"
-    "}\n";
-
-  std::string fragmentSourceFixed;
-  fragmentSourceFixed =  "precision mediump float;\n"
-
-    "uniform vec3 uDiffuseLight;\n"
-    "uniform float uAmbientLight;\n"
-    "uniform float uLightMultiplier;\n"
-    "varying vec2 vCentredCoord;\n"
-
-    "const vec3 norm = vec3(0.0, 0.0, 1.0);\n"
-
-    "void main()\n"
-    "{\n"
-    "   vec4 col = texture2D(sTexture, vTexCoord);\n"
-    // calc lighting
-    "   float lighting = (dot(uDiffuseLight, norm) + uAmbientLight) * uLightMultiplier;\n"
-    // output col = image * light
-    // use the lighting value for colors only
-    "   gl_FragColor = vec4(col.rgb * uColor.rgb * lighting, col.a * uColor.a);\n"
-    "}\n";
-
-  std::string fragmentSourceElliptical;
-  fragmentSourceElliptical =  "precision mediump float;\n"
-
-    "uniform float uLightingIndentationAmount;\n"
-    "uniform float uTextureDistortAmount;\n"
-    "uniform vec3 uDiffuseLight;\n"
-    "uniform float uAmbientLight;\n"
-    "uniform float uLightMultiplier;\n"
-    "uniform float uInsideCircleSizeScale;\n"
-    "uniform float uRecipInsideCircleSizeScale;\n"
-    "uniform float uOutsideCircleDepth;\n"
-    "uniform vec4 uEffectRegion;\n"
-    "varying vec2 vCentredCoord;\n"
-
-    "const float PI = 3.1415927;\n"
-
-    "void main()\n"
-    "{\n"
-      // Apply distortion only if the pixel is within the rect specified
-      "if( (vTexCoord.x > uEffectRegion.x) && (vTexCoord.x < uEffectRegion.z) && (vTexCoord.y > uEffectRegion.y) && (vTexCoord.y < uEffectRegion.w) )\n"
-      "{\n"
-      "   vec2 coord = vCentredCoord;\n"
-
-      // find a coordinate representing distance from circle centre, such that we split into inside / outside circles that can have different gradients / normals
-      "   float realDistFromCentre = length(coord);\n"
-      "   realDistFromCentre = min(1.0, realDistFromCentre);\n" // clamp corners of square to vertical normal
-      "   float distFromCentre;\n"
-      "   if(realDistFromCentre <= uInsideCircleSizeScale)\n"
-      "   {\n"
-      "     distFromCentre = realDistFromCentre * uRecipInsideCircleSizeScale * (1.0 - uOutsideCircleDepth);\n" // inside circle indent, up to outline depth
-      "   }\n"
-      "   else                                                                                                                      \n"
-      "   {\n"
-      "     distFromCentre = mix(1.0 - uOutsideCircleDepth, 1.0, (realDistFromCentre - ( uInsideCircleSizeScale)) / (1.0 - uInsideCircleSizeScale));\n" // outside circle
-      "   }\n"
-
-      // get coords in -PI..PI range, i.e. scale the circle for use by trig functions
-      "  coord *= PI;\n"
-
-      // get a z value for the distorted surface in 0..1 range, using cos for a smooth curve (note, we ignore inside / outside circles since the difference isn't noticeable visually)
-      "   vec2 cosThetaCoord = (cos(coord) * 0.5) + 0.5;\n"
-      "   float z = cosThetaCoord.x * cosThetaCoord.y;\n"
-
-      // get the normal for the distorted surface, using the fact that the derivative of cos is -sin, finding tangent vector from slope and then normal by cross product...
-      "   float sinThetaCoord = sin(distFromCentre*PI) * uLightingIndentationAmount;\n" // slope, so tangent vec is (1.0, -sin)
-      // ...2D normal vector along distFromCentre vec is (sin, 1.0), convert to components in 3D.
-      "   vec3 norm = normalize(vec3(coord.x * sinThetaCoord, coord.y * sinThetaCoord, 1.0));\n"
-
-      // form surface z and project texture onto it.
-      "   float indentAmount = 1.0 / (1.0 - (z * uTextureDistortAmount));\n"
-      "   vec2 distortedCoord = vCentredCoord * indentAmount;\n"
-
-      // Convert the rect coordinates in -1 to 1 range back to the original coordinates
-      "   vec2 texCoord = vec2( ( (distortedCoord.x + 1.0)*(0.5) * (uEffectRegion.z - uEffectRegion.x) + uEffectRegion.x ), ( (distortedCoord.y + 1.0)*(0.5) * (uEffectRegion.w - uEffectRegion.y) + uEffectRegion.y  ) );  \n"
-      "   vec4 col = texture2D(sTexture, texCoord);\n"
-
-      // calc lighting
-      "   float lighting = (dot(uDiffuseLight, norm) + uAmbientLight) * uLightMultiplier;\n"
-      "  gl_FragColor = vec4(col.rgb * uColor.rgb * lighting, col.a * uColor.a);\n"
-      "}\n"
-      "else\n"
-      "{\n"
-      "  vec4 col = texture2D(sTexture, vTexCoord);\n"
-      "  float lighting = (dot(uDiffuseLight, vec3(0.0, 0.0, 1.0)) + uAmbientLight) * uLightMultiplier;\n"
-      "  gl_FragColor = vec4(col.rgb * uColor.rgb * lighting, col.a * uColor.a);\n"
-      "}\n"
-    "}\n";
-
-  std::string fragmentSourceRectangular;
-  fragmentSourceRectangular =  "precision mediump float;\n"
-
-    "uniform float uLightingIndentationAmount;\n"
-    "uniform float uTextureDistortAmount;\n"
-    "uniform vec3 uDiffuseLight;\n"
-    "uniform float uAmbientLight;\n"
-    "uniform float uLightMultiplier;\n"
-    "uniform float uInsideCircleSizeScale;\n"
-    "uniform float uRecipInsideCircleSizeScale;\n"
-    "uniform float uOutsideCircleDepth;\n"
-    "uniform float uRectangleSizeScale;\n"
-    "uniform vec4 uEffectRegion;\n"
-    "varying vec2 vCentredCoord;\n"
-
-    "const float PI = 3.1415927;\n"
-
-    "void main()\n"
-    "{\n"
-      // Apply distortion only if the pixel is within the rect specified
-      "if( (vTexCoord.x > uEffectRegion.x) && (vTexCoord.x < uEffectRegion.z) && (vTexCoord.y > uEffectRegion.y) && (vTexCoord.y < uEffectRegion.w) )\n"
-      "{ \n"
-        // get the rect coords to -1..1 range, i.e. circle centred around the center of the rect
-        "   vec2 centredCoord = vCentredCoord;\n"
-        // clamp coords such that the circle is split into 4 pieces that lie in the corners of the actor. uRectangleScale is the distance along each axis from the centre
-        // of the actor, e.g. 0.5 is half way along an axis from centre to actor edge.
-        "   vec2 clampedCoord;\n"
-        "   if(centredCoord.x > 0.0)\n"
-        "   {\n"
-        "     if(centredCoord.x < uRectangleSizeScale)\n"
-        "     {\n"
-                // we are in a rectangular region along this axis, clamp coord to be same as centre pixel
-        "       clampedCoord.x = 0.0;\n"
-        "     }\n"
-        "     else\n"
-        "     {\n"
-                // we are outside rectangular region along this axis, so we want curvature.
-        "       clampedCoord.x = smoothstep(0.0, 1.0, (centredCoord.x - uRectangleSizeScale) / (1.0 - uRectangleSizeScale));\n"
-        "     }\n"
-        "   }\n"
-        "   else\n"
-        "   {\n"
-        "     if(centredCoord.x > -uRectangleSizeScale)\n"
-        "     {\n"
-                // we are in a rectangular region along this axis, clamp coord to be same as centre pixel
-        "       clampedCoord.x = 0.0;\n"
-        "     }\n"
-        "     else\n"
-        "     {\n"
-                // we are outside rectangular region along this axis, so we want curvature.
-        "       clampedCoord.x = -smoothstep(0.0, 1.0, (centredCoord.x + uRectangleSizeScale) / (uRectangleSizeScale - 1.0));\n"
-        "     }\n"
-        "   }\n"
-        "   if(centredCoord.y > 0.0)\n"
-        "   {\n"
-        "     if(centredCoord.y < uRectangleSizeScale)\n"
-        "     {\n"
-                // we are in a rectangular region along this axis, clamp coord to be same as centre pixel
-        "       clampedCoord.y = 0.0;\n"
-        "     }\n"
-        "     else\n"
-        "     {\n"
-                // we are outside rectangular region along this axis, so we want curvature.
-        "       clampedCoord.y = smoothstep(0.0, 1.0, (centredCoord.y - uRectangleSizeScale) / (1.0 - uRectangleSizeScale));\n"
-        "     }\n"
-        "   }\n"
-        "   else\n"
-        "   {\n"
-        "     if(centredCoord.y > -uRectangleSizeScale)\n"
-        "     {\n"
-                // we are in a rectangular region along this axis, clamp coord to be same as centre pixel
-        "       clampedCoord.y = 0.0;\n"
-        "     }\n"
-        "     else\n"
-        "     {\n"
-                // we are outside rectangular region along this axis, so we want curvature.
-        "       clampedCoord.y = -smoothstep(0.0, 1.0, (centredCoord.y + uRectangleSizeScale) / (uRectangleSizeScale - 1.0));\n"
-        "     }\n"
-        "   }\n"
-        // get coords in -PI..PI range, i.e. scale above circle for use by trig functions
-        "   vec2 thetaCoord = clampedCoord * PI;\n"
-        // get a z value for the distorted surface in 0..1 range, using cos for a smooth curve (note, we ignore inside / outside circles since the difference isn't noticeable visually)
-        "   vec2 cosThetaCoord = (cos(thetaCoord) * 0.5) + 0.5;\n"
-        "   float z = cosThetaCoord.x * cosThetaCoord.y;\n"
-        // find a coordinate representing distance from circle centre, such that we split into inside / outside circles that can have different gradients / normals
-        "   float realDistFromCentre = length(thetaCoord);\n"
-        "   realDistFromCentre = min(PI, realDistFromCentre);\n" // clamp corners of square to vertical normal
-        "   float distFromCentre;\n"
-        "   if(realDistFromCentre <= PI * uInsideCircleSizeScale)\n"
-        "   {\n"
-        "     distFromCentre = realDistFromCentre * uRecipInsideCircleSizeScale * (PI - (uOutsideCircleDepth * PI)) / PI;\n" // inside circle indent, up to outline depth
-        "   }\n"
-        "   else\n"
-        "   {\n"
-        "     distFromCentre = mix(PI - (uOutsideCircleDepth * PI), PI, (realDistFromCentre - ( PI * uInsideCircleSizeScale)) / (PI - (PI * uInsideCircleSizeScale)));\n" // outside circle
-        "   }\n"
-        // get the normal for the distorted surface, using the fact that the derivative of cos is -sin, finding tangent vector from slope and then normal by cross product...
-        "   float sinThetaCoord = sin(distFromCentre) * uLightingIndentationAmount;\n" // slope, so tangent vec is (1.0, -sin)
-        // ...2D normal vector along distFromCentre vec is (sin, 1.0), convert to components in 3D.
-        "   vec3 norm = normalize(vec3(thetaCoord.x * sinThetaCoord, thetaCoord.y * sinThetaCoord, 1.0));\n"
-        // form surface z and project texture onto it.
-        "   float indentAmount = 1.0 / (1.0 - (z * uTextureDistortAmount));\n"
-        "   vec2 distortedCoord = centredCoord * indentAmount;\n"
-        // Convert the rect coordinates in -1 to 1 range back to the original coordinates
-        "   vec2 texCoord = vec2( ( (distortedCoord.x + 1.0)/(2.0) * (uEffectRegion.z - uEffectRegion.x) + uEffectRegion.x ), ( (distortedCoord.y + 1.0)/(2.0) * (uEffectRegion.w - uEffectRegion.y) + uEffectRegion.y  ) );\n"
-        "   vec4 col = texture2D(sTexture, texCoord);\n"
-        // calc lighting
-        "   float lighting = (dot(uDiffuseLight, norm) + uAmbientLight) * uLightMultiplier;\n"
-        // output col = image * light
-        // use the lighting value for colors only
-        "   gl_FragColor = vec4(col.rgb * uColor.rgb * lighting, col.a * uColor.a);\n"
-
-      "}\n"
-      "else\n"
-      "{\n"
-        "   vec4 col = texture2D(sTexture, vTexCoord);\n"
-        "   float lighting = (dot(uDiffuseLight, vec3(0.0, 0.0, 1.0)) + uAmbientLight) * uLightMultiplier;\n"
-        "   gl_FragColor = vec4(col.rgb * uColor.rgb * lighting, col.a * uColor.a);\n"
-      "} \n"
-    "}\n";
-
-
-  //////////////////////////////////////
-  // Create shader effect
-  //
-  //
-
-  ShaderEffect shader;
-  switch(type)
-  {
-    case RECTANGULAR:
-      shader = ShaderEffect::New( vertexSource, fragmentSourceRectangular, GeometryType( GEOMETRY_TYPE_IMAGE ), ShaderEffect::GeometryHints( ShaderEffect::HINT_NONE ));
-      break;
-
-    case ELLIPTICAL:
-      shader = ShaderEffect::New( vertexSource, fragmentSourceElliptical, GeometryType( GEOMETRY_TYPE_IMAGE ), ShaderEffect::GeometryHints( ShaderEffect::HINT_NONE ));
-      break;
-
-    case FIXED:
-    default:
-      shader = ShaderEffect::New( vertexSource, fragmentSourceFixed, GeometryType( GEOMETRY_TYPE_IMAGE ), ShaderEffect::GeometryHints( ShaderEffect::HINT_NONE ));
-      break;
-  }
-  SoftButtonEffect handle( shader );
-
-
-  //////////////////////////////////////
-  // Register uniform properties
-  //
-  //
-
-  // factors that scale the look, defaults
-  handle.SetUniform(SOFT_BUTTON_AMBIENT_LIGHT_AMOUNT_PROPERTY_NAME, SOFT_BUTTON_AMBIENT_LIGHT_AMOUNT_DEFAULT);
-  handle.SetUniform(SOFT_BUTTON_DIFFUSE_LIGHT_PROPERTY_NAME, SOFT_BUTTON_DIFFUSE_LIGHT_DEFAULT);
-  handle.SetUniform(SOFT_BUTTON_LIGHTING_MULTIPLIER_PROPERTY_NAME, SOFT_BUTTON_LIGHTING_MULTIPLIER_DEFAULT);
-  if(FIXED != type)
-  {
-    handle.SetUniform(SOFT_BUTTON_LIGHTING_INDENTATION_AMOUNT_PROPERTY_NAME, SOFT_BUTTON_LIGHTING_INDENTATION_AMOUNT_DEFAULT);
-    handle.SetUniform(SOFT_BUTTON_TEXTURE_DISTORTION_AMOUNT_PROPERTY_NAME, SOFT_BUTTON_TEXTURE_DISTORTION_AMOUNT_DEFAULT);
-    handle.SetUniform(SOFT_BUTTON_INSIDE_SHAPE_SIZE_SCALE_PROPERTY_NAME, SOFT_BUTTON_INSIDE_SHAPE_SIZE_SCALE_DEFAULT);
-    handle.SetUniform(SOFT_BUTTON_RECIP_INSIDE_SHAPE_SIZE_SCALE_PROPERTY_NAME, 1.0f / SOFT_BUTTON_INSIDE_SHAPE_SIZE_SCALE_DEFAULT);
-    handle.SetUniform(SOFT_BUTTON_OUTSIDE_SHAPE_DEPTH_PROPERTY_NAME, SOFT_BUTTON_OUTSIDE_SHAPE_DEPTH_DEFAULT);
-    handle.SetUniform(SOFT_BUTTON_EFFECT_PIXEL_AREA_PROPERTY_NAME, SOFT_BUTTON_EFFECT_PIXEL_AREA_DEFAULT);
-    if(RECTANGULAR == type)
-    {
-      handle.SetUniform(SOFT_BUTTON_RECTANGLE_SIZE_SCALE_PROPERTY_NAME, SOFT_BUTTON_RECTANGLE_SIZE_SCALE_DEFAULT);
-    }
-
-    // precalc 1.0 / uInsideCircleSizeScale on CPU to save shader insns, using constraint to tie to the normal property
-    Dali::Property::Index insideCircleSizeScalePropertyIndex = handle.GetPropertyIndex(SOFT_BUTTON_INSIDE_SHAPE_SIZE_SCALE_PROPERTY_NAME);
-    Dali::Property::Index recipInsideCircleSizeScalePropertyIndex = handle.GetPropertyIndex(SOFT_BUTTON_RECIP_INSIDE_SHAPE_SIZE_SCALE_PROPERTY_NAME);
-    Constraint constraint = Constraint::New<float>( handle, recipInsideCircleSizeScalePropertyIndex, InverseConstraint );
-    constraint.AddSource( LocalSource(insideCircleSizeScalePropertyIndex) );
-    constraint.Apply();
-  }
-
-  return handle;
-}
-
-const std::string& SoftButtonEffect::GetLightingIndentationAmountPropertyName() const
-{
-  return SOFT_BUTTON_LIGHTING_INDENTATION_AMOUNT_PROPERTY_NAME;
-}
-
-const std::string& SoftButtonEffect::GetTextureDistortionAmountPropertyName() const
-{
-  return SOFT_BUTTON_TEXTURE_DISTORTION_AMOUNT_PROPERTY_NAME;
-}
-
-const std::string& SoftButtonEffect::GetAmbientLightAmountPropertyName() const
-{
-  return SOFT_BUTTON_AMBIENT_LIGHT_AMOUNT_PROPERTY_NAME;
-}
-
-const std::string& SoftButtonEffect::GetDiffuseLightPropertyName() const
-{
-  return SOFT_BUTTON_DIFFUSE_LIGHT_PROPERTY_NAME;
-}
-
-const std::string& SoftButtonEffect::GetLightingMultiplierPropertyName() const
-{
-  return SOFT_BUTTON_LIGHTING_MULTIPLIER_PROPERTY_NAME;
-}
-
-const std::string& SoftButtonEffect::GetInsideShapeSizeScalePropertyName() const
-{
-  return SOFT_BUTTON_INSIDE_SHAPE_SIZE_SCALE_PROPERTY_NAME;
-}
-
-const std::string& SoftButtonEffect::GetOutsideShapeDepthPropertyName() const
-{
-  return SOFT_BUTTON_OUTSIDE_SHAPE_DEPTH_PROPERTY_NAME;
-}
-
-const std::string& SoftButtonEffect::GetEffectPixelAreaPropertyName() const
-{
-  return SOFT_BUTTON_EFFECT_PIXEL_AREA_PROPERTY_NAME;
-}
-
-const std::string& SoftButtonEffect::GetRectangleSizeScalePropertyName() const
-{
-  return SOFT_BUTTON_RECTANGLE_SIZE_SCALE_PROPERTY_NAME;
-}
-
-}
-
-}
index 2464aa0..21ff3a4 100644 (file)
@@ -28,13 +28,15 @@ namespace Toolkit
 {
 
 /**
+ * @brief Creates a new soft button shader effect
  *
- * Class for soft button shader that works on a per object basis. Using animatable parameters user can create effect of button pushing in / out. Can be applied to ImageActor only.
+ * Soft button shader effect works on a per object basis. Using animatable parameters user can create
+ * effect of button pushing in / out. Can be applied to ImageActor only.
  *
  * Usage example:-
  *
  * // Create shader used for doing soft button\n
- * SoftButtonEffect softButtonEffect = SoftButtonEffect::New();
+ * ShaderEffect softButtonEffect = CreateSoftButtonEffect();
  *
  * // set image actor shader to the soft button one\n
  * ImageActor imageActor = ImageActor::New( ... );\n
@@ -42,133 +44,359 @@ namespace Toolkit
  *
  * // animate a button push, using e.g. AlphaFunction::BOUNCE. With these values the button pushes in and pops out slightly at the end\n
  * Animation animation = Animation::New( ... );\n
- * animation.AnimateTo( Property(softButtonEffect, softButtonEffect.GetLightingIndentationAmountPropertyName()), 0.25f, AlphaFunction::BOUNCE, ... );\n
- * animation.AnimateTo( Property(softButtonEffect, softButtonEffect.GetLightingIndentationAmountPropertyName()), -0.05f, AlphaFunction::BOUNCE, ... );\n
- * animation.AnimateTo( Property(softButtonEffect, softButtonEffect.GetTextureDistortionAmountPropertyName()), 0.25f, AlphaFunction::BOUNCE, ... );\n
- * animation.AnimateTo( Property(softButtonEffect, softButtonEffect.GetTextureDistortionAmountPropertyName()), -0.05f, AlphaFunction::BOUNCE, ... );\n
+ * animation.AnimateTo( Property(softButtonEffect, "uLightingIndentationAmount), 0.25f, AlphaFunction::BOUNCE, ... );\n
+ * animation.AnimateTo( Property(softButtonEffect, "uLightingIndentationAmount"), -0.05f, AlphaFunction::BOUNCE, ... );\n
+ * animation.AnimateTo( Property(softButtonEffect, "uTextureDistortAmount"), 0.25f, AlphaFunction::BOUNCE, ... );\n
+ * animation.AnimateTo( Property(softButtonEffect, "uTextureDistortAmount"), -0.05f, AlphaFunction::BOUNCE, ... );\n
  * animation.Play();\n
  *
+ * Animatable/Constrainable uniforms:
+ *
+ *  "uLightingIndentationAmount"  - This property changes the lighting, to make it look like the button is pushed in. User should animate
+ *                                  this in conjunction with texture distortion. Allowable values range from [-1..1], higher values give
+ *                                  more change in lighting. Default 0.0 (no lighting change).
+ *  "uTextureDistortAmount"       - This property changes the distortion, to make it look like the button is pushed in. User should animate
+ *                                  this in conjunction with lighting indentation. Allowable values range from [-1..1) - note 1.0 is NOT
+ *                                  allowed - higher values give more distortion. Default 0.0 (no distortion).
+ *  "uAmbientLight"               - The ambient light is used in the lighting calculation. Care must be taken to not saturate the image by
+ *                                  setting this value too high, or the indentation will not look correct. Default 0.15
+ *  "uDiffuseLight"               - The diffuse light is used in the lighting calculation. Default is (0.0, 0.7070168, 0.7070168),
+ *                                  i.e. a light angled at the surface from in front and above. Note that you need to Normalize()
+ *                                  the Vector3 that you set with this property
+ *  "uLightMultiplier"            - The ambient and diffuse lighting is multiplied by this factor. Since a diffuse light at an angle will
+ *                                  cause the whole image to darken, even outside the soft button indentation, this property can be used
+ *                                  to scale the image back up closer to the pixel values of the original diffuse texture. Care must be
+ *                                  taken to not saturate the image,or the indentation will not look correct. Default 1.2.
+ *  "uInsideCircleSizeScale"      - The SoftButtonEffect consists of two shapes, one inside the other. The outside shape fits exactly to
+ *                                  the actor, touching its edges but completely contained. The inside shape size is given by a multiplier
+ *                                  of the outside shape size. For example a value of 0.5 means that the inside shape is half the size of
+ *                                  the outside one. Allowable values are in the range (0.0 - 1.0), note that 0.0 and 1.0 themselves are
+ *                                  not allowed. Default 0.75.
+ *  "uOutsideCircleDepth"         - The SoftButtonEffect consists of two shapes, one inside the other. The depth of the indentation at the
+ *                                  transition between the inside and outside shapes is controlled by this property. The values lies in the
+ *                                  range [0.0 - 1.0]. A value of 0.0 means the outside shape has no depth (and is thus invisible), value of
+ *                                  1.0 means the outside shape has maximum depth (and the inside shape is thus invisible). Default 0.05
+ *  "uEffectRegion"               - The soft button effect is applied within the supplied rect region of the texture. Default values for this
+ *                                  is (0.0, 0.0, 1.0, 1.0) which is the entire image with 0,0 being the top left and 1.0, 1.0 being the bottom
+ *                                  right. If the image texture is split between multiple ImageActors then the developer should specify the pixel
+ *                                  area of the texture the effect should be applied with. Example, If the Image is split among two ImageActors
+ *                                  side by side, with the left one using left half of the texture and right one using the right half of the
+ *                                  texture then the pixel area value for the left ImageActor will be (0.0, 0.0, 0.5, 1.0) and the pixel area for
+ *                                  the right will be (0.5,0.0,1.0,1.0).
+ * "uRectangleSizeScale"          - This property can be used to set the mix between proportion of rectangle and proportion of ellipse - the
+ *                                  result is a rectangle with rounded corners. If the value is 0.0, the shape is an ellipse. If the value is
+ *                                  close to 1.0, the shape is close to a rectangle. The value lies in the range [0.0 - 1.0). Note that a value
+ *                                  of 1.0 is NOT allowed.Default 0.5.
+ *
+ * @param type The type of the soft button, can be either ELLIPTICAL, RECTANGULAR, or FIXED.
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API SoftButtonEffect : public ShaderEffect
+typedef enum
 {
+  SOFT_BUTTON_ELLIPTICAL = 0,   /// Button is elliptical
+  SOFT_BUTTON_RECTANGULAR,      /// Button is rectangular
+  SOFT_BUTTON_FIXED             /// Button does not indent (move). Useful for matching lighting between areas that do not indent (which can thus use a cheaper shader) and those that do indent.
+}SoftButtonEffectType;
+
+static void InverseConstraint( float& current, const PropertyInputContainer& inputs )
+{
+  current = 1.0f / inputs[0]->GetFloat();
+}
+
+inline ShaderEffect CreateSoftButtonEffect(SoftButtonEffectType type)
+{
+  std::string vertexSource;
+  vertexSource =  "precision mediump float;\n"
+      "uniform vec3 uDiffuseLight;\n"
+      "uniform float uAmbientLight;\n"
+      "uniform float uLightMultiplier;\n"
+      "uniform vec4 uEffectRegion;\n"
+      "varying vec2 vCentredCoord;\n"
+
+      "const vec3 norm = vec3(0.0, 0.0, 1.0);\n"
+
+      "void main()\n"
+      "{\n"
+      "  vTexCoord = aTexCoord;\n"
+      // Get the rect coords of the effect region in -1..1 range, i.e. circle centred around the center of the rect
+      // Done in the vertex shader itself to make use of gl interpolation for varying.
+      "  vCentredCoord = vec2( ( (vTexCoord.x - uEffectRegion.x)/(uEffectRegion.z - uEffectRegion.x) * 2.0 - 1.0 ), ( (vTexCoord.y - uEffectRegion.y)/(uEffectRegion.w - uEffectRegion.y) * 2.0 - 1.0  ) );\n"
+      "  gl_Position = uMvpMatrix * vec4(aPosition, 1.0);\n"
+      "}\n";
+
+  std::string fragmentSourceFixed;
+  fragmentSourceFixed =  "precision mediump float;\n"
+
+      "uniform vec3 uDiffuseLight;\n"
+      "uniform float uAmbientLight;\n"
+      "uniform float uLightMultiplier;\n"
+      "varying vec2 vCentredCoord;\n"
+
+      "const vec3 norm = vec3(0.0, 0.0, 1.0);\n"
+
+      "void main()\n"
+      "{\n"
+      "   vec4 col = texture2D(sTexture, vTexCoord);\n"
+      // calc lighting
+      "   float lighting = (dot(uDiffuseLight, norm) + uAmbientLight) * uLightMultiplier;\n"
+      // output col = image * light
+      // use the lighting value for colors only
+      "   gl_FragColor = vec4(col.rgb * uColor.rgb * lighting, col.a * uColor.a);\n"
+      "}\n";
+
+  std::string fragmentSourceElliptical;
+  fragmentSourceElliptical =  "precision mediump float;\n"
+
+      "uniform float uLightingIndentationAmount;\n"
+      "uniform float uTextureDistortAmount;\n"
+      "uniform vec3 uDiffuseLight;\n"
+      "uniform float uAmbientLight;\n"
+      "uniform float uLightMultiplier;\n"
+      "uniform float uInsideCircleSizeScale;\n"
+      "uniform float uRecipInsideCircleSizeScale;\n"
+      "uniform float uOutsideCircleDepth;\n"
+      "uniform vec4 uEffectRegion;\n"
+      "varying vec2 vCentredCoord;\n"
+
+      "const float PI = 3.1415927;\n"
+
+      "void main()\n"
+      "{\n"
+      // Apply distortion only if the pixel is within the rect specified
+      "if( (vTexCoord.x > uEffectRegion.x) && (vTexCoord.x < uEffectRegion.z) && (vTexCoord.y > uEffectRegion.y) && (vTexCoord.y < uEffectRegion.w) )\n"
+      "{\n"
+      "   vec2 coord = vCentredCoord;\n"
+
+      // find a coordinate representing distance from circle centre, such that we split into inside / outside circles that can have different gradients / normals
+      "   float realDistFromCentre = length(coord);\n"
+      "   realDistFromCentre = min(1.0, realDistFromCentre);\n" // clamp corners of square to vertical normal
+      "   float distFromCentre;\n"
+      "   if(realDistFromCentre <= uInsideCircleSizeScale)\n"
+      "   {\n"
+      "     distFromCentre = realDistFromCentre * uRecipInsideCircleSizeScale * (1.0 - uOutsideCircleDepth);\n" // inside circle indent, up to outline depth
+      "   }\n"
+      "   else                                                                                                                      \n"
+      "   {\n"
+      "     distFromCentre = mix(1.0 - uOutsideCircleDepth, 1.0, (realDistFromCentre - ( uInsideCircleSizeScale)) / (1.0 - uInsideCircleSizeScale));\n" // outside circle
+      "   }\n"
 
-public:
+      // get coords in -PI..PI range, i.e. scale the circle for use by trig functions
+      "  coord *= PI;\n"
 
-  /**
-   * Create an uninitialized SoftButtonEffect; this can be initialized with SoftButtonEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  SoftButtonEffect();
+      // get a z value for the distorted surface in 0..1 range, using cos for a smooth curve (note, we ignore inside / outside circles since the difference isn't noticeable visually)
+      "   vec2 cosThetaCoord = (cos(coord) * 0.5) + 0.5;\n"
+      "   float z = cosThetaCoord.x * cosThetaCoord.y;\n"
 
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~SoftButtonEffect();
+      // get the normal for the distorted surface, using the fact that the derivative of cos is -sin, finding tangent vector from slope and then normal by cross product...
+      "   float sinThetaCoord = sin(distFromCentre*PI) * uLightingIndentationAmount;\n" // slope, so tangent vec is (1.0, -sin)
+      // ...2D normal vector along distFromCentre vec is (sin, 1.0), convert to components in 3D.
+      "   vec3 norm = normalize(vec3(coord.x * sinThetaCoord, coord.y * sinThetaCoord, 1.0));\n"
 
-  typedef enum
+      // form surface z and project texture onto it.
+      "   float indentAmount = 1.0 / (1.0 - (z * uTextureDistortAmount));\n"
+      "   vec2 distortedCoord = vCentredCoord * indentAmount;\n"
+
+      // Convert the rect coordinates in -1 to 1 range back to the original coordinates
+      "   vec2 texCoord = vec2( ( (distortedCoord.x + 1.0)*(0.5) * (uEffectRegion.z - uEffectRegion.x) + uEffectRegion.x ), ( (distortedCoord.y + 1.0)*(0.5) * (uEffectRegion.w - uEffectRegion.y) + uEffectRegion.y  ) );  \n"
+      "   vec4 col = texture2D(sTexture, texCoord);\n"
+
+      // calc lighting
+      "   float lighting = (dot(uDiffuseLight, norm) + uAmbientLight) * uLightMultiplier;\n"
+      "  gl_FragColor = vec4(col.rgb * uColor.rgb * lighting, col.a * uColor.a);\n"
+      "}\n"
+      "else\n"
+      "{\n"
+      "  vec4 col = texture2D(sTexture, vTexCoord);\n"
+      "  float lighting = (dot(uDiffuseLight, vec3(0.0, 0.0, 1.0)) + uAmbientLight) * uLightMultiplier;\n"
+      "  gl_FragColor = vec4(col.rgb * uColor.rgb * lighting, col.a * uColor.a);\n"
+      "}\n"
+      "}\n";
+
+  std::string fragmentSourceRectangular;
+  fragmentSourceRectangular =  "precision mediump float;\n"
+
+      "uniform float uLightingIndentationAmount;\n"
+      "uniform float uTextureDistortAmount;\n"
+      "uniform vec3 uDiffuseLight;\n"
+      "uniform float uAmbientLight;\n"
+      "uniform float uLightMultiplier;\n"
+      "uniform float uInsideCircleSizeScale;\n"
+      "uniform float uRecipInsideCircleSizeScale;\n"
+      "uniform float uOutsideCircleDepth;\n"
+      "uniform float uRectangleSizeScale;\n"
+      "uniform vec4 uEffectRegion;\n"
+      "varying vec2 vCentredCoord;\n"
+
+      "const float PI = 3.1415927;\n"
+
+      "void main()\n"
+      "{\n"
+      // Apply distortion only if the pixel is within the rect specified
+      "if( (vTexCoord.x > uEffectRegion.x) && (vTexCoord.x < uEffectRegion.z) && (vTexCoord.y > uEffectRegion.y) && (vTexCoord.y < uEffectRegion.w) )\n"
+      "{ \n"
+      // get the rect coords to -1..1 range, i.e. circle centred around the center of the rect
+      "   vec2 centredCoord = vCentredCoord;\n"
+      // clamp coords such that the circle is split into 4 pieces that lie in the corners of the actor. uRectangleScale is the distance along each axis from the centre
+      // of the actor, e.g. 0.5 is half way along an axis from centre to actor edge.
+      "   vec2 clampedCoord;\n"
+      "   if(centredCoord.x > 0.0)\n"
+      "   {\n"
+      "     if(centredCoord.x < uRectangleSizeScale)\n"
+      "     {\n"
+      // we are in a rectangular region along this axis, clamp coord to be same as centre pixel
+      "       clampedCoord.x = 0.0;\n"
+      "     }\n"
+      "     else\n"
+      "     {\n"
+      // we are outside rectangular region along this axis, so we want curvature.
+      "       clampedCoord.x = smoothstep(0.0, 1.0, (centredCoord.x - uRectangleSizeScale) / (1.0 - uRectangleSizeScale));\n"
+      "     }\n"
+      "   }\n"
+      "   else\n"
+      "   {\n"
+      "     if(centredCoord.x > -uRectangleSizeScale)\n"
+      "     {\n"
+      // we are in a rectangular region along this axis, clamp coord to be same as centre pixel
+      "       clampedCoord.x = 0.0;\n"
+      "     }\n"
+      "     else\n"
+      "     {\n"
+      // we are outside rectangular region along this axis, so we want curvature.
+      "       clampedCoord.x = -smoothstep(0.0, 1.0, (centredCoord.x + uRectangleSizeScale) / (uRectangleSizeScale - 1.0));\n"
+      "     }\n"
+      "   }\n"
+      "   if(centredCoord.y > 0.0)\n"
+      "   {\n"
+      "     if(centredCoord.y < uRectangleSizeScale)\n"
+      "     {\n"
+      // we are in a rectangular region along this axis, clamp coord to be same as centre pixel
+      "       clampedCoord.y = 0.0;\n"
+      "     }\n"
+      "     else\n"
+      "     {\n"
+      // we are outside rectangular region along this axis, so we want curvature.
+      "       clampedCoord.y = smoothstep(0.0, 1.0, (centredCoord.y - uRectangleSizeScale) / (1.0 - uRectangleSizeScale));\n"
+      "     }\n"
+      "   }\n"
+      "   else\n"
+      "   {\n"
+      "     if(centredCoord.y > -uRectangleSizeScale)\n"
+      "     {\n"
+      // we are in a rectangular region along this axis, clamp coord to be same as centre pixel
+      "       clampedCoord.y = 0.0;\n"
+      "     }\n"
+      "     else\n"
+      "     {\n"
+      // we are outside rectangular region along this axis, so we want curvature.
+      "       clampedCoord.y = -smoothstep(0.0, 1.0, (centredCoord.y + uRectangleSizeScale) / (uRectangleSizeScale - 1.0));\n"
+      "     }\n"
+      "   }\n"
+      // get coords in -PI..PI range, i.e. scale above circle for use by trig functions
+      "   vec2 thetaCoord = clampedCoord * PI;\n"
+      // get a z value for the distorted surface in 0..1 range, using cos for a smooth curve (note, we ignore inside / outside circles since the difference isn't noticeable visually)
+      "   vec2 cosThetaCoord = (cos(thetaCoord) * 0.5) + 0.5;\n"
+      "   float z = cosThetaCoord.x * cosThetaCoord.y;\n"
+      // find a coordinate representing distance from circle centre, such that we split into inside / outside circles that can have different gradients / normals
+      "   float realDistFromCentre = length(thetaCoord);\n"
+      "   realDistFromCentre = min(PI, realDistFromCentre);\n" // clamp corners of square to vertical normal
+      "   float distFromCentre;\n"
+      "   if(realDistFromCentre <= PI * uInsideCircleSizeScale)\n"
+      "   {\n"
+      "     distFromCentre = realDistFromCentre * uRecipInsideCircleSizeScale * (PI - (uOutsideCircleDepth * PI)) / PI;\n" // inside circle indent, up to outline depth
+      "   }\n"
+      "   else\n"
+      "   {\n"
+      "     distFromCentre = mix(PI - (uOutsideCircleDepth * PI), PI, (realDistFromCentre - ( PI * uInsideCircleSizeScale)) / (PI - (PI * uInsideCircleSizeScale)));\n" // outside circle
+      "   }\n"
+      // get the normal for the distorted surface, using the fact that the derivative of cos is -sin, finding tangent vector from slope and then normal by cross product...
+      "   float sinThetaCoord = sin(distFromCentre) * uLightingIndentationAmount;\n" // slope, so tangent vec is (1.0, -sin)
+      // ...2D normal vector along distFromCentre vec is (sin, 1.0), convert to components in 3D.
+      "   vec3 norm = normalize(vec3(thetaCoord.x * sinThetaCoord, thetaCoord.y * sinThetaCoord, 1.0));\n"
+      // form surface z and project texture onto it.
+      "   float indentAmount = 1.0 / (1.0 - (z * uTextureDistortAmount));\n"
+      "   vec2 distortedCoord = centredCoord * indentAmount;\n"
+      // Convert the rect coordinates in -1 to 1 range back to the original coordinates
+      "   vec2 texCoord = vec2( ( (distortedCoord.x + 1.0)/(2.0) * (uEffectRegion.z - uEffectRegion.x) + uEffectRegion.x ), ( (distortedCoord.y + 1.0)/(2.0) * (uEffectRegion.w - uEffectRegion.y) + uEffectRegion.y  ) );\n"
+      "   vec4 col = texture2D(sTexture, texCoord);\n"
+      // calc lighting
+      "   float lighting = (dot(uDiffuseLight, norm) + uAmbientLight) * uLightMultiplier;\n"
+      // output col = image * light
+      // use the lighting value for colors only
+      "   gl_FragColor = vec4(col.rgb * uColor.rgb * lighting, col.a * uColor.a);\n"
+
+      "}\n"
+      "else\n"
+      "{\n"
+      "   vec4 col = texture2D(sTexture, vTexCoord);\n"
+      "   float lighting = (dot(uDiffuseLight, vec3(0.0, 0.0, 1.0)) + uAmbientLight) * uLightMultiplier;\n"
+      "   gl_FragColor = vec4(col.rgb * uColor.rgb * lighting, col.a * uColor.a);\n"
+      "} \n"
+      "}\n";
+
+
+  //////////////////////////////////////
+  // Create shader effectCreateSoftButtonEffect
+  //
+  //
+
+  ShaderEffect shader;
+  switch(type)
   {
-    ELLIPTICAL = 0,   /// Button is elliptical
-    RECTANGULAR,      /// Button is rectangular
-    FIXED             /// Button does not indent (move). Useful for matching lighting between areas that do not indent (which can thus use a cheaper shader) and those that do indent.
-  }Type;
-
-  /**
-   * Create an initialized SoftButtonEffect
-   * @param type The type of the soft button, can be either ELLIPTICAL, RECTANGULAR, or FIXED.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static SoftButtonEffect New(Type type);
-
-  /**
-   * Get the name for the lighting indentation amount property (float). Useful for animation.
-   * This property changes the lighting, to make it look like the button is pushed in. User should animate this in conjunction
-   * with texture distortion. Allowable values range from [-1..1], higher values give more change in lighting. Default 0.0 (no lighting change).
-   * See also GetTextureDistortionAmountPropertyName().
-   * @return A std::string containing the property name
-   */
-  const std::string& GetLightingIndentationAmountPropertyName() const;
-
-  /**
-   * Get the name for the texture distortion amount property (float). Useful for animation.
-   * This property changes the distortion, to make it look like the button is pushed in. User should animate this is conjunction
-   * with lighting indentation. Allowable values range from [-1..1) - note 1.0 is NOT allowed - higher values give more distortion. Default 0.0 (no distortion).
-   * See also GetLightingIndentationAmountPropertyName().
-   * @return A std::string containing the property name
-   */
-  const std::string& GetTextureDistortionAmountPropertyName() const;
-
-  /**
-   * Get the name for the ambient lighting amount property (float)
-   * The ambient light is used in the lighting calculation. Care must be taken to not saturate the image by setting this value too high,
-   * or the indentation will not look correct. Default 0.15.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAmbientLightAmountPropertyName() const;
-
-  /**
-   * Get the name for the diffuse light property (Vector3).
-   * The diffuse light is used in the lighting calculation. Default is (0.0, 0.7070168, 0.7070168), i.e. a light angled at the surface from in front and above. Note that
-   * you need to Normalize() the Vector3 that you set with this property.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetDiffuseLightPropertyName() const;
-
-  /**
-   * Get the name for the lighting multiplier property (float).
-   * The ambient and diffuse lighting is multiplied by this factor. Since a diffuse light at an angle will cause the whole image to darken, even outside the soft button
-   * indentation, this property can be used to scale the image back up closer to the pixel values of the original diffuse texture. Care must be taken to not saturate the image,
-   * or the indentation will not look correct. Default 1.2.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetLightingMultiplierPropertyName() const;
-
-  /**
-   * Get the name for the inside shape size scale property (float).
-   * The SoftButtonEffect consists of two shapes, one inside the other. The outside shape fits exactly to the actor, touching its edges but completely contained. The inside
-   * shape size is given by a multiplier of the outside shape size. For example a value of 0.5 means that the inside shape is half the size of the outside one. Allowable
-   * values are in the range (0.0 - 1.0), note that 0.0 and 1.0 themselves are not allowed. Default 0.75.
-   * See also GetOutsideShapeDepthPropertyName().
-   * @return A std::string containing the property name
-   */
-  const std::string& GetInsideShapeSizeScalePropertyName() const;
-
-  /**
-   * Get the name for the outside shape depth property (float).
-   * The SoftButtonEffect consists of two shapes, one inside the other. The depth of the indentation at the transition between the inside and outside shapes is controlled by
-   * this property. The values lies in the range [0.0 - 1.0]. A value of 0.0 means the outside shape has no depth (and is thus invisible), value of 1.0 means the outside shape
-   * has maximum depth (and the inside shape is thus invisible). Default 0.05.
-   * See also GetInsideShapeSizeScalePropertyName().
-   * @return A std::string containing the property name
-   */
-  const std::string& GetOutsideShapeDepthPropertyName() const;
-
-  /**
-   * Get the name for the effect pixel area property (Vector4).
-   * The soft button effect is applied within the supplied rect region of the texture. Default values for this is (0.0, 0.0, 1.0, 1.0) which is the entire image with
-   * 0,0 being the top left and 1.0, 1.0 being the bottom right. If the image texture is split between multiple ImageActors then the developer should specify the
-   * pixel area of the texture the effect should be applied with. Example, If the Image is split among two ImageActors side by side, with the left one using left half of the
-   * texture and right one using the right half of the texture then the pixel area value for the left ImageActor will be (0.0, 0.0, 0.5, 1.0) and the pixel area for the right
-   * will be (0.5, 0.0, 1.0, 1.0).
-   * @return A std::string containing the property name
-   */
-  const std::string& GetEffectPixelAreaPropertyName() const;
-
-  /**
-   * Get the name for the rectangle size scale property (float). Only applicable having created this SoftButtonEffect via a call to New() with RECTANGULAR as the type.
-   * This property can be used to set the mix between proportion of rectangle and proportion of ellipse - the result is a rectangle with rounded corners. If the value is 0.0,
-   * the shape is an ellipse. If the value is close to 1.0, the shape is close to a rectangle. The value lies in the range [0.0 - 1.0). Note that a value of 1.0 is NOT allowed.
-   * Default 0.5.
-   * @return A std::string containing the property name
-   */
-  const std::string& GetRectangleSizeScalePropertyName() const;
-
-
-private:
-  // Not intended for application developers
-  DALI_INTERNAL SoftButtonEffect(ShaderEffect handle);
-};
+    case SOFT_BUTTON_RECTANGULAR:
+      shader = ShaderEffect::New( vertexSource, fragmentSourceRectangular, GeometryType( GEOMETRY_TYPE_IMAGE ), ShaderEffect::GeometryHints( ShaderEffect::HINT_NONE ));
+      break;
+
+    case SOFT_BUTTON_ELLIPTICAL:
+      shader = ShaderEffect::New( vertexSource, fragmentSourceElliptical, GeometryType( GEOMETRY_TYPE_IMAGE ), ShaderEffect::GeometryHints( ShaderEffect::HINT_NONE ));
+      break;
+
+    case SOFT_BUTTON_FIXED:
+    default:
+      shader = ShaderEffect::New( vertexSource, fragmentSourceFixed, GeometryType( GEOMETRY_TYPE_IMAGE ), ShaderEffect::GeometryHints( ShaderEffect::HINT_NONE ));
+      break;
+  }
+
+  //////////////////////////////////////
+  // Register uniform properties
+  //
+  //
+  static const float SOFT_BUTTON_LIGHTING_INDENTATION_AMOUNT_DEFAULT = 0.0f;
+  static const float SOFT_BUTTON_TEXTURE_DISTORTION_AMOUNT_DEFAULT = 0.0f;
+  static const float SOFT_BUTTON_AMBIENT_LIGHT_AMOUNT_DEFAULT = 0.15f;
+  static const Vector3 SOFT_BUTTON_DIFFUSE_LIGHT_DEFAULT = Vector3(0.0f, 0.7070168f, 0.7071068f);
+  static const float SOFT_BUTTON_LIGHTING_MULTIPLIER_DEFAULT = 1.2f;
+  static const float SOFT_BUTTON_INSIDE_SHAPE_SIZE_SCALE_DEFAULT = 0.75f;
+  static const float SOFT_BUTTON_OUTSIDE_SHAPE_DEPTH_DEFAULT = Math::PI * 0.05f;
+  static const Vector4 SOFT_BUTTON_EFFECT_PIXEL_AREA_DEFAULT = Vector4(0.0f, 0.0f, 1.0f, 1.0f);
+  static const float SOFT_BUTTON_RECTANGLE_SIZE_SCALE_DEFAULT = 0.5f;
+
+  // factors that scale the look, defaults
+  shader.SetUniform("uAmbientLight", SOFT_BUTTON_AMBIENT_LIGHT_AMOUNT_DEFAULT);
+  shader.SetUniform("uDiffuseLight", SOFT_BUTTON_DIFFUSE_LIGHT_DEFAULT);
+  shader.SetUniform("uLightMultiplier", SOFT_BUTTON_LIGHTING_MULTIPLIER_DEFAULT);
+  if(SOFT_BUTTON_FIXED != type)
+  {
+    shader.SetUniform("uLightingIndentationAmount", SOFT_BUTTON_LIGHTING_INDENTATION_AMOUNT_DEFAULT);
+    shader.SetUniform("uTextureDistortAmount", SOFT_BUTTON_TEXTURE_DISTORTION_AMOUNT_DEFAULT);
+    shader.SetUniform("uInsideCircleSizeScale", SOFT_BUTTON_INSIDE_SHAPE_SIZE_SCALE_DEFAULT);
+    shader.SetUniform("uRecipInsideCircleSizeScale", 1.0f / SOFT_BUTTON_INSIDE_SHAPE_SIZE_SCALE_DEFAULT);
+    shader.SetUniform("uOutsideCircleDepth", SOFT_BUTTON_OUTSIDE_SHAPE_DEPTH_DEFAULT);
+    shader.SetUniform("uEffectRegion", SOFT_BUTTON_EFFECT_PIXEL_AREA_DEFAULT);
+    if(SOFT_BUTTON_RECTANGULAR == type)
+    {
+      shader.SetUniform("uRectangleSizeScale", SOFT_BUTTON_RECTANGLE_SIZE_SCALE_DEFAULT);
+    }
+
+    // precalc 1.0 / uInsideCircleSizeScale on CPU to save shader insns, using constraint to tie to the normal property
+    Dali::Property::Index insideCircleSizeScalePropertyIndex = shader.GetPropertyIndex("uInsideCircleSizeScale");
+    Dali::Property::Index recipInsideCircleSizeScalePropertyIndex = shader.GetPropertyIndex("uRecipInsideCircleSizeScale");
+    Constraint constraint = Constraint::New<float>( shader, recipInsideCircleSizeScalePropertyIndex, InverseConstraint );
+    constraint.AddSource( LocalSource(insideCircleSizeScalePropertyIndex) );
+    constraint.Apply();
+  }
+
+  return shader;
+}
 
 }
 
diff --git a/dali-toolkit/public-api/shader-effects/spot-effect.cpp b/dali-toolkit/public-api/shader-effects/spot-effect.cpp
deleted file mode 100644 (file)
index 09408fb..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/spot-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const float DEFAULT_RADIUS = 0.0f;
-const std::string CENTER_PROPERTY_NAME( "uCenter" );
-const std::string RADIUS_PROPERTY_NAME( "uRadius" );
-
-} // namespace
-
-SpotEffect::SpotEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-SpotEffect::SpotEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-SpotEffect::~SpotEffect()
-{
-}
-
-SpotEffect SpotEffect::New()
-{
-  // append the default version
-  std::string vertexShader(
-      "uniform mediump   vec2  uCenter;\n"
-      "uniform mediump   float  uRadius;\n"
-      "varying mediump   float  vRange;\n"
-      "\n"
-      "void main()\n"
-      "{\n"
-      "  mediump vec4 world = vec4(aPosition, 1.0);\n"
-      "  \n"
-      "  mediump vec2 d = vec2(world.xy - uCenter);\n"
-      "  mediump float dist = length(d);\n"
-      "  \n"
-      "  mediump float range = (uRadius - dist) / (uRadius);\n"
-      "  vRange = max(0.1, range);\n"
-      "  \n"
-      "  gl_Position = uMvpMatrix * world;\n"
-      "  vTexCoord = aTexCoord;\n"
-      "}");
-
-  std::string fragmentShader(
-      "varying mediump   float  vRange;\n"
-      "\n"
-      "void main()\n"
-      "{\n"
-      "  gl_FragColor = texture2D(sTexture, vTexCoord) * vec4(vRange, vRange, vRange, 1.0) * uColor;\n"
-      "}" );
-
-  // Create the implementation, temporarily owned on stack
-  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(vertexShader, fragmentShader,
-                                                             Dali::GeometryType( GEOMETRY_TYPE_IMAGE ),
-                                                             ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID ));
-
-  /* Pass ownership to SpotEffect through overloaded constructor, So that it now has access to the
-     Dali::ShaderEffect implementation */
-  Dali::Toolkit::SpotEffect handle( shaderEffect );
-
-  handle.SetUniform( CENTER_PROPERTY_NAME, Vector2(0.0f, 0.0f) );
-  handle.SetUniform( RADIUS_PROPERTY_NAME, DEFAULT_RADIUS );
-
-  return handle;
-
-}
-
-void SpotEffect::SetCenter(const Vector2& center)
-{
-  SetUniform( CENTER_PROPERTY_NAME, center );
-}
-
-void SpotEffect::SetRadius(float radius)
-{
-  SetUniform( RADIUS_PROPERTY_NAME, radius );
-}
-
-const std::string& SpotEffect::GetCenterPropertyName() const
-{
-  return CENTER_PROPERTY_NAME;
-}
-
-const std::string& SpotEffect::GetRadiusPropertyName() const
-{
-  return RADIUS_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index 0788309..c41e0f4 100644 (file)
@@ -28,58 +28,56 @@ namespace Toolkit
 {
 
 /**
- * SpotEffect2D is a custom shader effect to achieve spot effects on Image actors
+ * @brief Creates a new SpotEffect
+ *
+ * SpotEffect is a custom shader effect to achieve spot effects on Image actors
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uCenter" - The center of the spot. Default value (0.0,0.0)
+ *  "uRadius" - The radius of the spot. Default value 0.0
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API SpotEffect : public ShaderEffect
+inline ShaderEffect CreateSpotEffect()
 {
-public:
-
-  /**
-   * Create an uninitialized SpotEffect; this can be initialized with SpotEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  SpotEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~SpotEffect();
-
-  /**
-   * Create an initialized SpotEffect.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static SpotEffect New();
-
-  /**
-   * Set the center of the spot.
-   * @param[in] center The center in Vector2.
-   */
-  void SetCenter(const Vector2& center);
-
-  /**
-   * Set the radius of the spot.
-   * @param[in] radius The radius in float.
-   */
-  void SetRadius(float radius);
-
-  /**
-   * Get the name for the center property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetCenterPropertyName() const;
-
-  /**
-   * Get the name for the radius property
-   * @return A std::string containing the property name
-   */
-  const std::string& GetRadiusPropertyName() const;
-
-private:
-  DALI_INTERNAL SpotEffect(ShaderEffect handle);
-};
+  // append the default version
+  std::string vertexShader(
+      "uniform mediump   vec2  uCenter;\n"
+      "uniform mediump   float  uRadius;\n"
+      "varying mediump   float  vRange;\n"
+      "\n"
+      "void main()\n"
+      "{\n"
+      "  mediump vec4 world = vec4(aPosition, 1.0);\n"
+      "  \n"
+      "  mediump vec2 d = vec2(world.xy - uCenter);\n"
+      "  mediump float dist = length(d);\n"
+      "  \n"
+      "  mediump float range = (uRadius - dist) / (uRadius);\n"
+      "  vRange = max(0.1, range);\n"
+      "  \n"
+      "  gl_Position = uMvpMatrix * world;\n"
+      "  vTexCoord = aTexCoord;\n"
+      "}");
+
+  std::string fragmentShader(
+      "varying mediump   float  vRange;\n"
+      "\n"
+      "void main()\n"
+      "{\n"
+      "  gl_FragColor = texture2D(sTexture, vTexCoord) * vec4(vRange, vRange, vRange, 1.0) * uColor;\n"
+      "}" );
+
+  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
+      vertexShader, fragmentShader,
+      Dali::GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID ));
+
+  shaderEffect.SetUniform( "uCenter", Vector2(0.0f, 0.0f) );
+  shaderEffect.SetUniform( "uRadius", 0.0f );
+
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/square-dissolve-effect.cpp b/dali-toolkit/public-api/shader-effects/square-dissolve-effect.cpp
deleted file mode 100644 (file)
index 5a5b0a3..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/square-dissolve-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string STEP_PROPERTY_NAME( "uStep" );
-const std::string ROWS_PROPERTY_NAME( "uRows" );
-const std::string COLUMNS_PROPERTY_NAME( "uColumns" );
-const std::string TEXSIZE_PROPERTY_NAME( "texSize" );
-
-} // namespace
-
-SquareDissolveEffect::SquareDissolveEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-SquareDissolveEffect::SquareDissolveEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-SquareDissolveEffect::~SquareDissolveEffect()
-{
-}
-
-SquareDissolveEffect SquareDissolveEffect::New()
-{
-  // variable "uStep" range scope : [0.0, 1.0]
-  std::string fragmentShader(
-      "uniform  mediump vec2   texSize;\n"
-      "uniform  mediump float  uStep;\n"
-      "uniform  mediump float  uRows;\n"
-      "uniform  mediump float  uColumns;\n"
-      "void main()\n"
-      "{\n"
-      "  mediump vec2 mosaicSize = vec2(1.0 / uRows, 1.0 / uColumns);                               \n"
-      "  mediump vec2 intXY = vec2(vTexCoord.x * texSize.x, vTexCoord.y * texSize.y);               \n"
-      "  mediump vec2 XYMosaic = vec2(floor(intXY.x / mosaicSize.x) * mosaicSize.x, floor(intXY.y / mosaicSize.y) * mosaicSize.y); \n"
-      "  mediump vec2 UVMosaic = vec2(XYMosaic.x /texSize.x, XYMosaic.y / texSize.y);               \n"
-      "  mediump vec4 noiseVec = texture2D(sEffect, UVMosaic);                                      \n"
-      "  mediump float intensity = (noiseVec[0] + noiseVec[1] + noiseVec[2] + noiseVec[3]) / 4.0;   \n"
-      "  if(intensity < uStep)                                                              \n"
-      "    gl_FragColor = vec4(0.1, 0.1, 0.1, 1.0);                                         \n"
-      "  else                                                                               \n"
-      "    gl_FragColor = texture2D(sTexture, vTexCoord);                                   \n"
-      "  gl_FragColor *= uColor;                                                            \n"
-      "}                                                                                    \n" );
-
-  // Create the implementation, temporarily owned on stack
-  Dali::ShaderEffect shaderEffectCustom =  Dali::ShaderEffect::New(
-      "",
-      fragmentShader,
-      GeometryType( GEOMETRY_TYPE_IMAGE ),
-      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID ));
-
-  /* Pass ownership to SquareDissolveEffect through overloaded constructor, So that it now has access to the
-     Dali::ShaderEffect implementation */
-  Dali::Toolkit::SquareDissolveEffect handle( shaderEffectCustom );
-
-  handle.SetUniform( TEXSIZE_PROPERTY_NAME, Vector2(1.0f, 1.0f) );//COORDINATE_TYPE_DEFAULT
-  handle.SetUniform( STEP_PROPERTY_NAME, 0.1f);
-  handle.SetUniform( ROWS_PROPERTY_NAME, 25.0f);
-  handle.SetUniform( COLUMNS_PROPERTY_NAME, 25.0f);
-  return handle;
-}
-
-void SquareDissolveEffect::SetStep( float step )
-{
-  SetUniform( STEP_PROPERTY_NAME, step );
-}
-
-void SquareDissolveEffect::SetRows(float rows)
-{
-  SetUniform(ROWS_PROPERTY_NAME, rows);
-}
-
-void SquareDissolveEffect::SetColumns(float columns)
-{
-  SetUniform(COLUMNS_PROPERTY_NAME, columns);
-}
-
-void SquareDissolveEffect::SetTextureSize(const Vector2& textureSize)
-{
-  SetUniform(TEXSIZE_PROPERTY_NAME, textureSize);
-}
-
-const std::string& SquareDissolveEffect::GetStepPropertyName() const
-{
-  return STEP_PROPERTY_NAME;
-}
-
-const std::string& SquareDissolveEffect::GetRowsPropertyName() const
-{
-  return ROWS_PROPERTY_NAME;
-}
-
-const std::string& SquareDissolveEffect::GetColumnsPropertyName() const
-{
-  return COLUMNS_PROPERTY_NAME;
-}
-
-const std::string& SquareDissolveEffect::GetTexSizePropertyName() const
-{
-  return TEXSIZE_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index 31ee848..6760f4c 100644 (file)
@@ -28,86 +28,54 @@ namespace Toolkit
 {
 
 /**
+ * @brief Creates a new SquareDissolveEffect
+ *
  * SquareDissolveEffect is a custom shader effect to achieve square effects in Image actors
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uStep"       - The step of the square effect
+ *  "uRows"       - The rows of the square dissolve effect
+ *  "uColumns"    - The columns of the square dissolve effect
+ *  "uTextureSize"- The texture size of the square dissolve
+ *
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API SquareDissolveEffect : public ShaderEffect
+inline ShaderEffect CreateSquareDissolveEffect()
 {
-public:
-
-  /**
-   * Create an uninitialized SquareDissolveEffect; this can be initialized with BendyEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  SquareDissolveEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~SquareDissolveEffect();
-
-  /**
-   * Create an initialized SquareDissolveEffect.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static SquareDissolveEffect New();
-
-  /**
-   * Set the step of the square effect.
-   * @param [in] step the new step.
-   */
-  void SetStep(float step);
-
-  /**
-   * Set the rows of the square dissolve effect.
-   * @param [in] rows the new rows value.
-   */
-  void SetRows(float rows);
-
-  /**
-   * Set the columns of the square dissolve effect.
-   * @param [in] columns the new columns value.
-   */
-  void SetColumns(float columns);
-
-  /**
-   * Set the texture size of the square dissolve.
-   * @param[in] textureSize The texture size in Vector2.
-   */
-  void SetTextureSize(const Vector2& textureSize);
-
-  /**
-   * Get the name for the step property
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetStepPropertyName() const;
-
-  /**
-   * Get the name for the rows property
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetRowsPropertyName() const;
-
-  /**
-   * Get the name for the columns property
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetColumnsPropertyName() const;
-
-  /**
-   * Get the name for the texSize property
-   * which can be used in Animation API's
-   * @return A std::string containing the property name
-   */
-  const std::string& GetTexSizePropertyName() const;
-
-private: // Not intended for application developers
-  DALI_INTERNAL SquareDissolveEffect(ShaderEffect handle);
-};
+  // variable "uStep" range scope : [0.0, 1.0]
+  std::string fragmentShader(
+      "uniform  mediump vec2   uTextureSize;\n"
+      "uniform  mediump float  uStep;\n"
+      "uniform  mediump float  uRows;\n"
+      "uniform  mediump float  uColumns;\n"
+      "void main()\n"
+      "{\n"
+      "  mediump vec2 mosaicSize = vec2(1.0 / uRows, 1.0 / uColumns);                               \n"
+      "  mediump vec2 intXY = vec2(vTexCoord.x * uTextureSize.x, vTexCoord.y * uTextureSize.y);               \n"
+      "  mediump vec2 XYMosaic = vec2(floor(intXY.x / mosaicSize.x) * mosaicSize.x, floor(intXY.y / mosaicSize.y) * mosaicSize.y); \n"
+      "  mediump vec2 UVMosaic = vec2(XYMosaic.x /uTextureSize.x, XYMosaic.y / uTextureSize.y);               \n"
+      "  mediump vec4 noiseVec = texture2D(sEffect, UVMosaic);                                      \n"
+      "  mediump float intensity = (noiseVec[0] + noiseVec[1] + noiseVec[2] + noiseVec[3]) / 4.0;   \n"
+      "  if(intensity < uStep)                                                              \n"
+      "    gl_FragColor = vec4(0.1, 0.1, 0.1, 1.0);                                         \n"
+      "  else                                                                               \n"
+      "    gl_FragColor = texture2D(sTexture, vTexCoord);                                   \n"
+      "  gl_FragColor *= uColor;                                                            \n"
+      "}                                                                                    \n" );
+
+  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
+      "",
+      fragmentShader,
+      GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID ));
+
+  shaderEffect.SetUniform( "uTextureSize", Vector2(1.0f, 1.0f) );//COORDINATE_TYPE_DEFAULT
+  shaderEffect.SetUniform( "uStep", 0.1f);
+  shaderEffect.SetUniform( "uRows", 25.0f);
+  shaderEffect.SetUniform( "uColumns", 25.0f);
+
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/swirl-effect.cpp b/dali-toolkit/public-api/shader-effects/swirl-effect.cpp
deleted file mode 100644 (file)
index 66e330b..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit/public-api/shader-effects/swirl-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace
-{
-
-const std::string ANGLE_PROPERTY_NAME( "uAngle" );
-const std::string CENTER_PROPERTY_NAME( "uCenter" );
-const std::string RADIUS_PROPERTY_NAME( "uRadius" );
-
-} // namespace
-
-SwirlEffect::SwirlEffect()
-{
-}
-
-//Call the Parent copy constructor to add reference to the implementation for this object
-SwirlEffect::SwirlEffect(ShaderEffect handle)
-:ShaderEffect(handle)
-{
-}
-
-SwirlEffect::~SwirlEffect()
-{
-}
-
-
-SwirlEffect SwirlEffect::New(bool warp)
-{
-  // append the default version
-  std::string fragmentShader(
-      "uniform mediump vec2  uTextureSize;\n"
-      "uniform highp float uRadius;\n"
-      "uniform highp float uAngle;\n"
-      "uniform mediump vec2  uCenter;\n"
-      "void main()\n"
-      "{\n"
-      "  highp vec2 textureCenter = (sTextureRect.xy + sTextureRect.zw) * 0.5;\n"
-      "  textureCenter = vTexCoord.st - textureCenter;\n"
-      "  highp float distance = length(textureCenter);\n"
-      "  if (distance >= uRadius)\n"
-      "     discard;\n"
-      "  highp float percent = (uRadius - distance) / uRadius;\n"
-      "  highp float theta = percent * percent * uAngle * 4.0;\n"
-      "  highp float sinTheta = sin(theta);\n"
-      "  highp float cosTheta = cos(theta);\n" );
-      // if warp, loose the sign from sin
-  if( warp )
-  {
-    fragmentShader.append(
-      "  textureCenter = vec2( dot( textureCenter, vec2(cosTheta, sinTheta) ), "
-      "                        dot( textureCenter, vec2(sinTheta, cosTheta) ) );\n" );
-  }
-  else
-  {
-    fragmentShader.append(
-      "  textureCenter = vec2( dot( textureCenter, vec2(cosTheta, -sinTheta) ), "
-      "                        dot( textureCenter, vec2(sinTheta, cosTheta) ) );\n" );
-  }
-  fragmentShader.append(
-    "  textureCenter += uCenter;\n"
-    "  gl_FragColor = texture2D( sTexture, textureCenter ) * uColor;\n"
-    "}" );
-
-  // Create the implementation, temporarily owned on stack,
-  Dali::ShaderEffect shaderEffectCustom =  Dali::ShaderEffect::New(
-      "",
-      fragmentShader,
-      Dali::GeometryType( GEOMETRY_TYPE_IMAGE ),
-      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID ));
-
-  /* Pass ownership to SwirlEffect through overloaded constructor, So that it now has access to the
-     Dali::ShaderEffect implementation */
-  Dali::Toolkit::SwirlEffect handle( shaderEffectCustom );
-
-  handle.SetUniform( ANGLE_PROPERTY_NAME, 0.0f );
-  handle.SetUniform( CENTER_PROPERTY_NAME, Vector2(0.5f, 0.5f) );
-  handle.SetUniform( RADIUS_PROPERTY_NAME, 1.0f );
-
-  return handle;
-}
-
-void SwirlEffect::SetAngle(float angle)
-{
-  SetUniform( ANGLE_PROPERTY_NAME, angle );
-}
-
-void SwirlEffect::SetCenter(const Vector2& center)
-{
-  SetUniform( CENTER_PROPERTY_NAME, center );
-}
-
-void SwirlEffect::SetRadius(float radius)
-{
-  SetUniform( RADIUS_PROPERTY_NAME, radius );
-}
-
-const std::string& SwirlEffect::GetAnglePropertyName() const
-{
-  return ANGLE_PROPERTY_NAME;
-}
-
-const std::string& SwirlEffect::GetCenterPropertyName() const
-{
-  return CENTER_PROPERTY_NAME;
-}
-
-const std::string& SwirlEffect::GetRadiusPropertyName() const
-{
-  return RADIUS_PROPERTY_NAME;
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
index 6327fdc..af90eea 100644 (file)
@@ -28,79 +28,67 @@ namespace Toolkit
 {
 
 /**
- * @brief SwirlEffect is a custom shader effect to achieve swirl effects in Image actors.
+ * @brief Creates a new SwirlEffect
+ *
+ * SwirlEffect is a custom shader effect to achieve swirl effects in Image actors.
+ *
+ * Animatable/Constrainable uniforms:
+ *  "uAngle"  - The angle of the swirl
+ *  "uCenter" - The center of the swirl
+ *  "uRadius" - The radius of the swirl
+ *
+ * @param[in] warp True if the effect should warp
+ * @return A handle to a newly allocated ShaderEffect
  */
-class DALI_IMPORT_API SwirlEffect : public ShaderEffect
+inline ShaderEffect CreateSwirlEffect( bool warp )
 {
-public:
-
-  /**
-   * @brief Create an uninitialized SwirlEffect; this can be initialized with SwirlEffect::New().
-   *
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  SwirlEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~SwirlEffect();
-
-  /**
-   * @brief Create an initialized SwirlEffect.
-   *
-   * @param[in] warp True if the effect should warp.
-   * @return A handle to a newly allocated Dali resource.
-   */
-  static SwirlEffect New(bool warp);
-
-  /**
-   * @brief Set the angle of the swirl.
-   *
-   * @param[in] angle The angle in float.
-   */
-  void SetAngle(float angle);
-
-  /**
-   * @brief Set the center of the swirl.
-   *
-   * @param[in] center The center in Vector2.
-   */
-  void SetCenter(const Vector2& center);
-
-  /**
-   * @brief Set the radius of the swirl.
-   *
-   * @param[in] radius The radius in float.
-   */
-  void SetRadius(float radius);
-
-  /**
-   * @brief Get the name for the angle property.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetAnglePropertyName() const;
-
-  /**
-   * @brief Get the name for the center property.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetCenterPropertyName() const;
-
-  /**
-   * @brief Get the name for the radius property.
-   *
-   * @return A std::string containing the property name
-   */
-  const std::string& GetRadiusPropertyName() const;
-
-private: // Not intended for application developers
-  DALI_INTERNAL SwirlEffect(ShaderEffect handle);
-};
+  // append the default version
+  std::string fragmentShader(
+      "uniform mediump vec2  uTextureSize;\n"
+      "uniform highp float uRadius;\n"
+      "uniform highp float uAngle;\n"
+      "uniform mediump vec2  uCenter;\n"
+      "void main()\n"
+      "{\n"
+      "  highp vec2 textureCenter = (sTextureRect.xy + sTextureRect.zw) * 0.5;\n"
+      "  textureCenter = vTexCoord.st - textureCenter;\n"
+      "  highp float distance = length(textureCenter);\n"
+      "  if (distance >= uRadius)\n"
+      "     discard;\n"
+      "  highp float percent = (uRadius - distance) / uRadius;\n"
+      "  highp float theta = percent * percent * uAngle * 4.0;\n"
+      "  highp float sinTheta = sin(theta);\n"
+      "  highp float cosTheta = cos(theta);\n" );
+  // if warp, loose the sign from sin
+  if( warp )
+  {
+    fragmentShader.append(
+        "  textureCenter = vec2( dot( textureCenter, vec2(cosTheta, sinTheta) ), "
+        "                        dot( textureCenter, vec2(sinTheta, cosTheta) ) );\n" );
+  }
+  else
+  {
+    fragmentShader.append(
+        "  textureCenter = vec2( dot( textureCenter, vec2(cosTheta, -sinTheta) ), "
+        "                        dot( textureCenter, vec2(sinTheta, cosTheta) ) );\n" );
+  }
+  fragmentShader.append(
+      "  textureCenter += uCenter;\n"
+      "  gl_FragColor = texture2D( sTexture, textureCenter ) * uColor;\n"
+      "}" );
+
+  Dali::ShaderEffect shaderEffect =  Dali::ShaderEffect::New(
+      "",
+      fragmentShader,
+      Dali::GeometryType( GEOMETRY_TYPE_IMAGE ),
+      ShaderEffect::GeometryHints( ShaderEffect::HINT_BLENDING | ShaderEffect::HINT_GRID ));
+
+  shaderEffect.SetUniform( "uAngle", 0.0f );
+  shaderEffect.SetUniform( "uCenter", Vector2(0.5f, 0.5f) );
+  shaderEffect.SetUniform( "uRadius", 1.0f );
+
+  return shaderEffect;
+}
 
 } // namespace Toolkit
 
diff --git a/dali-toolkit/public-api/shader-effects/water-effect.cpp b/dali-toolkit/public-api/shader-effects/water-effect.cpp
deleted file mode 100644 (file)
index caf29ca..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include <dali-toolkit/public-api/shader-effects/water-effect.h>
-
-// INTERNAL INCLUDES
-#include <dali-toolkit/internal/shader-effects/water-effect-impl.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-WaterEffect::WaterEffect()
-{
-}
-
-// Call the Parent copy constructor to add reference to the implementation for this object
-WaterEffect::WaterEffect( ShaderEffect handle, Internal::WaterEffect* shaderExtension )
-: ShaderEffect( handle )
-{
-  AttachExtension( shaderExtension );
-}
-
-WaterEffect::~WaterEffect()
-{
-}
-
-WaterEffect WaterEffect::New( unsigned int numberOfWaves )
-{
-  return Internal::WaterEffect::CreateShaderEffect( numberOfWaves );
-}
-
-unsigned int WaterEffect::GetNumberOfWaves() const
-{
-  return GetImpl(*this).GetNumberOfWaves();
-}
-
-void WaterEffect::SetAmplitude( unsigned int index, float amplitude )
-{
-  GetImpl(*this).SetAmplitude( index, amplitude );
-}
-
-void WaterEffect::SetCenter( unsigned int index, const Vector2& center )
-{
-  GetImpl(*this).SetCenter( index, center );
-}
-
-void WaterEffect::SetPropagation( unsigned int index, float radius )
-{
-  GetImpl(*this).SetPropagation( index, radius );
-}
-
-float WaterEffect::GetAmplitude( unsigned int index ) const
-{
-  return GetImpl(*this).GetAmplitude( index );
-}
-
-Vector2 WaterEffect::GetCenter( unsigned int index ) const
-{
-  return GetImpl(*this).GetCenter( index );
-}
-
-float WaterEffect::GetPropagation( unsigned int index ) const
-{
-  return GetImpl(*this).GetPropagation( index );
-}
-
-std::string WaterEffect::GetAmplitudePropertyName( unsigned int index ) const
-{
-  return GetImpl(*this).GetAmplitudePropertyName( index );
-}
-
-std::string WaterEffect::GetCenterPropertyName( unsigned int index ) const
-{
-  return GetImpl(*this).GetCenterPropertyName( index );
-}
-
-std::string WaterEffect::GetPropagationPropertyName( unsigned int index ) const
-{
-  return GetImpl(*this).GetPropagationPropertyName( index );
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
diff --git a/dali-toolkit/public-api/shader-effects/water-effect.h b/dali-toolkit/public-api/shader-effects/water-effect.h
deleted file mode 100644 (file)
index a6be02c..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-#ifndef __DALI_TOOLKIT_WATER_EFFECT_H__
-#define __DALI_TOOLKIT_WATER_EFFECT_H__
-
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/shader-effects/shader-effect.h>
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace Internal DALI_INTERNAL
-{
-
-/**
- * WaterEffect implementation class
- */
-class WaterEffect;
-
-} // namespace Internal
-
-/**
- * WaterEffect is a custom shader effect to achieve water like effects on Image actors
- *
- * Usage example:
- *
- *   WaterEffect waterEffect = WaterEffect::New( numberOfDrops );
- *
- *   actor.SetShaderEffect( waterEffect );
- *
- *   // Set initial values
- *   waterEffect.SetCenter( 1, centerPosition );
- *   waterEffect.SetPropagation( 1, INITIAL_RADIUS );
- *
- *   // Animate the wave propagation
- *   std::string propertyName = waterEffect.GetPropagationPropertyName( 1 );
- *   animation.AnimateTo( Property(waterEffect, propertyName), FINAL_RADIUS );
- */
-class DALI_IMPORT_API WaterEffect : public ShaderEffect
-{
-public:
-
-  /**
-   * Create an uninitialized WaterEffect; this can be initialized with WaterEffect::New()
-   * Calling member functions with an uninitialized Dali::Object is not allowed.
-   */
-  WaterEffect();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~WaterEffect();
-
-  /**
-   * Create an initialized WaterEffect.
-   * @param [in] numberOfWaves The number of waves.
-   * @return A handle to a newly allocated Dali resource
-   */
-  static WaterEffect New( unsigned int numberOfWaves );
-
-  /**
-   * Get the number of waves the shader supports.
-   * @return The number of waves in the shader.
-   */
-  unsigned int GetNumberOfWaves() const;
-
-  /**
-   * Set the amplitude of a wave.
-   * @param [in] index The index of the wave to change
-   * @param [in] amplitude The new amplitude of the wave
-   * @pre index has to be between 0 and GetNumberOfWaves() - 1
-   */
-  void SetAmplitude( unsigned int index, float amplitude );
-
-  /**
-   * Set the center point of a wave in texture coordinates.
-   * @param [in] index The index of the wave to change
-   * @param [in] center The center point of the wave
-   * @pre index has to be between 0 and GetNumberOfWaves() - 1
-   */
-  void SetCenter( unsigned int index, const Vector2& center );
-
-  /**
-   * Set the propagation radius of a wave.
-   * @param [in] index The index of the wave to change
-   * @param [in] radius The propagation radius
-   * @pre index has to be between 0 and GetNumberOfWaves() - 1
-   */
-  void SetPropagation( unsigned int index, float radius );
-
-  /**
-   * Get the amplitude of a wave.
-   * @param [in] index The index of the wave
-   * @return The new amplitude of the wave
-   * @pre index has to be between 0 and GetNumberOfWaves() - 1
-   */
-  float GetAmplitude( unsigned int index ) const;
-
-  /**
-   * Get the center point of a wave in texture coordinates.
-   * @param [in] index The index of the wave
-   * @return The center point of the wave
-   * @pre index has to be between 0 and GetNumberOfWaves() - 1
-   */
-  Vector2 GetCenter( unsigned int index ) const;
-
-  /**
-   * Get the propagation radius of a wave.
-   * @param [in] index The index of the wave
-   * @return The propagation radius
-   * @pre index has to be between 0 and GetNumberOfWaves() - 1
-   */
-  float GetPropagation( unsigned int index ) const;
-
-  /**
-   * Get the name for the amplitude property of a wave.
-   * @param [in] index The index of the wave
-   * @return A std::string containing the property name
-   * @pre index has to be between 0 and GetNumberOfWaves() - 1
-   */
-  std::string GetAmplitudePropertyName( unsigned int index ) const;
-
-  /**
-   * Get the name for the center property of a wave.
-   * @param [in] index The index of the wave
-   * @return A std::string containing the property name
-   * @pre index has to be between 0 and GetNumberOfWaves() - 1
-   */
-  std::string GetCenterPropertyName( unsigned int index ) const;
-
-  /**
-   * Get the name for the propagation property.
-   * @param [in] index The index of the wave
-   * @return A std::string containing the property name
-   * @pre index has to be between 0 and GetNumberOfWaves() - 1
-   */
-  std::string GetPropagationPropertyName( unsigned int index ) const;
-
-public: // Not intended for developer use
-
-  DALI_INTERNAL WaterEffect( ShaderEffect handle, Internal::WaterEffect* shaderExtension );
-};
-
-} // namespace Toolkit
-
-} // namespace Dali
-
-#endif // __DALI_TOOLKIT_WATER_EFFECT_H__
index a3868c8..d811594 100644 (file)
@@ -6,10 +6,18 @@
 The shader effects allow the developer to apply visual deformations on the actors.
 They can affect the geometry, the colors and textures of the actor.
 
-There are some built-in shader effects in Dali Toolkit:
-- \ref Dali::Toolkit::BendyEffect "Bendy", bends the geometry around a point, useful to do a page turn effect,
-- \ref Dali::Toolkit::DissolveEffect "Dissolve", does a dissolve effect on the actor texture,
-- \ref Dali::Toolkit::RippleEffect "Ripple", does a concentric wave effect on the actor texture.
+There are some utility functions in Dali::Toolkit to create some useful shader effects:
+@code
+//Bendy effect bends the geometry around a point, useful to do a page turn effect
+Dali::ShaderEffect bendyEffect = Dali::Toolkit::CreateBendyEffect();
+
+//Dissolve effect does a dissolve effect on the actor texture
+Dali::ShaderEffect dissolveEffect = Dali::Toolkit::CreateDissolveEffect();
+
+//Ripple effect does a concentric wave effect on the actor texture
+Dali::ShaderEffect rippleEffect = Dali::Toolkit::CreateRippleEffect();
+
+@endcode
 
 @image html shader-effect-ripple.png "Ripple Effect"
 
@@ -20,17 +28,15 @@ Here is an example on how to use a shader effect, using the RippleEffect.
 
 First create the shader effect.
 @code
-Dali::RippleEffect effect = Dali::RippleEffect::New();
+Dali::ShaderEffect effect = Dali::Toolkit::CreateRippleEffect();
 @endcode
 
 Then set the values of the uniforms.
 @code
-// Set the radius of the bending
-effect.SetAmplitude( 45.0f );
-// Set the point around which the geometry will bend
-effect.SetCenter( Vector2() );
-// Set the direction of the bending
-effect.SetDirection( Vector2( 1.0f, 0.0f ) );
+// Set the amplitude
+effect.SetUniform("uAmplitude", 45.0f );
+// Set the center
+effect.SetUniform("uCenter", Vector2() );
 @endcode
 
 Finally apply the shader effect to an actor: