X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Frefraction-effect%2Frefraction-effect-example.cpp;h=14c4878c7fda7d416302f39da40367045f8fbc21;hb=906d97450340834a0af830c3ae6c1e653a6e2924;hp=8626c386e4884cf7abd1db231b9138c1974b9f31;hpb=c410ccd847ff34f0a0145ac84dc3b01df8bcf61a;p=platform%2Fcore%2Fuifw%2Fdali-demo.git diff --git a/examples/refraction-effect/refraction-effect-example.cpp b/examples/refraction-effect/refraction-effect-example.cpp index 8626c38..14c4878 100644 --- a/examples/refraction-effect/refraction-effect-example.cpp +++ b/examples/refraction-effect/refraction-effect-example.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,36 +15,43 @@ * */ +// EXTERNAL INCLUDES #include #include -#include "shared/view.h" +#include #include #include #include +// INTERNAL INCLUDES +#include "shared/view.h" +#include "shared/utility.h" + using namespace Dali; namespace { const char * const APPLICATION_TITLE( "Refraction Effect" ); -const char * const TOOLBAR_IMAGE( DALI_IMAGE_DIR "top-bar.png" ); -const char * const CHANGE_TEXTURE_ICON( DALI_IMAGE_DIR "icon-change.png" ); -const char * const CHANGE_MESH_ICON( DALI_IMAGE_DIR "icon-replace.png" ); +const char * const TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" ); +const char * const CHANGE_TEXTURE_ICON( DEMO_IMAGE_DIR "icon-change.png" ); +const char * const CHANGE_TEXTURE_ICON_SELECTED( DEMO_IMAGE_DIR "icon-change-selected.png" ); +const char * const CHANGE_MESH_ICON( DEMO_IMAGE_DIR "icon-replace.png" ); +const char * const CHANGE_MESH_ICON_SELECTED( DEMO_IMAGE_DIR "icon-replace-selected.png" ); const char* MESH_FILES[] = { - DALI_MODEL_DIR "surface_pattern_v01.obj", - DALI_MODEL_DIR "surface_pattern_v02.obj" + DEMO_MODEL_DIR "surface_pattern_v01.obj", + DEMO_MODEL_DIR "surface_pattern_v02.obj" }; const unsigned int NUM_MESH_FILES( sizeof( MESH_FILES ) / sizeof( MESH_FILES[0] ) ); const char* TEXTURE_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" + DEMO_IMAGE_DIR "background-1.jpg", + DEMO_IMAGE_DIR "background-2.jpg", + DEMO_IMAGE_DIR "background-3.jpg", + DEMO_IMAGE_DIR "background-4.jpg" }; const unsigned int NUM_TEXTURE_IMAGES( sizeof( TEXTURE_IMAGES ) / sizeof( TEXTURE_IMAGES[0] ) ); @@ -68,19 +75,6 @@ struct LightOffsetConstraint }; /** - * @brief Load an image, scaled-down to no more than the stage dimensions. - * - * Uses image scaling mode 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, ImageDimensions( stageSize.x, stageSize.y ), Dali::FittingMode::SCALE_TO_FILL, Dali::SamplingMode::BOX_THEN_LINEAR ); -} - -/** * structure of the vertex in the mesh */ struct Vertex @@ -217,6 +211,21 @@ class RefractionEffectExample : public ConnectionTracker public: RefractionEffectExample( Application &application ) : mApplication( application ), + mContent(), + mTextureSet(), + mGeometry(), + mRenderer(), + mMeshActor(), + mShaderFlat(), + mShaderRefraction(), + mLightAnimation(), + mStrenghAnimation(), + mLightXYOffsetIndex( Property::INVALID_INDEX ), + mSpinAngleIndex( Property::INVALID_INDEX ), + mLightIntensityIndex( Property::INVALID_INDEX ), + mEffectStrengthIndex( Property::INVALID_INDEX ), + mChangeTextureButton(), + mChangeMeshButton(), mCurrentTextureId( 1 ), mCurrentMeshId( 0 ) { @@ -233,8 +242,6 @@ private: // The Init signal is received once (only) during the Application lifetime void Create(Application& application) { - DemoHelper::RequestThemeChange(); - Stage stage = Stage::GetCurrent(); Vector2 stageSize = stage.GetSize(); @@ -253,7 +260,8 @@ private: // Add a button to change background. (right of toolbar) mChangeTextureButton = Toolkit::PushButton::New(); - mChangeTextureButton.SetBackgroundImage( ResourceImage::New( CHANGE_TEXTURE_ICON ) ); + mChangeTextureButton.SetProperty( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, CHANGE_TEXTURE_ICON ); + mChangeTextureButton.SetProperty( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, CHANGE_TEXTURE_ICON_SELECTED ); mChangeTextureButton.ClickedSignal().Connect( this, &RefractionEffectExample::OnChangeTexture ); toolBar.AddControl( mChangeTextureButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, @@ -261,7 +269,8 @@ private: DemoHelper::DEFAULT_MODE_SWITCH_PADDING ); // Add a button to change mesh pattern. ( left of bar ) mChangeMeshButton = Toolkit::PushButton::New(); - mChangeMeshButton.SetBackgroundImage( ResourceImage::New( CHANGE_MESH_ICON ) ); + mChangeMeshButton.SetProperty( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, CHANGE_MESH_ICON ); + mChangeMeshButton.SetProperty( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, CHANGE_MESH_ICON_SELECTED ); mChangeMeshButton.ClickedSignal().Connect( this, &RefractionEffectExample::OnChangeMesh ); toolBar.AddControl( mChangeMeshButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, @@ -274,12 +283,12 @@ private: mShaderFlat = Shader::New( VERTEX_SHADER_FLAT, FRAGMENT_SHADER_FLAT ); mGeometry = CreateGeometry( MESH_FILES[mCurrentMeshId] ); - Image texture = LoadStageFillingImage( TEXTURE_IMAGES[mCurrentTextureId] ); - mSampler = Sampler::New( texture, "sTexture" ); - mMaterial = Material::New( mShaderFlat ); - mMaterial.AddSampler( mSampler ); + Texture texture = DemoHelper::LoadStageFillingTexture( TEXTURE_IMAGES[mCurrentTextureId] ); + mTextureSet = TextureSet::New(); + mTextureSet.SetTexture( 0u, texture ); - mRenderer = Renderer::New( mGeometry, mMaterial ); + mRenderer = Renderer::New( mGeometry, mShaderFlat ); + mRenderer.SetTextures( mTextureSet ); mMeshActor = Actor::New(); mMeshActor.AddRenderer( mRenderer ); @@ -288,29 +297,24 @@ private: mContent.Add( mMeshActor ); // Connect the callback to the touch signal on the mesh actor - mContent.TouchedSignal().Connect( this, &RefractionEffectExample::OnTouch ); + mContent.TouchSignal().Connect( this, &RefractionEffectExample::OnTouch ); // shader used when the finger is touching the screen. render refraction effect mShaderRefraction = Shader::New( VERTEX_SHADER_REFRACTION, FRAGMENT_SHADER_REFRACTION ); // register uniforms - mLightXYOffsetIndex = mMeshActor.RegisterProperty( "light-XY-offset", Vector2::ZERO ); - mMeshActor.AddUniformMapping( mLightXYOffsetIndex, "uLightXYOffset" ); + mLightXYOffsetIndex = mMeshActor.RegisterProperty( "uLightXYOffset", Vector2::ZERO ); - mLightIntensityIndex = mMeshActor.RegisterProperty( "light-intensity", 2.5f ); - mMeshActor.AddUniformMapping( mLightIntensityIndex, "uLightIntensity" ); + mLightIntensityIndex = mMeshActor.RegisterProperty( "uLightIntensity", 2.5f ); - mEffectStrengthIndex = mMeshActor.RegisterProperty( "effect-strength", 0.f ); - mMeshActor.AddUniformMapping( mEffectStrengthIndex, "uEffectStrength" ); + mEffectStrengthIndex = mMeshActor.RegisterProperty( "uEffectStrength", 0.f ); Vector3 lightPosition( -stageSize.x*0.5f, -stageSize.y*0.5f, stageSize.x*0.5f ); // top_left - Property::Index lightPositionIndex = mMeshActor.RegisterProperty( "light-position", lightPosition ); - mMeshActor.AddUniformMapping( lightPositionIndex, "uLightPosition"); + mMeshActor.RegisterProperty( "uLightPosition", lightPosition ); - Property::Index lightSpinOffsetIndex = mMeshActor.RegisterProperty( "light-spin-offset", Vector2::ZERO ); - mMeshActor.AddUniformMapping( lightSpinOffsetIndex, "uLightSpinOffset" ); + Property::Index lightSpinOffsetIndex = mMeshActor.RegisterProperty( "uLightSpinOffset", Vector2::ZERO ); - mSpinAngleIndex = mMeshActor.RegisterProperty("spin-angle", 0.f ); + mSpinAngleIndex = mMeshActor.RegisterProperty("uSpinAngle", 0.f ); Constraint constraint = Constraint::New( mMeshActor, lightSpinOffsetIndex, LightOffsetConstraint(stageSize.x*0.1f) ); constraint.AddSource( LocalSource(mSpinAngleIndex) ); constraint.Apply(); @@ -342,21 +346,20 @@ private: bool OnChangeTexture( Toolkit::Button button ) { mCurrentTextureId = ( mCurrentTextureId + 1 ) % NUM_TEXTURE_IMAGES; - Image texture = LoadStageFillingImage( TEXTURE_IMAGES[mCurrentTextureId] ); - mSampler.SetImage( texture ); + Texture texture = DemoHelper::LoadStageFillingTexture( TEXTURE_IMAGES[mCurrentTextureId] ); + mTextureSet.SetTexture( 0u, texture ); return true; } - bool OnTouch( Actor actor , const TouchEvent& event ) + bool OnTouch( Actor actor, const TouchData& event ) { - const TouchPoint &point = event.GetPoint(0); - switch(point.state) + switch( event.GetState( 0 ) ) { - case TouchPoint::Down: + case PointState::DOWN: { - mMaterial.SetShader( mShaderRefraction ); + mRenderer.SetShader( mShaderRefraction ); - SetLightXYOffset( point.screen ); + SetLightXYOffset( event.GetScreenPosition( 0 ) ); mLightAnimation.Play(); @@ -371,15 +374,15 @@ private: break; } - case TouchPoint::Motion: + case PointState::MOTION: { // make the light position following the finger movement - SetLightXYOffset( point.screen ); + SetLightXYOffset( event.GetScreenPosition( 0 ) ); break; } - case TouchPoint::Up: - case TouchPoint::Leave: - case TouchPoint::Interrupted: + case PointState::UP: + case PointState::LEAVE: + case PointState::INTERRUPTED: { mLightAnimation.Pause(); @@ -393,9 +396,7 @@ private: mStrenghAnimation.Play(); break; } - case TouchPoint::Stationary: - case TouchPoint::Last: - default: + case PointState::STATIONARY: { break; } @@ -406,7 +407,7 @@ private: void OnTouchFinished( Animation& source ) { - mMaterial.SetShader( mShaderFlat ); + mRenderer.SetShader( mShaderFlat ); SetLightXYOffset( Vector2::ZERO ); } @@ -456,8 +457,8 @@ private: vertexFormat["aPosition"] = Property::VECTOR3; vertexFormat["aNormal"] = Property::VECTOR3; vertexFormat["aTexCoord"] = Property::VECTOR2; - PropertyBuffer surfaceVertices = PropertyBuffer::New( vertexFormat, vertices.size() ); - surfaceVertices.SetData( &vertices[0] ); + PropertyBuffer surfaceVertices = PropertyBuffer::New( vertexFormat ); + surfaceVertices.SetData( &vertices[0], vertices.size() ); Geometry surface = Geometry::New(); surface.AddVertexBuffer( surfaceVertices ); @@ -563,9 +564,7 @@ private: Application& mApplication; Layer mContent; - - Sampler mSampler; - Material mMaterial; + TextureSet mTextureSet; Geometry mGeometry; Renderer mRenderer; Actor mMeshActor; @@ -589,21 +588,10 @@ private: /*****************************************************************************/ -static void -RunTest(Application& app) +int DALI_EXPORT_API main(int argc, char **argv) { + Application app = Application::New(&argc, &argv, DEMO_THEME_PATH); RefractionEffectExample theApp(app); app.MainLoop(); -} - -/*****************************************************************************/ - -int -main(int argc, char **argv) -{ - Application app = Application::New(&argc, &argv); - - RunTest(app); - return 0; }