/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 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.
*
*/
-#include <dali/dali.h>
#include <dali-toolkit/dali-toolkit.h>
+#include <dali/dali.h>
+
+#include "generated/rendering-textured-cube-frag.h"
+#include "generated/rendering-textured-cube-vert.h"
using namespace Dali;
using namespace Toolkit;
namespace
{
-
-/*
- * Vertex shader
- */
-const char* VERTEX_SHADER = DALI_COMPOSE_SHADER(
-attribute mediump vec3 aPosition;\n // DALi shader builtin
-attribute mediump vec2 aTexCoord;\n // DALi shader builtin
-uniform mediump mat4 uMvpMatrix;\n // DALi shader builtin
-uniform mediump vec3 uSize;\n // DALi shader builtin
-\n
-varying mediump vec2 vTexCoord;\n
-void main()\n
-{\n
- mediump vec4 vertexPosition = vec4(aPosition, 1.0);\n
- vertexPosition.xyz *= uSize;\n
- vTexCoord = aTexCoord;\n
- gl_Position = uMvpMatrix * vertexPosition;\n
-}\n
-);
-
-/*
- * Fragment shader
- */
-const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER(
-uniform sampler2D uTexture;\n
-\n
-varying mediump vec2 vTexCoord;\n
-void main()\n
-{\n
- mediump vec4 texColor = texture2D( uTexture, vTexCoord );\n
- gl_FragColor = texColor;\n
-}\n
-);
-
const char* TEXTURE_URL = DEMO_IMAGE_DIR "wood.png";
-}
+} // namespace
// This example shows how to create textured cube
//
class TexturedCubeController : public ConnectionTracker
{
public:
-
- TexturedCubeController( Application& application )
- : mApplication( application )
+ TexturedCubeController(Application& application)
+ : mApplication(application)
{
// Connect to the Application's Init signal
- mApplication.InitSignal().Connect( this, &TexturedCubeController::Create );
+ mApplication.InitSignal().Connect(this, &TexturedCubeController::Create);
}
~TexturedCubeController()
}
// The Init signal is received once (only) during the Application lifetime
- void Create( Application& application )
+ void Create(Application& application)
{
- // Get a handle to the stage
- Stage stage = Stage::GetCurrent();
- stage.SetBackgroundColor( Color::WHITE );
+ // Get a handle to the window
+ Window window = application.GetWindow();
+ window.SetBackgroundColor(Color::WHITE);
// Step 1. Create shader
CreateCubeShader();
// Step 6. Play animation to rotate the cube
PlayAnimation();
- // Respond to a click anywhere on the stage
- stage.GetRootLayer().TouchSignal().Connect( this, &TexturedCubeController::OnTouch );
+ // Respond to a click anywhere on the window
+ window.GetRootLayer().TouchedSignal().Connect(this, &TexturedCubeController::OnTouch);
// Respond to key events
- stage.KeyEventSignal().Connect( this, &TexturedCubeController::OnKeyEvent );
+ window.KeyEventSignal().Connect(this, &TexturedCubeController::OnKeyEvent);
}
- bool OnTouch( Actor actor, const TouchData& touch )
+ bool OnTouch(Actor actor, const TouchEvent& touch)
{
// quit the application
mApplication.Quit();
* Will use this to quit the application if Back or the Escape key is received
* @param[in] event The key event information
*/
- void OnKeyEvent( const KeyEvent& event )
+ void OnKeyEvent(const KeyEvent& event)
{
- if( event.state == KeyEvent::Down )
+ if(event.GetState() == KeyEvent::DOWN)
{
- if ( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) )
+ if(IsKey(event, Dali::DALI_KEY_ESCAPE) || IsKey(event, Dali::DALI_KEY_BACK))
{
mApplication.Quit();
}
};
Vertex vertices[] = {
- { Vector3( 1.0f,-1.0f,-1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( -1.0f, 1.0f,-1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( 1.0f, 1.0f,-1.0f ), Vector2( 0.0, 1.0 ) },
- { Vector3( -1.0f, 1.0f, 1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( 1.0f,-1.0f, 1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( 1.0f, 1.0f, 1.0f ), Vector2( 0.0, 1.0 ) },
- { Vector3( 1.0f, 1.0f, 1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( 1.0f,-1.0f,-1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( 1.0f, 1.0f,-1.0f ), Vector2( 0.0, 1.0 ) },
- { Vector3( 1.0f,-1.0f, 1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( -1.0f,-1.0f,-1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( 1.0f,-1.0f,-1.0f ), Vector2( 0.0, 1.0 ) },
- { Vector3( -1.0f,-1.0f,-1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( -1.0f, 1.0f, 1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( -1.0f, 1.0f,-1.0f ), Vector2( 0.0, 1.0 ) },
- { Vector3( 1.0f, 1.0f,-1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( -1.0f, 1.0f, 1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( 1.0f, 1.0f, 1.0f ), Vector2( 0.0, 1.0 ) },
- { Vector3( 1.0f,-1.0f,-1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( -1.0f,-1.0f,-1.0f ), Vector2( 1.0, 0.0 ) },
- { Vector3( -1.0f, 1.0f,-1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( -1.0f, 1.0f, 1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( -1.0f,-1.0f, 1.0f ), Vector2( 1.0, 0.0 ) },
- { Vector3( 1.0f,-1.0f, 1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( 1.0f, 1.0f, 1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( 1.0f,-1.0f, 1.0f ), Vector2( 1.0, 0.0 ) },
- { Vector3( 1.0f,-1.0f,-1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( 1.0f,-1.0f, 1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( -1.0f,-1.0f, 1.0f ), Vector2( 1.0, 0.0 ) },
- { Vector3( -1.0f,-1.0f,-1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( -1.0f,-1.0f,-1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( -1.0f,-1.0f, 1.0f ), Vector2( 1.0, 0.0 ) },
- { Vector3( -1.0f, 1.0f, 1.0f ), Vector2( 0.0, 0.0 ) },
- { Vector3( 1.0f, 1.0f,-1.0f ), Vector2( 1.0, 1.0 ) },
- { Vector3( -1.0f, 1.0f,-1.0f ), Vector2( 1.0, 0.0 ) },
- { Vector3( -1.0f, 1.0f, 1.0f ), Vector2( 0.0, 0.0 ) },
+ {Vector3(1.0f, -1.0f, -1.0f), Vector2(1.0, 1.0)},
+ {Vector3(-1.0f, 1.0f, -1.0f), Vector2(0.0, 0.0)},
+ {Vector3(1.0f, 1.0f, -1.0f), Vector2(0.0, 1.0)},
+ {Vector3(-1.0f, 1.0f, 1.0f), Vector2(1.0, 1.0)},
+ {Vector3(1.0f, -1.0f, 1.0f), Vector2(0.0, 0.0)},
+ {Vector3(1.0f, 1.0f, 1.0f), Vector2(0.0, 1.0)},
+ {Vector3(1.0f, 1.0f, 1.0f), Vector2(1.0, 1.0)},
+ {Vector3(1.0f, -1.0f, -1.0f), Vector2(0.0, 0.0)},
+ {Vector3(1.0f, 1.0f, -1.0f), Vector2(0.0, 1.0)},
+ {Vector3(1.0f, -1.0f, 1.0f), Vector2(1.0, 1.0)},
+ {Vector3(-1.0f, -1.0f, -1.0f), Vector2(0.0, 0.0)},
+ {Vector3(1.0f, -1.0f, -1.0f), Vector2(0.0, 1.0)},
+ {Vector3(-1.0f, -1.0f, -1.0f), Vector2(1.0, 1.0)},
+ {Vector3(-1.0f, 1.0f, 1.0f), Vector2(0.0, 0.0)},
+ {Vector3(-1.0f, 1.0f, -1.0f), Vector2(0.0, 1.0)},
+ {Vector3(1.0f, 1.0f, -1.0f), Vector2(1.0, 1.0)},
+ {Vector3(-1.0f, 1.0f, 1.0f), Vector2(0.0, 0.0)},
+ {Vector3(1.0f, 1.0f, 1.0f), Vector2(0.0, 1.0)},
+ {Vector3(1.0f, -1.0f, -1.0f), Vector2(1.0, 1.0)},
+ {Vector3(-1.0f, -1.0f, -1.0f), Vector2(1.0, 0.0)},
+ {Vector3(-1.0f, 1.0f, -1.0f), Vector2(0.0, 0.0)},
+ {Vector3(-1.0f, 1.0f, 1.0f), Vector2(1.0, 1.0)},
+ {Vector3(-1.0f, -1.0f, 1.0f), Vector2(1.0, 0.0)},
+ {Vector3(1.0f, -1.0f, 1.0f), Vector2(0.0, 0.0)},
+ {Vector3(1.0f, 1.0f, 1.0f), Vector2(1.0, 1.0)},
+ {Vector3(1.0f, -1.0f, 1.0f), Vector2(1.0, 0.0)},
+ {Vector3(1.0f, -1.0f, -1.0f), Vector2(0.0, 0.0)},
+ {Vector3(1.0f, -1.0f, 1.0f), Vector2(1.0, 1.0)},
+ {Vector3(-1.0f, -1.0f, 1.0f), Vector2(1.0, 0.0)},
+ {Vector3(-1.0f, -1.0f, -1.0f), Vector2(0.0, 0.0)},
+ {Vector3(-1.0f, -1.0f, -1.0f), Vector2(1.0, 1.0)},
+ {Vector3(-1.0f, -1.0f, 1.0f), Vector2(1.0, 0.0)},
+ {Vector3(-1.0f, 1.0f, 1.0f), Vector2(0.0, 0.0)},
+ {Vector3(1.0f, 1.0f, -1.0f), Vector2(1.0, 1.0)},
+ {Vector3(-1.0f, 1.0f, -1.0f), Vector2(1.0, 0.0)},
+ {Vector3(-1.0f, 1.0f, 1.0f), Vector2(0.0, 0.0)},
};
- PropertyBuffer vertexBuffer = PropertyBuffer::New( Property::Map()
- .Add( "aPosition", Property::VECTOR3 )
- .Add( "aTexCoord", Property::VECTOR2 ) );
- vertexBuffer.SetData( vertices, sizeof(vertices) / sizeof(Vertex) );
+ VertexBuffer vertexBuffer = VertexBuffer::New(Property::Map()
+ .Add("aPosition", Property::VECTOR3)
+ .Add("aTexCoord", Property::VECTOR2));
+ vertexBuffer.SetData(vertices, sizeof(vertices) / sizeof(Vertex));
// create indices
const unsigned short INDEX_CUBE[] = {
- 2, 1, 0,
- 5, 4, 3,
- 8, 7, 6,
- 11, 10, 9,
- 14, 13, 12,
- 17, 16, 15,
- 20, 19, 18,
- 23, 22, 21,
- 26, 25, 24,
- 29, 28, 27,
- 32, 31, 30,
- 35, 34, 33
- };
+ 2, 1, 0, 5, 4, 3, 8, 7, 6, 11, 10, 9, 14, 13, 12, 17, 16, 15, 20, 19, 18, 23, 22, 21, 26, 25, 24, 29, 28, 27, 32, 31, 30, 35, 34, 33};
mGeometry = Geometry::New();
- mGeometry.AddVertexBuffer( vertexBuffer );
- mGeometry.SetIndexBuffer( INDEX_CUBE,
- sizeof(INDEX_CUBE)/sizeof(INDEX_CUBE[0]) );
- mGeometry.SetType( Geometry::TRIANGLES );
+ mGeometry.AddVertexBuffer(vertexBuffer);
+ mGeometry.SetIndexBuffer(INDEX_CUBE,
+ sizeof(INDEX_CUBE) / sizeof(INDEX_CUBE[0]));
+ mGeometry.SetType(Geometry::TRIANGLES);
}
/**
- * Creates a shader using inlined variable VERTEX_SHADER and FRAGMENT_SHADER
+ * Creates a shader using SHADER_RENDERING_TEXTURED_CUBE_VERT and SHADER_RENDERING_TEXTURED_CUBE_FRAG
*
* Shaders are very basic and all they do is transforming vertices and sampling
* a texture.
*/
void CreateCubeShader()
{
- mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
+ mShader = Shader::New(SHADER_RENDERING_TEXTURED_CUBE_VERT, SHADER_RENDERING_TEXTURED_CUBE_FRAG);
}
/**
void CreateTexture()
{
// Load image from file
- PixelData pixels = SyncImageLoader::Load( TEXTURE_URL );
+ PixelData pixels = SyncImageLoader::Load(TEXTURE_URL);
- Texture texture = Texture::New( TextureType::TEXTURE_2D, pixels.GetPixelFormat(), pixels.GetWidth(), pixels.GetHeight() );
- texture.Upload( pixels, 0, 0, 0, 0, pixels.GetWidth(), pixels.GetHeight() );
+ Texture texture = Texture::New(TextureType::TEXTURE_2D, pixels.GetPixelFormat(), pixels.GetWidth(), pixels.GetHeight());
+ texture.Upload(pixels, 0, 0, 0, 0, pixels.GetWidth(), pixels.GetHeight());
// create TextureSet
mTextureSet = TextureSet::New();
- mTextureSet.SetTexture( 0, texture );
+ mTextureSet.SetTexture(0, texture);
}
/**
*/
void CreateRenderer()
{
- mRenderer = Renderer::New( mGeometry, mShader );
- mRenderer.SetTextures( mTextureSet );
+ mRenderer = Renderer::New(mGeometry, mShader);
+ mRenderer.SetTextures(mTextureSet);
// Face culling is enabled to hide the backwards facing sides of the cube
// This is sufficient to render a single object; for more complex scenes depth-testing might be required
- mRenderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK );
+ mRenderer.SetProperty(Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK);
}
/**
*/
void CreateActor()
{
- Stage stage = Stage::GetCurrent();
-
- float quarterStageWidth = stage.GetSize().x * 0.25f;
- mActor = Actor::New();
- mActor.SetAnchorPoint( AnchorPoint::CENTER );
- mActor.SetParentOrigin( ParentOrigin::CENTER );
- mActor.SetPosition( Vector3( 0.0f, 0.0f, 0.0f ) );
- mActor.SetSize( Vector3( quarterStageWidth, quarterStageWidth, quarterStageWidth ) );
- mActor.AddRenderer( mRenderer );
- stage.Add( mActor );
+ Window window = mApplication.GetWindow();
+
+ float quarterWindowWidth = window.GetSize().GetWidth() * 0.25f;
+ mActor = Actor::New();
+ mActor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+ mActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ mActor.SetProperty(Actor::Property::POSITION, Vector3(0.0f, 0.0f, 0.0f));
+ mActor.SetProperty(Actor::Property::SIZE, Vector3(quarterWindowWidth, quarterWindowWidth, quarterWindowWidth));
+ mActor.AddRenderer(mRenderer);
+ window.Add(mActor);
}
/**
*/
void PlayAnimation()
{
- mAnimation = Animation::New( 5.0f );
- mAnimation.SetLooping( true );
- mAnimation.AnimateBy( Property( mActor, Actor::Property::ORIENTATION ), Quaternion( Radian( Degree( 360 )), Vector3::ZAXIS ) );
- mAnimation.AnimateBy( Property( mActor, Actor::Property::ORIENTATION ), Quaternion( Radian( Degree( 360 )), Vector3::YAXIS ) );
- mAnimation.AnimateBy( Property( mActor, Actor::Property::ORIENTATION ), Quaternion( Radian( Degree( 360 )), Vector3::XAXIS ) );
+ mAnimation = Animation::New(5.0f);
+ mAnimation.SetLooping(true);
+ mAnimation.AnimateBy(Property(mActor, Actor::Property::ORIENTATION), Quaternion(Radian(Degree(360)), Vector3::ZAXIS));
+ mAnimation.AnimateBy(Property(mActor, Actor::Property::ORIENTATION), Quaternion(Radian(Degree(360)), Vector3::YAXIS));
+ mAnimation.AnimateBy(Property(mActor, Actor::Property::ORIENTATION), Quaternion(Radian(Degree(360)), Vector3::XAXIS));
mAnimation.Play();
}
private:
- Application& mApplication;
+ Application& mApplication;
- Renderer mRenderer;
- Shader mShader;
- Geometry mGeometry;
+ Renderer mRenderer;
+ Shader mShader;
+ Geometry mGeometry;
TextureSet mTextureSet;
- Actor mActor;
- Animation mAnimation;
+ Actor mActor;
+ Animation mAnimation;
};
-void RunTest( Application& application )
+int DALI_EXPORT_API main(int argc, char** argv)
{
- TexturedCubeController test( application );
-
+ Application application = Application::New(&argc, &argv);
+ TexturedCubeController test(application);
application.MainLoop();
-}
-
-// Entry point for Linux & Tizen applications
-//
-int DALI_EXPORT_API main( int argc, char **argv )
-{
- Application application = Application::New( &argc, &argv );
-
- RunTest( application );
-
return 0;
}