/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
* limitations under the License.
*/
+// EXTERNAL INCLUDES
+#include <dali/devel-api/images/texture-set-image.h>
+#include <dali/public-api/rendering/renderer.h>
#include <dali-toolkit/dali-toolkit.h>
-#include "../shared/view.h"
+#include <dali-toolkit/devel-api/controls/bubble-effect/bubble-emitter.h>
+#include <dali-toolkit/devel-api/controls/gaussian-blur-view/gaussian-blur-view.h>
+
+#include <cstdio>
+#include <iostream>
+
+// INTERNAL INCLUDES
+#include "shared/view.h"
+#include "shared/utility.h"
using namespace Dali;
using namespace Dali::Toolkit;
namespace
{
-const char * gModelFile = DALI_MODEL_DIR "AlbumCute.dae";
-const char * const BACKGROUND_IMAGE( DALI_IMAGE_DIR "background-2.jpg" );
-const char * const TOOLBAR_IMAGE( DALI_IMAGE_DIR "top-bar.png" );
-const char * const LOSE_CONTEXT_IMAGE( DALI_IMAGE_DIR "icon-cluster-wobble.png" );
-const char * const BASE_IMAGE( DALI_IMAGE_DIR "gallery-large-14.jpg" );
-const char * const EFFECT_IMAGE( DALI_IMAGE_DIR "gallery-large-18.jpg" );
+const char * const BACKGROUND_IMAGE( DEMO_IMAGE_DIR "background-2.jpg" );
+const char * const TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" );
+const char * const LOSE_CONTEXT_IMAGE( DEMO_IMAGE_DIR "icon-cluster-wobble.png" );
+const char * const LOSE_CONTEXT_IMAGE_SELECTED( DEMO_IMAGE_DIR "icon-cluster-wobble-selected.png" );
+const char * const BASE_IMAGE( DEMO_IMAGE_DIR "gallery-large-14.jpg" );
+const char * const EFFECT_IMAGE( DEMO_IMAGE_DIR "gallery-large-18.jpg" );
+const char * const LOGO_IMAGE(DEMO_IMAGE_DIR "dali-logo.png");
const float EXPLOSION_DURATION(1.2f);
-const unsigned int EMIT_INTERVAL_IN_MS(80);
+const unsigned int EMIT_INTERVAL_IN_MS(40);
const float TRACK_DURATION_IN_MS(970);
Application gApplication;
NewWindowController* gNewWindowController(NULL);
-const char*const FRAG_SHADER=
- "uniform float alpha;\n"
- "\n"
- "void main()\n"
- "{\n"
- " vec4 fragColor = texture2D(sTexture, vTexCoord);\n"
- " vec4 fxColor = texture2D(sEffect, vTexCoord);\n"
- " gl_FragColor = mix(fragColor,fxColor, alpha);\n"
- "}\n";
+#define MAKE_SHADER(A)#A
+
+const char* VERTEX_COLOR_MESH = MAKE_SHADER(
+attribute mediump vec3 aPosition;\n
+attribute lowp vec3 aColor;\n
+uniform mediump mat4 uMvpMatrix;\n
+uniform mediump vec3 uSize;\n
+varying lowp vec3 vColor;\n
+\n
+void main()\n
+{\n
+ gl_Position = uMvpMatrix * vec4( aPosition*uSize, 1.0 );\n
+ vColor = aColor;\n
+}\n
+);
+
+const char* FRAGMENT_COLOR_MESH = MAKE_SHADER(
+uniform lowp vec4 uColor;\n
+varying lowp vec3 vColor;\n
+\n
+void main()\n
+{\n
+ gl_FragColor = vec4(vColor,1.0)*uColor;
+}\n
+);
+
+const char* VERTEX_TEXTURE_MESH = MAKE_SHADER(
+attribute mediump vec3 aPosition;\n
+attribute highp vec2 aTexCoord;\n
+uniform mediump mat4 uMvpMatrix;\n
+uniform mediump vec3 uSize;\n
+varying mediump vec2 vTexCoord;\n
+\n
+void main()\n
+{\n
+ gl_Position = uMvpMatrix * vec4( aPosition*uSize, 1.0 );\n
+ vTexCoord = aTexCoord;\n
+}\n
+);
+
+const char* FRAGMENT_TEXTURE_MESH = MAKE_SHADER(
+varying mediump vec2 vTexCoord;\n
+uniform lowp vec4 uColor;\n
+uniform sampler2D sTexture;\n
+\n
+void main()\n
+{\n
+ gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;
+}\n
+);
+
+const char* FRAGMENT_BLEND_SHADER = MAKE_SHADER(
+varying mediump vec2 vTexCoord;\n
+uniform sampler2D sTexture;\n
+uniform sampler2D sEffect;\n
+uniform mediump float alpha;\n
+\n
+void main()\n
+{\n
+ mediump vec4 fragColor = texture2D(sTexture, vTexCoord);\n
+ mediump vec4 fxColor = texture2D(sEffect, vTexCoord);\n
+ gl_FragColor = mix(fragColor,fxColor, alpha);\n
+}\n
+);
}; // anonymous namespace
NewWindowController( Application& app );
void Create( Application& app );
void Destroy( Application& app );
- void OnKeyEvent(const KeyEvent& event);
- bool OnLoseContextButtonClicked( Toolkit::Button button );
+
+ void AddBubbles( Actor& parentActor, const Vector2& stageSize);
+ void AddMeshActor( Actor& parentActor );
+ void AddBlendingImageActor( Actor& parentActor );
+ void AddTextLabel( Actor& parentActor );
+
+ ImageView CreateBlurredMirrorImage(const char* imageName);
+ FrameBufferImage CreateFrameBufferForImage( const char* imageName, Property::Map& shaderEffect, const Vector3& rgbDelta );
+ void SetUpBubbleEmission( const Vector2& emitPosition, const Vector2& direction );
+ Geometry CreateMeshGeometry();
+ Dali::Property::Map CreateColorModifierer();
+
static void NewWindow(void);
+ bool OnTrackTimerTick();
+ void OnKeyEvent(const KeyEvent& event);
+ bool OnLoseContextButtonClicked( Toolkit::Button button );
void OnContextLost();
void OnContextRegained();
- void CreateMeshActor();
- Mesh CreateMesh(bool, Material);
- void CreateBubbles(Vector2 stageSize);
- void CreateBlending();
- void CreateText();
- void CreateModel();
- void OnModelLoaded(Model model);
- bool OnTrackTimerTick();
- bool OnExplodeTimerTick();
- void SetUpAnimation( Vector2 emitPosition, Vector2 direction );
- FrameBufferImage CreateMirrorImage(const char* imageName);
- ImageActor CreateBlurredMirrorImage(const char* imageName);
- FrameBufferImage CreateFrameBufferForImage(const char* imageName, Image image, ShaderEffect shaderEffect);
-
private:
Application mApplication;
- Animation mModelAnimation;
- Actor mModelActor;
- Actor mCastingLight;
- ImageActor mImageActor;
- ImageActor mBlendActor;
- Image mEffectImage;
- Image mBaseImage;
- LightActor mKeyLightActor;
- MeshActor mMeshActor;
- MeshActor mAnimatedMeshActor;
- Model mModel;
-
- Toolkit::View mView; ///< The View instance.
+ TextLabel mTextActor;
+
+ Toolkit::Control mView; ///< The View instance.
Toolkit::ToolBar mToolBar; ///< The View's Toolbar.
+ TextLabel mTitleActor; ///< The Toolbar's Title.
Layer mContentLayer; ///< Content layer (scrolling cluster content)
Toolkit::PushButton mLoseContextButton;
- Vector3 mHSVDelta;
- Toolkit::BubbleEmitter mEmitter;
+ Toolkit::BubbleEmitter mEmitter;
Timer mEmitTrackTimer;
- Timer mExplodeTimer;
bool mNeedNewAnimation;
-
unsigned int mAnimateComponentCount;
Animation mEmitAnimation;
};
NewWindowController::NewWindowController( Application& application )
: mApplication(application),
- mHSVDelta(0.5f, 0.0f, 0.5f),
mNeedNewAnimation(true)
{
mApplication.InitSignal().Connect(this, &NewWindowController::Create);
mContentLayer = DemoHelper::CreateView( app,
mView,
mToolBar,
- BACKGROUND_IMAGE,
+ "",
TOOLBAR_IMAGE,
"Context recovery" );
+ Size stageSize = stage.GetSize();
+ ImageView backgroundActor = ImageView::New( BACKGROUND_IMAGE, Dali::ImageDimensions( stageSize.x, stageSize.y ) );
+ backgroundActor.SetParentOrigin( ParentOrigin::CENTER );
+ mContentLayer.Add(backgroundActor);
+
// Point the default render task at the view
RenderTaskList taskList = stage.GetRenderTaskList();
RenderTask defaultTask = taskList.GetTask( 0u );
}
mLoseContextButton = Toolkit::PushButton::New();
- mLoseContextButton.SetBackgroundImage( Image::New( LOSE_CONTEXT_IMAGE ) );
+ mLoseContextButton.SetUnselectedImage( LOSE_CONTEXT_IMAGE );
+ mLoseContextButton.SetSelectedImage( LOSE_CONTEXT_IMAGE_SELECTED );
mLoseContextButton.ClickedSignal().Connect( this, &NewWindowController::OnLoseContextButtonClicked );
mToolBar.AddControl( mLoseContextButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HorizontalRight, DemoHelper::DEFAULT_MODE_SWITCH_PADDING );
-
Actor logoLayoutActor = Actor::New();
logoLayoutActor.SetParentOrigin(ParentOrigin::CENTER);
logoLayoutActor.SetPosition(0.0f, -200.0f, 0.0f);
logoLayoutActor.SetScale(0.5f);
- mContentLayer.Add(logoLayoutActor);
-
- Image image = Image::New(DALI_IMAGE_DIR "dali-logo.png");
- mImageActor = ImageActor::New(image);
- mImageActor.SetName("dali-logo");
- mImageActor.SetParentOrigin(ParentOrigin::CENTER);
- mImageActor.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER);
- logoLayoutActor.Add(mImageActor);
-
- ImageActor mirrorImageActor = CreateBlurredMirrorImage(DALI_IMAGE_DIR "dali-logo.png");
- mirrorImageActor.SetParentOrigin(ParentOrigin::CENTER);
- mirrorImageActor.SetAnchorPoint(AnchorPoint::TOP_CENTER);
- logoLayoutActor.Add(mirrorImageActor);
-
- CreateBubbles(stage.GetSize());
- CreateMeshActor();
- CreateBlending();
- CreateText();
- CreateModel();
+ backgroundActor.Add(logoLayoutActor);
+
+ ImageView imageView = ImageView::New( LOGO_IMAGE );
+ imageView.SetName("daliLogo");
+ imageView.SetParentOrigin(ParentOrigin::CENTER);
+ imageView.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER);
+ logoLayoutActor.Add(imageView);
+
+ ImageView mirrorImageView = CreateBlurredMirrorImage(LOGO_IMAGE);
+ mirrorImageView.SetParentOrigin(ParentOrigin::TOP_CENTER);
+ mirrorImageView.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER);
+ logoLayoutActor.Add(mirrorImageView);
+
+ AddBubbles( backgroundActor, stage.GetSize());
+ AddMeshActor( backgroundActor );
+ AddBlendingImageActor( backgroundActor );
+ AddTextLabel( backgroundActor );
stage.ContextLostSignal().Connect(this, &NewWindowController::OnContextLost);
stage.ContextRegainedSignal().Connect(this, &NewWindowController::OnContextRegained);
void NewWindowController::Destroy( Application& app )
{
+ UnparentAndReset(mTextActor);
}
-bool NewWindowController::OnLoseContextButtonClicked( Toolkit::Button button )
+void NewWindowController::AddBubbles( Actor& parentActor, const Vector2& stageSize)
{
- // Add as an idle callback to avoid ProcessEvents being recursively called.
- mApplication.AddIdle(NewWindowController::NewWindow);
- return true;
+ mEmitter = Toolkit::BubbleEmitter::New( stageSize,
+ DemoHelper::LoadImage( DEMO_IMAGE_DIR "bubble-ball.png" ),
+ 200, Vector2( 5.0f, 5.0f ) );
+
+ Image background = DemoHelper::LoadImage(BACKGROUND_IMAGE);
+ mEmitter.SetBackground( background, Vector3(0.5f, 0.f,0.5f) );
+ mEmitter.SetBubbleDensity( 9.f );
+ Actor bubbleRoot = mEmitter.GetRootActor();
+ parentActor.Add( bubbleRoot );
+ bubbleRoot.SetParentOrigin(ParentOrigin::CENTER);
+ bubbleRoot.SetZ(0.1f);
+
+ mEmitTrackTimer = Timer::New( EMIT_INTERVAL_IN_MS );
+ mEmitTrackTimer.TickSignal().Connect(this, &NewWindowController::OnTrackTimerTick);
+ mEmitTrackTimer.Start();
}
-void NewWindowController::CreateMeshActor()
+void NewWindowController::AddMeshActor( Actor& parentActor )
{
- mEffectImage = Image::New(EFFECT_IMAGE);
-
- Material baseMaterial = Material::New( "Material1" );
- Dali::MeshActor meshActor = MeshActor::New( CreateMesh(true, baseMaterial) );
- meshActor.SetScale( 100.0f );
- meshActor.SetParentOrigin( ParentOrigin::CENTER );
- meshActor.SetPosition(Vector3( -150.0f, 200.0f, 0.0f ));
- meshActor.SetAffectedByLighting( false );
- meshActor.SetName("MeshActor");
- mContentLayer.Add( meshActor );
-
- Material orchidMaterial = Material::New( "Material2" );
- orchidMaterial.SetDiffuseTexture(mEffectImage);
-
- Dali::MeshActor meshActor2 = MeshActor::New( CreateMesh(false, orchidMaterial) );
- meshActor2.SetScale( 100.0f );
- meshActor2.SetParentOrigin( ParentOrigin::CENTER );
- meshActor2.SetPosition(Vector3( -150.0f, 310.0f, 0.0f ));
- meshActor2.SetAffectedByLighting( false );
- meshActor2.SetName("MeshActor");
- mContentLayer.Add( meshActor2 );
+ Geometry meshGeometry = CreateMeshGeometry();
+
+ // Create a coloured mesh
+ Shader shaderColorMesh = Shader::New( VERTEX_COLOR_MESH, FRAGMENT_COLOR_MESH );
+ Renderer colorMeshRenderer = Renderer::New( meshGeometry, shaderColorMesh );
+
+ Actor colorMeshActor = Actor::New();
+ colorMeshActor.AddRenderer( colorMeshRenderer );
+ colorMeshActor.SetSize( 175.f,175.f, 175.f );
+ colorMeshActor.SetParentOrigin( ParentOrigin::CENTER );
+ colorMeshActor.SetAnchorPoint(AnchorPoint::TOP_CENTER);
+ colorMeshActor.SetPosition(Vector3(0.0f, 50.0f, 0.0f));
+ colorMeshActor.SetOrientation( Degree(75.f), Vector3::XAXIS );
+ colorMeshActor.SetName("ColorMeshActor");
+
+ // Create a textured mesh
+ Texture effectTexture = DemoHelper::LoadTexture(EFFECT_IMAGE);
+ Shader shaderTextureMesh = Shader::New( VERTEX_TEXTURE_MESH, FRAGMENT_TEXTURE_MESH );
+ TextureSet textureSet = TextureSet::New();
+ textureSet.SetTexture( 0u, effectTexture );
+ Renderer textureMeshRenderer = Renderer::New( meshGeometry, shaderTextureMesh );
+ textureMeshRenderer.SetTextures( textureSet );
+
+ Actor textureMeshActor = Actor::New();
+ textureMeshActor.AddRenderer( textureMeshRenderer );
+ textureMeshActor.SetSize( 175.f,175.f, 175.f );
+ textureMeshActor.SetParentOrigin( ParentOrigin::CENTER );
+ textureMeshActor.SetAnchorPoint(AnchorPoint::TOP_CENTER);
+ textureMeshActor.SetPosition(Vector3(0.0f, 200.0f, 0.0f));
+ textureMeshActor.SetOrientation( Degree(75.f), Vector3::XAXIS );
+ textureMeshActor.SetName("TextureMeshActor");
+
+ Layer layer3d = Layer::New();
+ layer3d.SetParentOrigin( ParentOrigin::CENTER );
+ layer3d.SetAnchorPoint( AnchorPoint::CENTER );
+ layer3d.SetBehavior(Layer::LAYER_3D);
+
+ layer3d.Add( colorMeshActor );
+ layer3d.Add( textureMeshActor );
+ parentActor.Add(layer3d);
}
-FrameBufferImage NewWindowController::CreateMirrorImage(const char* imageName)
+void NewWindowController::AddBlendingImageActor( Actor& parentActor )
{
- FrameBufferImage fbo;
- Image image = Image::New(imageName);
- fbo = CreateFrameBufferForImage(imageName, image, ShaderEffect());
- return fbo;
+ Property::Map colorModifier = CreateColorModifierer();
+
+ FrameBufferImage fb2 = CreateFrameBufferForImage( EFFECT_IMAGE, colorModifier, Vector3( 0.5f, 0.5f, 0.5f ) );
+
+ ImageView tmpActor = ImageView::New(fb2);
+ parentActor.Add(tmpActor);
+ tmpActor.SetParentOrigin(ParentOrigin::CENTER_RIGHT);
+ tmpActor.SetAnchorPoint(AnchorPoint::TOP_RIGHT);
+ tmpActor.SetPosition(Vector3(0.0f, 150.0f, 0.0f));
+ tmpActor.SetScale(0.25f);
+
+ // create blending shader effect
+ Property::Map customShader;
+ customShader[ "fragmentShader" ] = FRAGMENT_BLEND_SHADER;
+ Property::Map map;
+ map[ "shader" ] = customShader;
+
+ ImageView blendActor = ImageView::New( BASE_IMAGE );
+ blendActor.SetProperty( ImageView::Property::IMAGE, map );
+ blendActor.RegisterProperty( "alpha", 0.5f );
+
+ blendActor.SetParentOrigin(ParentOrigin::CENTER_RIGHT);
+ blendActor.SetAnchorPoint(AnchorPoint::BOTTOM_RIGHT);
+ blendActor.SetPosition(Vector3(0.0f, 100.0f, 0.0f));
+ blendActor.SetSize(140, 140);
+ parentActor.Add(blendActor);
+
+ TextureSet textureSet = blendActor.GetRendererAt(0u).GetTextures();
+ TextureSetImage( textureSet, 1u, fb2 );
}
-ImageActor NewWindowController::CreateBlurredMirrorImage(const char* imageName)
+void NewWindowController::AddTextLabel( Actor& parentActor )
{
- FrameBufferImage fbo;
- Image image = Image::New( imageName );
- Vector2 FBOSize = Image::GetImageSize(imageName);
- fbo = FrameBufferImage::New( FBOSize.width, FBOSize.height, Pixel::RGBA8888);
+ mTextActor = TextLabel::New("Some text");
+ mTextActor.SetParentOrigin(ParentOrigin::CENTER);
+ mTextActor.SetColor(Color::RED);
+ mTextActor.SetName("PushMe text");
+ parentActor.Add( mTextActor );
+}
+
+ImageView NewWindowController::CreateBlurredMirrorImage(const char* imageName)
+{
+ Image image = DemoHelper::LoadImage(imageName);
+
+ Vector2 FBOSize = Vector2( image.GetWidth(), image.GetHeight() );
+ FrameBufferImage fbo = FrameBufferImage::New( FBOSize.width, FBOSize.height, Pixel::RGBA8888);
+
GaussianBlurView gbv = GaussianBlurView::New(5, 2.0f, Pixel::RGBA8888, 0.5f, 0.5f, true);
gbv.SetBackgroundColor(Color::TRANSPARENT);
gbv.SetUserImageAndOutputRenderTarget( image, fbo );
Stage::GetCurrent().Add(gbv);
gbv.ActivateOnce();
- ImageActor blurredActor = ImageActor::New(fbo);
+ ImageView blurredActor = ImageView::New(fbo);
blurredActor.SetSize(FBOSize);
blurredActor.SetScale(1.0f, -1.0f, 1.0f);
return blurredActor;
}
-FrameBufferImage NewWindowController::CreateFrameBufferForImage(const char* imageName, Image image, ShaderEffect shaderEffect)
+FrameBufferImage NewWindowController::CreateFrameBufferForImage(const char* imageName, Property::Map& shaderEffect, const Vector3& rgbDelta )
{
Stage stage = Stage::GetCurrent();
- Vector2 FBOSize = Image::GetImageSize(imageName);
+ Uint16Pair intFboSize = ResourceImage::GetImageSize( imageName );
+ Vector2 FBOSize = Vector2(intFboSize.GetWidth(), intFboSize.GetHeight());
FrameBufferImage framebuffer = FrameBufferImage::New(FBOSize.x, FBOSize.y );
RenderTask renderTask = stage.GetRenderTaskList().CreateTask();
- ImageActor imageActor = ImageActor::New(image);
- imageActor.SetName("Source image actor");
- if(shaderEffect)
- {
- imageActor.SetShaderEffect(shaderEffect);
- }
- imageActor.SetParentOrigin(ParentOrigin::CENTER);
- imageActor.SetAnchorPoint(AnchorPoint::CENTER);
- imageActor.SetScale(1.0f, -1.0f, 1.0f);
- stage.Add(imageActor); // Not in default image view
+ ImageView imageView = ImageView::New( imageName );
+ imageView.SetName("Source image actor");
+ imageView.SetProperty( ImageView::Property::IMAGE, shaderEffect );
+ imageView.RegisterProperty( "uRGBDelta", rgbDelta );
+
+ imageView.SetParentOrigin(ParentOrigin::CENTER);
+ imageView.SetAnchorPoint(AnchorPoint::CENTER);
+ imageView.SetScale(1.0f, -1.0f, 1.0f);
+ stage.Add(imageView); // Not in default image view
CameraActor cameraActor = CameraActor::New(FBOSize);
cameraActor.SetParentOrigin(ParentOrigin::CENTER);
cameraActor.SetNearClippingPlane(1.0f);
cameraActor.SetAspectRatio(FBOSize.width / FBOSize.height);
cameraActor.SetType(Dali::Camera::FREE_LOOK); // camera orientation based solely on actor
- cameraActor.SetRotation(Quaternion(M_PI, Vector3::YAXIS));
cameraActor.SetPosition(0.0f, 0.0f, ((FBOSize.height * 0.5f) / tanf(Math::PI * 0.125f)));
stage.Add(cameraActor);
- renderTask.SetSourceActor(imageActor);
+ renderTask.SetSourceActor(imageView);
renderTask.SetInputEnabled(false);
renderTask.SetTargetFrameBuffer(framebuffer);
renderTask.SetCameraActor( cameraActor );
return framebuffer;
}
-void NewWindowController::CreateBubbles(Vector2 stageSize)
-{
- mEmitter = Toolkit::BubbleEmitter::New( stageSize,
- Image::New( DALI_IMAGE_DIR "bubble-ball.png" ),
- 1000, Vector2( 5.0f, 5.0f ) );
-
- Image background = Image::New(BACKGROUND_IMAGE);
- mEmitter.SetBackground( background, mHSVDelta );
- Actor bubbleRoot = mEmitter.GetRootActor();
- mContentLayer.Add( bubbleRoot );
- bubbleRoot.SetParentOrigin(ParentOrigin::CENTER);
- bubbleRoot.SetZ(0.1f);
-
- mEmitTrackTimer = Timer::New( EMIT_INTERVAL_IN_MS );
- mEmitTrackTimer.TickSignal().Connect(this, &NewWindowController::OnTrackTimerTick);
- mEmitTrackTimer.Start();
-
- //mExplodeTimer = Timer::New( Random::Range(4000.f, 8000.f) );
- //mExplodeTimer.TickSignal().Connect(this, &NewWindowController::OnExplodeTimerTick);
- //mExplodeTimer.Start();
-}
-
-bool NewWindowController::OnExplodeTimerTick()
-{
- mEmitter.StartExplosion( EXPLOSION_DURATION, 5.0f );
-
- mExplodeTimer = Timer::New( Random::Range(4.f, 8.f) );
- mExplodeTimer.TickSignal().Connect(this, &NewWindowController::OnExplodeTimerTick);
- return false;
-}
-
-void NewWindowController::SetUpAnimation( Vector2 emitPosition, Vector2 direction )
+void NewWindowController::SetUpBubbleEmission( const Vector2& emitPosition, const Vector2& direction)
{
if( mNeedNewAnimation )
{
mAnimateComponentCount = 0;
}
- mEmitter.EmitBubble( mEmitAnimation, emitPosition, direction, Vector2(1, 1) );
+ mEmitter.EmitBubble( mEmitAnimation, emitPosition, direction, Vector2(10,10) );
mAnimateComponentCount++;
- if( mAnimateComponentCount % 20 ==0 )
+ if( mAnimateComponentCount % 6 ==0 )
{
mEmitAnimation.Play();
mNeedNewAnimation = true;
}
}
-bool NewWindowController::OnTrackTimerTick()
+Geometry NewWindowController::CreateMeshGeometry()
{
- static int time=0;
- const float radius(250.0f);
-
- time += EMIT_INTERVAL_IN_MS;
- float modTime = time / TRACK_DURATION_IN_MS;
- float angle = 2.0f*Math::PI*modTime;
-
- Vector2 position(radius*cosf(angle), radius*-sinf(angle));
- Vector2 aimPos(radius*2*sinf(angle), radius*2*-cosf(angle));
- Vector2 direction = aimPos-position;
- Vector2 stageSize = Stage::GetCurrent().GetSize();
-
- for(int i=0; i<20; i++)
+ // Create vertices and specify their color
+ struct Vertex
{
- SetUpAnimation( stageSize*0.5f+position, direction );
- }
-
- return true;
-}
+ Vector3 position;
+ Vector2 textureCoordinates;
+ Vector3 color;
+ };
+
+ Vertex vertexData[5] = {
+ { Vector3( 0.0f, 0.0f, 0.5f ), Vector2(0.5f, 0.5f), Vector3(1.0f, 1.0f, 1.0f) },
+ { Vector3( -0.5f, -0.5f, 0.0f ), Vector2(0.0f, 0.0f), Vector3(1.0f, 0.0f, 0.0f) },
+ { Vector3( 0.5f, -0.5f, 0.0f ), Vector2(1.0f, 0.0f), Vector3(1.0f, 1.0f, 0.0f) },
+ { Vector3( -0.5f, 0.5f, 0.0f ), Vector2(0.0f, 1.0f), Vector3(0.0f, 1.0f, 0.0f) },
+ { Vector3( 0.5f, 0.5f, 0.0f ), Vector2(1.0f, 1.0f), Vector3(0.0f, 0.0f, 1.0f) } };
+
+ Property::Map vertexFormat;
+ vertexFormat["aPosition"] = Property::VECTOR3;
+ vertexFormat["aTexCoord"] = Property::VECTOR2;
+ vertexFormat["aColor"] = Property::VECTOR3;
+ PropertyBuffer vertices = PropertyBuffer::New( vertexFormat );
+ vertices.SetData( vertexData, 5 );
+ // Specify all the faces
+ unsigned short indexData[12] = { 0,1,3,0,2,4,0,3,4,0,2,1 };
-void NewWindowController::CreateBlending()
-{
- Toolkit::ColorAdjuster colorAdjuster = ColorAdjuster::New(mHSVDelta);
- FrameBufferImage fb2 = CreateFrameBufferForImage( EFFECT_IMAGE, mEffectImage, colorAdjuster );
-
- ImageActor tmpActor = ImageActor::New(fb2);
- mContentLayer.Add(tmpActor);
- tmpActor.SetParentOrigin(ParentOrigin::BOTTOM_RIGHT);
- tmpActor.SetAnchorPoint(AnchorPoint::BOTTOM_RIGHT);
- tmpActor.SetScale(0.25f);
+ // Create the geometry object
+ Geometry geometry = Geometry::New();
+ geometry.AddVertexBuffer( vertices );
+ geometry.SetIndexBuffer( &indexData[0], 12 );
- // create blending shader effect
- ShaderEffect blendShader = ShaderEffect::New( "", FRAG_SHADER );
- blendShader.SetEffectImage( fb2 );
- blendShader.SetUniform("alpha", 0.5f);
-
- mBaseImage = Image::New(BASE_IMAGE);
- mBlendActor = ImageActor::New( mBaseImage );
- mBlendActor.SetParentOrigin(ParentOrigin::CENTER);
- mBlendActor.SetPosition(Vector3(150.0f, 200.0f, 0.0f));
- mBlendActor.SetSize(140, 140);
- mBlendActor.SetShaderEffect( blendShader );
- mContentLayer.Add(mBlendActor);
+ return geometry;
}
-void NewWindowController::CreateText()
+Dali::Property::Map NewWindowController::CreateColorModifierer()
{
- // TODO
+ const char* fragmentShader ( DALI_COMPOSE_SHADER (
+ precision highp float;\n
+ uniform vec3 uRGBDelta;\n
+ uniform float uIgnoreAlpha;\n
+ \n
+ varying mediump vec2 vTexCoord;\n
+ uniform sampler2D sTexture;\n
+ \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
+ vec4 color = texture2D(sTexture, vTexCoord); \n
+ // modify the hsv Value
+ color.rgb += uRGBDelta * rand(vTexCoord); \n
+ // if the new vale exceeds one, then decrease it
+ color.rgb -= max(color.rgb*2.0 - vec3(2.0), 0.0);\n
+ // if the new vale drops below zero, then increase it
+ color.rgb -= min(color.rgb*2.0, 0.0);\n
+ gl_FragColor = color; \n
+ }\n
+ ) );
+
+ Property::Map map;
+ Property::Map customShader;
+ customShader[ "fragmentShader" ] = fragmentShader;
+ map[ "shader" ] = customShader;
+
+ return map;
}
-Mesh NewWindowController::CreateMesh(bool hasColor, Material material)
+void NewWindowController::NewWindow(void)
{
- // Create vertices and specify their color
- MeshData::VertexContainer vertices(4);
- vertices[ 0 ] = MeshData::Vertex( Vector3( -0.5f, -0.5f, 0.0f ), Vector2(0.0f, 0.0f), Vector3(1.0f, 0.0f, 0.0f) );
- vertices[ 1 ] = MeshData::Vertex( Vector3( 0.5f, -0.5f, 0.0f ), Vector2(1.0f, 0.0f), Vector3(1.0f, 1.0f, 0.0f) );
- vertices[ 2 ] = MeshData::Vertex( Vector3( -0.5f, 0.5f, 0.0f ), Vector2(0.0f, 1.0f), Vector3(0.0f,1.0f,0.0f) );
- vertices[ 3 ] = MeshData::Vertex( Vector3( 0.5f, 0.5f, 0.0f ), Vector2(1.0f, 1.0f), Vector3(0.0f,0.0f,1.0f) );
-
- // Specify all the faces
- MeshData::FaceIndices faces;
- faces.reserve( 6 ); // 2 triangles in Quad
- faces.push_back( 0 ); faces.push_back( 3 ); faces.push_back( 1 );
- faces.push_back( 0 ); faces.push_back( 2 ); faces.push_back( 3 );
-
- // Create the mesh data from the vertices and faces
- MeshData meshData;
- meshData.SetHasColor( hasColor );
- meshData.SetMaterial( material );
- meshData.SetVertices( vertices );
- meshData.SetFaceIndices( faces );
-
- // Create a mesh from the data
- Dali::Mesh mesh = Mesh::New( meshData );
- return mesh;
+ PositionSize posSize(0, 0, 720, 1280);
+ gApplication.ReplaceWindow(posSize, "NewWindow"); // Generates a new window
}
-void NewWindowController::CreateModel()
+bool NewWindowController::OnLoseContextButtonClicked( Toolkit::Button button )
{
- mModel = Model::New(gModelFile);
- mModel.LoadingFinishedSignal().Connect(this, &NewWindowController::OnModelLoaded);
-
- //Create a Key light
- Light keylight = Light::New("KeyLight");
- keylight.SetFallOff(Vector2(10000.0f, 10000.0f));
-
- mCastingLight = Actor::New();
- mCastingLight.SetParentOrigin(ParentOrigin::CENTER);
- mCastingLight.SetAnchorPoint(AnchorPoint::CENTER);
- mCastingLight.SetPosition( Vector3( 0.0f, 0.0f, 800.0f ) );
- mContentLayer.Add( mCastingLight );
-
- mKeyLightActor = LightActor::New();
- mKeyLightActor.SetParentOrigin(ParentOrigin::CENTER);
- mKeyLightActor.SetName(keylight.GetName());
-
- //Add all the actors to the stage
- mCastingLight.Add(mKeyLightActor);
- mKeyLightActor.SetLight(keylight);
+ // Add as an idle callback to avoid ProcessEvents being recursively called.
+ mApplication.AddIdle( MakeCallback( NewWindowController::NewWindow ) );
+ return true;
}
-void NewWindowController::OnModelLoaded( Model model )
+bool NewWindowController::OnTrackTimerTick()
{
- if( model.GetLoadingState() == ResourceLoadingSucceeded )
- {
- std::cout << "Succeeded loading collada model" << std::endl;
- mModelActor = ModelActorFactory::BuildActorTree(mModel, ""); // Gets root actor
- mModelActor.SetSize(250.0f, 250.0f);
- mModelActor.SetPosition(0.0f, 200.0f, 70.0f);
- mModelActor.SetScale(0.5f);
- mModelActor.SetRotation(Radian(Math::PI*0.25f), Vector3(1.0, 0.7, 0.0));
+ static int time=0;
+ const float radius(250.0f);
- mContentLayer.Add( mModelActor );
+ time += EMIT_INTERVAL_IN_MS;
+ float modTime = time / TRACK_DURATION_IN_MS;
+ float angle = 2.0f*Math::PI*modTime;
- if (mModel.NumberOfAnimations())
- {
- mModelAnimation = ModelActorFactory::BuildAnimation(mModel, mModelActor, 0);
- mModelAnimation.SetDuration(4.0f);
- mModelAnimation.SetLooping(true);
- mModelAnimation.Play();
- }
- }
- else
- {
- std::cout << "Failed loading collada model" << std::endl;
- mApplication.Quit();
- }
-}
+ Vector2 position(radius*cosf(angle), radius*-sinf(angle));
+ Vector2 aimPos(radius*2*sinf(angle), radius*2*-cosf(angle));
+ Vector2 direction = aimPos-position;
+ Vector2 stageSize = Stage::GetCurrent().GetSize();
-void NewWindowController::NewWindow(void)
-{
- PositionSize posSize(0, 0, 720, 1280);
- gApplication.ReplaceWindow(posSize, "NewWindow"); // Generates a new window
+ SetUpBubbleEmission( stageSize*0.5f+position, direction );
+ SetUpBubbleEmission( stageSize*0.5f+position*0.75f, direction );
+ SetUpBubbleEmission( stageSize*0.5f+position*0.7f, direction );
+
+ return true;
}
void NewWindowController::OnKeyEvent(const KeyEvent& event)
printf("Stage reporting context regain\n");
}
-
-
-
void RunTest(Application& app)
{
gNewWindowController = new NewWindowController(app);
app.MainLoop(Configuration::APPLICATION_DOES_NOT_HANDLE_CONTEXT_LOSS);
}
-// Entry point for Linux & SLP applications
+// Entry point for Linux & Tizen applications
//
-
-int main(int argc, char **argv)
+int DALI_EXPORT_API main(int argc, char **argv)
{
- gApplication = Application::New(&argc, &argv);
+ gApplication = Application::New(&argc, &argv, DEMO_THEME_PATH);
RunTest(gApplication);
return 0;