diff --git a/com.samsung.dali-demo.xml b/com.samsung.dali-demo.xml
index 70a5541..8c296a6 100644
--- a/com.samsung.dali-demo.xml
+++ b/com.samsung.dali-demo.xml
@@ -34,22 +34,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -94,9 +94,9 @@
-
-
-
+
+
+
@@ -121,6 +121,9 @@
+
+
+
diff --git a/demo/dali-demo.cpp b/demo/dali-demo.cpp
index 5ca4f65..1f1b3db 100644
--- a/demo/dali-demo.cpp
+++ b/demo/dali-demo.cpp
@@ -69,6 +69,7 @@ int main(int argc, char **argv)
demo.AddExample(Example("line-mesh.example", DALI_DEMO_STR_TITLE_LINE_MESH));
demo.AddExample(Example("gradients.example", DALI_DEMO_STR_TITLE_COLOR_GRADIENT));
demo.AddExample(Example("image-view.example", DALI_DEMO_STR_TITLE_IMAGE_VIEW));
+ demo.AddExample(Example("super-blur-bloom.example", DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM));
demo.SortAlphabetically( true );
diff --git a/examples/benchmark/benchmark.cpp b/examples/benchmark/benchmark.cpp
index 576f404..7b257cf 100644
--- a/examples/benchmark/benchmark.cpp
+++ b/examples/benchmark/benchmark.cpp
@@ -207,7 +207,7 @@ Geometry& QuadMesh()
}
bool gUseMesh(false);
-bool gUseImageView(false);
+bool gUseImageActor(false);
bool gNinePatch(false);
unsigned int gRowsPerPage(25);
unsigned int gColumnsPerPage( 25 );
@@ -243,11 +243,11 @@ Actor CreateMeshActor( unsigned int index)
}
// Test application to compare performance between ImageActor and ImageView
-// By default, the application consist of 10 pages of 25x25 ImageActors, this can be modified using the following command line arguments:
+// By default, the application consist of 10 pages of 25x25 Image views, this can be modified using the following command line arguments:
// -r NumberOfRows (Modifies the number of rows per page)
// -c NumberOfColumns (Modifies the number of columns per page)
// -p NumberOfPages (Modifies the nimber of pages )
-// --use-imageview ( Use ImageView instead of ImageActor )
+// --use-image-actor ( Use ImageActor instead of ImageView )
// --use-mesh ( Use new renderer API (as ImageView) but shares renderers between actors when possible )
// --nine-patch ( Use nine patch images )
@@ -290,13 +290,13 @@ public:
{
CreateMeshActors();
}
- else if( gUseImageView )
+ else if( gUseImageActor )
{
- CreateImageViews();
+ CreateImageActors();
}
else
{
- CreateImageActors();
+ CreateImageViews();
}
ShowAnimation();
@@ -406,15 +406,7 @@ public:
duration = durationPerActor;
delay = delayBetweenActors * count;
}
- if( gUseImageView )
- {
- mImageView[count].SetPosition( initialPosition );
- mImageView[count].SetSize( Vector3(0.0f,0.0f,0.0f) );
- mImageView[count].SetOrientation( Quaternion( Radian(0.0f),Vector3::XAXIS));
- mShow.AnimateTo( Property( mImageView[count], Actor::Property::POSITION), Vector3(xpos+mSize.x*0.5f, ypos+mSize.y*0.5f, 0.0f), AlphaFunction::EASE_OUT_BACK, TimePeriod( delay, duration ));
- mShow.AnimateTo( Property( mImageView[count], Actor::Property::SIZE), mSize, AlphaFunction::EASE_OUT_BACK, TimePeriod( delay, duration ));
- }
- else
+ if( gUseImageActor || gUseMesh )
{
mActor[count].SetPosition( initialPosition );
mActor[count].SetSize( Vector3(0.0f,0.0f,0.0f) );
@@ -422,6 +414,14 @@ public:
mShow.AnimateTo( Property( mActor[count], Actor::Property::POSITION), Vector3(xpos+mSize.x*0.5f, ypos+mSize.y*0.5f, 0.0f), AlphaFunction::EASE_OUT_BACK, TimePeriod( delay, duration ));
mShow.AnimateTo( Property( mActor[count], Actor::Property::SIZE), mSize, AlphaFunction::EASE_OUT_BACK, TimePeriod( delay, duration ));
}
+ else
+ {
+ mImageView[count].SetPosition( initialPosition );
+ mImageView[count].SetSize( Vector3(0.0f,0.0f,0.0f) );
+ mImageView[count].SetOrientation( Quaternion( Radian(0.0f),Vector3::XAXIS));
+ mShow.AnimateTo( Property( mImageView[count], Actor::Property::POSITION), Vector3(xpos+mSize.x*0.5f, ypos+mSize.y*0.5f, 0.0f), AlphaFunction::EASE_OUT_BACK, TimePeriod( delay, duration ));
+ mShow.AnimateTo( Property( mImageView[count], Actor::Property::SIZE), mSize, AlphaFunction::EASE_OUT_BACK, TimePeriod( delay, duration ));
+ }
++count;
}
}
@@ -438,20 +438,20 @@ public:
size_t actorCount( mRowsPerPage*mColumnsPerPage*mPageCount);
for( size_t i(0); i
+#include
+#include
+#include
+#include "shared/view.h"
+
+using namespace Dali;
+
+namespace
+{
+const char * const TOOLBAR_IMAGE( DALI_IMAGE_DIR "top-bar.png" );
+const char * const TITLE_SUPER_BLUR( "Super Blur" );
+const char * const TITLE_BLOOM( "Bloom" );
+const char * const CHANGE_BACKGROUND_ICON( DALI_IMAGE_DIR "icon-change.png" );
+const char * const CHANGE_BACKGROUND_ICON_SELECTED( DALI_IMAGE_DIR "icon-change-selected.png" );
+const char * const CHANGE_BLUR_ICON( DALI_IMAGE_DIR "icon-replace.png" );
+const char * const CHANGE_BLUR_ICON_SELECTED( DALI_IMAGE_DIR "icon-replace-selected.png" );
+
+const char* BACKGROUND_IMAGES[]=
+{
+ DALI_IMAGE_DIR "background-1.jpg",
+ DALI_IMAGE_DIR "background-2.jpg",
+ DALI_IMAGE_DIR "background-3.jpg",
+ DALI_IMAGE_DIR "background-4.jpg",
+ DALI_IMAGE_DIR "background-5.jpg",
+ DALI_IMAGE_DIR "background-magnifier.jpg",
+};
+const unsigned int NUM_BACKGROUND_IMAGES( sizeof( BACKGROUND_IMAGES ) / sizeof( BACKGROUND_IMAGES[0] ) );
+}
+
+/**
+ * @brief Load an image, scaled-down to no more than the stage dimensions.
+ *
+ * Uses image scaling mode FittingMode::SCALE_TO_FILL to resize the image at
+ * load time to cover the entire stage with pixels with no borders,
+ * and filter mode BOX_THEN_LINEAR to sample the image with
+ * maximum quality.
+ */
+ResourceImage LoadStageFillingImage( const char * const imagePath )
+{
+ Size stageSize = Stage::GetCurrent().GetSize();
+ return ResourceImage::New( imagePath, Dali::ImageDimensions( stageSize.x, stageSize.y ), Dali::FittingMode::SCALE_TO_FILL, Dali::SamplingMode::BOX_THEN_LINEAR );
+}
+
+class BlurExample : public ConnectionTracker
+{
+public:
+ BlurExample(Application &app)
+ : mApp(app),
+ mImageIndex( 0 ),
+ mIsBlurring( false )
+ {
+ // Connect to the Application's Init signal
+ app.InitSignal().Connect(this, &BlurExample::Create);
+ }
+
+ ~BlurExample()
+ {
+ }
+private:
+ // The Init signal is received once (only) during the Application lifetime
+ void Create(Application& app)
+ {
+ Stage stage = Stage::GetCurrent();
+ Vector2 stageSize = stage.GetSize();
+
+ stage.KeyEventSignal().Connect(this, &BlurExample::OnKeyEvent);
+
+ // Creates a default view with a default tool bar.
+ // The view is added to the stage.
+ Layer content = DemoHelper::CreateView( app,
+ mBackground,
+ mToolBar,
+ "",
+ TOOLBAR_IMAGE,
+ "" );
+
+ // Add a button to change background. (right of toolbar)
+ Toolkit::PushButton changeBackgroundButton = Toolkit::PushButton::New();
+ changeBackgroundButton.SetUnselectedImage( CHANGE_BACKGROUND_ICON );
+ changeBackgroundButton.SetSelectedImage( CHANGE_BACKGROUND_ICON_SELECTED );
+ changeBackgroundButton.ClickedSignal().Connect( this, &BlurExample::OnChangeBackgroundIconClicked );
+ mToolBar.AddControl( changeBackgroundButton,
+ DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage,
+ Toolkit::Alignment::HorizontalRight,
+ DemoHelper::DEFAULT_MODE_SWITCH_PADDING );
+
+ // Add a button to change the blur view. (left of toolbar)
+ Toolkit::PushButton changeBlurButton = Toolkit::PushButton::New();
+ changeBlurButton.SetUnselectedImage( CHANGE_BLUR_ICON );
+ changeBlurButton.SetSelectedImage( CHANGE_BLUR_ICON_SELECTED );
+ changeBlurButton.ClickedSignal().Connect( this, &BlurExample::OnChangeBlurIconClicked );
+ mToolBar.AddControl( changeBlurButton,
+ DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage,
+ Toolkit::Alignment::HorizontalLeft,
+ DemoHelper::DEFAULT_MODE_SWITCH_PADDING );
+
+ mSuperBlurView = Toolkit::SuperBlurView::New( 5 );
+ mSuperBlurView.SetSize( stageSize );
+ mSuperBlurView.SetParentOrigin( ParentOrigin::CENTER );
+ mSuperBlurView.SetAnchorPoint( AnchorPoint::CENTER );
+ mSuperBlurView.BlurFinishedSignal().Connect(this, &BlurExample::OnBlurFinished);
+ mCurrentImage = LoadStageFillingImage( BACKGROUND_IMAGES[mImageIndex] );
+ mSuperBlurView.SetImage( mCurrentImage );
+ mBackground.Add( mSuperBlurView );
+ mIsBlurring = true;
+ SetTitle( TITLE_SUPER_BLUR );
+
+ mBloomView = Toolkit::BloomView::New();
+ mBloomView.SetParentOrigin(ParentOrigin::CENTER);
+ mBloomView.SetSize(stageSize);
+ mBloomActor = Toolkit::ImageView::New(mCurrentImage);
+ mBloomActor.SetParentOrigin( ParentOrigin::CENTER );
+ mBloomView.Add( mBloomActor );
+
+ // Connect the callback to the touch signal on the background
+ mSuperBlurView.TouchedSignal().Connect( this, &BlurExample::OnTouch );
+ mBloomView.TouchedSignal().Connect( this, &BlurExample::OnTouch );
+ }
+
+ // Callback function of the touch signal on the background
+ bool OnTouch(Dali::Actor actor, const Dali::TouchEvent& event)
+ {
+ const TouchPoint &point = event.GetPoint(0);
+ switch(point.state)
+ {
+ case TouchPoint::Down:
+ {
+ if( mAnimation )
+ {
+ mAnimation.Clear();
+ }
+
+ mAnimation = Animation::New( 2.f );
+ if( mSuperBlurView.OnStage() )
+ {
+ mAnimation.AnimateTo( Property( mSuperBlurView, mSuperBlurView.GetBlurStrengthPropertyIndex() ), 1.f );
+ }
+ else
+ {
+ mAnimation.AnimateTo( Property( mBloomView, mBloomView.GetBloomIntensityPropertyIndex() ), 3.f );
+ }
+ mAnimation.Play();
+ break;
+ }
+ case TouchPoint::Up:
+ case TouchPoint::Leave:
+ case TouchPoint::Interrupted:
+ {
+ if( mAnimation )
+ {
+ mAnimation.Clear();
+ }
+
+ mAnimation = Animation::New( 2.f );
+ if( mSuperBlurView.OnStage() )
+ {
+ mAnimation.AnimateTo( Property( mSuperBlurView, mSuperBlurView.GetBlurStrengthPropertyIndex() ), 0.f );
+ }
+ else
+ {
+ mAnimation.AnimateTo( Property( mBloomView, mBloomView.GetBloomIntensityPropertyIndex() ), 0.f );
+ }
+ mAnimation.Play();
+ break;
+ }
+ case TouchPoint::Motion:
+ case TouchPoint::Stationary:
+ case TouchPoint::Last:
+ default:
+ {
+ break;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Main key event handler
+ */
+ void OnKeyEvent(const KeyEvent& event)
+ {
+ if(event.state == KeyEvent::Down)
+ {
+ if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) )
+ {
+ mApp.Quit();
+ }
+ }
+ }
+
+ bool OnChangeBackgroundIconClicked( Toolkit::Button button )
+ {
+ if( mIsBlurring )
+ {
+ return true;
+ }
+
+ if( mAnimation )
+ {
+ mAnimation.Clear();
+ }
+
+ mImageIndex = (mImageIndex+1u)%NUM_BACKGROUND_IMAGES;
+ mCurrentImage = LoadStageFillingImage( BACKGROUND_IMAGES[mImageIndex] );
+
+ if( mSuperBlurView.OnStage() )
+ {
+ mIsBlurring = true;
+
+ mSuperBlurView.SetBlurStrength( 0.f );
+ mSuperBlurView.SetImage( mCurrentImage );
+ }
+ else
+ {
+ mBloomView.SetProperty( mBloomView.GetBloomIntensityPropertyIndex(), 0.f );
+ mBloomActor.SetImage( mCurrentImage );
+ }
+
+ return true;
+ }
+
+ bool OnChangeBlurIconClicked( Toolkit::Button button )
+ {
+ if( mSuperBlurView.OnStage() )
+ {
+ SetTitle( TITLE_BLOOM );
+ mBackground.Remove( mSuperBlurView );
+
+ mBloomActor.SetImage( mCurrentImage );
+ mBloomView.SetProperty( mBloomView.GetBloomIntensityPropertyIndex(), 0.f );
+ mBackground.Add( mBloomView );
+ mBloomView.Activate();
+
+ }
+ else
+ {
+ SetTitle( TITLE_SUPER_BLUR );
+ mBackground.Remove( mBloomView );
+ mBloomView.Deactivate();
+
+ mBackground.Add( mSuperBlurView );
+ mSuperBlurView.SetBlurStrength( 0.f );
+ mSuperBlurView.SetImage( mCurrentImage );
+ mIsBlurring = true;
+ }
+
+ return true;
+ }
+
+ void OnBlurFinished( Toolkit::SuperBlurView blurView )
+ {
+ mIsBlurring = false;
+ }
+
+ /**
+ * Sets/Updates the title of the View
+ * @param[in] title The new title for the view.
+ */
+ void SetTitle(const std::string& title)
+ {
+ if(!mTitleActor)
+ {
+ mTitleActor = DemoHelper::CreateToolBarLabel( title );
+ // Add title to the tool bar.
+ mToolBar.AddControl( mTitleActor, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Toolkit::Alignment::HorizontalCenter );
+ }
+
+ mTitleActor.SetProperty( Toolkit::TextLabel::Property::TEXT, title );
+ }
+
+private:
+
+ Application& mApp;
+ Toolkit::ToolBar mToolBar;
+ Toolkit::TextLabel mTitleActor; ///< The Toolbar's Title.
+ Toolkit::Control mBackground;
+ Toolkit::SuperBlurView mSuperBlurView;
+ Toolkit::BloomView mBloomView;
+ Animation mAnimation;
+ Toolkit::ImageView mBloomActor;
+ Image mCurrentImage;
+ unsigned int mImageIndex;
+ bool mIsBlurring;
+};
+
+/*****************************************************************************/
+
+static void
+RunTest(Application& app)
+{
+ BlurExample theApp(app);
+ app.MainLoop();
+}
+
+/*****************************************************************************/
+
+int
+main(int argc, char **argv)
+{
+ Application app = Application::New(&argc, &argv, DALI_DEMO_THEME_PATH);
+
+ RunTest(app);
+
+ return 0;
+}
diff --git a/packaging/com.samsung.dali-demo.spec b/packaging/com.samsung.dali-demo.spec
index ae466e8..1eb3f13 100755
--- a/packaging/com.samsung.dali-demo.spec
+++ b/packaging/com.samsung.dali-demo.spec
@@ -2,7 +2,7 @@
Name: com.samsung.dali-demo
Summary: The OpenGLES Canvas Core Demo
-Version: 1.1.14
+Version: 1.1.15
Release: 1
Group: System/Libraries
License: Apache-2.0
diff --git a/resources/scripts/shader-effect-ripple.json b/resources/scripts/shader-effect-ripple.json
index b47012c..e32fc1e 100644
--- a/resources/scripts/shader-effect-ripple.json
+++ b/resources/scripts/shader-effect-ripple.json
@@ -51,9 +51,9 @@
"Ripple2D": {
"program": {
"vertexPrefix": "",
- "vertex": "void main(void)\n{\n gl_Position = uProjection * uModelView * vec4(aPosition, 1.0);\n vTexCoord = aTexCoord;\n}\n\n",
+ "vertex": "void main(void)\n{\n gl_Position = uMvpMatrix * vec4(aPosition*uSize.xy, 0.0, 1.0);\n vTexCoord = mix( uTextureRect.xy, uTextureRect.zw, aPosition + vec2(0.5) );\n}\n\n",
"fragmentPrefix": "",
- "fragment": "precision mediump float;\nuniform float uAmplitude; // 0.02; (< 1)\nuniform float uTime;\nvoid 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}\n\n\n",
+ "fragment": "precision mediump float;\nuniform float uAmplitude; // 0.02; (< 1)\nuniform float uTime;\nvoid main()\n{\n highp vec2 textureSize = uTextureRect.zw - uTextureRect.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}\n\n\n",
"geometryType": "GEOMETRY_TYPE_IMAGE"
},
"geometryHints": "HINT_NONE",
diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h
index 0e8f240..0f0dea9 100644
--- a/shared/dali-demo-strings.h
+++ b/shared/dali-demo-strings.h
@@ -61,6 +61,7 @@ extern "C"
#define DALI_DEMO_STR_TITLE_TEXTURED_MESH dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TEXTURED_MESH")
#define DALI_DEMO_STR_TITLE_LINE_MESH dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_LINE_MESH")
#define DALI_DEMO_STR_TITLE_COLOR_GRADIENT dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_COLOR_GRADIENT")
+#define DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_SUPER_BLUR_BLOOM")
#else // !INTERNATIONALIZATION_ENABLED
@@ -97,6 +98,7 @@ extern "C"
#define DALI_DEMO_STR_TITLE_LINE_MESH "Mesh Line"
#define DALI_DEMO_STR_TITLE_COLOR_GRADIENT "Color Gradient"
#define DALI_DEMO_STR_TITLE_IMAGE_VIEW "Image View"
+#define DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM "Super Blur and Bloom"
#endif