Changed node / renderer aging of uniform maps
authorDavid Steele <david.steele@samsung.com>
Mon, 10 Dec 2018 11:13:12 +0000 (20:13 +0900)
committerDavid Steele <david.steele@samsung.com>
Tue, 18 Dec 2018 20:26:16 +0000 (20:26 +0000)
Change-Id: Ie921fe077359b8887c6bc4bd33789ccc6459fbab
Signed-off-by: David Steele <david.steele@samsung.com>
dali/internal/update/manager/update-algorithms.cpp
dali/internal/update/manager/update-manager.cpp
dali/internal/update/manager/update-manager.h
dali/internal/update/rendering/scene-graph-renderer.cpp

index c5e38e255f9a59d2a453b4ef571031e5c3c52a44..f76bd289b13d53b858728cfaf324cacf5142528c 100644 (file)
@@ -148,8 +148,6 @@ inline NodePropertyFlags UpdateNodes( Node& node,
   // Draw mode inheritance is treated as or-ing the modes together (as they are a bit-mask).
   inheritedDrawMode |= node.GetDrawMode();
 
-  node.PrepareRender( updateBufferIndex );
-
   // if any child node has moved or had its sort modifier changed, layer is not clean and old frame cannot be reused
   // also if node has been deleted, dont reuse old render items
   if( nodeDirtyFlags & RenderableUpdateFlags )
index bb96daad755915f60c5989776f5c2de32d0a003d..791793cbc54fa51d14c636f6354b63a67dd6b6b3 100644 (file)
@@ -735,6 +735,17 @@ void UpdateManager::UpdateRenderers( BufferIndex bufferIndex )
   }
 }
 
+void UpdateManager::PrepareNodes( BufferIndex updateBufferIndex )
+{
+  for( auto node : mImpl->nodes )
+  {
+    if(node)
+    {
+      node->PrepareRender( updateBufferIndex );
+    }
+  }
+}
+
 void UpdateManager::PrepareRenderers( BufferIndex bufferIndex )
 {
   // Prepare renderers. Each render item maps to a render
@@ -898,6 +909,7 @@ uint32_t UpdateManager::Update( float elapsedSeconds,
       }
 
       // generate graphics objects
+      PrepareNodes( bufferIndex );
       PrepareRenderers( bufferIndex );
       mImpl->graphicsAlgorithms.SubmitRenderInstructions( mImpl->graphics.GetController(), mImpl->renderInstructions, bufferIndex );
     }
index 57fb700d86235a61a82815d630a83a3792d1efe3..883ff3f2de257261b390c4d71e3b0eabcb547b77 100644 (file)
@@ -588,8 +588,15 @@ private:
    */
   void UpdateRenderers( BufferIndex bufferIndex );
 
+  /**
+   * Ensure all nodes inform renderers of any changes to uniform maps
+   * @param[in] bufferIndex to use
+   */
+  void PrepareNodes( BufferIndex bufferIndex );
+
   /**
    * Prepare renderer graphics
+   * @param[in] bufferIndex to use
    */
   void PrepareRenderers( BufferIndex bufferIndex );
 
index 3cc225afacb91ca4f7d05a0aaadffcb7d1e9f279..5447559ac66c7f04155e96740ee89fbf83b86b24 100644 (file)
@@ -174,12 +174,12 @@ void Renderer::Initialize( Integration::Graphics::Graphics& graphics )
 
 void Renderer::UpdateUniformMap( BufferIndex updateBufferIndex, Node& node )
 {
-  // Called every frame.
+  // Called every frame. Well, it is now...
   CollectedUniformMap& localMap = mCollectedUniformMap[ updateBufferIndex ];
 
   // See if we need to update the collected map:
   if( mRegenerateUniformMap == REGENERATE_UNIFORM_MAP || // renderer or shader's uniform map has changed
-      node.GetUniformMapChanged( updateBufferIndex ) ) // node's uniform map has change
+      node.GetUniformMapChanged( updateBufferIndex ) )   // node's uniform map has change
   {
     localMap.Resize(0);
 
@@ -363,6 +363,13 @@ bool Renderer::UpdateUniformBuffers( RenderInstruction& instruction,
 {
   int updates( 0u );
 
+  const UniformMap& rendererUniformMap = PropertyOwner::GetUniformMap();
+  const auto& collectedMap = mCollectedUniformMap[updateBufferIndex];
+  if( collectedMap.Count() < rendererUniformMap.Count() )
+  {
+    DALI_LOG_ERROR("%p, i:%u - FAILED TO REGENERATE UNIFORM MAP", this, updateBufferIndex );
+  }
+
   auto uboCount = mShader->GetGfxObject()->GetUniformBlockCount();
   auto gfxShader = mShader->GetGfxObject();