From: Heeyong Song Date: Mon, 12 Apr 2021 07:33:49 +0000 (+0900) Subject: [Tizen] Skip rendering before the first renderer is added to node X-Git-Tag: accepted/tizen/unified/20210413.021237^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=70315a419e613279ae51d69092b210c18e30c8aa;p=platform%2Fcore%2Fuifw%2Fdali-core.git [Tizen] Skip rendering before the first renderer is added to node Change-Id: Id48c2fe92790ddbdcf926d754b60a6f6e5d8fd7a --- diff --git a/dali/internal/event/actors/actor-impl.cpp b/dali/internal/event/actors/actor-impl.cpp index d499716..408c273 100644 --- a/dali/internal/event/actors/actor-impl.cpp +++ b/dali/internal/event/actors/actor-impl.cpp @@ -1038,7 +1038,7 @@ uint32_t Actor::AddRenderer(Renderer& renderer) uint32_t index = static_cast(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; } diff --git a/dali/internal/update/manager/update-manager.cpp b/dali/internal/update/manager/update-manager.cpp index b082a9c..abad331 100644 --- a/dali/internal/update/manager/update-manager.cpp +++ b/dali/internal/update/manager/update-manager.cpp @@ -604,7 +604,6 @@ void UpdateManager::AddRenderer(OwnerPointer& 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); diff --git a/dali/internal/update/manager/update-manager.h b/dali/internal/update/manager/update-manager.h index 29d0e0f..a34cdb6 100644 --- a/dali/internal/update/manager/update-manager.h +++ b/dali/internal/update/manager/update-manager.h @@ -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(&object)); } +inline void AttachRendererMessage(UpdateManager& manager, const Node& node, const Renderer& renderer) +{ + using LocalType = MessageValue2; + + // 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), const_cast(&renderer)); +} + // The render thread can safely change the Shader inline void AddTextureSetMessage(UpdateManager& manager, OwnerPointer& textureSet) { diff --git a/dali/internal/update/nodes/node.h b/dali/internal/update/nodes/node.h index 6026c00..6f6e681 100644 --- a/dali/internal/update/nodes/node.h +++ b/dali/internal/update/nodes/node.h @@ -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; - - // 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)); -} - inline void DetachRendererMessage(EventThreadServices& eventThreadServices, const Node& node, const Renderer& renderer) { using LocalType = MessageValue1;