* limitations under the License.
*/
+// EXTERNAL INCLUDES
+#include <dali/devel-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 <cstdio>
#include <iostream>
+// INTERNAL INCLUDES
+#include "shared/view.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 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 );
- ImageActor CreateBlurredMirrorImage(const char* imageName);
- FrameBufferImage CreateFrameBufferForImage(const char* imageName, Image image, ShaderEffect shaderEffect);
+ 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();
- ShaderEffect CreateColorModifierer( const Vector3& rgbDelta );
+ Dali::Property::Map CreateColorModifierer();
static void NewWindow(void);
void NewWindowController::Create( Application& app )
{
- DemoHelper::RequestThemeChange();
-
Stage stage = Stage::GetCurrent();
stage.SetBackgroundColor(Color::YELLOW);
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( backgroundImage );
backgroundActor.SetParentOrigin( ParentOrigin::CENTER );
- backgroundActor.SetZ(-2.f);
mContentLayer.Add(backgroundActor);
// Point the default render task at the view
}
mLoseContextButton = Toolkit::PushButton::New();
- mLoseContextButton.SetBackgroundImage( ResourceImage::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 );
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);
- ImageActor imageActor = ImageActor::New(image);
- imageActor.SetName("dali-logo");
- imageActor.SetParentOrigin(ParentOrigin::CENTER);
- imageActor.SetAnchorPoint(AnchorPoint::BOTTOM_CENTER);
- logoLayoutActor.Add(imageActor);
-
- ImageActor mirrorImageActor = CreateBlurredMirrorImage(LOGO_IMAGE);
- mirrorImageActor.SetParentOrigin(ParentOrigin::CENTER);
- mirrorImageActor.SetAnchorPoint(AnchorPoint::TOP_CENTER);
- logoLayoutActor.Add(mirrorImageActor);
-
- AddBubbles(stage.GetSize());
- AddMeshActor();
- AddBlendingImageActor();
- AddTextLabel();
+ ImageView imageView = ImageView::New(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);
+ 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);
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" ),
+ ResourceImage::New( DEMO_IMAGE_DIR "bubble-ball.png" ),
200, Vector2( 5.0f, 5.0f ) );
Image background = ResourceImage::New(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();
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);
- Sampler sampler = Sampler::New(effectImage, "sTexture");
-
Shader shaderTextureMesh = Shader::New( VERTEX_TEXTURE_MESH, FRAGMENT_TEXTURE_MESH );
Material textureMeshMaterial = Material::New( shaderTextureMesh );
- textureMeshMaterial.AddSampler( sampler );
+ textureMeshMaterial.AddTexture(effectImage, "sTexture");
Renderer textureMeshRenderer = Renderer::New( meshGeometry, textureMeshMaterial );
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();
- ImageActor tmpActor = ImageActor::New(fb2);
- mContentLayer.Add(tmpActor);
+ 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
- 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;
Image baseImage = ResourceImage::New(BASE_IMAGE);
- ImageActor blendActor = ImageActor::New( baseImage );
+ ImageView blendActor = ImageView::New( baseImage );
+ 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);
- blendActor.SetShaderEffect( blendShader );
- mContentLayer.Add(blendActor);
+ parentActor.Add(blendActor);
+
+ blendActor.GetRendererAt(0u).GetMaterial().AddTexture(fb2, "sEffect");
}
-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 );
}
-ImageActor NewWindowController::CreateBlurredMirrorImage(const char* imageName)
+ImageView NewWindowController::CreateBlurredMirrorImage(const char* imageName)
{
Image image = ResourceImage::New(imageName);
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();
- 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( PropertyBuffer::STATIC, vertexFormat, 5 );
+ PropertyBuffer vertices = PropertyBuffer::New( vertexFormat, 5 );
vertices.SetData( vertexData );
// 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::UNSIGNED_INTEGER;
- PropertyBuffer indices = PropertyBuffer::New( PropertyBuffer::STATIC, indexFormat, 12 );
+ indexFormat["indices"] = Property::INTEGER;
+ PropertyBuffer indices = PropertyBuffer::New( indexFormat, 12 );
indices.SetData( indexData );
// Create the geometry object
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)
//
int main(int argc, char **argv)
{
- gApplication = Application::New(&argc, &argv);
+ gApplication = Application::New(&argc, &argv, DEMO_THEME_PATH);
RunTest(gApplication);
return 0;