Modified native image and compressed texture examples to use new texture. 37/74237/12
authorFerran Sole <ferran.sole@samsung.com>
Mon, 13 Jun 2016 09:42:34 +0000 (10:42 +0100)
committerFerran Sole <ferran.sole@samsung.com>
Fri, 8 Jul 2016 13:27:01 +0000 (06:27 -0700)
* Clean-up some demos to use utility function to create quad with texture coordinates

Change-Id: I35d71cabc4140bdda298c2975f1f682d72a94176

examples/benchmark/benchmark.cpp
examples/compressed-texture-formats/compressed-texture-formats-example.cpp
examples/mesh-sorting/mesh-sorting-example.cpp
examples/native-image-source/native-image-source-example.cpp
examples/perf-scroll/perf-scroll.cpp
examples/textured-mesh/textured-mesh-example.cpp
shared/utility.h

index e9fed0e..3f0a0cf 100644 (file)
@@ -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.
  *
  */
 
-#include <dali-toolkit/dali-toolkit.h>
+// EXTERNAL INCLUDES
 #include <dali/devel-api/rendering/renderer.h>
-#include <dali/public-api/common/dali-common.h>
-#include <dali/integration-api/resource-policies.h>
-#include <dali/integration-api/debug.h>
-#include <iostream>
+#include <dali-toolkit/dali-toolkit.h>
+
+// 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<Renderer> renderers( numImages );
+    Shader shader = Shader::New( VERTEX_SHADER_TEXTURE, FRAGMENT_SHADER_TEXTURE );
+    Geometry geometry = DemoHelper::CreateTexturedQuad();
+    for( unsigned int i(0); i<numImages; ++i )
+    {
+      renderers[i] = CreateRenderer( i, geometry, shader );
+    }
+
+    //Create the actors
     Stage stage = Stage::GetCurrent();
     unsigned int actorCount(mRowsPerPage*mColumnsPerPage * mPageCount);
     mActor.resize(actorCount);
     for( size_t i(0); i<actorCount; ++i )
     {
-      size_t numImages = !gNinePatch ? NUM_IMAGES : NUM_NINEPATCH_IMAGES;
-      mActor[i] = CreateMeshActor(i % numImages);
+      mActor[i] = Actor::New();
+      mActor[i].AddRenderer( renderers[i % numImages] );
       mActor[i].SetSize(0.0f,0.0f,0.0f);
-
       stage.Add(mActor[i]);
     }
   }
index a55f69a..3e29a7e 100644 (file)
  *
  */
 
+// EXTERNAL INCLUDES
+#include <dali/dali.h>
+#include <dali/devel-api/rendering/renderer.h>
 #include <dali-toolkit/dali-toolkit.h>
 
+// 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;
 };
index a11e2e5..81f4ca3 100644 (file)
@@ -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;
 
index 873260a..b1baeb3 100644 (file)
  *
  */
 
+// EXTERNAL INCLUDES
 #include <dali/dali.h>
+#include <dali/devel-api/images/native-image-interface-extension.h>
+#include <dali/devel-api/rendering/renderer.h>
+#include <dali/devel-api/rendering/frame-buffer.h>
 #include <dali-toolkit/dali-toolkit.h>
+#include <cstring>
+
+// 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;
   }
index f77d01f..16521a8 100644 (file)
@@ -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.
  *
  */
 
-#include <dali-toolkit/dali-toolkit.h>
 #include <dali/devel-api/rendering/renderer.h>
-#include <dali/devel-api/rendering/sampler.h>
-#include <dali/public-api/common/dali-common.h>
-#include <dali/integration-api/resource-policies.h>
-#include <dali/integration-api/debug.h>
-#include <iostream>
+#include <dali-toolkit/dali-toolkit.h>
 
 #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<Renderer> renderers( numImages );
+    Shader shader = Shader::New( VERTEX_SHADER_TEXTURE, FRAGMENT_SHADER_TEXTURE );
+    Geometry geometry = DemoHelper::CreateTexturedQuad();
+    for( unsigned int i(0); i<numImages; ++i )
+    {
+      renderers[i] = CreateRenderer( i, geometry, shader );
+    }
 
+    //Create the actors
+    Stage stage = Stage::GetCurrent();
+    unsigned int actorCount(mRowsPerPage*mColumnsPerPage * mPageCount);
+    mActor.resize(actorCount);
     for( size_t i(0); i<actorCount; ++i )
     {
-      size_t numImages = !gNinePatch ? NUM_IMAGES : NUM_NINEPATCH_IMAGES;
-      mActor[i] = CreateMeshActor( i % numImages );
+      mActor[i] = Actor::New();
+      mActor[i].AddRenderer( renderers[i % numImages] );
       mActor[i].SetSize(0.0f,0.0f,0.0f);
-
-      mParent.Add( mActor[i] );
+      mParent.Add(mActor[i]);
     }
   }
 
index 6285ae3..460a8d5 100644 (file)
@@ -62,34 +62,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(indexData[0]) );
-
-  return texturedQuadGeometry;
-}
-
 /**
  * Sinusoidal curve starting at zero with 2 cycles
  */
@@ -151,7 +123,7 @@ public:
     mTextureSet2 = TextureSet::New();
     mTextureSet2.SetTexture( 0u, texture2 );
 
-    mGeometry = CreateGeometry();
+    mGeometry = DemoHelper::CreateTexturedQuad();
 
     mRenderer = Renderer::New( mGeometry, mShader );
     mRenderer.SetTextures( mTextureSet1 );
index 3285b98..37d3126 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <dali/dali.h>
 #include <dali/devel-api/images/atlas.h>
+#include <dali/devel-api/rendering/geometry.h>
 #include <dali/devel-api/rendering/texture.h>
 #include <dali/devel-api/adaptor-framework/bitmap-loader.h>
 
@@ -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__