From 5d4db52cfe19e40ff8eb748c09764d7237556781 Mon Sep 17 00:00:00 2001 From: David Steele Date: Thu, 9 Apr 2015 19:12:28 +0100 Subject: [PATCH] New point and line demos --- examples/line-mesh/line-mesh-example.cpp | 256 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ examples/mesh/mesh-example.cpp | 258 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ examples/point-mesh/point-mesh-example.cpp | 252 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ examples/textured-mesh/textured-mesh-example.cpp | 266 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 774 insertions(+), 258 deletions(-) create mode 100644 examples/line-mesh/line-mesh-example.cpp delete mode 100644 examples/mesh/mesh-example.cpp create mode 100644 examples/point-mesh/point-mesh-example.cpp create mode 100644 examples/textured-mesh/textured-mesh-example.cpp diff --git a/examples/line-mesh/line-mesh-example.cpp b/examples/line-mesh/line-mesh-example.cpp new file mode 100644 index 0000000..07e1f86 --- /dev/null +++ b/examples/line-mesh/line-mesh-example.cpp @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2015 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// EXTERNAL INCLUDES + +// INTERNAL INCLUDES +#include "shared/view.h" + +#include + +using namespace Dali; + +namespace +{ +const char* MATERIAL_SAMPLE( DALI_IMAGE_DIR "gallery-small-48.jpg" ); +const char* MATERIAL_SAMPLE2( DALI_IMAGE_DIR "gallery-medium-19.jpg" ); + +#define MAKE_SHADER(A)#A + +const char* VERTEX_SHADER = MAKE_SHADER( +attribute mediump vec2 aPosition1; +attribute mediump vec2 aPosition2; +uniform mediump mat4 uMvpMatrix; +uniform mediump vec3 uSize; +uniform mediump float uMorphAmount; + +void main() +{ + mediump vec2 morphPosition = mix(aPosition1, aPosition2, uMorphAmount); + mediump vec4 vertexPosition = vec4(morphPosition, 0.0, 1.0); + vertexPosition.xyz *= uSize; + vertexPosition = uMvpMatrix * vertexPosition; + gl_Position = vertexPosition; +} +); + +const char* FRAGMENT_SHADER = MAKE_SHADER( +uniform lowp vec4 uColor; +uniform sampler2D sTexture; + +void main() +{ + gl_FragColor = uColor; +} +); + +Geometry CreateGeometry() +{ + // Create vertices + struct Vertex { Vector2 position; }; + Vertex pentagonVertexData[5] = + { + { Vector2( 0.0f, 1.00f) }, // 0 + { Vector2( -0.95f, 0.31f) }, // 1 + { Vector2( -0.59f, -0.81f) }, // 2 + { Vector2( 0.59f, -0.81f) }, // 3 + { Vector2( 0.95f, 0.31f) }, // 4 + }; + + Vertex pentacleVertexData[5] = + { + { Vector2( 0.0f, -1.00f) }, // + { Vector2( 0.59f, 0.81f) }, // + { Vector2( -0.95f, -0.31f) }, // + { Vector2( 0.95f, -0.31f) }, // + { Vector2( -0.59f, 0.81f) }, // + }; + + Property::Map pentagonVertexFormat; + pentagonVertexFormat["aPosition1"] = Property::VECTOR2; + PropertyBuffer pentagonVertices = PropertyBuffer::New( PropertyBuffer::STATIC, pentagonVertexFormat, 5 ); + pentagonVertices.SetData(pentagonVertexData); + + Property::Map pentacleVertexFormat; + pentacleVertexFormat["aPosition2"] = Property::VECTOR2; + PropertyBuffer pentacleVertices = PropertyBuffer::New( PropertyBuffer::STATIC, pentacleVertexFormat, 5 ); + pentacleVertices.SetData(pentacleVertexData); + + // Create indices + unsigned short indexData[10] = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 0 }; + Property::Map indexFormat; + indexFormat["indices"] = Property::UNSIGNED_INTEGER; + PropertyBuffer indices = PropertyBuffer::New( PropertyBuffer::STATIC, indexFormat, 5 ); + indices.SetData(indexData); + + // Create the geometry object + Geometry pentagonGeometry = Geometry::New(); + pentagonGeometry.AddVertexBuffer( pentagonVertices ); + pentagonGeometry.AddVertexBuffer( pentacleVertices ); + pentagonGeometry.SetIndexBuffer( indices ); + + pentagonGeometry.SetGeometryType( Geometry::LINES ); + + return pentagonGeometry; +} + +} // anonymous namespace + +// This example shows how to morph between 2 meshes with the same number of +// vertices. +class ExampleController : public ConnectionTracker +{ +public: + + /** + * The example controller constructor. + * @param[in] application The application instance + */ + ExampleController( Application& application ) + : mApplication( application ) + { + // Connect to the Application's Init signal + mApplication.InitSignal().Connect( this, &ExampleController::Create ); + } + + /** + * The example controller destructor + */ + ~ExampleController() + { + // Nothing to do here; + } + + /** + * Invoked upon creation of application + * @param[in] application The application instance + */ + void Create( Application& application ) + { + Stage stage = Stage::GetCurrent(); + stage.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent); + + mStageSize = stage.GetSize(); + + // The Init signal is received once (only) during the Application lifetime + + // Hide the indicator bar + application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE ); + + mImage = ResourceImage::New( MATERIAL_SAMPLE ); + mSampler = Sampler::New(mImage, "sTexture"); + mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); + + mMaterial = Material::New( mShader ); + mMaterial.AddSampler( mSampler ); + + mGeometry = CreateGeometry(); + + mRenderer = Renderer::New( mGeometry, mMaterial ); + + mMeshActor = Actor::New(); + mMeshActor.AddRenderer( mRenderer ); + mMeshActor.SetSize(200, 200); + + Property::Index morphAmountIndex = mMeshActor.RegisterProperty( "morph-amount", 0.0f ); + mMeshActor.AddUniformMapping( morphAmountIndex, std::string("uMorphAmount") ); + + mRenderer.SetDepthIndex(0); + + mMeshActor.SetParentOrigin( ParentOrigin::CENTER ); + mMeshActor.SetAnchorPoint( AnchorPoint::CENTER ); + stage.Add( mMeshActor ); + + mChangeImageTimer = Timer::New( 5000 ); + mChangeImageTimer.TickSignal().Connect( this, &ExampleController::OnTimer ); + mChangeImageTimer.Start(); + + Animation animation = Animation::New(5); + KeyFrames keyFrames = KeyFrames::New(); + keyFrames.Add(0.0f, 0.0f); + keyFrames.Add(1.0f, 1.0f); + + animation.AnimateBetween( Property( mMeshActor, morphAmountIndex ), keyFrames, AlphaFunctions::Sin ); + animation.SetLooping(true); + animation.Play(); + + stage.SetBackgroundColor(Vector4(0.0f, 0.2f, 0.2f, 1.0f));; + } + + /** + * Invoked whenever the quit button is clicked + * @param[in] button the quit button + */ + bool OnQuitButtonClicked( Toolkit::Button button ) + { + // quit the application + mApplication.Quit(); + return true; + } + + bool OnTimer() + { + Image image = ResourceImage::New( MATERIAL_SAMPLE2 ); + mSampler.SetImage( image ); + return false; + } + + void OnKeyEvent(const KeyEvent& event) + { + if(event.state == KeyEvent::Down) + { + if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) + { + mApplication.Quit(); + } + } + } + +private: + + Application& mApplication; ///< Application instance + Vector3 mStageSize; ///< The size of the stage + + Image mImage; + Sampler mSampler; + Shader mShader; + Material mMaterial; + Geometry mGeometry; + Renderer mRenderer; + Actor mMeshActor; + Renderer mRenderer2; + Actor mMeshActor2; + Timer mChangeImageTimer; +}; + +void RunTest( Application& application ) +{ + ExampleController test( application ); + + application.MainLoop(); +} + +// Entry point for Linux & SLP applications +// +int main( int argc, char **argv ) +{ + Application application = Application::New( &argc, &argv ); + + RunTest( application ); + + return 0; +} diff --git a/examples/mesh/mesh-example.cpp b/examples/mesh/mesh-example.cpp deleted file mode 100644 index 5702436..0000000 --- a/examples/mesh/mesh-example.cpp +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (c) 2014 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -// EXTERNAL INCLUDES - -// INTERNAL INCLUDES -#include "shared/view.h" - -#include - -using namespace Dali; - -namespace -{ -const char* MATERIAL_SAMPLE( DALI_IMAGE_DIR "gallery-small-48.jpg" ); - -#define MAKE_SHADER(A)#A - -const char* VERTEX_SHADER = MAKE_SHADER( -attribute mediump vec2 aPosition; -attribute highp vec2 aTexCoord; -varying mediump vec2 vTexCoord; -uniform mediump mat4 uMvpMatrix; -uniform mediump vec3 uSize; -uniform lowp vec4 uFadeColor; - -void main() -{ - mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0); - vertexPosition.xyz *= uSize; - vertexPosition = uMvpMatrix * vertexPosition; - vTexCoord = aTexCoord; - gl_Position = vertexPosition; -} -); - -const char* FRAGMENT_SHADER = MAKE_SHADER( -varying mediump vec2 vTexCoord; -uniform lowp vec4 uColor; -uniform sampler2D sTexture; -uniform lowp vec4 uFadeColor; - -void main() -{ - gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor * uFadeColor; -} -); - -Geometry CreateGeometry() -{ - - // Create vertices - const float halfQuadSize = .5f; - struct TexturedQuadVertex { Vector2 position; Vector2 textureCoordinates; }; - TexturedQuadVertex texturedQuadVertexData[4] = { - { Vector2(-halfQuadSize, -halfQuadSize), Vector2(0.f, 0.f) }, - { Vector2( halfQuadSize, -halfQuadSize), Vector2(1.f, 0.f) }, - { Vector2(-halfQuadSize, halfQuadSize), Vector2(0.f, 1.f) }, - { Vector2( halfQuadSize, halfQuadSize), Vector2(1.f, 1.f) } }; - - Property::Map texturedQuadVertexFormat; - texturedQuadVertexFormat["aPosition"] = Property::VECTOR2; - texturedQuadVertexFormat["aVertexCoord"] = Property::VECTOR2; - PropertyBuffer texturedQuadVertices = PropertyBuffer::New( PropertyBuffer::STATIC, texturedQuadVertexFormat, 4 ); - texturedQuadVertices.SetData(texturedQuadVertexData); - - // Create indices - unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 }; - Property::Map indexFormat; - indexFormat["indices"] = Property::UNSIGNED_INTEGER; - PropertyBuffer indices = PropertyBuffer::New( PropertyBuffer::STATIC, indexFormat, 3 ); - indices.SetData(indexData); - - // Create the geometry object - Geometry texturedQuadGeometry = Geometry::New(); - texturedQuadGeometry.AddVertexBuffer( texturedQuadVertices ); - texturedQuadGeometry.SetIndexBuffer( indices ); - - return texturedQuadGeometry; -} - -} // anonymous namespace - -// This example shows how to use a simple mesh -// -class ExampleController : public ConnectionTracker -{ -public: - - /** - * The example controller constructor. - * @param[in] application The application instance - */ - ExampleController( Application& application ) - : mApplication( application ) - { - // Connect to the Application's Init signal - mApplication.InitSignal().Connect( this, &ExampleController::Create ); - } - - /** - * The example controller destructor - */ - ~ExampleController() - { - // Nothing to do here; - } - - /** - * Invoked upon creation of application - * @param[in] application The application instance - */ - void Create( Application& application ) - { - Stage stage = Stage::GetCurrent(); - stage.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent); - - mStageSize = stage.GetSize(); - - // The Init signal is received once (only) during the Application lifetime - - // Hide the indicator bar - application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE ); - - mImage = ResourceImage::New( MATERIAL_SAMPLE ); - mSampler = Sampler::New(mImage, "sTexture"); - mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); - - mMaterial = Material::New( mShader ); - mMaterial.AddSampler( mSampler ); - - mGeometry = CreateGeometry(); - - mRenderer = Renderer::New( mGeometry, mMaterial ); - - mMeshActor = Actor::New(); - mMeshActor.AddRenderer( mRenderer ); - mMeshActor.SetSize(400, 400); - - Property::Index fadeColorIndex = mMeshActor.RegisterProperty( "fade-color", Color::GREEN ); - mMeshActor.AddUniformMapping( fadeColorIndex, std::string("uFadeColor") ); - - fadeColorIndex = mRenderer.RegisterProperty( "fade-color", Color::MAGENTA ); - mRenderer.AddUniformMapping( fadeColorIndex, std::string("uFadeColor" ) ); - mRenderer.SetDepthIndex(0); - - mMeshActor.SetParentOrigin( ParentOrigin::TOP_CENTER ); - mMeshActor.SetAnchorPoint( AnchorPoint::TOP_CENTER ); - stage.Add( mMeshActor ); - - - mRenderer2 = Renderer::New( mGeometry, mMaterial ); - - mMeshActor2 = Actor::New(); - mMeshActor2.AddRenderer( mRenderer2 ); - mMeshActor2.SetSize(400, 400); - - mMeshActor2.RegisterProperty( "a-n-other-property", Color::GREEN ); - Property::Index fadeColorIndex2 = mMeshActor2.RegisterProperty( "another-fade-color", Color::GREEN ); - mMeshActor2.AddUniformMapping( fadeColorIndex2, std::string("uFadeColor") ); - - mRenderer2.RegisterProperty( "a-n-other-property", Vector3::ZERO ); - mRenderer2.RegisterProperty( "winning-formula", 8008.135f ); - fadeColorIndex2 = mRenderer2.RegisterProperty( "another-fade-color", Color::GREEN ); - mRenderer2.AddUniformMapping( fadeColorIndex2, std::string("uFadeColor" ) ); - mRenderer2.SetDepthIndex(0); - - mMeshActor2.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); - mMeshActor2.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); - stage.Add( mMeshActor2 ); - - - Animation animation = Animation::New(5); - KeyFrames keyFrames = KeyFrames::New(); - keyFrames.Add(0.0f, Vector4::ZERO); - keyFrames.Add(1.0f, Vector4( 1.0f, 0.0f, 1.0f, 1.0f )); - - KeyFrames keyFrames2 = KeyFrames::New(); - keyFrames2.Add(0.0f, Vector4::ZERO); - keyFrames2.Add(1.0f, Color::GREEN); - - animation.AnimateBetween( Property( mRenderer, fadeColorIndex ), keyFrames, AlphaFunctions::Sin ); - animation.AnimateBetween( Property( mRenderer2, fadeColorIndex2 ), keyFrames2, AlphaFunctions::Sin2x ); - animation.SetLooping(true); - animation.Play(); - - stage.SetBackgroundColor(Vector4(0.0f, 0.2f, 0.2f, 1.0f));; - } - - /** - * Invoked whenever the quit button is clicked - * @param[in] button the quit button - */ - bool OnQuitButtonClicked( Toolkit::Button button ) - { - // quit the application - mApplication.Quit(); - return true; - } - - void OnKeyEvent(const KeyEvent& event) - { - if(event.state == KeyEvent::Down) - { - if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) - { - mApplication.Quit(); - } - } - } - -private: - - Application& mApplication; ///< Application instance - Vector3 mStageSize; ///< The size of the stage - - Image mImage; - Sampler mSampler; - Shader mShader; - Material mMaterial; - Geometry mGeometry; - Renderer mRenderer; - Actor mMeshActor; - Renderer mRenderer2; - Actor mMeshActor2; -}; - -void RunTest( Application& application ) -{ - ExampleController test( application ); - - application.MainLoop(); -} - -// Entry point for Linux & SLP applications -// -int main( int argc, char **argv ) -{ - Application application = Application::New( &argc, &argv ); - - RunTest( application ); - - return 0; -} diff --git a/examples/point-mesh/point-mesh-example.cpp b/examples/point-mesh/point-mesh-example.cpp new file mode 100644 index 0000000..80a6ad0 --- /dev/null +++ b/examples/point-mesh/point-mesh-example.cpp @@ -0,0 +1,252 @@ +/* + * Copyright (c) 2015 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// EXTERNAL INCLUDES + +// INTERNAL INCLUDES +#include "shared/view.h" + +#include + +using namespace Dali; + +namespace +{ +const char* MATERIAL_SAMPLE( DALI_IMAGE_DIR "gallery-small-48.jpg" ); +const char* MATERIAL_SAMPLE2( DALI_IMAGE_DIR "gallery-medium-19.jpg" ); + +#define MAKE_SHADER(A)#A + +const char* VERTEX_SHADER = MAKE_SHADER( +attribute mediump vec2 aPosition; +attribute highp float aHue; +varying mediump vec2 vTexCoord; +uniform mediump mat4 uMvpMatrix; +uniform mediump vec3 uSize; +uniform lowp vec4 uFadeColor; +varying mediump vec3 vVertexColor; +varying mediump float vHue; + +vec3 hsv2rgb(vec3 c) +{ + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void main() +{ + mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0); + vertexPosition.xyz *= uSize; + vertexPosition = uMvpMatrix * vertexPosition; + vVertexColor = hsv2rgb( vec3( aHue, 0.6, 0.7 ) ); + vHue = aHue; + gl_PointSize = 80.0; + gl_Position = vertexPosition; +} +); + +const char* FRAGMENT_SHADER = MAKE_SHADER( +varying mediump vec3 vVertexColor; +varying mediump float vHue; +uniform lowp vec4 uColor; +uniform sampler2D sTexture1; +uniform sampler2D sTexture2; +uniform lowp vec4 uFadeColor; + +void main() +{ + mediump vec4 texCol1 = texture2D(sTexture1, gl_PointCoord); + mediump vec4 texCol2 = texture2D(sTexture2, gl_PointCoord); + gl_FragColor = vec4(vVertexColor, 1.0) * ((texCol1*vHue) + (texCol2*(1.0-vHue))); +} +); + +Geometry CreateGeometry() +{ + // Create vertices + struct Vertex { Vector2 position; float hue; }; + + unsigned int numSides = 20; + Vertex polyhedraVertexData[numSides]; + float angle=0; + float sectorAngle = 2.0f * Math::PI / (float) numSides; + for(unsigned int i=0; i + +using namespace Dali; + +namespace +{ +const char* MATERIAL_SAMPLE( DALI_IMAGE_DIR "gallery-small-48.jpg" ); +const char* MATERIAL_SAMPLE2( DALI_IMAGE_DIR "gallery-medium-19.jpg" ); + +#define MAKE_SHADER(A)#A + +const char* VERTEX_SHADER = MAKE_SHADER( +attribute mediump vec2 aPosition; +attribute highp vec2 aTexCoord; +varying mediump vec2 vTexCoord; +uniform mediump mat4 uMvpMatrix; +uniform mediump vec3 uSize; +uniform lowp vec4 uFadeColor; + +void main() +{ + mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0); + vertexPosition.xyz *= uSize; + vertexPosition = uMvpMatrix * vertexPosition; + vTexCoord = aTexCoord; + gl_Position = vertexPosition; +} +); + +const char* FRAGMENT_SHADER = MAKE_SHADER( +varying mediump vec2 vTexCoord; +uniform lowp vec4 uColor; +uniform sampler2D sTexture; +uniform lowp vec4 uFadeColor; + +void main() +{ + gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor * uFadeColor; +} +); + +Geometry CreateGeometry() +{ + // Create vertices + const float halfQuadSize = .5f; + struct TexturedQuadVertex { Vector2 position; Vector2 textureCoordinates; }; + TexturedQuadVertex texturedQuadVertexData[4] = { + { Vector2(-halfQuadSize, -halfQuadSize), Vector2(0.f, 0.f) }, + { Vector2( halfQuadSize, -halfQuadSize), Vector2(1.f, 0.f) }, + { Vector2(-halfQuadSize, halfQuadSize), Vector2(0.f, 1.f) }, + { Vector2( halfQuadSize, halfQuadSize), Vector2(1.f, 1.f) } }; + + Property::Map texturedQuadVertexFormat; + texturedQuadVertexFormat["aPosition"] = Property::VECTOR2; + texturedQuadVertexFormat["aTexCoord"] = Property::VECTOR2; + PropertyBuffer texturedQuadVertices = PropertyBuffer::New( PropertyBuffer::STATIC, texturedQuadVertexFormat, 4 ); + texturedQuadVertices.SetData(texturedQuadVertexData); + + // Create indices + unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 }; + Property::Map indexFormat; + indexFormat["indices"] = Property::UNSIGNED_INTEGER; + PropertyBuffer indices = PropertyBuffer::New( PropertyBuffer::STATIC, indexFormat, 3 ); + indices.SetData(indexData); + + // Create the geometry object + Geometry texturedQuadGeometry = Geometry::New(); + texturedQuadGeometry.AddVertexBuffer( texturedQuadVertices ); + texturedQuadGeometry.SetIndexBuffer( indices ); + + return texturedQuadGeometry; +} + +} // anonymous namespace + +// This example shows how to use a simple mesh +// +class ExampleController : public ConnectionTracker +{ +public: + + /** + * The example controller constructor. + * @param[in] application The application instance + */ + ExampleController( Application& application ) + : mApplication( application ) + { + // Connect to the Application's Init signal + mApplication.InitSignal().Connect( this, &ExampleController::Create ); + } + + /** + * The example controller destructor + */ + ~ExampleController() + { + // Nothing to do here; + } + + /** + * Invoked upon creation of application + * @param[in] application The application instance + */ + void Create( Application& application ) + { + Stage stage = Stage::GetCurrent(); + stage.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent); + + mStageSize = stage.GetSize(); + + // The Init signal is received once (only) during the Application lifetime + + // Hide the indicator bar + application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE ); + + mImage = ResourceImage::New( MATERIAL_SAMPLE ); + mSampler1 = Sampler::New(mImage, "sTexture"); + + Image image = ResourceImage::New( MATERIAL_SAMPLE2 ); + mSampler2 = Sampler::New(image, "sTexture"); + + mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); + + mMaterial1 = Material::New( mShader ); + mMaterial1.AddSampler( mSampler1 ); + + mMaterial2 = Material::New( mShader ); + mMaterial2.AddSampler( mSampler2); + + mGeometry = CreateGeometry(); + + mRenderer = Renderer::New( mGeometry, mMaterial1 ); + + mMeshActor = Actor::New(); + mMeshActor.AddRenderer( mRenderer ); + mMeshActor.SetSize(400, 400); + + Property::Index fadeColorIndex = mMeshActor.RegisterProperty( "fade-color", Color::GREEN ); + mMeshActor.AddUniformMapping( fadeColorIndex, std::string("uFadeColor") ); + + fadeColorIndex = mRenderer.RegisterProperty( "fade-color", Color::MAGENTA ); + mRenderer.AddUniformMapping( fadeColorIndex, std::string("uFadeColor" ) ); + mRenderer.SetDepthIndex(0); + + mMeshActor.SetParentOrigin( ParentOrigin::TOP_CENTER ); + mMeshActor.SetAnchorPoint( AnchorPoint::TOP_CENTER ); + stage.Add( mMeshActor ); + + mRenderer2 = Renderer::New( mGeometry, mMaterial2 ); + + mMeshActor2 = Actor::New(); + mMeshActor2.AddRenderer( mRenderer2 ); + mMeshActor2.SetSize(400, 400); + + mMeshActor2.RegisterProperty( "a-n-other-property", Color::GREEN ); + Property::Index fadeColorIndex2 = mMeshActor2.RegisterProperty( "another-fade-color", Color::GREEN ); + mMeshActor2.AddUniformMapping( fadeColorIndex2, std::string("uFadeColor") ); + + mRenderer2.RegisterProperty( "a-n-other-property", Vector3::ZERO ); + mRenderer2.RegisterProperty( "a-coefficient", 0.008f ); + fadeColorIndex2 = mRenderer2.RegisterProperty( "another-fade-color", Color::GREEN ); + mRenderer2.AddUniformMapping( fadeColorIndex2, std::string("uFadeColor" ) ); + mRenderer2.SetDepthIndex(0); + + mMeshActor2.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); + mMeshActor2.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); + stage.Add( mMeshActor2 ); + + Animation animation = Animation::New(5); + KeyFrames keyFrames = KeyFrames::New(); + keyFrames.Add(0.0f, Vector4::ZERO); + keyFrames.Add(1.0f, Vector4( 1.0f, 0.0f, 1.0f, 1.0f )); + + KeyFrames keyFrames2 = KeyFrames::New(); + keyFrames2.Add(0.0f, Vector4::ZERO); + keyFrames2.Add(1.0f, Color::GREEN); + + animation.AnimateBetween( Property( mRenderer, fadeColorIndex ), keyFrames, AlphaFunctions::Sin ); + animation.AnimateBetween( Property( mRenderer2, fadeColorIndex2 ), keyFrames2, AlphaFunctions::Sin2x ); + animation.SetLooping(true); + animation.Play(); + + stage.SetBackgroundColor(Vector4(0.0f, 0.2f, 0.2f, 1.0f));; + } + + /** + * Invoked whenever the quit button is clicked + * @param[in] button the quit button + */ + bool OnQuitButtonClicked( Toolkit::Button button ) + { + // quit the application + mApplication.Quit(); + return true; + } + + void OnKeyEvent(const KeyEvent& event) + { + if(event.state == KeyEvent::Down) + { + if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) + { + mApplication.Quit(); + } + } + } + +private: + + Application& mApplication; ///< Application instance + Vector3 mStageSize; ///< The size of the stage + + Image mImage; + Sampler mSampler1; + Sampler mSampler2; + Shader mShader; + Material mMaterial1; + Material mMaterial2; + Geometry mGeometry; + Renderer mRenderer; + Actor mMeshActor; + Renderer mRenderer2; + Actor mMeshActor2; + Timer mChangeImageTimer; +}; + +void RunTest( Application& application ) +{ + ExampleController test( application ); + + application.MainLoop(); +} + +// Entry point for Linux & SLP applications +// +int main( int argc, char **argv ) +{ + Application application = Application::New( &argc, &argv ); + + RunTest( application ); + + return 0; +} -- libgit2 0.21.4