X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Ftextured-mesh%2Ftextured-mesh-example.cpp;h=992762044b509bcb24e175c7631d5959fc64fc70;hb=1b19fd140ff139b5854a1a62447faf31b175d8f6;hp=e0576160cdd8d21c236f39232439e2a0f30e1d7d;hpb=14d695efd0c2ceef45ef1111119437edeafe3084;p=platform%2Fcore%2Fuifw%2Fdali-demo.git diff --git a/examples/textured-mesh/textured-mesh-example.cpp b/examples/textured-mesh/textured-mesh-example.cpp index e057616..9927620 100644 --- a/examples/textured-mesh/textured-mesh-example.cpp +++ b/examples/textured-mesh/textured-mesh-example.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -16,81 +16,53 @@ */ // EXTERNAL INCLUDES +#include // INTERNAL INCLUDES +#include "shared/utility.h" #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" ); +const char* MATERIAL_SAMPLE(DEMO_IMAGE_DIR "gallery-small-48.jpg"); +const char* MATERIAL_SAMPLE2(DEMO_IMAGE_DIR "gallery-medium-19.jpg"); -#define MAKE_SHADER(A)#A +#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; -} -); + 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; + varying mediump vec2 vTexCoord; + uniform lowp vec4 uColor; + uniform sampler2D sTexture; + uniform lowp vec4 uFadeColor; -void main() -{ - gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor * uFadeColor; -} -); + void main() { + gl_FragColor = texture2D(sTexture, vTexCoord) * uColor * uFadeColor; + }); -Geometry CreateGeometry() +/** + * Sinusoidal curve starting at zero with 2 cycles + */ +float AlphaFunctionSineX2(float progress) { - // 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; + return 0.5f - cosf(progress * 4.0f * Math::PI) * 0.5f; } } // anonymous namespace @@ -100,16 +72,15 @@ Geometry CreateGeometry() class ExampleController : public ConnectionTracker { public: - /** * The example controller constructor. * @param[in] application The application instance */ - ExampleController( Application& application ) - : mApplication( application ) + ExampleController(Application& application) + : mApplication(application) { // Connect to the Application's Init signal - mApplication.InitSignal().Connect( this, &ExampleController::Create ); + mApplication.InitSignal().Connect(this, &ExampleController::Create); } /** @@ -124,93 +95,81 @@ public: * Invoked upon creation of application * @param[in] application The application instance */ - void Create( Application& application ) + 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 ); + Window window = application.GetWindow(); + window.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent); - mImage = ResourceImage::New( MATERIAL_SAMPLE ); - mSampler1 = Sampler::New(mImage, "sTexture"); + mWindowSize = window.GetSize(); - Image image = ResourceImage::New( MATERIAL_SAMPLE2 ); - mSampler2 = Sampler::New(image, "sTexture"); + Texture texture1 = DemoHelper::LoadTexture(MATERIAL_SAMPLE); + Texture texture2 = DemoHelper::LoadTexture(MATERIAL_SAMPLE2); - mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); + mShader = Shader::New(VERTEX_SHADER, FRAGMENT_SHADER); + mTextureSet1 = TextureSet::New(); + mTextureSet1.SetTexture(0u, texture1); - mMaterial1 = Material::New( mShader ); - mMaterial1.AddSampler( mSampler1 ); + mTextureSet2 = TextureSet::New(); + mTextureSet2.SetTexture(0u, texture2); - mMaterial2 = Material::New( mShader ); - mMaterial2.AddSampler( mSampler2); + mGeometry = DemoHelper::CreateTexturedQuad(); - mGeometry = CreateGeometry(); - - mRenderer = Renderer::New( mGeometry, mMaterial1 ); + mRenderer = Renderer::New(mGeometry, mShader); + mRenderer.SetTextures(mTextureSet1); 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") ); + mMeshActor.AddRenderer(mRenderer); + mMeshActor.SetProperty(Actor::Property::SIZE, Vector2(400, 400)); - fadeColorIndex = mRenderer.RegisterProperty( "fade-color", Color::MAGENTA ); - mRenderer.AddUniformMapping( fadeColorIndex, std::string("uFadeColor" ) ); - mRenderer.SetDepthIndex(0); + Property::Index fadeColorIndex = mRenderer.RegisterProperty("uFadeColor", Color::MAGENTA); + mRenderer.SetProperty(Renderer::Property::DEPTH_INDEX, 0); - mMeshActor.SetParentOrigin( ParentOrigin::TOP_CENTER ); - mMeshActor.SetAnchorPoint( AnchorPoint::TOP_CENTER ); - stage.Add( mMeshActor ); + mMeshActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER); + mMeshActor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER); + window.Add(mMeshActor); - mRenderer2 = Renderer::New( mGeometry, mMaterial2 ); + mRenderer2 = Renderer::New(mGeometry, mShader); + mRenderer2.SetTextures(mTextureSet2); mMeshActor2 = Actor::New(); - mMeshActor2.AddRenderer( mRenderer2 ); - mMeshActor2.SetSize(400, 400); + mMeshActor2.AddRenderer(mRenderer2); + mMeshActor2.SetProperty(Actor::Property::SIZE, Vector2(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") ); + mMeshActor2.RegisterProperty("anotherProperty", Color::GREEN); - 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); + mRenderer2.RegisterProperty("anotherProperty", Vector3::ZERO); + mRenderer2.RegisterProperty("aCoefficient", 0.008f); + Property::Index fadeColorIndex2 = mRenderer2.RegisterProperty("uFadeColor", Color::BLUE); + mRenderer2.SetProperty(Renderer::Property::DEPTH_INDEX, 0); - mMeshActor2.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); - mMeshActor2.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); - stage.Add( mMeshActor2 ); + mMeshActor2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER); + mMeshActor2.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER); + window.Add(mMeshActor2); - Animation animation = Animation::New(5); + 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.Add(1.0f, Vector4(Color::GREEN)); KeyFrames keyFrames2 = KeyFrames::New(); keyFrames2.Add(0.0f, Vector4::ZERO); - keyFrames2.Add(1.0f, Color::GREEN); + keyFrames2.Add(1.0f, Color::MAGENTA); - animation.AnimateBetween( Property( mRenderer, fadeColorIndex ), keyFrames, AlphaFunction(AlphaFunction::EASE_OUT_SINE) ); - animation.AnimateBetween( Property( mRenderer2, fadeColorIndex2 ), keyFrames2, AlphaFunction(AlphaFunction::EASE_IN_SINE) ); + animation.AnimateBetween(Property(mRenderer, fadeColorIndex), keyFrames, AlphaFunction(AlphaFunction::SIN)); + animation.AnimateBetween(Property(mRenderer2, fadeColorIndex2), keyFrames2, AlphaFunction(AlphaFunctionSineX2)); animation.SetLooping(true); animation.Play(); - stage.SetBackgroundColor(Vector4(0.0f, 0.2f, 0.2f, 1.0f));; + window.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 ) + bool OnQuitButtonClicked(Toolkit::Button button) { // quit the application mApplication.Quit(); @@ -219,9 +178,9 @@ public: 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(); } @@ -229,38 +188,24 @@ public: } 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; + Application& mApplication; ///< Application instance + Vector3 mWindowSize; ///< The size of the window + + Shader mShader; + TextureSet mTextureSet1; + TextureSet mTextureSet2; + Geometry mGeometry; + Renderer mRenderer; + Actor mMeshActor; + Renderer mRenderer2; + Actor mMeshActor2; + Timer mChangeImageTimer; }; -void RunTest( Application& application ) +int DALI_EXPORT_API main(int argc, char** argv) { - ExampleController test( application ); - + Application application = Application::New(&argc, &argv); + 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; }