From bb40e8f928d340b380f1eab14f76575b83472794 Mon Sep 17 00:00:00 2001 From: Ferran Sole Date: Mon, 13 Jun 2016 10:42:34 +0100 Subject: [PATCH] Modified native image and compressed texture examples to use new texture. * Clean-up some demos to use utility function to create quad with texture coordinates Change-Id: I35d71cabc4140bdda298c2975f1f682d72a94176 --- examples/benchmark/benchmark.cpp | 87 +++++---------- .../compressed-texture-formats-example.cpp | 111 ++++++++++++++++--- examples/mesh-sorting/mesh-sorting-example.cpp | 30 +----- .../native-image-source-example.cpp | 117 +++++++++++++++++++-- examples/perf-scroll/perf-scroll.cpp | 90 +++++----------- examples/textured-mesh/textured-mesh-example.cpp | 30 +----- shared/utility.h | 30 ++++++ 7 files changed, 291 insertions(+), 204 deletions(-) diff --git a/examples/benchmark/benchmark.cpp b/examples/benchmark/benchmark.cpp index e9fed0e..3f0a0cf 100644 --- a/examples/benchmark/benchmark.cpp +++ b/examples/benchmark/benchmark.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * Copyright (c) 2016 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. @@ -15,12 +15,12 @@ * */ -#include +// EXTERNAL INCLUDES #include -#include -#include -#include -#include +#include + +// INTERNAL INCLUDES +#include "shared/utility.h" using namespace Dali; using namespace Dali::Toolkit; @@ -183,29 +183,6 @@ const char* FRAGMENT_SHADER_TEXTURE = DALI_COMPOSE_SHADER( }\n ); - -Geometry& QuadMesh() -{ - static Geometry mesh; - if( !mesh ) - { - PropertyBuffer vertexBuffer; - Property::Map vertexFormat; - vertexFormat["aPosition"] = Property::VECTOR2; - vertexFormat["aTexCoord"] = Property::VECTOR2; - - //Create a vertex buffer for vertex positions and texture coordinates - vertexBuffer = PropertyBuffer::New( vertexFormat ); - vertexBuffer.SetData( gQuadWithTexture, 4u ); - - //Create the geometry - mesh = Geometry::New(); - mesh.AddVertexBuffer( vertexBuffer ); - mesh.SetGeometryType(Geometry::TRIANGLE_STRIP ); - } - return mesh; -} - bool gUseMesh(false); bool gUseImageActor(false); bool gNinePatch(false); @@ -213,33 +190,16 @@ unsigned int gRowsPerPage(25); unsigned int gColumnsPerPage( 25 ); unsigned int gPageCount(13); -Renderer CreateRenderer( unsigned int index ) +Renderer CreateRenderer( unsigned int index, Geometry geometry, Shader shader ) { - - int numImages = !gNinePatch ? NUM_IMAGES : NUM_NINEPATCH_IMAGES; - static Renderer* renderers = new Renderer[numImages]; - if( !renderers[index] ) - { - //Create the renderer - Shader shader = Shader::New( VERTEX_SHADER_TEXTURE, FRAGMENT_SHADER_TEXTURE ); - - const char* imagePath = !gNinePatch ? IMAGE_PATH[index] : NINEPATCH_IMAGE_PATH[index]; - Image image = ResourceImage::New(imagePath); - TextureSet textureSet = TextureSet::New(); - textureSet.SetImage( 0u, image ); - renderers[index] = Renderer::New( QuadMesh(), shader ); - renderers[index].SetTextures( textureSet ); - renderers[index].SetProperty( Renderer::Property::BLEND_MODE, BlendMode::OFF ); - } - return renderers[index]; -} - -Actor CreateMeshActor( unsigned int index) -{ - Renderer renderer = CreateRenderer(index); - Actor meshActor = Actor::New(); - meshActor.AddRenderer( renderer ); - return meshActor; + Renderer renderer = Renderer::New( geometry, shader ); + const char* imagePath = !gNinePatch ? IMAGE_PATH[index] : NINEPATCH_IMAGE_PATH[index]; + Texture texture = DemoHelper::LoadTexture( imagePath ); + TextureSet textureSet = TextureSet::New(); + textureSet.SetTexture( 0u, texture ); + renderer.SetTextures( textureSet ); + renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::OFF ); + return renderer; } } @@ -348,15 +308,26 @@ public: void CreateMeshActors() { + unsigned int numImages = !gNinePatch ? NUM_IMAGES : NUM_NINEPATCH_IMAGES; + + //Create all the renderers + std::vector renderers( numImages ); + Shader shader = Shader::New( VERTEX_SHADER_TEXTURE, FRAGMENT_SHADER_TEXTURE ); + Geometry geometry = DemoHelper::CreateTexturedQuad(); + for( unsigned int i(0); i +#include #include +// INTERNAL INCLUDES +#include "shared/utility.h" + using namespace Dali; using Dali::Toolkit::TextLabel; +namespace +{ + const char* IMAGE_FILENAME_ETC = DEMO_IMAGE_DIR "tx-etc1.ktx"; const char* IMAGE_FILENAME_ASTC_LINEAR = DEMO_IMAGE_DIR "tx-astc-4x4-linear.ktx"; const char* IMAGE_FILENAME_ASTC_LINEAR_NATIVE = DEMO_IMAGE_DIR "tx-astc-4x4-linear-native.astc"; + +static const char* VERTEX_SHADER_TEXTURE = DALI_COMPOSE_SHADER( + attribute mediump vec2 aPosition;\n + attribute mediump vec2 aTexCoord;\n + uniform mediump mat4 uMvpMatrix;\n + uniform mediump vec3 uSize;\n + varying mediump vec2 vTexCoord;\n + void main()\n + {\n + vec4 position = vec4(aPosition,0.0,1.0)*vec4(uSize,1.0);\n + gl_Position = uMvpMatrix * position;\n + vTexCoord = aTexCoord;\n + }\n +); + +static const char* FRAGMENT_SHADER_TEXTURE = DALI_COMPOSE_SHADER( + uniform lowp vec4 uColor;\n + uniform sampler2D sTexture;\n + varying mediump vec2 vTexCoord;\n + + void main()\n + {\n + gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n + }\n +); + +/** + * @brief Create a renderer to render an image and adds it to an actor + * @param[in] imagePath The path where the image file is located + * @param[in] actor The actor that will be used to render the image + * @param[in[ geometry The geometry to use + * @param[in] shader The shader to use + */ +void AddImage( const char*imagePath, Actor& actor, Geometry& geometry, Shader& shader ) +{ + //Load the texture + Texture texture = DemoHelper::LoadTexture( imagePath ); + TextureSet textureSet = TextureSet::New(); + textureSet.SetTexture( 0u, texture ); + + //Create the renderer + Renderer renderer = Renderer::New( geometry, shader ); + renderer.SetTextures( textureSet ); + + //Set actor size and add the renderer + actor.SetSize( texture.GetWidth(), texture.GetHeight() ); + actor.AddRenderer( renderer ); +} + +} /** * @brief This example shows 3 images, each of a different compressed texture type. * If built and run on a OpenGL ES 3.1 compatable target, then all 3 images will display. @@ -89,26 +148,37 @@ public: table.AddChild( textLabel, Toolkit::TableView::CellPosition( 2u, 0u ) ); table.SetCellAlignment( Toolkit::TableView::CellPosition( 2u, 0u ), HorizontalAlignment::LEFT, VerticalAlignment::CENTER ); - // Add images. - Toolkit::ImageView imageView = Toolkit::ImageView::New( ResourceImage::New( IMAGE_FILENAME_ETC ) ); - imageView.SetAnchorPoint( AnchorPoint::CENTER ); - imageView.SetParentOrigin( ParentOrigin::CENTER ); - table.AddChild( imageView, Toolkit::TableView::CellPosition( 0u, 1u ) ); - - imageView = Toolkit::ImageView::New( ResourceImage::New( IMAGE_FILENAME_ASTC_LINEAR ) ); - imageView.SetAnchorPoint( AnchorPoint::CENTER ); - imageView.SetParentOrigin( ParentOrigin::CENTER ); - table.AddChild( imageView, Toolkit::TableView::CellPosition( 1u, 1u ) ); + //Create the geometry and the shader renderers will use + Geometry geometry = DemoHelper::CreateTexturedQuad(); + Shader shader = Shader::New( VERTEX_SHADER_TEXTURE, FRAGMENT_SHADER_TEXTURE ); - imageView = Toolkit::ImageView::New( ResourceImage::New( IMAGE_FILENAME_ASTC_LINEAR_NATIVE ) ); - imageView.SetAnchorPoint( AnchorPoint::CENTER ); - imageView.SetParentOrigin( ParentOrigin::CENTER ); - table.AddChild( imageView, Toolkit::TableView::CellPosition( 2u, 1u ) ); + // Add images. + Actor actor = Actor::New(); + actor.SetAnchorPoint( AnchorPoint::CENTER ); + actor.SetParentOrigin( ParentOrigin::CENTER ); + AddImage( IMAGE_FILENAME_ETC, actor, geometry, shader ); + table.AddChild( actor, Toolkit::TableView::CellPosition( 0u, 1u ) ); + table.SetCellAlignment( Toolkit::TableView::CellPosition( 0u, 1u ), HorizontalAlignment::CENTER, VerticalAlignment::CENTER ); + + actor = Actor::New(); + actor.SetAnchorPoint( AnchorPoint::CENTER ); + actor.SetParentOrigin( ParentOrigin::CENTER ); + AddImage( IMAGE_FILENAME_ASTC_LINEAR, actor, geometry, shader ); + table.AddChild( actor, Toolkit::TableView::CellPosition( 1u, 1u ) ); + table.SetCellAlignment( Toolkit::TableView::CellPosition( 1u, 1u ), HorizontalAlignment::CENTER, VerticalAlignment::CENTER ); + + actor = Actor::New(); + actor.SetAnchorPoint( AnchorPoint::CENTER ); + actor.SetParentOrigin( ParentOrigin::CENTER ); + AddImage( IMAGE_FILENAME_ASTC_LINEAR_NATIVE, actor, geometry, shader ); + table.AddChild( actor, Toolkit::TableView::CellPosition( 2u, 1u ) ); + table.SetCellAlignment( Toolkit::TableView::CellPosition( 2u, 1u ), HorizontalAlignment::CENTER, VerticalAlignment::CENTER ); stage.Add( table ); - // Respond to a click anywhere on the stage + // Respond to touch and key signals stage.GetRootLayer().TouchSignal().Connect( this, &CompressedTextureFormatsController::OnTouch ); + stage.KeyEventSignal().Connect(this, &CompressedTextureFormatsController::OnKeyEvent); } bool OnTouch( Actor actor, const TouchData& touch ) @@ -118,6 +188,17 @@ public: 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; }; diff --git a/examples/mesh-sorting/mesh-sorting-example.cpp b/examples/mesh-sorting/mesh-sorting-example.cpp index a11e2e5..81f4ca3 100644 --- a/examples/mesh-sorting/mesh-sorting-example.cpp +++ b/examples/mesh-sorting/mesh-sorting-example.cpp @@ -85,34 +85,6 @@ void main() } ); -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 ); - texturedQuadVertices.SetData( texturedQuadVertexData, 4 ); - - // Create indices - unsigned short indexData[6] = { 0, 3, 1, 0, 2, 3 }; - - // Create the geometry object - Geometry texturedQuadGeometry = Geometry::New(); - texturedQuadGeometry.AddVertexBuffer( texturedQuadVertices ); - texturedQuadGeometry.SetIndexBuffer( &indexData[0], sizeof(indexData)/sizeof(unsigned short) ); - - return texturedQuadGeometry; -} - } // anonymous namespace // This example shows how to use a simple mesh @@ -159,7 +131,7 @@ public: application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE ); mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); - mGeometry = CreateGeometry(); + mGeometry = DemoHelper::CreateTexturedQuad(); TextureSet firstTextureSet; diff --git a/examples/native-image-source/native-image-source-example.cpp b/examples/native-image-source/native-image-source-example.cpp index 873260a..b1baeb3 100644 --- a/examples/native-image-source/native-image-source-example.cpp +++ b/examples/native-image-source/native-image-source-example.cpp @@ -15,15 +15,111 @@ * */ +// EXTERNAL INCLUDES #include +#include +#include +#include #include +#include + +// INTERNAL INCLUDES +#include "shared/utility.h" using namespace Dali; using namespace Toolkit; namespace { - const std::string JPG_FILENAME = DEMO_IMAGE_DIR "gallery-medium-4.jpg"; + +/** + * @brief Creates a shader used to render a native image + * @param[in] nativeImageInterface The native image interface + * @return A shader to render the native image + */ +Shader CreateShader( NativeImageInterface& nativeImageInterface ) +{ + static const char* DEFAULT_SAMPLER_TYPENAME = "sampler2D"; + + static const char* VERTEX_SHADER_TEXTURE = DALI_COMPOSE_SHADER( + attribute mediump vec2 aPosition;\n + attribute mediump vec2 aTexCoord;\n + uniform mediump mat4 uMvpMatrix;\n + uniform mediump vec3 uSize;\n + varying mediump vec2 vTexCoord;\n + void main()\n + {\n + vec4 position = vec4(aPosition,0.0,1.0)*vec4(uSize,1.0);\n + gl_Position = uMvpMatrix * position;\n + vTexCoord = aTexCoord;\n + }\n + ); + + static const char* FRAGMENT_SHADER_TEXTURE = DALI_COMPOSE_SHADER( + uniform lowp vec4 uColor;\n + uniform sampler2D sTexture;\n + varying mediump vec2 vTexCoord;\n + + void main()\n + {\n + gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n + }\n + ); + + NativeImageInterface::Extension* extension( nativeImageInterface.GetExtension() ); + if( extension ) + { + std::string fragmentShader; + + //Get custom fragment shader prefix + const char* fragmentPreFix = extension->GetCustomFragmentPreFix(); + if( fragmentPreFix ) + { + fragmentShader = fragmentPreFix; + fragmentShader += FRAGMENT_SHADER_TEXTURE; + } + else + { + fragmentShader = FRAGMENT_SHADER_TEXTURE; + } + + //Get custom sampler type name + const char* customSamplerTypename = extension->GetCustomSamplerTypename(); + if( customSamplerTypename ) + { + fragmentShader.replace( fragmentShader.find( DEFAULT_SAMPLER_TYPENAME ), strlen(DEFAULT_SAMPLER_TYPENAME), customSamplerTypename ); + } + + return Shader::New( VERTEX_SHADER_TEXTURE, fragmentShader ); + } + else + { + return Shader::New( VERTEX_SHADER_TEXTURE, FRAGMENT_SHADER_TEXTURE ); + } +} + +/** + * @brief Creates an actor to render a native image + * @param[in] texture The texture creates from a native image + * @param[in] nativeImageInterface The native image interface used to create the texture + * @return An actor that renders the texture + */ +Actor CreateNativeActor( Texture texture, NativeImageInterface& nativeImageInterface ) +{ + Actor actor = Actor::New(); + Geometry geometry = DemoHelper::CreateTexturedQuad(); + Shader shader = CreateShader(nativeImageInterface); + Renderer renderer = Renderer::New( geometry, shader ); + TextureSet textureSet = TextureSet::New(); + textureSet.SetTexture( 0u, texture ); + renderer.SetTextures( textureSet ); + + actor.AddRenderer( renderer ); + actor.SetSize( texture.GetWidth(), texture.GetHeight() ); + return actor; +} + +const std::string JPG_FILENAME = DEMO_IMAGE_DIR "gallery-medium-4.jpg"; } // This example shows how to create and use a NativeImageSource as the target of the render task. @@ -103,7 +199,9 @@ public: animation.Play(); // create a offscreen renderer task to render content into the native image source - FrameBufferImage targetBuffer = FrameBufferImage::New( *nativeImageSourcePtr ); + Texture nativeTexture = Texture::New( *nativeImageSourcePtr ); + FrameBuffer targetBuffer = FrameBuffer::New( nativeTexture.GetWidth(), nativeTexture.GetHeight(), FrameBuffer::COLOR ); + targetBuffer.AttachColorTexture( nativeTexture ); CameraActor cameraActor = CameraActor::New(imageSize); cameraActor.SetParentOrigin(ParentOrigin::TOP_CENTER); @@ -118,25 +216,24 @@ public: mOffscreenRenderTask.SetClearEnabled(true); mOffscreenRenderTask.SetCameraActor(cameraActor); mOffscreenRenderTask.GetCameraActor().SetInvertYAxis(true); - mOffscreenRenderTask.SetTargetFrameBuffer( targetBuffer ); + mOffscreenRenderTask.SetFrameBuffer( targetBuffer ); mOffscreenRenderTask.SetRefreshRate( RenderTask::REFRESH_ALWAYS ); // Display the native image on the screen - NativeImage nativeImage = NativeImage::New( *nativeImageSourcePtr ); - ImageView nativeImageView = ImageView::New( nativeImage ); - nativeImageView.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); - nativeImageView.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); - stage.Add( nativeImageView ); + Actor nativeImageActor = CreateNativeActor( nativeTexture, *nativeImageSourcePtr ); + nativeImageActor.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); + nativeImageActor.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); + stage.Add( nativeImageActor ); TextLabel textLabel1 = TextLabel::New( "Resource Image" ); textLabel1.SetParentOrigin( ParentOrigin::TOP_CENTER ); textLabel1.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); - nativeImageView.Add( textLabel1 ); + nativeImageActor.Add( textLabel1 ); TextLabel textLabel2 = TextLabel::New( "Native Image" ); textLabel2.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); textLabel2.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); - nativeImageView.Add( textLabel2 ); + nativeImageActor.Add( textLabel2 ); return false; } diff --git a/examples/perf-scroll/perf-scroll.cpp b/examples/perf-scroll/perf-scroll.cpp index f77d01f..16521a8 100644 --- a/examples/perf-scroll/perf-scroll.cpp +++ b/examples/perf-scroll/perf-scroll.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * Copyright (c) 2016 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. @@ -15,13 +15,8 @@ * */ -#include #include -#include -#include -#include -#include -#include +#include #include "shared/utility.h" @@ -186,29 +181,6 @@ const char* FRAGMENT_SHADER_TEXTURE = DALI_COMPOSE_SHADER( }\n ); - -Geometry& QuadMesh() -{ - static Geometry mesh; - if( !mesh ) - { - PropertyBuffer vertexBuffer; - Property::Map vertexFormat; - vertexFormat["aPosition"] = Property::VECTOR2; - vertexFormat["aTexCoord"] = Property::VECTOR2; - - //Create a vertex buffer for vertex positions and texture coordinates - vertexBuffer = PropertyBuffer::New( vertexFormat ); - vertexBuffer.SetData( gQuadWithTexture, 4u ); - - //Create the geometry - mesh = Geometry::New(); - mesh.AddVertexBuffer( vertexBuffer ); - mesh.SetGeometryType( Geometry::TRIANGLE_STRIP ); - } - return mesh; -} - bool gUseMesh(false); bool gNinePatch(false); unsigned int gRowsPerPage(15); @@ -216,35 +188,18 @@ unsigned int gColumnsPerPage(15); unsigned int gPageCount(10); float gDuration(10.0f); -Renderer CreateRenderer( unsigned int index ) +Renderer CreateRenderer( unsigned int index, Geometry geometry, Shader shader ) { - - int numImages = !gNinePatch ? NUM_IMAGES : NUM_NINEPATCH_IMAGES; - static Renderer* renderers = new Renderer[numImages]; - if( !renderers[index] ) - { - //Create the renderer - Shader shader = Shader::New( VERTEX_SHADER_TEXTURE, FRAGMENT_SHADER_TEXTURE ); - - const char* imagePath = !gNinePatch ? IMAGE_PATH[index] : NINEPATCH_IMAGE_PATH[index]; - Texture texture = DemoHelper::LoadTexture( imagePath ); - - TextureSet textureSet = TextureSet::New(); - textureSet.SetTexture( 0u, texture ); - renderers[index] = Renderer::New( QuadMesh(), shader ); - renderers[index].SetTextures( textureSet ); - renderers[index].SetProperty( Renderer::Property::BLEND_MODE, BlendMode::OFF ); - } - return renderers[index]; + Renderer renderer = Renderer::New( geometry, shader ); + const char* imagePath = !gNinePatch ? IMAGE_PATH[index] : NINEPATCH_IMAGE_PATH[index]; + Texture texture = DemoHelper::LoadTexture( imagePath ); + TextureSet textureSet = TextureSet::New(); + textureSet.SetTexture( 0u, texture ); + renderer.SetTextures( textureSet ); + renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::OFF ); + return renderer; } -Actor CreateMeshActor( unsigned int index) -{ - Renderer renderer = CreateRenderer( index ); - Actor meshActor = Actor::New(); - meshActor.AddRenderer( renderer ); - return meshActor; -} } // Test application to compare performance between ImageActor and ImageView @@ -333,18 +288,27 @@ public: void CreateMeshActors() { - Stage stage = Stage::GetCurrent(); + unsigned int numImages = !gNinePatch ? NUM_IMAGES : NUM_NINEPATCH_IMAGES; - unsigned int actorCount( mRowsPerPage * mColumnsPerPage * mPageCount ); - mActor.resize( actorCount ); + //Create all the renderers + std::vector renderers( numImages ); + Shader shader = Shader::New( VERTEX_SHADER_TEXTURE, FRAGMENT_SHADER_TEXTURE ); + Geometry geometry = DemoHelper::CreateTexturedQuad(); + for( unsigned int i(0); i #include +#include #include #include @@ -86,6 +87,35 @@ Dali::Texture LoadStageFillingTexture( const char* imagePath ) return LoadTexture( imagePath, Dali::ImageDimensions( stageSize.x, stageSize.y ), Dali::FittingMode::SCALE_TO_FILL, Dali::SamplingMode::BOX_THEN_LINEAR ); } +Dali::Geometry CreateTexturedQuad() +{ + struct Vertex + { + Dali::Vector2 position; + Dali::Vector2 texCoord; + }; + + static const Vertex data[] = {{ Dali::Vector2( -0.5f, -0.5f ), Dali::Vector2( 0.0f, 0.0f ) }, + { Dali::Vector2( 0.5f, -0.5f ), Dali::Vector2( 1.0f, 0.0f ) }, + { Dali::Vector2( -0.5f, 0.5f ), Dali::Vector2( 0.0f, 1.0f ) }, + { Dali::Vector2( 0.5f, 0.5f ), Dali::Vector2( 1.0f, 1.0f ) }}; + + Dali::PropertyBuffer vertexBuffer; + Dali::Property::Map vertexFormat; + vertexFormat["aPosition"] = Dali::Property::VECTOR2; + vertexFormat["aTexCoord"] = Dali::Property::VECTOR2; + + //Create a vertex buffer for vertex positions and texture coordinates + vertexBuffer = Dali::PropertyBuffer::New( vertexFormat ); + vertexBuffer.SetData( data, 4u ); + + //Create the geometry + Dali::Geometry geometry = Dali::Geometry::New(); + geometry.AddVertexBuffer( vertexBuffer ); + geometry.SetGeometryType(Dali::Geometry::TRIANGLE_STRIP ); + + return geometry; +} } // DemoHelper #endif // __DALI_DEMO_HELPER_VIEW_H__ -- 2.7.4