X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Ftextured-mesh%2Ftextured-mesh-example.cpp;h=992762044b509bcb24e175c7631d5959fc64fc70;hb=1b19fd140ff139b5854a1a62447faf31b175d8f6;hp=a586a075dcee3f2fe528fc3c2a3ac2514af6e036;hpb=07ab57fde5eb011ecd843162afd4eeae3f7d844b;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 a586a07..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,82 +16,46 @@ */ // EXTERNAL INCLUDES -#include #include // INTERNAL INCLUDES +#include "shared/utility.h" #include "shared/view.h" using namespace Dali; namespace { -const char* MATERIAL_SAMPLE( DEMO_IMAGE_DIR "gallery-small-48.jpg" ); -const char* MATERIAL_SAMPLE2( DEMO_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; - -void main() -{ - gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor * uFadeColor; -} -); + varying mediump vec2 vTexCoord; + uniform lowp vec4 uColor; + uniform sampler2D sTexture; + uniform lowp vec4 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( texturedQuadVertexFormat, 4 ); - texturedQuadVertices.SetData(texturedQuadVertexData); - - // Create indices - unsigned int indexData[6] = { 0, 3, 1, 0, 2, 3 }; - Property::Map indexFormat; - indexFormat["indices"] = Property::INTEGER; - PropertyBuffer indices = PropertyBuffer::New( indexFormat, sizeof(indexData)/sizeof(indexData[0]) ); - indices.SetData(indexData); - - // Create the geometry object - Geometry texturedQuadGeometry = Geometry::New(); - texturedQuadGeometry.AddVertexBuffer( texturedQuadVertices ); - texturedQuadGeometry.SetIndexBuffer( indices ); - - return texturedQuadGeometry; -} + void main() { + gl_FragColor = texture2D(sTexture, vTexCoord) * uColor * uFadeColor; + }); /** * Sinusoidal curve starting at zero with 2 cycles @@ -108,16 +72,15 @@ float AlphaFunctionSineX2(float progress) 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); } /** @@ -132,112 +95,81 @@ public: * Invoked upon creation of application * @param[in] application The application instance */ - void Create( Application& application ) + void Create(Application& application) { // The Init signal is received once (only) during the Application lifetime - Stage stage = Stage::GetCurrent(); - stage.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent); - - mStageSize = stage.GetSize(); + Window window = application.GetWindow(); + window.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent); - // Hide the indicator bar - application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE ); + mWindowSize = window.GetSize(); - mImage = ResourceImage::New( MATERIAL_SAMPLE ); - Image image = ResourceImage::New( MATERIAL_SAMPLE2 ); + Texture texture1 = DemoHelper::LoadTexture(MATERIAL_SAMPLE); + Texture texture2 = DemoHelper::LoadTexture(MATERIAL_SAMPLE2); - mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); - mMaterial1 = Material::New( mShader ); - mMaterial1.AddTexture(mImage, "sTexture"); + mShader = Shader::New(VERTEX_SHADER, FRAGMENT_SHADER); + mTextureSet1 = TextureSet::New(); + mTextureSet1.SetTexture(0u, texture1); - mMaterial2 = Material::New( mShader ); - mMaterial2.AddTexture(image, "sTexture"); + mTextureSet2 = TextureSet::New(); + mTextureSet2.SetTexture(0u, texture2); - mGeometry = CreateGeometry(); + mGeometry = DemoHelper::CreateTexturedQuad(); - mRenderer = Renderer::New( mGeometry, mMaterial1 ); + mRenderer = Renderer::New(mGeometry, mShader); + mRenderer.SetTextures(mTextureSet1); mMeshActor = Actor::New(); - mMeshActor.AddRenderer( mRenderer ); - mMeshActor.SetSize(400, 400); + mMeshActor.AddRenderer(mRenderer); + mMeshActor.SetProperty(Actor::Property::SIZE, Vector2(400, 400)); - Property::Index fadeColorIndex = mRenderer.RegisterProperty( "uFadeColor", Color::MAGENTA ); - mRenderer.SetProperty( Renderer::Property::DEPTH_INDEX, 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( "anotherProperty", Color::GREEN ); + mMeshActor2.RegisterProperty("anotherProperty", Color::GREEN); - 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 ); + 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( Color::GREEN )); + keyFrames.Add(1.0f, Vector4(Color::GREEN)); KeyFrames keyFrames2 = KeyFrames::New(); keyFrames2.Add(0.0f, Vector4::ZERO); keyFrames2.Add(1.0f, Color::MAGENTA); - animation.AnimateBetween( Property( mRenderer, fadeColorIndex ), keyFrames, AlphaFunction(AlphaFunction::SIN) ); - animation.AnimateBetween( Property( mRenderer2, fadeColorIndex2 ), keyFrames2, AlphaFunction(AlphaFunctionSineX2) ); + 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)); - } - - BufferImage CreateBufferImage() - { - BufferImage image = BufferImage::New( 200, 200, Pixel::RGB888 ); - PixelBuffer* pixelBuffer = image.GetBuffer(); - unsigned int stride = image.GetBufferStride(); - for( unsigned int x=0; x<200; x++ ) - { - for( unsigned int y=0; y<200; y++ ) - { - PixelBuffer* pixel = pixelBuffer + y*stride + x*3; - if( ((int)(x/20.0f))%2 + ((int)(y/20.0f)%2) == 1 ) - { - pixel[0]=255; - pixel[1]=0; - pixel[2]=0; - pixel[3]=255; - } - else - { - pixel[0]=0; - pixel[1]=0; - pixel[2]=255; - pixel[3]=255; - } - } - } - image.Update(); - return image; + 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(); @@ -246,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(); } @@ -256,36 +188,24 @@ public: } private: - - Application& mApplication; ///< Application instance - Vector3 mStageSize; ///< The size of the stage - - Image mImage; - 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; }