[Tizen] Skip rendering before the first renderer is added to node 46/256746/1 accepted/tizen/unified/20210413.021237 submit/tizen/20210412.082841
authorHeeyong Song <heeyong.song@samsung.com>
Mon, 12 Apr 2021 07:33:49 +0000 (16:33 +0900)
committerHeeyong Song <heeyong.song@samsung.com>
Mon, 12 Apr 2021 07:41:30 +0000 (16:41 +0900)
Change-Id: Id48c2fe92790ddbdcf926d754b60a6f6e5d8fd7a

dali/internal/event/actors/actor-impl.cpp
dali/internal/update/manager/update-manager.cpp
dali/internal/update/manager/update-manager.h
dali/internal/update/nodes/node.h

index d499716..408c273 100644 (file)
@@ -1038,7 +1038,7 @@ uint32_t Actor::AddRenderer(Renderer& renderer)
   uint32_t    index       = static_cast<uint32_t>(mRenderers->size()); //  4,294,967,295 renderers per actor
   RendererPtr rendererPtr = RendererPtr(&renderer);
   mRenderers->push_back(rendererPtr);
-  AttachRendererMessage(GetEventThreadServices(), GetNode(), renderer.GetRendererSceneObject());
+  AttachRendererMessage(GetEventThreadServices().GetUpdateManager(), GetNode(), renderer.GetRendererSceneObject());
   return index;
 }
 
index b082a9c..abad331 100644 (file)
@@ -604,7 +604,6 @@ void UpdateManager::AddRenderer(OwnerPointer<Renderer>& renderer)
 
   renderer->ConnectToSceneGraph(*mImpl->sceneController, mSceneGraphBuffers.GetUpdateBufferIndex());
   mImpl->renderers.PushBack(renderer.Release());
-  mImpl->renderersAdded = true;
 }
 
 void UpdateManager::RemoveRenderer(Renderer* renderer)
@@ -617,6 +616,12 @@ void UpdateManager::RemoveRenderer(Renderer* renderer)
   renderer->DisconnectFromSceneGraph(*mImpl->sceneController, mSceneGraphBuffers.GetUpdateBufferIndex());
 }
 
+void UpdateManager::AttachRenderer(Node* node, Renderer* renderer)
+{
+  node->AddRenderer(renderer);
+  mImpl->renderersAdded = true;
+}
+
 void UpdateManager::SetPanGestureProcessor(PanGesture* panGestureProcessor)
 {
   DALI_ASSERT_DEBUG(NULL != panGestureProcessor);
index 29d0e0f..a34cdb6 100644 (file)
@@ -333,6 +333,12 @@ public:
    */
   void RemoveRenderer(Renderer* renderer);
 
+  /**
+   * Attach a renderer to node
+   * @param renderer to attach
+   */
+  void AttachRenderer(Node* node, Renderer* renderer);
+
   // Gestures
 
   /**
@@ -1099,6 +1105,16 @@ inline void RemoveRendererMessage(UpdateManager& manager, const Renderer& object
   new(slot) LocalType(&manager, &UpdateManager::RemoveRenderer, const_cast<Renderer*>(&object));
 }
 
+inline void AttachRendererMessage(UpdateManager& manager, const Node& node, const Renderer& renderer)
+{
+  using LocalType = MessageValue2<UpdateManager, Node*, Renderer*>;
+
+  // Reserve some memory inside the message queue
+  uint32_t* slot = manager.ReserveMessageSlot(sizeof(LocalType));
+  // Construct message in the message queue memory; note that delete should not be called on the return value
+  new(slot) LocalType(&manager, &UpdateManager::AttachRenderer, const_cast<Node*>(&node), const_cast<Renderer*>(&renderer));
+}
+
 // The render thread can safely change the Shader
 inline void AddTextureSetMessage(UpdateManager& manager, OwnerPointer<TextureSet>& textureSet)
 {
index 6026c00..6f6e681 100644 (file)
@@ -1038,17 +1038,6 @@ inline void SetDrawModeMessage(EventThreadServices& eventThreadServices, const N
   new(slot) LocalType(&node, &Node::SetDrawMode, drawMode);
 }
 
-inline void AttachRendererMessage(EventThreadServices& eventThreadServices, const Node& node, const Renderer& renderer)
-{
-  using LocalType = MessageValue1<Node, Renderer*>;
-
-  // Reserve some memory inside the message queue
-  uint32_t* slot = eventThreadServices.ReserveMessageSlot(sizeof(LocalType));
-
-  // Construct message in the message queue memory; note that delete should not be called on the return value
-  new(slot) LocalType(&node, &Node::AddRenderer, const_cast<Renderer*>(&renderer));
-}
-
 inline void DetachRendererMessage(EventThreadServices& eventThreadServices, const Node& node, const Renderer& renderer)
 {
   using LocalType = MessageValue1<Node, const Renderer*>;