Correctly aging renderer uniformMap 51/260251/1
authorDavid Steele <david.steele@samsung.com>
Tue, 22 Jun 2021 11:09:21 +0000 (12:09 +0100)
committerDavid Steele <david.steele@samsung.com>
Tue, 22 Jun 2021 11:09:21 +0000 (12:09 +0100)
Change-Id: Ie3378269d8f4c6b84b4a17b2c730806b7245c20f

dali/internal/render/renderers/render-renderer.cpp
dali/internal/update/rendering/scene-graph-renderer.cpp
dali/internal/update/rendering/scene-graph-renderer.h

index 18be7c1a5ded00ae1e17962c9849c7bb60941533..501111ee2284c8892f467123ee66e53702971554 100644 (file)
@@ -644,6 +644,10 @@ void Renderer::BuildUniformIndexMap(BufferIndex bufferIndex, const SceneGraph::N
 
     mUniformIndexMap.Resize(mapIndex);
   }
+
+  // @todo Temporary workaround to reduce workload each frame. Find a better way.
+  auto& sceneGraphRenderer = const_cast<SceneGraph::Renderer&>(static_cast<const SceneGraph::Renderer&>(uniformMapDataProvider));
+  sceneGraphRenderer.AgeUniformMap();
 }
 
 void Renderer::WriteUniformBuffer(
index dd765b836fba0e4cb1030d72ae647e19520f5343..fbba6929a471dc9f10957ad66b879763178de786 100644 (file)
@@ -177,13 +177,14 @@ void Renderer::operator delete(void* ptr)
 
 bool Renderer::PrepareRender(BufferIndex updateBufferIndex)
 {
-  if(mRegenerateUniformMap == UNIFORM_MAP_READY)
+  switch(mRegenerateUniformMap)
   {
-    mUniformMapChanged[updateBufferIndex] = false;
-  }
-  else
-  {
-    if(mRegenerateUniformMap == REGENERATE_UNIFORM_MAP)
+    case UNIFORM_MAP_READY: // Now, only set to zero on start and by render side
+    {
+      mUniformMapChanged[updateBufferIndex] = false;
+      break;
+    }
+    case REGENERATE_UNIFORM_MAP:
     {
       CollectedUniformMap& localMap = mCollectedUniformMap[updateBufferIndex];
       localMap.Clear();
@@ -204,8 +205,10 @@ bool Renderer::PrepareRender(BufferIndex updateBufferIndex)
       {
         AddMappings(localMap, mShader->GetUniformMap());
       }
+      mUniformMapChanged[updateBufferIndex] = true;
+      break;
     }
-    else if(mRegenerateUniformMap == COPY_UNIFORM_MAP)
+    case COPY_UNIFORM_MAP:
     {
       // Copy old map into current map
       CollectedUniformMap& localMap = mCollectedUniformMap[updateBufferIndex];
@@ -218,10 +221,9 @@ bool Renderer::PrepareRender(BufferIndex updateBufferIndex)
       {
         localMap[index] = *iter;
       }
+      mUniformMapChanged[updateBufferIndex] = true;
+      break;
     }
-
-    mUniformMapChanged[updateBufferIndex] = true;
-    mRegenerateUniformMap--;
   }
 
   bool rendererUpdated = mUniformMapChanged[updateBufferIndex] || mResendFlag || mRenderingBehavior == DevelRenderer::Rendering::CONTINUOUSLY;
@@ -374,6 +376,14 @@ bool Renderer::PrepareRender(BufferIndex updateBufferIndex)
   return rendererUpdated;
 }
 
+void Renderer::AgeUniformMap()
+{
+  if(mRegenerateUniformMap > 0)
+  {
+    mRegenerateUniformMap--;
+  }
+}
+
 void Renderer::SetTextures(TextureSet* textureSet)
 {
   DALI_ASSERT_DEBUG(textureSet != NULL && "Texture set pointer is NULL");
index 335e1250a02716bc7a8b2f2ab7588489499eb891..15d092425c6374fcaccd30d7ee899877b28a7779 100644 (file)
@@ -433,6 +433,12 @@ public: // From UniformMapDataProvider
 
   void SetDrawCommands(Dali::DevelRenderer::DrawCommand* pDrawCommands, uint32_t size);
 
+  /**
+   * Temporary fix to age mRegenerateUniformMap from render side.
+   * (aging should only be done if renderer is visible, not when PrepareRender is called)
+   */
+  void AgeUniformMap();
+
 private:
   /**
    * Protected constructor; See also Renderer::New()