Calculate VisualRenderer coefficient only if updated.
[platform/core/uifw/dali-core.git] / dali / internal / update / rendering / scene-graph-renderer.cpp
index 752a56d..4978b56 100644 (file)
@@ -793,22 +793,9 @@ Vector4 Renderer::GetVisualTransformedUpdateArea(BufferIndex updateBufferIndex,
   {
     auto& coefficient = mVisualProperties->mCoefficient;
 
-    // TODO : We may need to get some method that visual properties changed, without hash.
-    // Or, need to call this API in PreRender side.
-
-    uint64_t hash = 0xc70f6907UL;
-
-    hash = mVisualProperties->mTransformOffset.Hash(updateBufferIndex, hash);
-    hash = mVisualProperties->mTransformOffsetSizeMode.Hash(updateBufferIndex, hash);
-    hash = mVisualProperties->mTransformSize.Hash(updateBufferIndex, hash);
-    hash = mVisualProperties->mTransformOrigin.Hash(updateBufferIndex, hash);
-    hash = mVisualProperties->mTransformAnchorPoint.Hash(updateBufferIndex, hash);
-    hash = mVisualProperties->mExtraSize.Hash(updateBufferIndex, hash);
-
-    if(coefficient.hash != hash)
+    // Recalculate only if coefficient need to be updated.
+    if(coefficient.IsUpdated())
     {
-      coefficient.hash = hash;
-
       // VisualProperty
       const Vector2 transformOffset         = mVisualProperties->mTransformOffset.Get(updateBufferIndex);
       const Vector4 transformOffsetSizeMode = mVisualProperties->mTransformOffsetSizeMode.Get(updateBufferIndex);
@@ -859,20 +846,18 @@ Vector4 Renderer::GetVisualTransformedUpdateArea(BufferIndex updateBufferIndex,
       coefficient.coefCA = transformSize * Vector2(transformOffsetSizeMode.z, transformOffsetSizeMode.w) + extraSize;
       coefficient.coefCB = coefficient.coefCA * transformAnchorPoint + transformOffset * Vector2(transformOffsetSizeMode.x, transformOffsetSizeMode.y);
     }
+
+    float coefD = 0.0f; ///< Default as 0.0f when we don't use decorated renderer.
+
     if(mVisualProperties->mExtendedProperties)
     {
       const auto decoratedVisualProperties = static_cast<VisualRenderer::AnimatableDecoratedVisualProperties*>(mVisualProperties->mExtendedProperties);
 
-      uint64_t decoratedHash = 0xc70f6907UL;
-
-      decoratedHash = decoratedVisualProperties->mBorderlineWidth.Hash(updateBufferIndex, decoratedHash);
-      decoratedHash = decoratedVisualProperties->mBorderlineOffset.Hash(updateBufferIndex, decoratedHash);
-      decoratedHash = decoratedVisualProperties->mBlurRadius.Hash(updateBufferIndex, decoratedHash);
+      auto& decoratedCoefficient = decoratedVisualProperties->mCoefficient;
 
-      if(coefficient.decoratedHash != decoratedHash)
+      // Recalculate only if coefficient need to be updated.
+      if(decoratedCoefficient.IsUpdated())
       {
-        coefficient.decoratedHash = decoratedHash;
-
         // DecoratedVisualProperty
         const float borderlineWidth  = decoratedVisualProperties->mBorderlineWidth.Get(updateBufferIndex);
         const float borderlineOffset = decoratedVisualProperties->mBorderlineOffset.Get(updateBufferIndex);
@@ -883,10 +868,12 @@ Vector4 Renderer::GetVisualTransformedUpdateArea(BufferIndex updateBufferIndex,
         DALI_LOG_INFO(gSceneGraphRendererLogFilter, Debug::Verbose, "blur radius       %5.3f\n", blurRadius);
 
         // D coefficients be used only decoratedVisual.
-        // It can be calculated parallely with transform.
-
-        coefficient.coefD = std::max((1.0f + Dali::Clamp(borderlineOffset, -1.0f, 1.0f)) * borderlineWidth, 2.0f * blurRadius);
+        // It can be calculated parallely with visual transform.
+        decoratedCoefficient.coefD = std::max((1.0f + Dali::Clamp(borderlineOffset, -1.0f, 1.0f)) * borderlineWidth, 2.0f * blurRadius);
       }
+
+      // Update coefD so we can use this value out of this scope.
+      coefD = decoratedCoefficient.coefD;
     }
 
     // Calculate vertex position by coefficient
@@ -916,8 +903,8 @@ Vector4 Renderer::GetVisualTransformedUpdateArea(BufferIndex updateBufferIndex,
     // TODO : We need to re-generate coefficient to consitder area width/height
     const Vector4 resultArea = Vector4(originalXY.x,
                                        originalXY.y,
-                                       scaleVertexPosition.x + 2.0f * abs(basicVertexPosition.x) + coefficient.coefD,
-                                       scaleVertexPosition.y + 2.0f * abs(basicVertexPosition.y) + coefficient.coefD);
+                                       scaleVertexPosition.x + 2.0f * abs(basicVertexPosition.x) + coefD,
+                                       scaleVertexPosition.y + 2.0f * abs(basicVertexPosition.y) + coefD);
 
     DALI_LOG_INFO(gSceneGraphRendererLogFilter, Debug::Verbose, "%f %f %f %f--> %f %f %f %f\n", originalUpdateArea.x, originalUpdateArea.y, originalUpdateArea.z, originalUpdateArea.w, resultArea.x, resultArea.y, resultArea.z, resultArea.w);