/*
- * 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.
*/
// EXTERNAL INCLUDES
-#include <dali/devel-api/rendering/renderer.h>
+#include <dali/devel-api/images/texture-set-image.h>
+#include <dali/public-api/rendering/renderer.h>
#include <dali-toolkit/dali-toolkit.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 * 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 LOSE_CONTEXT_IMAGE_SELECTED( DALI_IMAGE_DIR "icon-cluster-wobble-selected.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 LOGO_IMAGE(DALI_IMAGE_DIR "dali-logo.png");
+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(40);
);
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
void Create( Application& app );
void Destroy( Application& app );
- void AddBubbles(const Vector2& stageSize);
- void AddMeshActor();
- void AddBlendingImageActor();
- void AddTextLabel();
+ 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, Image image, ShaderEffect shaderEffect);
+ FrameBufferImage CreateFrameBufferForImage( const char* imageName, Property::Map& shaderEffect, const Vector3& rgbDelta );
void SetUpBubbleEmission( const Vector2& emitPosition, const Vector2& direction );
Geometry CreateMeshGeometry();
- ShaderEffect CreateColorModifierer( const Vector3& rgbDelta );
+ Dali::Property::Map CreateColorModifierer();
static void NewWindow(void);
"Context recovery" );
Size stageSize = stage.GetSize();
- Image backgroundImage = ResourceImage::New( BACKGROUND_IMAGE, Dali::ImageDimensions( stageSize.x, stageSize.y ), Dali::FittingMode::SCALE_TO_FILL, Dali::SamplingMode::BOX_THEN_LINEAR );
- ImageActor backgroundActor = ImageActor::New( backgroundImage );
+ ImageView backgroundActor = ImageView::New( BACKGROUND_IMAGE, Dali::ImageDimensions( stageSize.x, stageSize.y ) );
backgroundActor.SetParentOrigin( ParentOrigin::CENTER );
- backgroundActor.SetZ(-2.f);
mContentLayer.Add(backgroundActor);
// Point the default render task at the view
logoLayoutActor.SetParentOrigin(ParentOrigin::CENTER);
logoLayoutActor.SetPosition(0.0f, -200.0f, 0.0f);
logoLayoutActor.SetScale(0.5f);
- mContentLayer.Add(logoLayoutActor);
+ backgroundActor.Add(logoLayoutActor);
- Image image = ResourceImage::New(LOGO_IMAGE);
- ImageView imageView = ImageView::New(image);
- imageView.SetName("dali-logo");
+ 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::CENTER);
- mirrorImageView.SetAnchorPoint(AnchorPoint::TOP_CENTER);
+ mirrorImageView.SetParentOrigin(ParentOrigin::TOP_CENTER);
+ mirrorImageView.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER);
logoLayoutActor.Add(mirrorImageView);
- AddBubbles(stage.GetSize());
- AddMeshActor();
- AddBlendingImageActor();
- AddTextLabel();
+ AddBubbles( backgroundActor, stage.GetSize());
+ AddMeshActor( backgroundActor );
+ AddBlendingImageActor( backgroundActor );
+ AddTextLabel( backgroundActor );
stage.ContextLostSignal().Connect(this, &NewWindowController::OnContextLost);
stage.ContextRegainedSignal().Connect(this, &NewWindowController::OnContextRegained);
UnparentAndReset(mTextActor);
}
-void NewWindowController::AddBubbles(const Vector2& stageSize)
+void NewWindowController::AddBubbles( Actor& parentActor, const Vector2& stageSize)
{
mEmitter = Toolkit::BubbleEmitter::New( stageSize,
- ResourceImage::New( DALI_IMAGE_DIR "bubble-ball.png" ),
+ DemoHelper::LoadImage( DEMO_IMAGE_DIR "bubble-ball.png" ),
200, Vector2( 5.0f, 5.0f ) );
- Image background = ResourceImage::New(BACKGROUND_IMAGE);
+ Image background = DemoHelper::LoadImage(BACKGROUND_IMAGE);
mEmitter.SetBackground( background, Vector3(0.5f, 0.f,0.5f) );
mEmitter.SetBubbleDensity( 9.f );
Actor bubbleRoot = mEmitter.GetRootActor();
- mContentLayer.Add( bubbleRoot );
+ parentActor.Add( bubbleRoot );
bubbleRoot.SetParentOrigin(ParentOrigin::CENTER);
bubbleRoot.SetZ(0.1f);
mEmitTrackTimer.Start();
}
-void NewWindowController::AddMeshActor()
+void NewWindowController::AddMeshActor( Actor& parentActor )
{
Geometry meshGeometry = CreateMeshGeometry();
// Create a coloured mesh
Shader shaderColorMesh = Shader::New( VERTEX_COLOR_MESH, FRAGMENT_COLOR_MESH );
- Material colorMeshmaterial = Material::New( shaderColorMesh );
- Renderer colorMeshRenderer = Renderer::New( meshGeometry, colorMeshmaterial );
+ Renderer colorMeshRenderer = Renderer::New( meshGeometry, shaderColorMesh );
Actor colorMeshActor = Actor::New();
colorMeshActor.AddRenderer( colorMeshRenderer );
- colorMeshActor.SetSize( 175.f,175.f );
+ 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");
- mContentLayer.Add( colorMeshActor );
// Create a textured mesh
- Image effectImage = ResourceImage::New(EFFECT_IMAGE);
+ Texture effectTexture = DemoHelper::LoadTexture(EFFECT_IMAGE);
Shader shaderTextureMesh = Shader::New( VERTEX_TEXTURE_MESH, FRAGMENT_TEXTURE_MESH );
- Material textureMeshMaterial = Material::New( shaderTextureMesh );
- textureMeshMaterial.AddTexture(effectImage, "sTexture");
- Renderer textureMeshRenderer = Renderer::New( meshGeometry, textureMeshMaterial );
+ 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 );
+ 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");
- mContentLayer.Add( 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);
}
-void NewWindowController::AddBlendingImageActor()
+void NewWindowController::AddBlendingImageActor( Actor& parentActor )
{
- ShaderEffect colorModifier = CreateColorModifierer(Vector3( 0.5f, 0.5f, 0.5f ));
- Image effectImage = ResourceImage::New(EFFECT_IMAGE);
- FrameBufferImage fb2 = CreateFrameBufferForImage( EFFECT_IMAGE, effectImage, colorModifier );
+ Property::Map colorModifier = CreateColorModifierer();
+
+ FrameBufferImage fb2 = CreateFrameBufferForImage( EFFECT_IMAGE, colorModifier, Vector3( 0.5f, 0.5f, 0.5f ) );
ImageView tmpActor = ImageView::New(fb2);
- mContentLayer.Add(tmpActor);
+ 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
- ShaderEffect blendShader = ShaderEffect::New( "", FRAGMENT_BLEND_SHADER );
- blendShader.SetEffectImage( fb2 );
- blendShader.SetUniform("alpha", 0.5f);
+ 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 );
- Image baseImage = ResourceImage::New(BASE_IMAGE);
- ImageActor blendActor = ImageActor::New( baseImage );
blendActor.SetParentOrigin(ParentOrigin::CENTER_RIGHT);
blendActor.SetAnchorPoint(AnchorPoint::BOTTOM_RIGHT);
blendActor.SetPosition(Vector3(0.0f, 100.0f, 0.0f));
blendActor.SetSize(140, 140);
- blendActor.SetShaderEffect( blendShader );
- mContentLayer.Add(blendActor);
+ parentActor.Add(blendActor);
+
+ TextureSet textureSet = blendActor.GetRendererAt(0u).GetTextures();
+ TextureSetImage( textureSet, 1u, fb2 );
}
-void NewWindowController::AddTextLabel()
+void NewWindowController::AddTextLabel( Actor& parentActor )
{
mTextActor = TextLabel::New("Some text");
mTextActor.SetParentOrigin(ParentOrigin::CENTER);
mTextActor.SetColor(Color::RED);
mTextActor.SetName("PushMe text");
- mContentLayer.Add( mTextActor );
+ parentActor.Add( mTextActor );
}
ImageView NewWindowController::CreateBlurredMirrorImage(const char* imageName)
{
- Image image = ResourceImage::New(imageName);
+ Image image = DemoHelper::LoadImage(imageName);
- Uint16Pair intFboSize = ResourceImage::GetImageSize(imageName);
- Vector2 FBOSize = Vector2( intFboSize.GetWidth(), intFboSize.GetHeight() );
+ 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);
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();
- Uint16Pair intFboSize = ResourceImage::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.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 );
vertexFormat["aPosition"] = Property::VECTOR3;
vertexFormat["aTexCoord"] = Property::VECTOR2;
vertexFormat["aColor"] = Property::VECTOR3;
- PropertyBuffer vertices = PropertyBuffer::New( vertexFormat, 5 );
- vertices.SetData( vertexData );
+ PropertyBuffer vertices = PropertyBuffer::New( vertexFormat );
+ vertices.SetData( vertexData, 5 );
// Specify all the faces
- unsigned int indexData[12] = { 0,1,3,0,2,4,0,3,4,0,2,1 };
- Property::Map indexFormat;
- indexFormat["indices"] = Property::INTEGER;
- PropertyBuffer indices = PropertyBuffer::New( indexFormat, 12 );
- indices.SetData( indexData );
+ unsigned short indexData[12] = { 0,1,3,0,2,4,0,3,4,0,2,1 };
// Create the geometry object
Geometry geometry = Geometry::New();
geometry.AddVertexBuffer( vertices );
- geometry.SetIndexBuffer( indices );
+ geometry.SetIndexBuffer( &indexData[0], 12 );
return geometry;
}
-ShaderEffect NewWindowController::CreateColorModifierer( const Vector3& rgbDelta )
+Dali::Property::Map NewWindowController::CreateColorModifierer()
{
- std::string fragmentShader = MAKE_SHADER(
+ 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}
color.rgb -= min(color.rgb*2.0, 0.0);\n
gl_FragColor = color; \n
}\n
- );
+ ) );
- ShaderEffect shaderEffect = ShaderEffect::New("", fragmentShader);
- shaderEffect.SetUniform( "uRGBDelta", rgbDelta );
+ Property::Map map;
+ Property::Map customShader;
+ customShader[ "fragmentShader" ] = fragmentShader;
+ map[ "shader" ] = customShader;
- return shaderEffect;
+ return map;
}
void NewWindowController::NewWindow(void)
// 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, DALI_DEMO_THEME_PATH);
+ gApplication = Application::New(&argc, &argv, DEMO_THEME_PATH);
RunTest(gApplication);
return 0;