Merge branch 'tizen' into devel/new_mesh 84/38784/1
authorFrancisco Santos <f1.santos@samsung.com>
Mon, 27 Apr 2015 13:22:15 +0000 (14:22 +0100)
committerFrancisco Santos <f1.santos@samsung.com>
Tue, 28 Apr 2015 10:40:30 +0000 (11:40 +0100)
Conflicts:
examples/animated-shapes/animated-shapes-example.cpp
examples/bubble-effect/bubble-effect-example.cpp
examples/new-window/new-window-example.cpp
examples/path-animation/path-animation.cpp
examples/radial-menu/radial-menu-example.cpp
examples/radial-menu/radial-sweep-view-impl.cpp
examples/refraction-effect/refraction-effect-example.cpp

Change-Id: I6bb0c29e38e270ce7fc212cbc78845a40881c9a4

1  2 
examples/line-mesh/line-mesh-example.cpp
examples/point-mesh/point-mesh-example.cpp
examples/textured-mesh/textured-mesh-example.cpp

index 07e1f86,0000000..2d2b68a
mode 100644,000000..100644
--- /dev/null
@@@ -1,256 -1,0 +1,256 @@@
-     animation.AnimateBetween( Property( mMeshActor, morphAmountIndex ), keyFrames, AlphaFunctions::Sin );
 +/*
 + * 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
 +
 +// INTERNAL INCLUDES
 +#include "shared/view.h"
 +
 +#include <dali-toolkit/dali-toolkit.h>
 +
 +using namespace Dali;
 +
 +namespace
 +{
 +const char* MATERIAL_SAMPLE( DALI_IMAGE_DIR "gallery-small-48.jpg" );
 +const char* MATERIAL_SAMPLE2( DALI_IMAGE_DIR "gallery-medium-19.jpg" );
 +
 +#define MAKE_SHADER(A)#A
 +
 +const char* VERTEX_SHADER = MAKE_SHADER(
 +attribute mediump vec2    aPosition1;
 +attribute mediump vec2    aPosition2;
 +uniform   mediump mat4    uMvpMatrix;
 +uniform   mediump vec3    uSize;
 +uniform   mediump float   uMorphAmount;
 +
 +void main()
 +{
 +  mediump vec2 morphPosition = mix(aPosition1, aPosition2, uMorphAmount);
 +  mediump vec4 vertexPosition = vec4(morphPosition, 0.0, 1.0);
 +  vertexPosition.xyz *= uSize;
 +  vertexPosition = uMvpMatrix * vertexPosition;
 +  gl_Position = vertexPosition;
 +}
 +);
 +
 +const char* FRAGMENT_SHADER = MAKE_SHADER(
 +uniform lowp  vec4    uColor;
 +uniform sampler2D     sTexture;
 +
 +void main()
 +{
 +  gl_FragColor = uColor;
 +}
 +);
 +
 +Geometry CreateGeometry()
 +{
 +  // Create vertices
 +  struct Vertex { Vector2 position; };
 +  Vertex pentagonVertexData[5] =
 +    {
 +      { Vector2(  0.0f,   1.00f) }, // 0
 +      { Vector2( -0.95f,  0.31f) }, // 1
 +      { Vector2( -0.59f, -0.81f) }, // 2
 +      { Vector2(  0.59f, -0.81f) }, // 3
 +      { Vector2(  0.95f,  0.31f) }, // 4
 +    };
 +
 +  Vertex pentacleVertexData[5] =
 +    {
 +      { Vector2(  0.0f,  -1.00f) }, //
 +      { Vector2(  0.59f,  0.81f) }, //
 +      { Vector2( -0.95f, -0.31f) }, //
 +      { Vector2(  0.95f, -0.31f) }, //
 +      { Vector2( -0.59f,  0.81f) }, //
 +    };
 +
 +  Property::Map pentagonVertexFormat;
 +  pentagonVertexFormat["aPosition1"] = Property::VECTOR2;
 +  PropertyBuffer pentagonVertices = PropertyBuffer::New( PropertyBuffer::STATIC, pentagonVertexFormat, 5 );
 +  pentagonVertices.SetData(pentagonVertexData);
 +
 +  Property::Map pentacleVertexFormat;
 +  pentacleVertexFormat["aPosition2"] = Property::VECTOR2;
 +  PropertyBuffer pentacleVertices = PropertyBuffer::New( PropertyBuffer::STATIC, pentacleVertexFormat, 5 );
 +  pentacleVertices.SetData(pentacleVertexData);
 +
 +  // Create indices
 +  unsigned short indexData[10] = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 0 };
 +  Property::Map indexFormat;
 +  indexFormat["indices"] = Property::UNSIGNED_INTEGER;
 +  PropertyBuffer indices = PropertyBuffer::New( PropertyBuffer::STATIC, indexFormat, 5 );
 +  indices.SetData(indexData);
 +
 +  // Create the geometry object
 +  Geometry pentagonGeometry = Geometry::New();
 +  pentagonGeometry.AddVertexBuffer( pentagonVertices );
 +  pentagonGeometry.AddVertexBuffer( pentacleVertices );
 +  pentagonGeometry.SetIndexBuffer( indices );
 +
 +  pentagonGeometry.SetGeometryType( Geometry::LINES );
 +
 +  return pentagonGeometry;
 +}
 +
 +} // anonymous namespace
 +
 +// This example shows how to morph between 2 meshes with the same number of
 +// vertices.
 +class ExampleController : public ConnectionTracker
 +{
 +public:
 +
 +  /**
 +   * The example controller constructor.
 +   * @param[in] application The application instance
 +   */
 +  ExampleController( Application& application )
 +  : mApplication( application )
 +  {
 +    // Connect to the Application's Init signal
 +    mApplication.InitSignal().Connect( this, &ExampleController::Create );
 +  }
 +
 +  /**
 +   * The example controller destructor
 +   */
 +  ~ExampleController()
 +  {
 +    // Nothing to do here;
 +  }
 +
 +  /**
 +   * Invoked upon creation of application
 +   * @param[in] application The application instance
 +   */
 +  void Create( Application& application )
 +  {
 +    Stage stage = Stage::GetCurrent();
 +    stage.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent);
 +
 +    mStageSize = stage.GetSize();
 +
 +    // The Init signal is received once (only) during the Application lifetime
 +
 +    // Hide the indicator bar
 +    application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE );
 +
 +    mImage = ResourceImage::New( MATERIAL_SAMPLE );
 +    mSampler = Sampler::New(mImage, "sTexture");
 +    mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
 +
 +    mMaterial = Material::New( mShader );
 +    mMaterial.AddSampler( mSampler );
 +
 +    mGeometry = CreateGeometry();
 +
 +    mRenderer = Renderer::New( mGeometry, mMaterial );
 +
 +    mMeshActor = Actor::New();
 +    mMeshActor.AddRenderer( mRenderer );
 +    mMeshActor.SetSize(200, 200);
 +
 +    Property::Index morphAmountIndex = mMeshActor.RegisterProperty( "morph-amount", 0.0f );
 +    mMeshActor.AddUniformMapping( morphAmountIndex, std::string("uMorphAmount") );
 +
 +    mRenderer.SetDepthIndex(0);
 +
 +    mMeshActor.SetParentOrigin( ParentOrigin::CENTER );
 +    mMeshActor.SetAnchorPoint( AnchorPoint::CENTER );
 +    stage.Add( mMeshActor );
 +
 +    mChangeImageTimer = Timer::New( 5000 );
 +    mChangeImageTimer.TickSignal().Connect( this, &ExampleController::OnTimer );
 +    mChangeImageTimer.Start();
 +
 +    Animation  animation = Animation::New(5);
 +    KeyFrames keyFrames = KeyFrames::New();
 +    keyFrames.Add(0.0f, 0.0f);
 +    keyFrames.Add(1.0f, 1.0f);
 +
++    animation.AnimateBetween( Property( mMeshActor, morphAmountIndex ), keyFrames, AlphaFunction(AlphaFunction::SIN) );
 +    animation.SetLooping(true);
 +    animation.Play();
 +
 +    stage.SetBackgroundColor(Vector4(0.0f, 0.2f, 0.2f, 1.0f));;
 +  }
 +
 +  /**
 +   * Invoked whenever the quit button is clicked
 +   * @param[in] button the quit button
 +   */
 +  bool OnQuitButtonClicked( Toolkit::Button button )
 +  {
 +    // quit the application
 +    mApplication.Quit();
 +    return true;
 +  }
 +
 +  bool OnTimer()
 +  {
 +    Image image = ResourceImage::New( MATERIAL_SAMPLE2 );
 +    mSampler.SetImage( image );
 +    return false;
 +  }
 +
 +  void OnKeyEvent(const KeyEvent& event)
 +  {
 +    if(event.state == KeyEvent::Down)
 +    {
 +      if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) )
 +      {
 +        mApplication.Quit();
 +      }
 +    }
 +  }
 +
 +private:
 +
 +  Application&  mApplication;                             ///< Application instance
 +  Vector3 mStageSize;                                     ///< The size of the stage
 +
 +  Image    mImage;
 +  Sampler  mSampler;
 +  Shader   mShader;
 +  Material mMaterial;
 +  Geometry mGeometry;
 +  Renderer mRenderer;
 +  Actor    mMeshActor;
 +  Renderer mRenderer2;
 +  Actor    mMeshActor2;
 +  Timer    mChangeImageTimer;
 +};
 +
 +void RunTest( Application& application )
 +{
 +  ExampleController test( application );
 +
 +  application.MainLoop();
 +}
 +
 +// Entry point for Linux & SLP applications
 +//
 +int main( int argc, char **argv )
 +{
 +  Application application = Application::New( &argc, &argv );
 +
 +  RunTest( application );
 +
 +  return 0;
 +}
index 80a6ad0,0000000..4524784
mode 100644,000000..100644
--- /dev/null
@@@ -1,252 -1,0 +1,252 @@@
-     animation.RotateBy( mMeshActor, Degree(360), Vector3::ZAXIS );
 +/*
 + * 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
 +
 +// INTERNAL INCLUDES
 +#include "shared/view.h"
 +
 +#include <dali-toolkit/dali-toolkit.h>
 +
 +using namespace Dali;
 +
 +namespace
 +{
 +const char* MATERIAL_SAMPLE( DALI_IMAGE_DIR "gallery-small-48.jpg" );
 +const char* MATERIAL_SAMPLE2( DALI_IMAGE_DIR "gallery-medium-19.jpg" );
 +
 +#define MAKE_SHADER(A)#A
 +
 +const char* VERTEX_SHADER = MAKE_SHADER(
 +attribute mediump vec2    aPosition;
 +attribute highp   float   aHue;
 +varying   mediump vec2    vTexCoord;
 +uniform   mediump mat4    uMvpMatrix;
 +uniform   mediump vec3    uSize;
 +uniform   lowp    vec4    uFadeColor;
 +varying   mediump vec3    vVertexColor;
 +varying   mediump float   vHue;
 +
 +vec3 hsv2rgb(vec3 c)
 +{
 +  vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
 +  vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
 +  return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
 +}
 +
 +void main()
 +{
 +  mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);
 +  vertexPosition.xyz *= uSize;
 +  vertexPosition = uMvpMatrix * vertexPosition;
 +  vVertexColor = hsv2rgb( vec3( aHue, 0.6, 0.7 ) );
 +  vHue = aHue;
 +  gl_PointSize = 80.0;
 +  gl_Position = vertexPosition;
 +}
 +);
 +
 +const char* FRAGMENT_SHADER = MAKE_SHADER(
 +varying mediump vec3  vVertexColor;
 +varying mediump float vHue;
 +uniform lowp  vec4    uColor;
 +uniform sampler2D     sTexture1;
 +uniform sampler2D     sTexture2;
 +uniform lowp vec4     uFadeColor;
 +
 +void main()
 +{
 +  mediump vec4 texCol1 = texture2D(sTexture1, gl_PointCoord);
 +  mediump vec4 texCol2 = texture2D(sTexture2, gl_PointCoord);
 +  gl_FragColor = vec4(vVertexColor, 1.0) * ((texCol1*vHue) + (texCol2*(1.0-vHue)));
 +}
 +);
 +
 +Geometry CreateGeometry()
 +{
 +  // Create vertices
 +  struct Vertex { Vector2 position; float hue; };
 +
 +  unsigned int numSides = 20;
 +  Vertex polyhedraVertexData[numSides];
 +  float angle=0;
 +  float sectorAngle = 2.0f * Math::PI / (float) numSides;
 +  for(unsigned int i=0; i<numSides; ++i)
 +  {
 +    polyhedraVertexData[i].position.x = sinf(angle);
 +    polyhedraVertexData[i].position.y = cosf(angle);
 +    polyhedraVertexData[i].hue = angle / ( 2.0f * Math::PI);
 +    angle += sectorAngle;
 +  }
 +
 +  Property::Map polyhedraVertexFormat;
 +  polyhedraVertexFormat["aPosition"] = Property::VECTOR2;
 +  polyhedraVertexFormat["aHue"] = Property::FLOAT;
 +  PropertyBuffer polyhedraVertices = PropertyBuffer::New( PropertyBuffer::STATIC, polyhedraVertexFormat, numSides );
 +  polyhedraVertices.SetData(polyhedraVertexData);
 +
 +  // Create the geometry object
 +  Geometry polyhedraGeometry = Geometry::New();
 +  polyhedraGeometry.AddVertexBuffer( polyhedraVertices );
 +  polyhedraGeometry.SetGeometryType( Geometry::POINTS );
 +
 +  return polyhedraGeometry;
 +}
 +
 +} // anonymous namespace
 +
 +// This example shows how to use a simple mesh
 +//
 +class ExampleController : public ConnectionTracker
 +{
 +public:
 +
 +  /**
 +   * The example controller constructor.
 +   * @param[in] application The application instance
 +   */
 +  ExampleController( Application& application )
 +  : mApplication( application )
 +  {
 +    // Connect to the Application's Init signal
 +    mApplication.InitSignal().Connect( this, &ExampleController::Create );
 +  }
 +
 +  /**
 +   * The example controller destructor
 +   */
 +  ~ExampleController()
 +  {
 +    // Nothing to do here;
 +  }
 +
 +  /**
 +   * Invoked upon creation of application
 +   * @param[in] application The application instance
 +   */
 +  void Create( Application& application )
 +  {
 +    Stage stage = Stage::GetCurrent();
 +    stage.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent);
 +
 +    mStageSize = stage.GetSize();
 +
 +    // The Init signal is received once (only) during the Application lifetime
 +
 +    // Hide the indicator bar
 +    application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE );
 +
 +    mImage = ResourceImage::New( MATERIAL_SAMPLE );
 +    Image image = ResourceImage::New( MATERIAL_SAMPLE2 );
 +    mSampler1 = Sampler::New(mImage, "sTexture1");
 +    mSampler2 = Sampler::New(image, "sTexture2");
 +
 +    mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
 +
 +    mMaterial = Material::New( mShader );
 +    mMaterial.AddSampler( mSampler1 );
 +    mMaterial.AddSampler( mSampler2 );
 +
 +    mGeometry = CreateGeometry();
 +
 +    mRenderer = Renderer::New( mGeometry, mMaterial );
 +
 +    mMeshActor = Actor::New();
 +    mMeshActor.AddRenderer( mRenderer );
 +    mMeshActor.SetSize(200, 200);
 +
 +    Property::Index fadeColorIndex = mMeshActor.RegisterProperty( "fade-color", Color::GREEN );
 +    mMeshActor.AddUniformMapping( fadeColorIndex, std::string("uFadeColor") );
 +
 +    fadeColorIndex = mRenderer.RegisterProperty( "fade-color", Color::MAGENTA );
 +    mRenderer.AddUniformMapping( fadeColorIndex, std::string("uFadeColor" ) );
 +    mRenderer.SetDepthIndex(0);
 +
 +    mMeshActor.SetParentOrigin( ParentOrigin::CENTER );
 +    mMeshActor.SetAnchorPoint( AnchorPoint::CENTER );
 +    stage.Add( mMeshActor );
 +
 +    Animation  animation = Animation::New(15);
 +    KeyFrames keyFrames = KeyFrames::New();
 +    keyFrames.Add(0.0f, Vector4::ZERO);
 +    keyFrames.Add(1.0f, Vector4( 1.0f, 0.0f, 1.0f, 1.0f ));
 +
++    animation.AnimateBy( Property(mMeshActor, Actor::Property::ORIENTATION), Quaternion(Degree(360), Vector3::ZAXIS) );
 +
 +    animation.SetLooping(true);
 +    animation.Play();
 +
 +    stage.SetBackgroundColor(Vector4(0.0f, 0.2f, 0.2f, 1.0f));;
 +  }
 +
 +  /**
 +   * Invoked whenever the quit button is clicked
 +   * @param[in] button the quit button
 +   */
 +  bool OnQuitButtonClicked( Toolkit::Button button )
 +  {
 +    // quit the application
 +    mApplication.Quit();
 +    return true;
 +  }
 +
 +  void OnKeyEvent(const KeyEvent& event)
 +  {
 +    if(event.state == KeyEvent::Down)
 +    {
 +      if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) )
 +      {
 +        mApplication.Quit();
 +      }
 +    }
 +  }
 +
 +private:
 +
 +  Application&  mApplication;                             ///< Application instance
 +  Vector3 mStageSize;                                     ///< The size of the stage
 +
 +  Image    mImage;
 +  Sampler  mSampler1;
 +  Sampler  mSampler2;
 +  Shader   mShader;
 +  Material mMaterial;
 +  Geometry mGeometry;
 +  Renderer mRenderer;
 +  Actor    mMeshActor;
 +  Renderer mRenderer2;
 +  Actor    mMeshActor2;
 +  Timer    mChangeImageTimer;
 +};
 +
 +void RunTest( Application& application )
 +{
 +  ExampleController test( application );
 +
 +  application.MainLoop();
 +}
 +
 +// Entry point for Linux & SLP applications
 +//
 +int main( int argc, char **argv )
 +{
 +  Application application = Application::New( &argc, &argv );
 +
 +  RunTest( application );
 +
 +  return 0;
 +}
index f8752ea,0000000..e057616
mode 100644,000000..100644
--- /dev/null
@@@ -1,266 -1,0 +1,266 @@@
-     animation.AnimateBetween( Property( mRenderer, fadeColorIndex ), keyFrames, AlphaFunctions::Sin );
-     animation.AnimateBetween( Property( mRenderer2, fadeColorIndex2 ), keyFrames2, AlphaFunctions::Sin2x );
 +/*
 + * 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
 +
 +// INTERNAL INCLUDES
 +#include "shared/view.h"
 +
 +#include <dali-toolkit/dali-toolkit.h>
 +
 +using namespace Dali;
 +
 +namespace
 +{
 +const char* MATERIAL_SAMPLE( DALI_IMAGE_DIR "gallery-small-48.jpg" );
 +const char* MATERIAL_SAMPLE2( DALI_IMAGE_DIR "gallery-medium-19.jpg" );
 +
 +#define MAKE_SHADER(A)#A
 +
 +const char* VERTEX_SHADER = MAKE_SHADER(
 +attribute mediump vec2    aPosition;
 +attribute highp   vec2    aTexCoord;
 +varying   mediump vec2    vTexCoord;
 +uniform   mediump mat4    uMvpMatrix;
 +uniform   mediump vec3    uSize;
 +uniform   lowp    vec4    uFadeColor;
 +
 +void main()
 +{
 +  mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);
 +  vertexPosition.xyz *= uSize;
 +  vertexPosition = uMvpMatrix * vertexPosition;
 +  vTexCoord = aTexCoord;
 +  gl_Position = vertexPosition;
 +}
 +);
 +
 +const char* FRAGMENT_SHADER = MAKE_SHADER(
 +varying mediump vec2  vTexCoord;
 +uniform lowp    vec4  uColor;
 +uniform sampler2D     sTexture;
 +uniform lowp    vec4  uFadeColor;
 +
 +void main()
 +{
 +  gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor * uFadeColor;
 +}
 +);
 +
 +Geometry CreateGeometry()
 +{
 +  // Create vertices
 +  const float halfQuadSize = .5f;
 +  struct TexturedQuadVertex { Vector2 position; Vector2 textureCoordinates; };
 +  TexturedQuadVertex texturedQuadVertexData[4] = {
 +    { Vector2(-halfQuadSize, -halfQuadSize), Vector2(0.f, 0.f) },
 +    { Vector2( halfQuadSize, -halfQuadSize), Vector2(1.f, 0.f) },
 +    { Vector2(-halfQuadSize,  halfQuadSize), Vector2(0.f, 1.f) },
 +    { Vector2( halfQuadSize,  halfQuadSize), Vector2(1.f, 1.f) } };
 +
 +  Property::Map texturedQuadVertexFormat;
 +  texturedQuadVertexFormat["aPosition"] = Property::VECTOR2;
 +  texturedQuadVertexFormat["aTexCoord"] = Property::VECTOR2;
 +  PropertyBuffer texturedQuadVertices = PropertyBuffer::New( PropertyBuffer::STATIC, texturedQuadVertexFormat, 4 );
 +  texturedQuadVertices.SetData(texturedQuadVertexData);
 +
 +  // Create indices
 +  unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 };
 +  Property::Map indexFormat;
 +  indexFormat["indices"] = Property::UNSIGNED_INTEGER;
 +  PropertyBuffer indices = PropertyBuffer::New( PropertyBuffer::STATIC, indexFormat, 3 );
 +  indices.SetData(indexData);
 +
 +  // Create the geometry object
 +  Geometry texturedQuadGeometry = Geometry::New();
 +  texturedQuadGeometry.AddVertexBuffer( texturedQuadVertices );
 +  texturedQuadGeometry.SetIndexBuffer( indices );
 +
 +  return texturedQuadGeometry;
 +}
 +
 +} // anonymous namespace
 +
 +// This example shows how to use a simple mesh
 +//
 +class ExampleController : public ConnectionTracker
 +{
 +public:
 +
 +  /**
 +   * The example controller constructor.
 +   * @param[in] application The application instance
 +   */
 +  ExampleController( Application& application )
 +  : mApplication( application )
 +  {
 +    // Connect to the Application's Init signal
 +    mApplication.InitSignal().Connect( this, &ExampleController::Create );
 +  }
 +
 +  /**
 +   * The example controller destructor
 +   */
 +  ~ExampleController()
 +  {
 +    // Nothing to do here;
 +  }
 +
 +  /**
 +   * Invoked upon creation of application
 +   * @param[in] application The application instance
 +   */
 +  void Create( Application& application )
 +  {
 +    Stage stage = Stage::GetCurrent();
 +    stage.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent);
 +
 +    mStageSize = stage.GetSize();
 +
 +    // The Init signal is received once (only) during the Application lifetime
 +
 +    // Hide the indicator bar
 +    application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE );
 +
 +    mImage = ResourceImage::New( MATERIAL_SAMPLE );
 +    mSampler1 = Sampler::New(mImage, "sTexture");
 +
 +    Image image = ResourceImage::New( MATERIAL_SAMPLE2 );
 +    mSampler2 = Sampler::New(image, "sTexture");
 +
 +    mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
 +
 +    mMaterial1 = Material::New( mShader );
 +    mMaterial1.AddSampler( mSampler1 );
 +
 +    mMaterial2 = Material::New( mShader );
 +    mMaterial2.AddSampler( mSampler2);
 +
 +    mGeometry = CreateGeometry();
 +
 +    mRenderer = Renderer::New( mGeometry, mMaterial1 );
 +
 +    mMeshActor = Actor::New();
 +    mMeshActor.AddRenderer( mRenderer );
 +    mMeshActor.SetSize(400, 400);
 +
 +    Property::Index fadeColorIndex = mMeshActor.RegisterProperty( "fade-color", Color::GREEN );
 +    mMeshActor.AddUniformMapping( fadeColorIndex, std::string("uFadeColor") );
 +
 +    fadeColorIndex = mRenderer.RegisterProperty( "fade-color", Color::MAGENTA );
 +    mRenderer.AddUniformMapping( fadeColorIndex, std::string("uFadeColor" ) );
 +    mRenderer.SetDepthIndex(0);
 +
 +    mMeshActor.SetParentOrigin( ParentOrigin::TOP_CENTER );
 +    mMeshActor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
 +    stage.Add( mMeshActor );
 +
 +    mRenderer2 = Renderer::New( mGeometry, mMaterial2 );
 +
 +    mMeshActor2 = Actor::New();
 +    mMeshActor2.AddRenderer( mRenderer2 );
 +    mMeshActor2.SetSize(400, 400);
 +
 +    mMeshActor2.RegisterProperty( "a-n-other-property", Color::GREEN );
 +    Property::Index fadeColorIndex2 = mMeshActor2.RegisterProperty( "another-fade-color", Color::GREEN );
 +    mMeshActor2.AddUniformMapping( fadeColorIndex2, std::string("uFadeColor") );
 +
 +    mRenderer2.RegisterProperty( "a-n-other-property", Vector3::ZERO );
 +    mRenderer2.RegisterProperty( "a-coefficient", 0.008f );
 +    fadeColorIndex2 = mRenderer2.RegisterProperty( "another-fade-color", Color::GREEN );
 +    mRenderer2.AddUniformMapping( fadeColorIndex2, std::string("uFadeColor" ) );
 +    mRenderer2.SetDepthIndex(0);
 +
 +    mMeshActor2.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
 +    mMeshActor2.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
 +    stage.Add( mMeshActor2 );
 +
 +    Animation  animation = Animation::New(5);
 +    KeyFrames keyFrames = KeyFrames::New();
 +    keyFrames.Add(0.0f, Vector4::ZERO);
 +    keyFrames.Add(1.0f, Vector4( 1.0f, 0.0f, 1.0f, 1.0f ));
 +
 +    KeyFrames keyFrames2 = KeyFrames::New();
 +    keyFrames2.Add(0.0f, Vector4::ZERO);
 +    keyFrames2.Add(1.0f, Color::GREEN);
 +
++    animation.AnimateBetween( Property( mRenderer, fadeColorIndex ), keyFrames, AlphaFunction(AlphaFunction::EASE_OUT_SINE) );
++    animation.AnimateBetween( Property( mRenderer2, fadeColorIndex2 ), keyFrames2, AlphaFunction(AlphaFunction::EASE_IN_SINE) );
 +    animation.SetLooping(true);
 +    animation.Play();
 +
 +    stage.SetBackgroundColor(Vector4(0.0f, 0.2f, 0.2f, 1.0f));;
 +  }
 +
 +  /**
 +   * Invoked whenever the quit button is clicked
 +   * @param[in] button the quit button
 +   */
 +  bool OnQuitButtonClicked( Toolkit::Button button )
 +  {
 +    // quit the application
 +    mApplication.Quit();
 +    return true;
 +  }
 +
 +  void OnKeyEvent(const KeyEvent& event)
 +  {
 +    if(event.state == KeyEvent::Down)
 +    {
 +      if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) )
 +      {
 +        mApplication.Quit();
 +      }
 +    }
 +  }
 +
 +private:
 +
 +  Application&  mApplication;                             ///< Application instance
 +  Vector3 mStageSize;                                     ///< The size of the stage
 +
 +  Image    mImage;
 +  Sampler  mSampler1;
 +  Sampler  mSampler2;
 +  Shader   mShader;
 +  Material mMaterial1;
 +  Material mMaterial2;
 +  Geometry mGeometry;
 +  Renderer mRenderer;
 +  Actor    mMeshActor;
 +  Renderer mRenderer2;
 +  Actor    mMeshActor2;
 +  Timer    mChangeImageTimer;
 +};
 +
 +void RunTest( Application& application )
 +{
 +  ExampleController test( application );
 +
 +  application.MainLoop();
 +}
 +
 +// Entry point for Linux & SLP applications
 +//
 +int main( int argc, char **argv )
 +{
 +  Application application = Application::New( &argc, &argv );
 +
 +  RunTest( application );
 +
 +  return 0;
 +}