Added transform properties to wireframe visual 47/98547/1
authorFerran Sole <ferran.sole@samsung.com>
Thu, 17 Nov 2016 12:52:18 +0000 (12:52 +0000)
committerFerran Sole <ferran.sole@samsung.com>
Thu, 17 Nov 2016 12:52:18 +0000 (12:52 +0000)
* Use transform properties on the wireframe visual shader
* Set transform properties to wireframe visuals when debug rendering enabled

Change-Id: Ia50f8d8d3111ce08e08166204d090a8684d20107

dali-toolkit/internal/visuals/visual-factory-cache.cpp
dali-toolkit/internal/visuals/visual-factory-cache.h
dali-toolkit/internal/visuals/visual-factory-impl.cpp
dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp

index 51c6bc2..bf6814d 100644 (file)
@@ -150,16 +150,6 @@ bool VisualFactoryCache::CleanRendererCache( const std::string& key )
   return false;
 }
 
-void VisualFactoryCache::CacheWireframeRenderer( Renderer& renderer )
-{
-  mWireframeRenderer = renderer;
-}
-
-Renderer VisualFactoryCache::GetWireframeRenderer()
-{
-  return mWireframeRenderer;
-}
-
 Geometry VisualFactoryCache::CreateQuadGeometry()
 {
   const float halfWidth = 0.5f;
index 0b77e53..8bbae5c 100644 (file)
@@ -69,7 +69,8 @@ public:
     IMAGE_SHADER_ATLAS_CUSTOM_WRAP,
     NINE_PATCH_SHADER,
     SVG_SHADER,
-    SHADER_TYPE_MAX = SVG_SHADER
+    WIREFRAME_SHADER,
+    SHADER_TYPE_MAX = WIREFRAME_SHADER
   };
 
   /**
@@ -81,7 +82,8 @@ public:
     BORDER_GEOMETRY,
     NINE_PATCH_GEOMETRY,
     NINE_PATCH_BORDER_GEOMETRY,
-    GEOMETRY_TYPE_MAX = NINE_PATCH_BORDER_GEOMETRY
+    WIREFRAME_GEOMETRY,
+    GEOMETRY_TYPE_MAX = WIREFRAME_GEOMETRY
   };
 
 public:
@@ -173,16 +175,6 @@ public:
   bool CleanRendererCache( const std::string& key );
 
   /**
-   * @brief Cache the wireframe renderer
-   */
-  void CacheWireframeRenderer( Renderer& renderer );
-
-  /**
-   * @brief Request the wireframe renderer;
-   */
-  Renderer GetWireframeRenderer();
-
-  /**
    * Get the image atlas manager.
    * @return A pointer to the atlas manager
    */
index 301fab7..43c5077 100644 (file)
@@ -97,103 +97,105 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Property::Map& property
     mFactoryCache = new VisualFactoryCache();
   }
 
-  // Return a new WireframeVisual if we have debug enabled
-  if( mDebugEnabled )
-  {
-    return Toolkit::Visual::Base( WireframeVisual::New( *( mFactoryCache.Get() ) ).Get() );
-  }
-
   Visual::BasePtr visualPtr;
 
-  Property::Value* typeValue = propertyMap.Find( Toolkit::VisualProperty::TYPE, VISUAL_TYPE );
-  Toolkit::Visual::Type visualType = Toolkit::Visual::IMAGE; // Default to IMAGE type.
-  if( typeValue )
+  if( mDebugEnabled )
   {
-    Scripting::GetEnumerationProperty( *typeValue, VISUAL_TYPE_TABLE, VISUAL_TYPE_TABLE_COUNT, visualType );
+    //Create a WireframeVisual if we have debug enabled
+    visualPtr = WireframeVisual::New( *( mFactoryCache.Get() ) );
   }
-
-  switch( visualType )
+  else
   {
-    case Toolkit::Visual::BORDER:
+    Property::Value* typeValue = propertyMap.Find( Toolkit::VisualProperty::TYPE, VISUAL_TYPE );
+    Toolkit::Visual::Type visualType = Toolkit::Visual::IMAGE; // Default to IMAGE type.
+    if( typeValue )
     {
-      visualPtr = BorderVisual::New( *( mFactoryCache.Get() ) );
-      break;
+      Scripting::GetEnumerationProperty( *typeValue, VISUAL_TYPE_TABLE, VISUAL_TYPE_TABLE_COUNT, visualType );
     }
 
-    case Toolkit::Visual::COLOR:
+    switch( visualType )
     {
-      visualPtr = ColorVisual::New( *( mFactoryCache.Get() ) );
-      break;
-    }
+      case Toolkit::Visual::BORDER:
+      {
+        visualPtr = BorderVisual::New( *( mFactoryCache.Get() ) );
+        break;
+      }
 
-    case Toolkit::Visual::GRADIENT:
-    {
-      visualPtr = GradientVisual::New( *( mFactoryCache.Get() ) );
-      break;
-    }
+      case Toolkit::Visual::COLOR:
+      {
+        visualPtr = ColorVisual::New( *( mFactoryCache.Get() ) );
+        break;
+      }
 
-    case Toolkit::Visual::IMAGE:
-    {
-      Property::Value* imageURLValue = propertyMap.Find( Toolkit::ImageVisual::Property::URL, IMAGE_URL_NAME );
-      std::string imageUrl;
-      if( imageURLValue && imageURLValue->Get( imageUrl ) )
+      case Toolkit::Visual::GRADIENT:
       {
-        // first resolve url type to know which visual to create
-        UrlType::Type type = ResolveUrlType( imageUrl );
-        if( UrlType::N_PATCH == type )
-        {
-          visualPtr = NPatchVisual::New( *( mFactoryCache.Get() ), imageUrl );
-        }
-        else if( UrlType::SVG == type )
-        {
-          visualPtr = SvgVisual::New( *( mFactoryCache.Get() ), imageUrl );
-        }
-        else // Regular image
+        visualPtr = GradientVisual::New( *( mFactoryCache.Get() ) );
+        break;
+      }
+
+      case Toolkit::Visual::IMAGE:
+      {
+        Property::Value* imageURLValue = propertyMap.Find( Toolkit::ImageVisual::Property::URL, IMAGE_URL_NAME );
+        std::string imageUrl;
+        if( imageURLValue && imageURLValue->Get( imageUrl ) )
         {
-          bool batchingEnabled( false );
-          Property::Value* batchingEnabledValue = propertyMap.Find( Toolkit::ImageVisual::Property::BATCHING_ENABLED, BATCHING_ENABLED );
-          if( batchingEnabledValue  )
+          // first resolve url type to know which visual to create
+          UrlType::Type type = ResolveUrlType( imageUrl );
+          if( UrlType::N_PATCH == type )
           {
-            batchingEnabledValue->Get( batchingEnabled );
+            visualPtr = NPatchVisual::New( *( mFactoryCache.Get() ), imageUrl );
           }
-
-          if( batchingEnabled )
+          else if( UrlType::SVG == type )
           {
-            visualPtr = BatchImageVisual::New( *( mFactoryCache.Get() ), imageUrl );
-            break;
+            visualPtr = SvgVisual::New( *( mFactoryCache.Get() ), imageUrl );
           }
-          else
+          else // Regular image
           {
-            visualPtr = ImageVisual::New( *( mFactoryCache.Get() ), imageUrl );
+            bool batchingEnabled( false );
+            Property::Value* batchingEnabledValue = propertyMap.Find( Toolkit::ImageVisual::Property::BATCHING_ENABLED, BATCHING_ENABLED );
+            if( batchingEnabledValue  )
+            {
+              batchingEnabledValue->Get( batchingEnabled );
+            }
+
+            if( batchingEnabled )
+            {
+              visualPtr = BatchImageVisual::New( *( mFactoryCache.Get() ), imageUrl );
+              break;
+            }
+            else
+            {
+              visualPtr = ImageVisual::New( *( mFactoryCache.Get() ), imageUrl );
+            }
           }
         }
-      }
 
-      break;
-    }
+        break;
+      }
 
-    case Toolkit::Visual::MESH:
-    {
-      visualPtr = MeshVisual::New( *( mFactoryCache.Get() ) );
-      break;
-    }
+      case Toolkit::Visual::MESH:
+      {
+        visualPtr = MeshVisual::New( *( mFactoryCache.Get() ) );
+        break;
+      }
 
-    case Toolkit::Visual::PRIMITIVE:
-    {
-      visualPtr = PrimitiveVisual::New( *( mFactoryCache.Get() ) );
-      break;
-    }
+      case Toolkit::Visual::PRIMITIVE:
+      {
+        visualPtr = PrimitiveVisual::New( *( mFactoryCache.Get() ) );
+        break;
+      }
 
-    case Toolkit::Visual::WIREFRAME:
-    {
-      visualPtr = WireframeVisual::New( *( mFactoryCache.Get() ) );
-      break;
-    }
+      case Toolkit::Visual::WIREFRAME:
+      {
+        visualPtr = WireframeVisual::New( *( mFactoryCache.Get() ) );
+        break;
+      }
 
-    case Toolkit::Visual::TEXT:
-    {
-      visualPtr = TextVisual::New( *( mFactoryCache.Get() ) );
-      break;
+      case Toolkit::Visual::TEXT:
+      {
+        visualPtr = TextVisual::New( *( mFactoryCache.Get() ) );
+        break;
+      }
     }
   }
 
index 493988e..396f13b 100644 (file)
@@ -45,11 +45,24 @@ attribute mediump vec2  aPosition;\n
 uniform   mediump mat4  uMvpMatrix;\n
 uniform   mediump vec3  uSize;\n
 \n
+
+//Visual size and offset
+uniform mediump vec2 offset;\n
+uniform mediump vec2 size;\n
+uniform mediump vec4 offsetSizeMode;\n
+uniform mediump vec2 origin;\n
+uniform mediump vec2 anchorPoint;\n
+
+vec4 ComputeVertexPosition()\n
+{\n
+  vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );\n
+  vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n
+  return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 );\n
+}\n
+
 void main()\n
 {\n
-  mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);\n
-  vertexPosition.xyz *= uSize;\n
-  gl_Position = uMvpMatrix * vertexPosition;\n
+  gl_Position = uMvpMatrix * ComputeVertexPosition();\n
 }\n
 );
 
@@ -109,15 +122,25 @@ Dali::Property::Value WireframeVisual::DoGetProperty( Dali::Property::Index inde
 
 void WireframeVisual::InitializeRenderer()
 {
-  mImpl->mRenderer = mFactoryCache.GetWireframeRenderer();
-  if( !mImpl->mRenderer )
+  Shader shader = mFactoryCache.GetShader( VisualFactoryCache::WIREFRAME_SHADER );
+  if( !shader )
   {
-    Geometry geometry = CreateQuadWireframeGeometry();
-    Shader shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
+    shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
+    mFactoryCache.SaveShader( VisualFactoryCache::WIREFRAME_SHADER, shader );
+  }
 
-    mImpl->mRenderer = Renderer::New( geometry, shader);
-    mFactoryCache.CacheWireframeRenderer( mImpl->mRenderer );
+  Geometry geometry = mFactoryCache.GetGeometry( VisualFactoryCache::WIREFRAME_GEOMETRY );
+  if( !geometry )
+  {
+    geometry = CreateQuadWireframeGeometry();
+    mFactoryCache.SaveGeometry( VisualFactoryCache::WIREFRAME_GEOMETRY, geometry );
   }
+
+  //Create the renderer
+  mImpl->mRenderer = Renderer::New( geometry, shader);
+
+  //Register transform properties
+  mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT );
 }
 
 Geometry WireframeVisual::CreateQuadWireframeGeometry()